From 50f2a5ee658d52634c0da9bec0119b2b1799267e Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Tue, 16 Jul 2024 15:47:35 -0400 Subject: [PATCH 01/10] fix initial sizing behavior --- src/main/python/main/ayab/knitprogress.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 5fb02fa9..730597d2 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -52,6 +52,8 @@ def __init__(self, parent: GuiMain): self.verticalHeader().setSectionResizeMode( QHeaderView.ResizeMode.Fixed ) + self.horizontalHeader().setMinimumSectionSize(0) + self.horizontalHeader().setDefaultSectionSize(self.__prefs.value("lower_display_stitch_width")) self.previousStatus: Optional[Status] = None self.scene = parent.scene From e67ef3c678bca80ca1d5cdda650e6d6737ad26d6 Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Tue, 16 Jul 2024 15:48:43 -0400 Subject: [PATCH 02/10] make preferences.value typing clearer --- src/main/python/main/ayab/preferences.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/python/main/ayab/preferences.py b/src/main/python/main/ayab/preferences.py index d0e032de..b0e02d65 100644 --- a/src/main/python/main/ayab/preferences.py +++ b/src/main/python/main/ayab/preferences.py @@ -46,6 +46,7 @@ TypeVar, TypedDict, cast, + overload, ) if TYPE_CHECKING: @@ -141,6 +142,13 @@ def reset(self) -> None: var, self.default_value(cast(PreferencesDictKeys, var)) ) + @overload + def value(self, var: PreferencesDictBoolKeys) -> bool: ... + @overload + def value(self, var: PreferencesDictIntKeys | PreferencesDictObjKeys) -> int: ... + @overload + def value(self, var: Literal["language"]) -> str: ... + def value(self, var: PreferencesDictKeys) -> Any: if var in self.settings.allKeys(): try: From 8c9b0e79cb869e53fd075e899097844293ae3976 Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Tue, 16 Jul 2024 15:49:39 -0400 Subject: [PATCH 03/10] cleanup table behavior --- src/main/python/main/ayab/knitprogress.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 730597d2..9f006625 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -20,7 +20,7 @@ from __future__ import annotations from PySide6.QtCore import QCoreApplication, QRect, Qt -from PySide6.QtWidgets import QTableWidget, QTableWidgetItem, QHeaderView +from PySide6.QtWidgets import QTableWidget, QTableWidgetItem, QHeaderView, QAbstractItemView from PySide6.QtGui import QBrush, QColor from typing import TYPE_CHECKING, Optional, cast, List from math import floor @@ -52,8 +52,14 @@ def __init__(self, parent: GuiMain): self.verticalHeader().setSectionResizeMode( QHeaderView.ResizeMode.Fixed ) + self.verticalHeader().setSectionsClickable(False) self.horizontalHeader().setMinimumSectionSize(0) self.horizontalHeader().setDefaultSectionSize(self.__prefs.value("lower_display_stitch_width")) + self.horizontalHeader().setSectionsClickable(False) + self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectItems) + self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) + self.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) + self.previousStatus: Optional[Status] = None self.scene = parent.scene From d6265c9c7183c19060a19f0d53e2c27d048cddb1 Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Tue, 16 Jul 2024 15:52:01 -0400 Subject: [PATCH 04/10] add selection indicator --- src/main/python/main/ayab/ayab.py | 2 +- src/main/python/main/ayab/knitprogress.py | 17 +++++++++++++---- src/main/python/main/ayab/main_gui.ui | 7 +++++++ src/main/python/main/ayab/progressbar.py | 5 +++++ 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/python/main/ayab/ayab.py b/src/main/python/main/ayab/ayab.py index 010c0ecc..f73f4de8 100644 --- a/src/main/python/main/ayab/ayab.py +++ b/src/main/python/main/ayab/ayab.py @@ -77,10 +77,10 @@ def __init__(self, app_context: AppContext): # self.setStatusBar(self.statusbar) self.about: About = About(self) self.scene: Scene = Scene(self) - self.knitprog = KnitProgress(self) self.engine: Engine = Engine(self) self.hw_test = HardwareTestDialog(self) self.progbar = ProgressBar(self) + self.knitprog = KnitProgress(self) self.flash = FirmwareFlash(self) self.audio = AudioPlayer(self) self.knit_thread = GenericThread(self.engine.run, Operation.KNIT) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 9f006625..033e8ff1 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -47,6 +47,7 @@ def __init__(self, parent: GuiMain): self.clear() self.setRowCount(0) self.__prefs: Preferences = parent.prefs + self.__progbar = parent.progbar self.setGeometry(QRect(0, 0, 700, 220)) self.setContentsMargins(1, 1, 1, 1) self.verticalHeader().setSectionResizeMode( @@ -62,6 +63,7 @@ def __init__(self, parent: GuiMain): self.previousStatus: Optional[Status] = None self.scene = parent.scene + self.currentItemChanged.connect(self.onStitchSelect) def start(self) -> None: self.clearContents() @@ -149,19 +151,18 @@ def instantiate_row_from_columns(self, midline: int, columns: List[QTableWidgetI self.setVerticalHeaderItem(0, QTableWidgetItem("To Be Selected")) for i, col in enumerate(columns): self.setItem(0, i, col) - self.setColumnWidth(i, cast(int, self.__prefs.settings.value("lower_display_stitch_width"))) + self.setColumnWidth(i, self.__prefs.value("lower_display_stitch_width")) # when width is under 20, the column numbers are unreadable. if self.columnWidth(i) < 20: self.horizontalHeader().setVisible(False) - continue - self.horizontalHeader().setVisible(True) + else: + self.horizontalHeader().setVisible(True) if i < midline: header = QTableWidgetItem(f"{(midline)-(i)}") header.font().setBold(True) header.setForeground(QBrush(QColor(f"#{self.orange:06x}"))) header.setTextAlignment(Qt.AlignmentFlag.AlignCenter) self.setHorizontalHeaderItem(i, header) - self.horizontalHeader().setMinimumSectionSize(0) else: header = QTableWidgetItem(f"{(i+1)-(midline)}") header.setForeground(QBrush(QColor(f"#{self.green:06x}"))) @@ -226,3 +227,11 @@ def __stitch(self, color: int, bit: bool, alt_color: Optional[int] = None, bg_co if bg_color is not None: stitch.setBackground(QBrush(bg_color)) return stitch + + def onStitchSelect(self, current: QTableWidgetItem) -> None: + if self.horizontalHeaderItem(current.column()).foreground().color().red() == 187: + side = "Green" + else: + side = "Orange" + selectionString = f"Selection: {self.verticalHeaderItem(current.row()).text()} , stitch {side}-{self.horizontalHeaderItem(current.column()).text()}" + self.__progbar.setSelectionLabel(selectionString) diff --git a/src/main/python/main/ayab/main_gui.ui b/src/main/python/main/ayab/main_gui.ui index 7dd30cdb..a8672e49 100644 --- a/src/main/python/main/ayab/main_gui.ui +++ b/src/main/python/main/ayab/main_gui.ui @@ -34,6 +34,13 @@ + + + + + + + diff --git a/src/main/python/main/ayab/progressbar.py b/src/main/python/main/ayab/progressbar.py index 4d723bb5..649caabd 100644 --- a/src/main/python/main/ayab/progressbar.py +++ b/src/main/python/main/ayab/progressbar.py @@ -34,6 +34,7 @@ def __init__(self, parent: GuiMain): self.__row_label = parent.ui.label_current_row self.__color_label = parent.ui.label_current_color self.__status_label = parent.engine.status.ui.label_progress + self.__selection_label = parent.ui.label_selection self.reset() def reset(self) -> None: @@ -45,6 +46,7 @@ def reset(self) -> None: self.__row_label.setText("") self.__color_label.setText("") self.__status_label.setText("") + self.__selection_label.setText("") def update( self, @@ -60,6 +62,9 @@ def update( self.refresh() return True + def setSelectionLabel(self, text: str) -> None: + self.__selection_label.setText(text) + def refresh(self) -> None: """Updates the color and row in progress bar""" if self.row < 0 or self.total < 0: From 0897f1edeb670800390bde74a79c78d86365d8a7 Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Fri, 26 Jul 2024 09:15:31 -0400 Subject: [PATCH 05/10] consistency updates --- src/main/python/main/ayab/knitprogress.py | 4 ++-- src/main/python/main/ayab/progressbar.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 033e8ff1..3fdbccf9 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -233,5 +233,5 @@ def onStitchSelect(self, current: QTableWidgetItem) -> None: side = "Green" else: side = "Orange" - selectionString = f"Selection: {self.verticalHeaderItem(current.row()).text()} , stitch {side}-{self.horizontalHeaderItem(current.column()).text()}" - self.__progbar.setSelectionLabel(selectionString) + selection_string = f"Selection: {self.verticalHeaderItem(current.row()).text()} , stitch {side}-{self.horizontalHeaderItem(current.column()).text()}" + self.__progbar.set_selection_label(selection_string) diff --git a/src/main/python/main/ayab/progressbar.py b/src/main/python/main/ayab/progressbar.py index 649caabd..f4a1f2ba 100644 --- a/src/main/python/main/ayab/progressbar.py +++ b/src/main/python/main/ayab/progressbar.py @@ -62,7 +62,7 @@ def update( self.refresh() return True - def setSelectionLabel(self, text: str) -> None: + def set_selection_label(self, text: str) -> None: self.__selection_label.setText(text) def refresh(self) -> None: From bb1da715802578ed978b88946d25ea83893cbe62 Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Fri, 26 Jul 2024 17:18:20 -0400 Subject: [PATCH 06/10] don't allow individual column resizing --- src/main/python/main/ayab/knitprogress.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 3fdbccf9..17544782 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -57,6 +57,9 @@ def __init__(self, parent: GuiMain): self.horizontalHeader().setMinimumSectionSize(0) self.horizontalHeader().setDefaultSectionSize(self.__prefs.value("lower_display_stitch_width")) self.horizontalHeader().setSectionsClickable(False) + self.horizontalHeader().setSectionResizeMode( + QHeaderView.ResizeMode.Fixed + ) self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectItems) self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) self.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) From 9ab9b2bfc509bfec2f43438e68c22be6f5a1e39c Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Fri, 26 Jul 2024 17:18:41 -0400 Subject: [PATCH 07/10] account for empty cell selection --- src/main/python/main/ayab/knitprogress.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 17544782..a1c962df 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -231,7 +231,10 @@ def __stitch(self, color: int, bit: bool, alt_color: Optional[int] = None, bg_co stitch.setBackground(QBrush(bg_color)) return stitch - def onStitchSelect(self, current: QTableWidgetItem) -> None: + def onStitchSelect(self, current: QTableWidgetItem | None) -> None: + if current is None: + self.__progbar.set_selection_label("") + return if self.horizontalHeaderItem(current.column()).foreground().color().red() == 187: side = "Green" else: From 213875ef5375f86a565efd891b1951236521edc6 Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Fri, 26 Jul 2024 17:37:04 -0400 Subject: [PATCH 08/10] fix first row not getting rendered --- src/main/python/main/ayab/knitprogress.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index a1c962df..81916f64 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -118,12 +118,12 @@ def update_progress( # When we show a new row, we recover the header info and recombine it with its row (now row idx 2) self.make_row_with_spacer() - self.instantiate_row_from_columns(midline, columns) if self.columnCount() != len(columns): self.setColumnCount(len(columns)) n_cols = len(columns) if n_cols < 4: self.hideColumn(5) + self.instantiate_row_from_columns(midline, columns) self.previousStatus = status self.previous_row_mulitplier = row_multiplier From 5e4bfb26ed3799401bbb0cc503b794e7cb9b5ff8 Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Fri, 26 Jul 2024 17:39:17 -0400 Subject: [PATCH 09/10] remove spacer row default header text --- src/main/python/main/ayab/knitprogress.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 81916f64..27c2f2c3 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -176,6 +176,7 @@ def make_row_with_spacer(self) -> None: self.removeRow(1) self.insertRow(0) self.insertRow(1) + self.setVerticalHeaderItem(1, QTableWidgetItem("")) if self.rowCount() > 2: self.setVerticalHeaderItem(2, self.format_row_header_text(self.previousStatus, self.previous_row_mulitplier)) self.verticalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed) From f4ba43a7bad4d35a0912a92421cc01e8c7704f8b Mon Sep 17 00:00:00 2001 From: Sam! Bonfante Date: Fri, 26 Jul 2024 20:01:10 -0400 Subject: [PATCH 10/10] use left/right nomenclature --- src/main/python/main/ayab/knitprogress.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/python/main/ayab/knitprogress.py b/src/main/python/main/ayab/knitprogress.py index 27c2f2c3..92101107 100644 --- a/src/main/python/main/ayab/knitprogress.py +++ b/src/main/python/main/ayab/knitprogress.py @@ -237,8 +237,8 @@ def onStitchSelect(self, current: QTableWidgetItem | None) -> None: self.__progbar.set_selection_label("") return if self.horizontalHeaderItem(current.column()).foreground().color().red() == 187: - side = "Green" + side = "Right" else: - side = "Orange" + side = "Left" selection_string = f"Selection: {self.verticalHeaderItem(current.row()).text()} , stitch {side}-{self.horizontalHeaderItem(current.column()).text()}" self.__progbar.set_selection_label(selection_string)