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):
|
2026-03-26 00:36:01 -05:00
|
|
|
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)
|