diff --git a/TermTk/TTkAbstract/abstracttablemodel.py b/TermTk/TTkAbstract/abstracttablemodel.py index d977f73a..d4192f4c 100644 --- a/TermTk/TTkAbstract/abstracttablemodel.py +++ b/TermTk/TTkAbstract/abstracttablemodel.py @@ -125,7 +125,7 @@ class TTkAbstractTableModel(): __slots__ = ( # Signals - 'dataChanged' + 'dataChanged', 'modelChanged' ) dataChanged:pyTTkSignal @@ -142,8 +142,15 @@ class TTkAbstractTableModel(): :param size: the size of the modified area :type size: tuple(int,int) ''' + modelChanged:pyTTkSignal + ''' + This signal is emitted whenever the model changes. + + When the model topology changes, this signal must be emitted explicitly. + ''' def __init__(self): self.dataChanged = pyTTkSignal(tuple[int,int],tuple[int,int]) + self.modelChanged = pyTTkSignal() def rowCount(self) -> int: ''' diff --git a/TermTk/TTkWidgets/TTkModelView/tablemodellist.py b/TermTk/TTkWidgets/TTkModelView/tablemodellist.py index 77648437..e3bdba1d 100644 --- a/TermTk/TTkWidgets/TTkModelView/tablemodellist.py +++ b/TermTk/TTkWidgets/TTkModelView/tablemodellist.py @@ -79,6 +79,7 @@ class TTkTableModelList(TTkAbstractTableModel): def setModelList(self, modelList:list[list]) -> None: if modelList == self._data: return self._data = modelList + self.modelChanged.emit() def rowCount(self) -> int: return len(self._data) diff --git a/TermTk/TTkWidgets/TTkModelView/tablewidget.py b/TermTk/TTkWidgets/TTkModelView/tablewidget.py index 512be2cb..151207c2 100644 --- a/TermTk/TTkWidgets/TTkModelView/tablewidget.py +++ b/TermTk/TTkWidgets/TTkModelView/tablewidget.py @@ -325,6 +325,7 @@ class TTkTableWidget(TTkAbstractScrollView): self._sortOrder = TTkK.AscendingOrder self._tableModel = tableModel if tableModel else TTkTableModelList(data=[['']*10 for _ in range(10)]) self._tableModel.dataChanged.connect(self.update) + self._tableModel.modelChanged.connect(self._refreshLayout) super().__init__(**kwargs) self._refreshLayout() self.setMinimumHeight(1) @@ -534,6 +535,7 @@ class TTkTableWidget(TTkAbstractScrollView): self.setPadding(hhs,0,vhs,0) self.viewChanged.emit() + @pyTTkSlot() def _refreshLayout(self): self._selected = None self._selectedBase = None @@ -562,6 +564,7 @@ class TTkTableWidget(TTkAbstractScrollView): # self._selectedBase = sb = [False]*cols # self._selected = [sb]*rows self.clearSelection() + self.viewChanged.emit() # Overridden function def viewFullAreaSize(self) -> tuple[int, int]: @@ -810,7 +813,6 @@ class TTkTableWidget(TTkAbstractScrollView): self._tableModel = model self._tableModel.dataChanged.connect(self.update) self._refreshLayout() - self.viewChanged.emit() def focusOutEvent(self) -> None: self._hSeparatorSelected = None diff --git a/tests/t.input/test.input.mouse.tracking.py b/tests/t.input/test.input.mouse.tracking.py index 93c458e7..3b6aea96 100644 --- a/tests/t.input/test.input.mouse.tracking.py +++ b/tests/t.input/test.input.mouse.tracking.py @@ -20,7 +20,8 @@ def read_mouse_events(): while True: event += sys.stdin.read(1) if event[-1]=='\033': - print(f"Mouse event: {event[:-1].replace('\033','')}") + mouse_event = event[:-1].replace('\033','') + print(f"Mouse event: {mouse_event}") event = '\033' finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)