From a67b9c48c26aecfd93a317b5b99ed408ad8d86cf Mon Sep 17 00:00:00 2001 From: Andrew Mulbrook Date: Thu, 26 Mar 2026 16:08:10 -0500 Subject: [PATCH] Add trove auto save function --- trovedb/qgui/main_window.py | 28 ++++++++++++++-------------- trovedb/qgui/tool_basic_editor.py | 27 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 14 deletions(-) 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)