From 8d531b33048571921f11ad89d8a94472ed11f3f6 Mon Sep 17 00:00:00 2001 From: Andrew Mulbrook Date: Sun, 22 Mar 2026 22:26:14 -0500 Subject: [PATCH] Add initial GUI program --- pyproject.toml | 1 + trovedb/qgui/main_window.py | 53 +++++++++++++++++++++++++++++++++++++ trovedb/qgui/qtrove.py | 23 ++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 trovedb/qgui/main_window.py create mode 100644 trovedb/qgui/qtrove.py diff --git a/pyproject.toml b/pyproject.toml index 39c7876..90b7c61 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ dependencies = [] [project.scripts] trove = "trovedb.cli:cli_main" +qtrove = "trovedb.qgui.qtrove:main" [project.optional-dependencies] dev = [ diff --git a/trovedb/qgui/main_window.py b/trovedb/qgui/main_window.py new file mode 100644 index 0000000..be56c30 --- /dev/null +++ b/trovedb/qgui/main_window.py @@ -0,0 +1,53 @@ +from PySide6.QtCore import Qt +from PySide6.QtGui import QAction, QKeySequence +from PySide6.QtWidgets import ( + QLabel, + QMainWindow, + QSplitter, + QStatusBar, + QToolBar, + QVBoxLayout, + QWidget +) + +class TroveMainWindow(QMainWindow): + def __init__(self): + super().__init__() + self.setWindowTitle("Trove") + + # ── Toolbar ── + toolbar = QToolBar("Main") + 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 + splitter = QSplitter(Qt.Orientation.Horizontal) + + self._note_browser = QLabel("Note Browser") + splitter.addWidget(self._note_browser) + + self._tool = QLabel("View/Edit Tool") + splitter.addWidget(self._tool) + + layout.addWidget(splitter, stretch=1) + + # ── Status bar ── + self.setStatusBar(QStatusBar()) + self.statusBar().showMessage("Ready") diff --git a/trovedb/qgui/qtrove.py b/trovedb/qgui/qtrove.py new file mode 100644 index 0000000..766f660 --- /dev/null +++ b/trovedb/qgui/qtrove.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +"""PySide6 GUI for Trove""" + +import sys + +from PySide6.QtWidgets import ( + QApplication, +) + +from .main_window import TroveMainWindow + +def main(): + app = QApplication(sys.argv) + + # Respect system theme on KDE + app.setStyle("Fusion") + + window = TroveMainWindow() + window.show() + sys.exit(app.exec()) + +if __name__ == '__main__': + main() \ No newline at end of file