Browse Source

Improved ListWidget with service functions

pull/187/head
Eugenio Parodi 2 years ago
parent
commit
4bd41a2c0f
  1. 8
      TermTk/TTkWidgets/list_.py
  2. 33
      TermTk/TTkWidgets/listwidget.py

8
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

33
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

Loading…
Cancel
Save