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
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.