From 146efd3139d6a7f6ee79d9a19ac0c75812b999e1 Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Tue, 21 Jul 2026 16:06:21 +0100 Subject: [PATCH 1/3] 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 243302f4..515cdb73 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 ed973ec0..e95b5604 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 c81450a1da97a997261cb12e90092cbfe1d8a137 Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Tue, 21 Jul 2026 16:33:07 +0100 Subject: [PATCH 2/3] 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 3ca25291..6b6cbc55 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 29a696b2646e54442d1173e5d51d24fb92d8d0bb Mon Sep 17 00:00:00 2001 From: Roberto Martins Date: Fri, 31 Jul 2026 15:38:20 +0100 Subject: [PATCH 3/3] 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 b904645c..6c430ea9 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))