From b434b330f9ccf47f6ba4443f667d48fa9565df64 Mon Sep 17 00:00:00 2001 From: Pier CeccoPierangioliEugenio Date: Mon, 19 Jan 2026 10:05:23 +0000 Subject: [PATCH] chore(tree)!: remove selected status from the treeWidgetItem (#584) The selection state is now managed entirely by TTkTreeWidget instead of individual items. This improves performance and simplifies the API. BREAKING CHANGE: The following APIs have been removed from TTkTreeWidgetItem: - `isSelected()` method - use `TTkTreeWidget.selectedItems()` to check selection - `setSelected(bool)` method - selection is now managed by TTkTreeWidget - `selected` parameter in constructor - no longer supported Migration guide: - Replace `item.isSelected()` with `item in treeWidget.selectedItems()` - Remove calls to `item.setSelected(True/False)` - use tree widget selection methods - Remove `selected=True` from TTkTreeWidgetItem() constructor calls --- .../TermTk/TTkWidgets/TTkModelView/treewidget.py | 9 +-------- .../TTkWidgets/TTkModelView/treewidgetitem.py | 16 +--------------- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidget.py b/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidget.py index b49bbd15..22cbe727 100644 --- a/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidget.py +++ b/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidget.py @@ -566,11 +566,8 @@ class TTkTreeWidget(TTkAbstractScrollView): self.itemExpanded.emit(item) else: self.itemCollapsed.emit(item) - for _s in self._selected: - _s.setSelected(False) self._selectedId = y self._selected = [item] - item.setSelected(True) col = -1 for i, c in enumerate(self._columnsPos): if x < c: @@ -623,17 +620,13 @@ class TTkTreeWidget(TTkAbstractScrollView): if self._selectionMode in (TTkK.SelectionMode.SingleSelection,TTkK.SelectionMode.MultiSelection): _multiSelect = self._selectionMode == TTkK.SelectionMode.MultiSelection if not ( bool(evt.mod & TTkK.ControlModifier) and _multiSelect ): - for _s in self._selected: - _s.setSelected(False) self._selected.clear() self._selectedId = y # Unselect Items if already selected in multiselect mode if item in self._selected and _multiSelect: self._selected.remove(item) - item.setSelected(False) else: self._selected.append(item) - item.setSelected(True) col = -1 for i, c in enumerate(self._columnsPos): if x < c: @@ -768,6 +761,6 @@ class TTkTreeWidget(TTkAbstractScrollView): _text=_icon+_data[_yi] else: # Other columns _text=_data[_yi] - if _i.isSelected(): + if _i in self._selected: _text = (_text + ' '*_width).completeColor(selectedColor) canvas.drawTTkString(text=_text,pos=(_lx-x,_y+1),width=_width) diff --git a/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidgetitem.py b/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidgetitem.py index 70b67f67..54c23cbe 100644 --- a/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidgetitem.py +++ b/libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/treewidgetitem.py @@ -251,7 +251,7 @@ class TTkTreeWidgetItem(TTkAbstractItemModel): __slots__ = ( '_parent', '_data', '_widgets', '_height', '_alignment', - '_children', '_expanded', '_selected', '_hidden', + '_children', '_expanded', '_hidden', '_childIndicatorPolicy', '_icon', '_defaultIcon', '_sortColumn', '_sortOrder', '_hasWidgets', '_buffer', '_level', @@ -271,7 +271,6 @@ class TTkTreeWidgetItem(TTkAbstractItemModel): def __init__(self, *args, parent:Optional[TTkTreeWidgetItem]=None, expanded:bool=False, - selected:bool=False, hidden:bool=False, icon:TTkStringType='', childIndicatorPolicy:TTkK.ChildIndicatorPolicy =TTkK.ChildIndicatorPolicy.DontShowIndicatorWhenChildless, @@ -291,7 +290,6 @@ class TTkTreeWidgetItem(TTkAbstractItemModel): self._childIndicatorPolicy = childIndicatorPolicy self._defaultIcon = True self._expanded = expanded - self._selected = selected self._hidden = hidden self._sortColumn = -1 self._sortOrder = TTkK.AscendingOrder @@ -535,9 +533,6 @@ class TTkTreeWidgetItem(TTkAbstractItemModel): def emitDataChanged(self) -> None: self.dataChanged.emit() - # def setDisabled(disabled): - # pass - def setExpanded(self, expand:bool) -> None: if self._expanded != expand and self._children: if expand: @@ -548,18 +543,9 @@ class TTkTreeWidgetItem(TTkAbstractItemModel): self._setDefaultIcon() self.dataChanged.emit() - def setSelected(self, select:bool) -> None: - self._selected = select - - # def isDisabled(): - # pass - def isExpanded(self) -> bool: return self._expanded - def isSelected(self) -> bool: - return self._selected - def size(self) -> int: if self._hidden: return 0