diff --git a/TermTk/TTkCore/filebuffer.py b/TermTk/TTkCore/filebuffer.py index ac826446..79a2e572 100644 --- a/TermTk/TTkCore/filebuffer.py +++ b/TermTk/TTkCore/filebuffer.py @@ -159,7 +159,7 @@ class TTkFileBuffer(): rr = re.compile(regex) with open(self._filename,'r') as infile: for line in infile: - ma = rr.match(line) + ma = rr.serch(line) if ma: indexes.append(id) id += 1 diff --git a/TermTk/TTkCore/helper.py b/TermTk/TTkCore/helper.py index 2b776c04..c44ed3e3 100644 --- a/TermTk/TTkCore/helper.py +++ b/TermTk/TTkCore/helper.py @@ -71,6 +71,11 @@ class TTkHelper: sc._widget.shortcutEvent() return + @staticmethod + def updateAll(): + if TTkHelper._rootWidget: + TTkHelper._rootWidget.update(repaint=True, updateLayout=True) + @staticmethod def addUpdateWidget(widget): if not widget.isVisible(): return diff --git a/TermTk/TTkCore/signal.py b/TermTk/TTkCore/signal.py index e1775e67..245f87cd 100644 --- a/TermTk/TTkCore/signal.py +++ b/TermTk/TTkCore/signal.py @@ -117,4 +117,9 @@ class _pyTTkSignal_obj(): slot(*args, **kwargs) def clear(self): - self._connected_slots = [] \ No newline at end of file + self._connected_slots = [] + + def forward(self): + def _ret(*args, **kwargs): + self.emit(*args, **kwargs) + return _ret diff --git a/TermTk/TTkWidgets/TTkPickers/colorpicker.py b/TermTk/TTkWidgets/TTkPickers/colorpicker.py index 7f862085..dd6aa012 100644 --- a/TermTk/TTkWidgets/TTkPickers/colorpicker.py +++ b/TermTk/TTkWidgets/TTkPickers/colorpicker.py @@ -447,6 +447,6 @@ class TTkColorButtonPicker(_TTkColorButton): def _colorClicked(self): colorPicker = TTkColorDialogPicker(pos = (3,3), size=(75,24), color=self._textColor, title="Test Color Picker", border=True) colorPicker.colorSelected.connect(self.setColor) - colorPicker.colorSelected.connect(lambda c:self.colorSelected.emit(c)) + colorPicker.colorSelected.connect(self.colorSelected.emit) TTkHelper.overlay(self, colorPicker, -1,-1) diff --git a/TermTk/TTkWidgets/lineedit.py b/TermTk/TTkWidgets/lineedit.py index b5a5d1a0..01afd647 100644 --- a/TermTk/TTkWidgets/lineedit.py +++ b/TermTk/TTkWidgets/lineedit.py @@ -103,6 +103,7 @@ class TTkLineEdit(TTkWidget): def keyEvent(self, evt): w = self.width() + baseText = self._text if evt.type == TTkK.SpecialKey: # Don't Handle the special tab key if evt.key == TTkK.Key_Tab: @@ -156,6 +157,8 @@ class TTkLineEdit(TTkWidget): if self._cursorPos - self._offset > w: self._offset += 1 self._pushCursor() + # Emit event only if the text changed + if baseText != self._text: self.textEdited.emit(self._text) return True @@ -164,4 +167,4 @@ class TTkLineEdit(TTkWidget): def focusOutEvent(self): TTkHelper.hideCursor() - self.update() \ No newline at end of file + self.update() diff --git a/TermTk/TTkWidgets/list.py b/TermTk/TTkWidgets/list.py index fc89feb7..c4a90f62 100644 --- a/TermTk/TTkWidgets/list.py +++ b/TermTk/TTkWidgets/list.py @@ -33,7 +33,10 @@ class TTkList(TTkAbstractScrollArea): __slots__ = ( '_listView', 'itemClicked', 'textClicked', # Forwarded Methods - 'addItem', 'setSelectionMode', 'selectedLabels', 'setCurrentRow', 'setCurrentItem' ) + 'items', 'addItem', 'addItemAt', 'indexOf', 'itemAt', + 'moveItem', 'removeAt', 'removeItem', + 'setSelectionMode', 'selectedItems', 'selectedLabels', + 'setCurrentRow', 'setCurrentItem', ) def __init__(self, *args, **kwargs): TTkAbstractScrollArea.__init__(self, *args, **kwargs) @@ -46,8 +49,16 @@ class TTkList(TTkAbstractScrollArea): # self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus) # Forwearded Methods + self.items = self._listView.items + self.indexOf = self._listView.indexOf + self.itemAt = self._listView.itemAt + self.moveItem = self._listView.moveItem + self.removeAt = self._listView.removeAt + self.removeItem = self._listView.removeItem self.addItem = self._listView.addItem + self.addItemAt = self._listView.addItemAt self.setSelectionMode = self._listView.setSelectionMode + self.selectedItems = self._listView.selectedItems self.selectedLabels = self._listView.selectedLabels self.setCurrentRow = self._listView.setCurrentRow self.setCurrentItem = self._listView.setCurrentItem diff --git a/TermTk/TTkWidgets/listwidget.py b/TermTk/TTkWidgets/listwidget.py index 2a9ad06e..ad032ae5 100644 --- a/TermTk/TTkWidgets/listwidget.py +++ b/TermTk/TTkWidgets/listwidget.py @@ -143,6 +143,9 @@ class TTkListWidget(TTkAbstractScrollView): def setSelectionMode(self, mode): self._selectionMode = mode + def selectedItems(self): + return self._selectedItems + def selectedLabels(self): return [i.text for i in self._selectedItems] @@ -167,22 +170,53 @@ class TTkListWidget(TTkAbstractScrollView): return self.size() def addItem(self, item, data=None): + self.addItemAt(item, len(self._items), data) + + def _placeItems(self): + minw = self.width() + for item in self._items: + minw = max(minw,item.minimumWidth()) + for y,item in enumerate(self._items): + item.setGeometry(0,y,minw,1) + self.viewChanged.emit() + + def addItemAt(self, item, pos, data=None): if isinstance(item, str): #label = TTkAbstractListItem(text=item, width=max(len(item),self.width())) label = TTkAbstractListItem(text=item, data=data) label.listItemClicked.connect(self._labelSelectedHandler) - return self.addItem(label) + return self.addItemAt(label,pos) # item.listItemClicked.connect(self._labelSelectedHandler) - self._items.append(item) - _,y,_,h = self.layout().fullWidgetAreaGeometry() + self._items.insert(pos,item) self.addWidget(item) - item.move(0,y+h) - _,_,fw,_ = self.layout().fullWidgetAreaGeometry() - w = self.width() - for item in self.layout().children(): - x,y,_,h = item.geometry() - item.setGeometry(x,y,max(w-1,fw),h) - self.viewChanged.emit() + self._placeItems() + + def indexOf(self, item): + for i, it in enumerate(self._items): + if it == item: + return i + return -1 + + def itemAt(self, pos): + return self._items[pos] + + def moveItem(self, fr, to): + fr = max(min(fr,len(self._items)-1),0) + to = max(min(to,len(self._items)-1),0) + tmp = self._items[to] + self._items[to] = self._items[fr] + self._items[fr] = tmp + self._placeItems() + + def removeItem(self, item): + self.removeWidget(item) + self._items.remove(item) + if item in self._selectedItems: + self._selectedItems.remove(item) + self._placeItems() + + def removeAt(self, pos): + self.removeItem(self._items[pos]) def setCurrentRow(self, row): if row