From 4bd41a2c0fea2da1098587f7441c35bcc60dc418 Mon Sep 17 00:00:00 2001 From: Eugenio Parodi Date: Mon, 9 Oct 2023 09:23:22 +0100 Subject: [PATCH] Improved ListWidget with service functions --- TermTk/TTkWidgets/list_.py | 8 ++++++-- TermTk/TTkWidgets/listwidget.py | 33 +++++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/TermTk/TTkWidgets/list_.py b/TermTk/TTkWidgets/list_.py index 6c68eb98..b2d9e6af 100644 --- a/TermTk/TTkWidgets/list_.py +++ b/TermTk/TTkWidgets/list_.py @@ -30,8 +30,10 @@ class TTkList(TTkAbstractScrollArea): __slots__ = ( '_listView', 'itemClicked', 'textClicked', # Forwarded Methods - 'items', 'addItem', 'addItemAt', 'indexOf', 'itemAt', - 'moveItem', 'removeAt', 'removeItem', 'removeItems', + 'items', + 'addItem', 'addItemAt', 'addItems', 'addItemsAt', + 'indexOf', 'itemAt', 'moveItem', + 'removeAt', 'removeItem', 'removeItems', 'setSelectionMode', 'selectedItems', 'selectedLabels', 'setCurrentRow', 'setCurrentItem', ) @@ -53,7 +55,9 @@ class TTkList(TTkAbstractScrollArea): self.removeItem = self._listView.removeItem self.removeItems = self._listView.removeItems self.addItem = self._listView.addItem + self.addItems = self._listView.addItems self.addItemAt = self._listView.addItemAt + self.addItemsAt = self._listView.addItemsAt self.setSelectionMode = self._listView.setSelectionMode self.selectedItems = self._listView.selectedItems self.selectedLabels = self._listView.selectedLabels diff --git a/TermTk/TTkWidgets/listwidget.py b/TermTk/TTkWidgets/listwidget.py index d489e0a6..bab2f486 100644 --- a/TermTk/TTkWidgets/listwidget.py +++ b/TermTk/TTkWidgets/listwidget.py @@ -198,6 +198,10 @@ class TTkListWidget(TTkAbstractScrollView): '''addItem''' self.addItemAt(item, len(self._items), data) + def addItems(self, items): + '''addItems''' + self.addItemAt(items, len(self._items)) + def _placeItems(self): minw = self.width() for item in self._items: @@ -210,12 +214,19 @@ class TTkListWidget(TTkAbstractScrollView): def addItemAt(self, item, pos, data=None): '''addItemAt''' if isinstance(item, str) or isinstance(item, TTkString): - #label = TTkAbstractListItem(text=item, width=max(len(item),self.width())) - label = TTkAbstractListItem(text=item, data=data) - return self.addItemAt(label,pos) - item.listItemClicked.connect(self._labelSelectedHandler) - self._items.insert(pos,item) - self.layout().addWidget(item) + item = TTkAbstractListItem(text=item, data=data) + return self.addItemsAt([item],pos) + + def addItemsAt(self, items, pos): + '''addItemsAt''' + for item in items: + if not issubclass(type(item),TTkAbstractListItem): + TTkLog.error(f"{item=} is not an TTkAbstractListItem") + return + for item in items: + item.listItemClicked.connect(self._labelSelectedHandler) + self._items[pos:pos] = items + self.layout().addWidgets(items) self._placeItems() def indexOf(self, item): @@ -290,8 +301,10 @@ class TTkListWidget(TTkAbstractScrollView): pm = TTkCanvas(width=w,height=h) for y,it in enumerate(items[:3],1): txt = it.text() - pm.drawText(pos=(1,y), text=it.text()) - if txt.termWidth() >= 20: + if txt.termWidth() < 20: + pm.drawText(pos=(1,y), text=it.text()) + else: + pm.drawText(pos=(1,y), text=it.text(), width=17) pm.drawText(pos=(18,y), text='...') if ih>3: pm.drawText(pos=(1,4), text='...') @@ -328,9 +341,9 @@ class TTkListWidget(TTkAbstractScrollView): items = evt.data().items if wid and items: wid.removeItems(items) - for it in reversed(items): + for it in items: it.setCurrentStyle(it.style()['default']) - self.addItemAt(it,offy+evt.y) + self.addItemsAt(items,offy+evt.y) return True return False