Add trove auto save function

This commit is contained in:
Andrew Mulbrook 2026-03-26 16:08:10 -05:00
parent 01e9780bb8
commit a67b9c48c2
2 changed files with 41 additions and 14 deletions

View file

@ -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()

View file

@ -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)