From 4ef1d3afd59097d9e12308f287792bac746cd866 Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Tue, 21 Jul 2026 16:06:21 +0100 Subject: [PATCH 1/5] add: added QoL features --- BlocksScreen/lib/panels/widgets/keyboardPage.py | 7 +++++++ BlocksScreen/lib/utils/blocks_linedit.py | 11 ++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/BlocksScreen/lib/panels/widgets/keyboardPage.py b/BlocksScreen/lib/panels/widgets/keyboardPage.py index 243302f4d..515cdb736 100644 --- a/BlocksScreen/lib/panels/widgets/keyboardPage.py +++ b/BlocksScreen/lib/panels/widgets/keyboardPage.py @@ -91,6 +91,7 @@ def __init__(self, parent: QtWidgets.QWidget) -> None: self._key_buttons: list[QtWidgets.QPushButton] = [] self._pattern: str = "" self._max_length: int = 0 + self.firsttime: bool = True self._setup_ui() self.setCursor(QtCore.Qt.CursorShape.BlankCursor) @@ -213,6 +214,7 @@ def _geometry_calc(self) -> None: def show(self) -> None: self._geometry_calc() + self.firsttime = True return super().show() def handle_keyboard_layout(self) -> None: @@ -244,6 +246,11 @@ def handle_keyboard_layout(self) -> None: def value_inserted(self, value: str) -> None: """Handle key press: append char, delete, or submit on enter.""" + + if self.firsttime: + self.current_value = "" + self.firsttime = False + if value == "&&": value = "&" diff --git a/BlocksScreen/lib/utils/blocks_linedit.py b/BlocksScreen/lib/utils/blocks_linedit.py index ed973ec00..e95b5604d 100644 --- a/BlocksScreen/lib/utils/blocks_linedit.py +++ b/BlocksScreen/lib/utils/blocks_linedit.py @@ -22,6 +22,7 @@ def __init__(self, parent: typing.Optional[QtWidgets.QWidget] = None) -> None: # Pre-allocated colors (avoid allocation in paint) self._bg_color = QtGui.QColor(223, 223, 223) + self._disabled_bg_color = QtGui.QColor(169, 169, 169) self._bg_pressed_color = QtGui.QColor(200, 200, 200) self._text_color = QtGui.QColor(0, 0, 0) self._placeholder_color = QtGui.QColor(130, 130, 130) @@ -82,20 +83,20 @@ def _get_text_rect(self) -> QtCore.QRect: def mousePressEvent(self, event: QtGui.QMouseEvent) -> None: """Handle mouse press""" + if not self.isEnabled(): + return self.clicked.emit() super().mousePressEvent(event) - def mouseReleaseEvent(self, event: QtGui.QMouseEvent) -> None: - """Handle mouse release""" - super().mouseReleaseEvent(event) - def paintEvent(self, event: typing.Optional[QtGui.QPaintEvent]) -> None: """Custom paint with embedded toggle button.""" painter = QtGui.QPainter(self) painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True) # Background - painter.setBrush(self._bg_color) + painter.setBrush( + self._bg_color if self.isEnabled() else self._disabled_bg_color + ) painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawRoundedRect(self.rect(), self.CORNER_RADIUS, self.CORNER_RADIUS) From 233d06cfbd457a84f88f5c4f97829800adbf28d3 Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Tue, 21 Jul 2026 16:33:07 +0100 Subject: [PATCH 2/5] upd: updated test --- tests/util/test_keyboard_page_unit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/util/test_keyboard_page_unit.py b/tests/util/test_keyboard_page_unit.py index 3ca252915..6b6cbc559 100644 --- a/tests/util/test_keyboard_page_unit.py +++ b/tests/util/test_keyboard_page_unit.py @@ -175,7 +175,7 @@ def test_set_value_prefills(self, keyboard): def test_set_value_then_type(self, keyboard): keyboard.set_value("abc") keyboard.value_inserted("d") - assert keyboard.current_value == "abcd" + assert keyboard.current_value == "d" class TestDotButton: From f29038ce611dee0191fdbfde3ae00c7f7012f4d0 Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Fri, 31 Jul 2026 15:38:20 +0100 Subject: [PATCH 3/5] add: added toggle min max --- BlocksScreen/lib/panels/widgets/numpadPage.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/BlocksScreen/lib/panels/widgets/numpadPage.py b/BlocksScreen/lib/panels/widgets/numpadPage.py index b904645cd..6c430ea9b 100644 --- a/BlocksScreen/lib/panels/widgets/numpadPage.py +++ b/BlocksScreen/lib/panels/widgets/numpadPage.py @@ -22,6 +22,7 @@ def __init__( self.name: str = "" self.min_value: int = 0 self.max_value: int = 100 + self.enforce_range: bool = True self.firsttime: bool = True self.numpad_0.clicked.connect(lambda: self.value_inserted("0")) @@ -41,6 +42,8 @@ def __init__( def showEvent(self, a0: QtGui.QShowEvent | None) -> None: self.firsttime = True + self.enforce_range = True + self.min_max_label.setVisible(True) return super().showEvent(a0) def value_inserted(self, value: str) -> None: @@ -58,10 +61,12 @@ def value_inserted(self, value: str) -> None: else: self.current_value += str(value) + in_range = self.min_value <= int(self.current_value) <= self.max_value + if "enter" in value and self.current_value.isnumeric(): if len(self.current_value) == 0: self.current_value = "0" - if self.min_value <= int(self.current_value) <= self.max_value: + if in_range or not self.enforce_range: self.value_selected.emit(self.name, int(self.current_value)) self.request_back.emit() @@ -71,7 +76,7 @@ def value_inserted(self, value: str) -> None: else: self.current_value = "0" - if not (self.min_value <= int(self.current_value) <= self.max_value): + if not in_range and self.enforce_range: self.start_glow_animation.emit() else: self.inserted_value.glow_animation.stop() @@ -104,6 +109,11 @@ def set_max_value(self, max_value: int) -> None: self.max_value = max_value self.update_min_max_label() + def set_enforce_range(self, enforce: bool = True) -> None: + """Enable or disable min/max range enforcement. Enabled by default.""" + self.enforce_range = enforce + self.min_max_label.setVisible(enforce) + def update_min_max_label(self) -> None: """Updates the text of the min/max label.""" self.min_max_label.setText(f"Range: {self.min_value} - {self.max_value}") @@ -133,6 +143,11 @@ def _setupUI(self) -> None: self.header_layout.setContentsMargins(0, 0, 0, 0) self.header_layout.setObjectName("header_layout") + + blank = QtWidgets.QWidget(self) + blank.setFixedSize(60, 60) + self.header_layout.addWidget(blank) + self.numpad_title = BlocksLabel(self) self.numpad_title.setMinimumSize(QtCore.QSize(500, 60)) self.numpad_title.setMaximumSize(QtCore.QSize(16777215, 60)) From 4ba82e02e1fa5e4721c7b2b5c04ddfb256af3bfa Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Mon, 3 Aug 2026 12:14:42 +0100 Subject: [PATCH 4/5] add: added icon --- BlocksScreen/lib/panels/widgets/colorWheelWidget.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/BlocksScreen/lib/panels/widgets/colorWheelWidget.py b/BlocksScreen/lib/panels/widgets/colorWheelWidget.py index f4a28e9ef..ca9579ad2 100644 --- a/BlocksScreen/lib/panels/widgets/colorWheelWidget.py +++ b/BlocksScreen/lib/panels/widgets/colorWheelWidget.py @@ -105,9 +105,6 @@ def _pick(self, pos: QtCore.QPointF) -> None: self.update() self.hue_sat_changed.emit(self._hue, self._sat) - # def mousePressEvent(self, event: QtGui.QMouseEvent) -> None: - # self._pick(event.position()) - def mouseMoveEvent(self, event: QtGui.QMouseEvent) -> None: if event.buttons() & QtCore.Qt.MouseButton.LeftButton: self._pick(event.position()) @@ -208,7 +205,6 @@ def _lbl( root.setContentsMargins(12, 8, 12, 8) root.setSpacing(8) - # ── Header ────────────────────────────────────────────────────── header = QtWidgets.QHBoxLayout() header.setContentsMargins(0, 0, 0, 0) @@ -230,22 +226,18 @@ def _lbl( header.addWidget(back_btn) root.addLayout(header) - # ── Body ───────────────────────────────────────────────────────── body = QtWidgets.QHBoxLayout() body.setSpacing(16) - # Left: colour wheel, vertically centred self._wheel = _ColorWheel(self, diameter=260) self._wheel.hue_sat_changed.connect(self._on_hue_sat) body.addWidget(self._wheel, 0, QtCore.Qt.AlignmentFlag.AlignVCenter) - # Right: card containing all controls card = BlocksCustomFrame(self) card_lay = QtWidgets.QVBoxLayout(card) card_lay.setContentsMargins(14, 14, 14, 14) card_lay.setSpacing(10) - # Combined swatch + hex code — one element instead of two self._swatch = BlocksLabel(card) self._swatch.setFixedHeight(76) self._swatch.rounded = True @@ -256,7 +248,6 @@ def _lbl( self._swatch.setFont(swatch_font) card_lay.addWidget(self._swatch) - # Brightness row card_lay.addWidget( _lbl("Brightness", 22, QtGui.QColor(160, 160, 160), card, 30) ) @@ -275,6 +266,7 @@ def _lbl( f.setPointSize(16) select_btn.setFont(f) select_btn.setText("Select") + select_btn.setPixmap(QtGui.QPixmap(":/dialog/media/btn_icons/yes.svg")) select_btn.clicked.connect(self._on_select) card_lay.addWidget(select_btn, 0, QtCore.Qt.AlignmentFlag.AlignHCenter) From 8205f4c0807b75eabb207a7f6f5eb0f379512c3c Mon Sep 17 00:00:00 2001 From: Robert0Mart Date: Wed, 23 Sep 2026 12:05:33 +0100 Subject: [PATCH 5/5] reafctor: small changes --- BlocksScreen/lib/panels/widgets/colorWheelWidget.py | 9 ++++++--- BlocksScreen/lib/panels/widgets/keyboardPage.py | 6 +++--- BlocksScreen/lib/panels/widgets/numpadPage.py | 13 +++++++++---- BlocksScreen/lib/utils/blocks_linedit.py | 2 -- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/BlocksScreen/lib/panels/widgets/colorWheelWidget.py b/BlocksScreen/lib/panels/widgets/colorWheelWidget.py index ca9579ad2..d1872b554 100644 --- a/BlocksScreen/lib/panels/widgets/colorWheelWidget.py +++ b/BlocksScreen/lib/panels/widgets/colorWheelWidget.py @@ -105,9 +105,12 @@ def _pick(self, pos: QtCore.QPointF) -> None: self.update() self.hue_sat_changed.emit(self._hue, self._sat) - def mouseMoveEvent(self, event: QtGui.QMouseEvent) -> None: - if event.buttons() & QtCore.Qt.MouseButton.LeftButton: - self._pick(event.position()) + def mouseMoveEvent(self, a0: QtGui.QMouseEvent | None) -> None: + if a0.buttons() & QtCore.Qt.MouseButton.LeftButton: + self._pick(a0.position()) + + def mousePressEvent(self, a0: QtGui.QMouseEvent | None) -> None: + self._pick(a0.position()) class ColorWheelWidget(QtWidgets.QWidget): diff --git a/BlocksScreen/lib/panels/widgets/keyboardPage.py b/BlocksScreen/lib/panels/widgets/keyboardPage.py index 515cdb736..734ba5fbd 100644 --- a/BlocksScreen/lib/panels/widgets/keyboardPage.py +++ b/BlocksScreen/lib/panels/widgets/keyboardPage.py @@ -212,10 +212,10 @@ def _geometry_calc(self) -> None: self.setGeometry(x, y, width, height) - def show(self) -> None: + def showEvent(self, a0: QtGui.QShowEvent | None) -> None: self._geometry_calc() self.firsttime = True - return super().show() + return super().showEvent(a0) def handle_keyboard_layout(self) -> None: """Update key labels based on current shift/keychange state.""" @@ -247,7 +247,7 @@ def handle_keyboard_layout(self) -> None: def value_inserted(self, value: str) -> None: """Handle key press: append char, delete, or submit on enter.""" - if self.firsttime: + if self.firsttime and value not in ("enter", "clear"): self.current_value = "" self.firsttime = False diff --git a/BlocksScreen/lib/panels/widgets/numpadPage.py b/BlocksScreen/lib/panels/widgets/numpadPage.py index 6c430ea9b..4721429a7 100644 --- a/BlocksScreen/lib/panels/widgets/numpadPage.py +++ b/BlocksScreen/lib/panels/widgets/numpadPage.py @@ -42,7 +42,6 @@ def __init__( def showEvent(self, a0: QtGui.QShowEvent | None) -> None: self.firsttime = True - self.enforce_range = True self.min_max_label.setVisible(True) return super().showEvent(a0) @@ -75,6 +74,7 @@ def value_inserted(self, value: str) -> None: self.current_value = self.current_value[:-1] else: self.current_value = "0" + in_range = self.min_value <= int(self.current_value) <= self.max_value if not in_range and self.enforce_range: self.start_glow_animation.emit() @@ -116,6 +116,7 @@ def set_enforce_range(self, enforce: bool = True) -> None: def update_min_max_label(self) -> None: """Updates the text of the min/max label.""" + self.enforce_range = True self.min_max_label.setText(f"Range: {self.min_value} - {self.max_value}") def _setupUI(self) -> None: @@ -144,9 +145,13 @@ def _setupUI(self) -> None: self.header_layout.setContentsMargins(0, 0, 0, 0) self.header_layout.setObjectName("header_layout") - blank = QtWidgets.QWidget(self) - blank.setFixedSize(60, 60) - self.header_layout.addWidget(blank) + spacerItem1 = QtWidgets.QSpacerItem( + 60, + 60, + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum, + ) + self.header_layout.addItem(spacerItem1) self.numpad_title = BlocksLabel(self) self.numpad_title.setMinimumSize(QtCore.QSize(500, 60)) diff --git a/BlocksScreen/lib/utils/blocks_linedit.py b/BlocksScreen/lib/utils/blocks_linedit.py index e95b5604d..c8c28f15f 100644 --- a/BlocksScreen/lib/utils/blocks_linedit.py +++ b/BlocksScreen/lib/utils/blocks_linedit.py @@ -83,8 +83,6 @@ def _get_text_rect(self) -> QtCore.QRect: def mousePressEvent(self, event: QtGui.QMouseEvent) -> None: """Handle mouse press""" - if not self.isEnabled(): - return self.clicked.emit() super().mousePressEvent(event)