trove/trovedb/qgui/tool_basic_editor.py

50 lines
1.5 KiB
Python
Raw Permalink Normal View History

2026-03-23 22:56:53 -05:00
"""Tool Supporting Basic Editor Functions"""
from typing import cast, Protocol
2026-03-26 16:08:10 -05:00
from PySide6.QtCore import QTimer
2026-03-23 22:56:53 -05:00
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)
2026-03-26 16:08:10 -05:00
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)
2026-03-23 22:56:53 -05:00
self.refresh()
def refresh(self):
self._text_edit.setPlainText(self.note.read_content().decode("utf-8"))
2026-03-26 16:08:10 -05:00
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)