"""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 from .tool import Tool class ToolBasicEditor(Tool): def __init__(self, note, parent=None): super().__init__(note, parent) layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) 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)