creatumlibre.ui.left_sidebar.left_sidebar

 1from PyQt6.QtCore import QSize
 2from PyQt6.QtGui import QIcon, QPixmap
 3from PyQt6.QtWidgets import QSizePolicy, QToolButton, QVBoxLayout, QWidget
 4
 5from creatumlibre.ui.dialogs.color_adjustment_dialog import ColorAdjustmentDialog
 6from creatumlibre.ui.left_sidebar.left_sidebar_css import LEFT_SIDEBAR_SIMPLE_BUTTON
 7from creatumlibre.ui.mode.ui_input_mode import InputMode
 8
 9BUTTON_WIDTH = 40
10BUTTON_HEIGHT = 40
11
12
13class LeftSidebar(QWidget):
14    """Sidebar with multiple tool buttons."""
15
16    def __init__(self, parent):
17        super().__init__(parent)
18        self.parent = parent
19        self.color_adjustment_dialog = ColorAdjustmentDialog(
20            self, self.parent.tab_manager
21        )
22
23        sidebar_layout = QVBoxLayout(self)
24        sidebar_layout.setContentsMargins(0, 0, 0, 0)
25        sidebar_layout.setSpacing(20)
26
27        # Create and add tool buttons
28        self.btn_color_adjustment = self._create_tool_button(
29            "src/creatumlibre/assets/color.png", self.color_adjustment_dialog.show
30        )
31        self.btn_region = self._create_tool_button(
32            "src/creatumlibre/assets/region.png",
33            lambda: self.parent.ui_input_mode.set_mode(InputMode.SELECT_REGION),
34        )
35
36        sidebar_layout.addWidget(self.btn_color_adjustment)
37        sidebar_layout.addWidget(self.btn_region)
38
39        self.setLayout(sidebar_layout)
40
41        # Add buttons to parent's sidebar layout
42        for button in [self.btn_color_adjustment, self.btn_region]:
43            parent.left_sidebar_layout.addWidget(button)
44            button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
45
46    def _create_tool_button(self, icon_path, callback):
47        """Creates a styled tool button with an icon."""
48        button = QToolButton(self)
49        button.setIcon(QIcon(QPixmap(icon_path).scaled(BUTTON_WIDTH, BUTTON_HEIGHT)))
50        button.setIconSize(QSize(BUTTON_WIDTH, BUTTON_HEIGHT))
51        button.setStyleSheet(LEFT_SIDEBAR_SIMPLE_BUTTON)
52        if callback:
53            button.clicked.connect(callback)
54        return button
BUTTON_WIDTH = 40
BUTTON_HEIGHT = 40