From f37cc41ed06fe0087072209682d5b5d553f46419 Mon Sep 17 00:00:00 2001 From: Joppe Blondel Date: Sun, 26 Jul 2026 14:34:22 +0200 Subject: [PATCH] Added document tree and log widgets --- scripts/generate_qt_files.py | 19 ++--- src/bedit_gui/application.py | 7 +- .../controllers/window_state_controller.py | 37 +++++++++ src/bedit_gui/ui/forms/main_window.ui | 82 ++++++++++++++++++- src/bedit_gui/views/main_window.py | 7 +- 5 files changed, 134 insertions(+), 18 deletions(-) create mode 100644 src/bedit_gui/controllers/window_state_controller.py diff --git a/scripts/generate_qt_files.py b/scripts/generate_qt_files.py index 19f2783..bf28359 100644 --- a/scripts/generate_qt_files.py +++ b/scripts/generate_qt_files.py @@ -44,18 +44,15 @@ def generate_ui() -> None: str(destination), ) generated = destination.read_text(encoding="utf-8") - if RESOURCE_IMPORT not in generated: - raise RuntimeError( - f"could not find the generated resource import in {destination}" + if RESOURCE_IMPORT in generated: + destination.write_text( + generated.replace( + RESOURCE_IMPORT, + GENERATED_RESOURCE_IMPORT, + 1, + ), + encoding="utf-8", ) - destination.write_text( - generated.replace( - RESOURCE_IMPORT, - GENERATED_RESOURCE_IMPORT, - 1, - ), - encoding="utf-8", - ) def generate_resources() -> None: diff --git a/src/bedit_gui/application.py b/src/bedit_gui/application.py index 337683c..ed36c68 100644 --- a/src/bedit_gui/application.py +++ b/src/bedit_gui/application.py @@ -1,13 +1,12 @@ from __future__ import annotations - import sys from PySide6.QtWidgets import QApplication from bedit_gui.controllers.document_controller import DocumentController from bedit_gui.controllers.undo_controller import UndoController +from bedit_gui.controllers.window_state_controller import WindowStateController from bedit_gui.documents import Document -from bedit_gui.resources.generated import resources_rc # noqa: F401 from bedit_gui.views.main_window import MainWindow @@ -21,6 +20,8 @@ def main() -> int: window = MainWindow() DocumentController(document, window) UndoController(document, window) - window.show() + window_state_controller = WindowStateController(app, window) + window_state_controller.restore() + window.showMaximized() return app.exec() diff --git a/src/bedit_gui/controllers/window_state_controller.py b/src/bedit_gui/controllers/window_state_controller.py new file mode 100644 index 0000000..8265e96 --- /dev/null +++ b/src/bedit_gui/controllers/window_state_controller.py @@ -0,0 +1,37 @@ +from PySide6.QtCore import QObject, QSettings, QByteArray +from PySide6.QtWidgets import QApplication + +from bedit_gui.views.main_window import MainWindow + + +class WindowStateController(QObject): + def __init__(self,app: QApplication,window: MainWindow) -> None: + super().__init__(window) + + self.window = window + self.settings = QSettings() + + # Capture the layout created by Designer. + self._default_geometry = QByteArray(window.saveGeometry()) + self._default_state = QByteArray(window.saveState()) + + app.aboutToQuit.connect(self.save) + window.ui.actionReset_Layout.triggered.connect(self.reset) + + def restore(self) -> None: + if self.settings.contains("main_window/geometry"): + self.window.restoreGeometry(self.settings.value("main_window/geometry")) + + if self.settings.contains("main_window/state"): + self.window.restoreState(self.settings.value("main_window/state")) + + def save(self) -> None: + self.settings.setValue("main_window/geometry",self.window.saveGeometry()) + self.settings.setValue("main_window/state",self.window.saveState()) + + def reset(self) -> None: + self.settings.remove("main_window/geometry") + self.settings.remove("main_window/state") + self.window.restoreGeometry(self._default_geometry) + self.window.restoreState(self._default_state) + self.window.showMaximized() diff --git a/src/bedit_gui/ui/forms/main_window.ui b/src/bedit_gui/ui/forms/main_window.ui index 3292e8c..6f08e37 100644 --- a/src/bedit_gui/ui/forms/main_window.ui +++ b/src/bedit_gui/ui/forms/main_window.ui @@ -6,20 +6,30 @@ 0 0 - 800 - 600 + 940 + 729 MainWindow + + + :/icons/icons/office-chart-line.png:/icons/icons/office-chart-line.png + + + false + + + QTabWidget::TabShape::Triangular + 0 0 - 800 + 940 22 @@ -46,6 +56,9 @@ View + + + @@ -87,6 +100,48 @@ + + + + 150 + 533 + + + + Document Tree + + + 1 + + + + + + + + + + + + + 150 + 107 + + + + Log + + + 8 + + + + + + + + + @@ -211,6 +266,27 @@ QAction::MenuRole::NoRole + + + Reset Layout + + + Reset window layout to default + + + QAction::MenuRole::NoRole + + + + + Panels + + + + + Toolbars + + diff --git a/src/bedit_gui/views/main_window.py b/src/bedit_gui/views/main_window.py index 4748bb2..1a3d1dd 100644 --- a/src/bedit_gui/views/main_window.py +++ b/src/bedit_gui/views/main_window.py @@ -1,4 +1,5 @@ -from PySide6.QtWidgets import QMainWindow +from PySide6.QtCore import Qt +from PySide6.QtWidgets import QMainWindow, QTabWidget from bedit_gui.ui.generated.ui_main_window import Ui_MainWindow @@ -9,3 +10,7 @@ class MainWindow(QMainWindow): self.ui = Ui_MainWindow() self.ui.setupUi(self) + + self.setTabPosition(Qt.AllDockWidgetAreas, QTabWidget.North) + self.setCorner(Qt.Corner.BottomLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea) + self.setCorner(Qt.Corner.BottomRightCorner, Qt.DockWidgetArea.RightDockWidgetArea)