creatumlibre.ui.root_ui

  1from pathlib import Path
  2
  3from PyQt6.QtCore import Qt
  4from PyQt6.QtWidgets import (
  5    QFileDialog,
  6    QHBoxLayout,
  7    QLayout,
  8    QMainWindow,
  9    QSizePolicy,
 10    QVBoxLayout,
 11    QWidget,
 12)
 13
 14from creatumlibre.ui.dialogs.dialog_manager import DialogManager
 15from creatumlibre.ui.input.input_handler import InputHandler
 16from creatumlibre.ui.left_sidebar.left_sidebar import LeftSidebar
 17from creatumlibre.ui.manager.tab_manager import TabManager
 18from creatumlibre.ui.menu.files import FileMenu
 19from creatumlibre.ui.menu.zoom import ZoomMenu
 20from creatumlibre.ui.mode.ui_input_mode import UiMode
 21
 22
 23class RootUi(QMainWindow):
 24    """root class, container of the app"""
 25
 26    def __init__(self):
 27        super().__init__()
 28
 29        self.last_opened_folder = str(Path.home())
 30
 31        self.dialog_manager = DialogManager()
 32
 33        self.setWindowTitle("CreatumLibre")
 34        self.setGeometry(100, 100, 1200, 800)
 35        self.setMinimumSize(1200, 800)
 36        self.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
 37        self.resize(1200, 800)
 38
 39        self.ui_input_mode = UiMode("Base")
 40        self.input_handler = InputHandler(self)
 41        self.installEventFilter(self.input_handler)
 42
 43        self.menu_bar = self.menuBar()
 44        self.workspace_layout = QVBoxLayout()
 45        self.left_sidebar_layout = None
 46
 47        # Create Tab Widget
 48        self.tab_manager = TabManager(self)
 49
 50        self.init_layout()
 51
 52        self.file_menu = FileMenu(self)  # Initialize File Menu
 53        self.zoom_menu = ZoomMenu(self)  # Initialize Zoom Menu
 54
 55        # debug
 56        test_file_path = (
 57            Path("/Users/martinstottmeister/Library")
 58            / "CloudStorage"
 59            / "OneDrive-Personal"
 60            / "Bilder"
 61            / "Screenshots"
 62            / "Screenshot_20221225_162528.png"
 63        )
 64
 65        # debug
 66        self.tab_manager.load_new_image(test_file_path)
 67
 68    def init_layout(self):
 69        workspace_widget = QWidget()
 70        self.setCentralWidget(workspace_widget)
 71
 72        # Ensure the main layout is fully expandable
 73        self.workspace_layout.setContentsMargins(0, 0, 0, 0)
 74        self.workspace_layout.setSpacing(0)
 75        self.workspace_layout.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
 76        workspace_widget.setLayout(self.workspace_layout)
 77
 78        # Top Layout (~90% of height)
 79        editor_panel_layout = QHBoxLayout()
 80        right_sidebar_widget = QWidget()
 81
 82        left_sidebar_widget = QWidget()
 83        left_sidebar_widget.setFixedWidth(40)
 84        left_sidebar_widget.setStyleSheet(
 85            "background-color: #f0fff0;"
 86        )  # Placeholder for left sidebar
 87        self.left_sidebar_layout = QVBoxLayout(left_sidebar_widget)
 88        self.left_sidebar_layout.setContentsMargins(
 89            0, 0, 0, 0
 90        )  # Remove sidebar padding
 91        self.left_sidebar_layout.setSpacing(0)  # Remove extra spacing
 92        self.left_sidebar_layout.setAlignment(Qt.AlignmentFlag.AlignTop)
 93
 94        right_sidebar_widget.setFixedWidth(40)
 95        right_sidebar_widget.setStyleSheet(
 96            "background-color: #f0f0ff;"
 97        )  # Placeholder for colors
 98
 99        editor_panel_layout.addWidget(left_sidebar_widget, stretch=1)
100        editor_panel_layout.addWidget(self.tab_manager.tab_widget, stretch=9)
101        editor_panel_layout.addWidget(right_sidebar_widget, stretch=1)
102
103        # Force the tab widget itself to be expandable
104        self.tab_manager.tab_widget.setSizePolicy(
105            QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding
106        )
107
108        # Bottom Layout (~10% of height)
109        status_bar_widget = QWidget()
110        status_bar_widget.setFixedHeight(80)
111        status_bar_widget.setStyleSheet("background-color: #fff0f0;")
112
113        self.workspace_layout.addLayout(editor_panel_layout, stretch=9)
114        self.workspace_layout.addWidget(status_bar_widget, stretch=1)
115
116        LeftSidebar(self)
117
118        top_left = status_bar_widget.rect().topLeft()
119        x = top_left.x()
120        y = top_left.y()
121        print(f"OFFSET: {x,y}")
122
123        self.debug_sizes()
124
125    def load_new_image_dialog(self):
126        """Open a file dialog to load a new image and let ImageManager handle the rest."""
127        file_dialog = QFileDialog(self)
128        file_path, _ = file_dialog.getOpenFileName(
129            self, "Open Image", self.last_opened_folder, "Images (*.png *.jpg *.bmp)"
130        )
131
132        if file_path:
133            self.last_opened_folder = str(Path(file_path).parent)
134            self.tab_manager.load_new_image(file_path)
135
136    def debug_sizes(self):
137        print(f"Main Window Height: {self.height()}")
138        print(f"Central Widget Height: {self.centralWidget().height()}")
139        print(f"Main Layout Height: {self.workspace_layout.geometry()}")
140        print(f"Tab Widget Geometry: {self.tab_manager.tab_widget.geometry()}")
class RootUi(PyQt6.QtWidgets.QMainWindow):
 24class RootUi(QMainWindow):
 25    """root class, container of the app"""
 26
 27    def __init__(self):
 28        super().__init__()
 29
 30        self.last_opened_folder = str(Path.home())
 31
 32        self.dialog_manager = DialogManager()
 33
 34        self.setWindowTitle("CreatumLibre")
 35        self.setGeometry(100, 100, 1200, 800)
 36        self.setMinimumSize(1200, 800)
 37        self.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
 38        self.resize(1200, 800)
 39
 40        self.ui_input_mode = UiMode("Base")
 41        self.input_handler = InputHandler(self)
 42        self.installEventFilter(self.input_handler)
 43
 44        self.menu_bar = self.menuBar()
 45        self.workspace_layout = QVBoxLayout()
 46        self.left_sidebar_layout = None
 47
 48        # Create Tab Widget
 49        self.tab_manager = TabManager(self)
 50
 51        self.init_layout()
 52
 53        self.file_menu = FileMenu(self)  # Initialize File Menu
 54        self.zoom_menu = ZoomMenu(self)  # Initialize Zoom Menu
 55
 56        # debug
 57        test_file_path = (
 58            Path("/Users/martinstottmeister/Library")
 59            / "CloudStorage"
 60            / "OneDrive-Personal"
 61            / "Bilder"
 62            / "Screenshots"
 63            / "Screenshot_20221225_162528.png"
 64        )
 65
 66        # debug
 67        self.tab_manager.load_new_image(test_file_path)
 68
 69    def init_layout(self):
 70        workspace_widget = QWidget()
 71        self.setCentralWidget(workspace_widget)
 72
 73        # Ensure the main layout is fully expandable
 74        self.workspace_layout.setContentsMargins(0, 0, 0, 0)
 75        self.workspace_layout.setSpacing(0)
 76        self.workspace_layout.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
 77        workspace_widget.setLayout(self.workspace_layout)
 78
 79        # Top Layout (~90% of height)
 80        editor_panel_layout = QHBoxLayout()
 81        right_sidebar_widget = QWidget()
 82
 83        left_sidebar_widget = QWidget()
 84        left_sidebar_widget.setFixedWidth(40)
 85        left_sidebar_widget.setStyleSheet(
 86            "background-color: #f0fff0;"
 87        )  # Placeholder for left sidebar
 88        self.left_sidebar_layout = QVBoxLayout(left_sidebar_widget)
 89        self.left_sidebar_layout.setContentsMargins(
 90            0, 0, 0, 0
 91        )  # Remove sidebar padding
 92        self.left_sidebar_layout.setSpacing(0)  # Remove extra spacing
 93        self.left_sidebar_layout.setAlignment(Qt.AlignmentFlag.AlignTop)
 94
 95        right_sidebar_widget.setFixedWidth(40)
 96        right_sidebar_widget.setStyleSheet(
 97            "background-color: #f0f0ff;"
 98        )  # Placeholder for colors
 99
100        editor_panel_layout.addWidget(left_sidebar_widget, stretch=1)
101        editor_panel_layout.addWidget(self.tab_manager.tab_widget, stretch=9)
102        editor_panel_layout.addWidget(right_sidebar_widget, stretch=1)
103
104        # Force the tab widget itself to be expandable
105        self.tab_manager.tab_widget.setSizePolicy(
106            QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding
107        )
108
109        # Bottom Layout (~10% of height)
110        status_bar_widget = QWidget()
111        status_bar_widget.setFixedHeight(80)
112        status_bar_widget.setStyleSheet("background-color: #fff0f0;")
113
114        self.workspace_layout.addLayout(editor_panel_layout, stretch=9)
115        self.workspace_layout.addWidget(status_bar_widget, stretch=1)
116
117        LeftSidebar(self)
118
119        top_left = status_bar_widget.rect().topLeft()
120        x = top_left.x()
121        y = top_left.y()
122        print(f"OFFSET: {x,y}")
123
124        self.debug_sizes()
125
126    def load_new_image_dialog(self):
127        """Open a file dialog to load a new image and let ImageManager handle the rest."""
128        file_dialog = QFileDialog(self)
129        file_path, _ = file_dialog.getOpenFileName(
130            self, "Open Image", self.last_opened_folder, "Images (*.png *.jpg *.bmp)"
131        )
132
133        if file_path:
134            self.last_opened_folder = str(Path(file_path).parent)
135            self.tab_manager.load_new_image(file_path)
136
137    def debug_sizes(self):
138        print(f"Main Window Height: {self.height()}")
139        print(f"Central Widget Height: {self.centralWidget().height()}")
140        print(f"Main Layout Height: {self.workspace_layout.geometry()}")
141        print(f"Tab Widget Geometry: {self.tab_manager.tab_widget.geometry()}")

root class, container of the app

last_opened_folder
dialog_manager
ui_input_mode
input_handler
menu_bar
workspace_layout
left_sidebar_layout
tab_manager
file_menu
zoom_menu
def init_layout(self):
 69    def init_layout(self):
 70        workspace_widget = QWidget()
 71        self.setCentralWidget(workspace_widget)
 72
 73        # Ensure the main layout is fully expandable
 74        self.workspace_layout.setContentsMargins(0, 0, 0, 0)
 75        self.workspace_layout.setSpacing(0)
 76        self.workspace_layout.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
 77        workspace_widget.setLayout(self.workspace_layout)
 78
 79        # Top Layout (~90% of height)
 80        editor_panel_layout = QHBoxLayout()
 81        right_sidebar_widget = QWidget()
 82
 83        left_sidebar_widget = QWidget()
 84        left_sidebar_widget.setFixedWidth(40)
 85        left_sidebar_widget.setStyleSheet(
 86            "background-color: #f0fff0;"
 87        )  # Placeholder for left sidebar
 88        self.left_sidebar_layout = QVBoxLayout(left_sidebar_widget)
 89        self.left_sidebar_layout.setContentsMargins(
 90            0, 0, 0, 0
 91        )  # Remove sidebar padding
 92        self.left_sidebar_layout.setSpacing(0)  # Remove extra spacing
 93        self.left_sidebar_layout.setAlignment(Qt.AlignmentFlag.AlignTop)
 94
 95        right_sidebar_widget.setFixedWidth(40)
 96        right_sidebar_widget.setStyleSheet(
 97            "background-color: #f0f0ff;"
 98        )  # Placeholder for colors
 99
100        editor_panel_layout.addWidget(left_sidebar_widget, stretch=1)
101        editor_panel_layout.addWidget(self.tab_manager.tab_widget, stretch=9)
102        editor_panel_layout.addWidget(right_sidebar_widget, stretch=1)
103
104        # Force the tab widget itself to be expandable
105        self.tab_manager.tab_widget.setSizePolicy(
106            QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding
107        )
108
109        # Bottom Layout (~10% of height)
110        status_bar_widget = QWidget()
111        status_bar_widget.setFixedHeight(80)
112        status_bar_widget.setStyleSheet("background-color: #fff0f0;")
113
114        self.workspace_layout.addLayout(editor_panel_layout, stretch=9)
115        self.workspace_layout.addWidget(status_bar_widget, stretch=1)
116
117        LeftSidebar(self)
118
119        top_left = status_bar_widget.rect().topLeft()
120        x = top_left.x()
121        y = top_left.y()
122        print(f"OFFSET: {x,y}")
123
124        self.debug_sizes()
def load_new_image_dialog(self):
126    def load_new_image_dialog(self):
127        """Open a file dialog to load a new image and let ImageManager handle the rest."""
128        file_dialog = QFileDialog(self)
129        file_path, _ = file_dialog.getOpenFileName(
130            self, "Open Image", self.last_opened_folder, "Images (*.png *.jpg *.bmp)"
131        )
132
133        if file_path:
134            self.last_opened_folder = str(Path(file_path).parent)
135            self.tab_manager.load_new_image(file_path)

Open a file dialog to load a new image and let ImageManager handle the rest.

def debug_sizes(self):
137    def debug_sizes(self):
138        print(f"Main Window Height: {self.height()}")
139        print(f"Central Widget Height: {self.centralWidget().height()}")
140        print(f"Main Layout Height: {self.workspace_layout.geometry()}")
141        print(f"Tab Widget Geometry: {self.tab_manager.tab_widget.geometry()}")