78 lines
4.6 KiB
Markdown
78 lines
4.6 KiB
Markdown
# GUI Log Console Feature Plan
|
|
|
|
**Overall Goal:** Add a log console panel to the GUI's editor panel, controlled by a "View" menu action. Move the "Disable Detailed Preview" control to the same "View" menu.
|
|
|
|
**Detailed Plan:**
|
|
|
|
1. **Create Custom Log Handler:**
|
|
* **New File/Location:** Potentially add this to a new `gui/log_handler.py` or keep it within `gui/main_window.py` if simple enough.
|
|
* **Implementation:**
|
|
* Define a class `QtLogHandler(logging.Handler, QObject)` that inherits from both `logging.Handler` and `QObject` (for signals).
|
|
* Add a Qt signal, e.g., `log_record_received = Signal(str)`.
|
|
* Override the `emit(self, record)` method:
|
|
* Format the log record using `self.format(record)`.
|
|
* Emit the `log_record_received` signal with the formatted string.
|
|
|
|
2. **Modify `gui/main_window.py`:**
|
|
* **Imports:** Add `QMenuBar`, `QMenu`, `QAction` from `PySide6.QtWidgets`. Import the new `QtLogHandler`.
|
|
* **UI Elements (`__init__` / `setup_editor_panel_ui`):**
|
|
* **Menu Bar:**
|
|
* Create `self.menu_bar = self.menuBar()`.
|
|
* Create `view_menu = self.menu_bar.addMenu("&View")`.
|
|
* **Log Console:**
|
|
* Create `self.log_console_output = QTextEdit()`. Set it to read-only (`self.log_console_output.setReadOnly(True)`).
|
|
* Create a container widget, e.g., `self.log_console_widget = QWidget()`. Create a layout for it (e.g., `QVBoxLayout`) and add `self.log_console_output` to this layout.
|
|
* In `setup_editor_panel_ui`, insert `self.log_console_widget` into the `editor_layout` *before* adding the `list_layout` (the preset list).
|
|
* Initially hide the console: `self.log_console_widget.setVisible(False)`.
|
|
* **Menu Actions:**
|
|
* Create `self.toggle_log_action = QAction("Show Log Console", self, checkable=True)`. Connect `self.toggle_log_action.toggled.connect(self._toggle_log_console_visibility)`. Add it to `view_menu`.
|
|
* Create `self.toggle_preview_action = QAction("Disable Detailed Preview", self, checkable=True)`. Connect `self.toggle_preview_action.toggled.connect(self.update_preview)`. Add it to `view_menu`.
|
|
* **Remove Old Checkbox:** Delete the lines creating and adding `self.disable_preview_checkbox`.
|
|
* **Logging Setup (`__init__`):**
|
|
* Instantiate the custom handler: `self.log_handler = QtLogHandler()`.
|
|
* Connect its signal: `self.log_handler.log_record_received.connect(self._append_log_message)`.
|
|
* Add the handler to the logger: `log.addHandler(self.log_handler)`. Set an appropriate level if needed (e.g., `self.log_handler.setLevel(logging.INFO)`).
|
|
* **New Slots:**
|
|
* Implement `_toggle_log_console_visibility(self, checked)`: This slot will simply call `self.log_console_widget.setVisible(checked)`.
|
|
* Implement `_append_log_message(self, message)`:
|
|
* Append the `message` string to `self.log_console_output`.
|
|
* Optional: Add logic to limit the number of lines in the text edit to prevent performance issues.
|
|
* Optional: Add basic HTML formatting for colors based on log level.
|
|
* **Modify `update_preview`:**
|
|
* Replace the check for `self.disable_preview_checkbox.isChecked()` with `self.toggle_preview_action.isChecked()`.
|
|
* Update the log messages within this method to reflect checking the action state.
|
|
|
|
**Mermaid Diagram:**
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph MainWindow
|
|
A[Initialization] --> B(Create Menu Bar);
|
|
B --> C(Add View Menu);
|
|
C --> D(Add 'Show Log Console' Action);
|
|
C --> E(Add 'Disable Detailed Preview' Action);
|
|
A --> F(Create Log Console QTextEdit);
|
|
F --> G(Place Log Console Widget in Layout [Hidden]);
|
|
A --> H(Create & Add QtLogHandler);
|
|
H --> I(Connect Log Handler Signal to _append_log_message);
|
|
|
|
D -- Toggled --> J[_toggle_log_console_visibility];
|
|
J --> K(Show/Hide Log Console Widget);
|
|
|
|
E -- Toggled --> L[update_preview];
|
|
|
|
M[update_preview] --> N{Is 'Disable Preview' Action Checked?};
|
|
N -- Yes --> O[Show Simple List View];
|
|
N -- No --> P[Start PredictionHandler];
|
|
|
|
Q[Any Log Message] -- Emitted by Logger --> H;
|
|
I --> R[_append_log_message];
|
|
R --> S(Append Message to Log Console QTextEdit);
|
|
end
|
|
|
|
subgraph QtLogHandler
|
|
style QtLogHandler fill:#lightgreen,stroke:#333,stroke-width:2px
|
|
T1[emit(record)] --> T2(Format Record);
|
|
T2 --> T3(Emit log_record_received Signal);
|
|
T3 --> I;
|
|
end |