diff --git a/trovedb/qgui/main_window.py b/trovedb/qgui/main_window.py index d4cdde4..11e1ac4 100644 --- a/trovedb/qgui/main_window.py +++ b/trovedb/qgui/main_window.py @@ -22,20 +22,20 @@ class TroveMainWindow(QMainWindow): self.setWindowTitle("Trove") # ── Toolbar ── - toolbar = QToolBar("Main") - toolbar.setObjectName("maintoolbar") - toolbar.setMovable(False) - self.addToolBar(toolbar) - - new_action = QAction("New", self) - new_action.setShortcut(QKeySequence.StandardKey.New) - toolbar.addAction(new_action) - - save_action = QAction("Save", self) - save_action.setShortcut(QKeySequence.StandardKey.Save) - toolbar.addAction(save_action) - - toolbar.addSeparator() + # toolbar = QToolBar("Main") + # toolbar.setObjectName("maintoolbar") + # toolbar.setMovable(False) + # self.addToolBar(toolbar) + # + # new_action = QAction("New", self) + # new_action.setShortcut(QKeySequence.StandardKey.New) + # toolbar.addAction(new_action) + # + # save_action = QAction("Save", self) + # save_action.setShortcut(QKeySequence.StandardKey.Save) + # toolbar.addAction(save_action) + # + # toolbar.addSeparator() # ── Central layout ── central = QWidget() diff --git a/trovedb/qgui/tool_basic_editor.py b/trovedb/qgui/tool_basic_editor.py index 8c0f408..1f667e5 100644 --- a/trovedb/qgui/tool_basic_editor.py +++ b/trovedb/qgui/tool_basic_editor.py @@ -1,5 +1,6 @@ """Tool Supporting Basic Editor Functions""" from typing import cast, Protocol +from PySide6.QtCore import QTimer from PySide6.QtWidgets import QTextEdit, QVBoxLayout import trovedb.trove as tr @@ -16,7 +17,33 @@ class ToolBasicEditor(Tool): self._text_edit = QTextEdit() layout.addWidget(self._text_edit) + + self._content_dirty = False + self._auto_save_timer = QTimer(self) + self._auto_save_timer.setSingleShot(True) + self._auto_save_timer.setInterval(2000) # 2 seconds after typing stops + self._auto_save_timer.timeout.connect(self._perform_auto_save) + + self._text_edit.textChanged.connect(self._schedule_auto_save) + self.refresh() def refresh(self): self._text_edit.setPlainText(self.note.read_content().decode("utf-8")) + self._content_dirty = False + + def _schedule_auto_save(self): + self._content_dirty = True + self._auto_save_timer.stop() + self._auto_save_timer.start() + + def _perform_auto_save(self): + if self._content_dirty: + content = self._text_edit.toPlainText().encode("utf-8") + self.note.write_content(content) + self._content_dirty = False + + def closeEvent(self, event): + if self._content_dirty: + self._perform_auto_save() + super().closeEvent(event)