trove/trovedb/qgui/main_window.py

78 lines
2.2 KiB
Python
Raw Normal View History

2026-03-22 22:26:14 -05:00
from PySide6.QtCore import Qt
from PySide6.QtGui import QAction, QKeySequence
from PySide6.QtWidgets import (
QMainWindow,
QSplitter,
QStatusBar,
QToolBar,
QVBoxLayout,
QWidget
)
2026-03-22 22:42:12 -05:00
from .settings import get_settings
2026-03-22 23:17:03 -05:00
from trovedb import trove as tr
2026-03-23 22:56:53 -05:00
2026-03-22 23:17:03 -05:00
from .note_browser import NoteBrowser
2026-03-23 22:56:53 -05:00
from .note_tool_stack import NoteToolStack
2026-03-22 23:17:03 -05:00
2026-03-22 22:26:14 -05:00
class TroveMainWindow(QMainWindow):
2026-03-22 23:17:03 -05:00
def __init__(self, trove: tr.Trove):
2026-03-22 22:26:14 -05:00
super().__init__()
self.setWindowTitle("Trove")
# ── Toolbar ──
toolbar = QToolBar("Main")
2026-03-22 22:42:12 -05:00
toolbar.setObjectName("maintoolbar")
2026-03-22 22:26:14 -05:00
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()
self.setCentralWidget(central)
layout = QVBoxLayout(central)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(0)
# Horizontal splitter: tree | editor
2026-03-23 22:56:53 -05:00
self._splitter = QSplitter(Qt.Orientation.Horizontal)
2026-03-22 22:26:14 -05:00
2026-03-22 23:17:03 -05:00
self._note_browser = NoteBrowser(trove)
2026-03-23 22:56:53 -05:00
self._splitter.addWidget(self._note_browser)
self._tool_stack = NoteToolStack()
self._splitter.addWidget(self._tool_stack)
2026-03-22 22:26:14 -05:00
2026-03-23 22:56:53 -05:00
layout.addWidget(self._splitter, stretch=1)
2026-03-22 22:26:14 -05:00
2026-03-23 22:56:53 -05:00
self._note_browser.activeNoteChanged.connect(self._tool_stack.onNoteSelected)
2026-03-22 22:26:14 -05:00
# ── Status bar ──
self.setStatusBar(QStatusBar())
self.statusBar().showMessage("Ready")
2026-03-22 22:42:12 -05:00
def closeEvent(self, event):
settings = get_settings()
settings.setValue("window/geometry", self.saveGeometry())
settings.setValue("window/state", self.saveState())
super().closeEvent(event)
def restore_settings(self):
settings = get_settings()
geometry = settings.value("window/geometry")
state = settings.value("window/state")
if geometry:
self.restoreGeometry(geometry)
if state:
2026-03-23 22:56:53 -05:00
self.restoreState(state)