trove/trovedb/qgui/tool_basic_editor.py

49 lines
1.5 KiB
Python

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