# GUI Blender Integration Plan ## Goal Add a checkbox and input fields to the GUI (`gui/main_window.py`) to enable/disable Blender script execution and specify the `.blend` file paths, defaulting to `config.py` values. Integrate this control into the processing logic (`gui/processing_handler.py`). ## Proposed Plan 1. **Modify `gui/main_window.py`:** * Add a `QCheckBox` (e.g., `self.blender_integration_checkbox`) to the processing panel layout. * Add two pairs of `QLineEdit` widgets and `QPushButton` browse buttons for the nodegroup `.blend` path (`self.nodegroup_blend_path_input`, `self.browse_nodegroup_blend_button`) and the materials `.blend` path (`self.materials_blend_path_input`, `self.browse_materials_blend_button`). * Initialize the text of the `QLineEdit` widgets by reading the `DEFAULT_NODEGROUP_BLEND_PATH` and `DEFAULT_MATERIALS_BLEND_PATH` values from `config.py` when the GUI starts. * Connect signals from the browse buttons to new methods that open a `QFileDialog` to select `.blend` files and update the corresponding input fields. * Modify the slot connected to the "Start Processing" button to: * Read the checked state of `self.blender_integration_checkbox`. * Read the text from `self.nodegroup_blend_path_input` and `self.materials_blend_path_input`. * Pass these three pieces of information (checkbox state, nodegroup path, materials path) to the `ProcessingHandler` when initiating the processing task. 2. **Modify `gui/processing_handler.py`:** * Add parameters to the method that starts the processing (likely `start_processing`) to accept the Blender integration flag (boolean), the nodegroup `.blend` path (string), and the materials `.blend` path (string). * Implement the logic for finding the Blender executable (reading `BLENDER_EXECUTABLE_PATH` from `config.py` or checking PATH) within `processing_handler.py`. * Implement the logic for executing the Blender scripts using `subprocess.run` within `processing_handler.py`. This logic should be similar to the `run_blender_script` function added to `main.py` in the previous step. * Ensure this Blender script execution logic is conditional based on the received integration flag and runs *after* the main asset processing (handled by the worker pool) is complete. ## Execution Flow Diagram (GUI) ```mermaid graph TD A[GUI: User Clicks Start Processing] --> B{Blender Integration Checkbox Checked?}; B -- Yes --> C[Get Blend File Paths from Input Fields]; C --> D[Pass Paths and Flag to ProcessingHandler]; D --> E[ProcessingHandler: Start Asset Processing (Worker Pool)]; E --> F[ProcessingHandler: Asset Processing Complete]; F --> G{Blender Integration Flag True?}; G -- Yes --> H[ProcessingHandler: Find Blender Executable]; H --> I{Blender Executable Found?}; I -- Yes --> J{Nodegroup Blend Path Valid?}; J -- Yes --> K[ProcessingHandler: Run Nodegroup Script in Blender]; K --> L{Script Successful?}; L -- Yes --> M{Materials Blend Path Valid?}; L -- No --> N[ProcessingHandler: Report Nodegroup Error]; N --> M; M -- Yes --> O[ProcessingHandler: Run Materials Script in Blender]; O --> P{Script Successful?}; P -- Yes --> Q[ProcessingHandler: Report Completion]; P -- No --> R[ProcessingHandler: Report Materials Error]; R --> Q; M -- No --> Q; J -- No --> M[Skip Nodegroup Script]; I -- No --> Q[Skip Blender Scripts]; G -- No --> Q; B -- No --> E;