From 696e3f50233d36ac55e49d87f7f196bb0190d1d7 Mon Sep 17 00:00:00 2001 From: Eugenio Parodi Date: Thu, 6 Apr 2023 17:24:39 +0100 Subject: [PATCH] Refined the signal/slots editor events in case of modified widgets in the main window --- TermTk/TTkWidgets/combobox.py | 1 + ttkDesigner/app/designer.py | 3 ++- ttkDesigner/app/signalsloteditor.py | 21 ++++++++++++++++++--- ttkDesigner/app/superobj/superwidget.py | 2 ++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/TermTk/TTkWidgets/combobox.py b/TermTk/TTkWidgets/combobox.py index cbb9fc4a..e8aab2de 100644 --- a/TermTk/TTkWidgets/combobox.py +++ b/TermTk/TTkWidgets/combobox.py @@ -137,6 +137,7 @@ class TTkComboBox(TTkWidget): for item in items: self.addItem(item) + pyTTkSlot() def clear(self): '''clear''' self._lineEdit.setText("") diff --git a/ttkDesigner/app/designer.py b/ttkDesigner/app/designer.py index 84f9a348..49c80be9 100644 --- a/ttkDesigner/app/designer.py +++ b/ttkDesigner/app/designer.py @@ -77,11 +77,12 @@ from .signalsloteditor import SignalSlotEditor class TTkDesigner(TTkGridLayout): __slots__ = ('_pippo', '_main', '_windowEditor', '_toolBar', '_sigslotEditor', '_treeInspector', # Signals - 'weModified', 'thingSelected' + 'weModified', 'thingSelected', 'widgetNameChanged' ) def __init__(self, *args, **kwargs): self.weModified = pyTTkSignal() self.thingSelected = pyTTkSignal(TTkWidget, TTkWidget) + self.widgetNameChanged = pyTTkSignal(str, str) super().__init__(*args, **kwargs) diff --git a/ttkDesigner/app/signalsloteditor.py b/ttkDesigner/app/signalsloteditor.py index 6437a136..954f5ee9 100644 --- a/ttkDesigner/app/signalsloteditor.py +++ b/ttkDesigner/app/signalsloteditor.py @@ -40,6 +40,8 @@ class _SignalSlotItem(ttk.TTkTreeWidgetItem): self._signal.currentTextChanged.connect( self._signalChanged) self._receiver.currentTextChanged.connect(self._receiverChanged) self._slot.currentTextChanged.connect( self._slotChanged) + self._designer.widgetNameChanged.connect( self._widgetNameChanged) + self._designer.weModified.connect(self.updateWidgets) self.updateWidgets() super().__init__([self._sender,self._signal,self._receiver,self._slot], *args, **kwargs) @@ -78,10 +80,9 @@ class _SignalSlotItem(ttk.TTkTreeWidgetItem): 'signal': curSignal, 'slot': curSlot } + @ttk.pyTTkSlot() def updateWidgets(self): - names = [w.name() for w in self._designer.getWidgets()] - self._sender.addItems(names) - self._receiver.addItems(names) + self._widgetNameChanged() @staticmethod def typeToString(t): @@ -94,6 +95,20 @@ class _SignalSlotItem(ttk.TTkTreeWidgetItem): str : 'str', None : ''}.get(t,f"UNDEFINED {t}") + @ttk.pyTTkSlot(str, str) + def _widgetNameChanged(self, oldName='', newName=''): + names = [w.name() for w in self._designer.getWidgets()] + + def _setCB(cb:ttk.TTkComboBox, base): + text = cb.currentText() + text = text if text!=oldName else newName + cb.clear() + cb.addItems([base]+names) + cb.setCurrentText(text) + + _setCB(self._sender, '') + _setCB(self._receiver, '') + @ttk.pyTTkSlot(str) def _senderChanged(self, text): self._signalData, _ = self.getSignalSlot(text) diff --git a/ttkDesigner/app/superobj/superwidget.py b/ttkDesigner/app/superobj/superwidget.py index 8956bb66..f8d2afbd 100644 --- a/ttkDesigner/app/superobj/superwidget.py +++ b/ttkDesigner/app/superobj/superwidget.py @@ -62,8 +62,10 @@ class SuperWidget(ttk.TTkWidget): @ttk.pyTTkSlot(str) def setSuperName(self, name): if name and name not in [w.name() for w in self._designer.getWidgets()]: + oldName = self._wid._name self._wid._name = name self._designer.weModified.emit() + self._designer.widgetNameChanged.emit(oldName, name) def getSuperProperties(self): exceptions = {