diff --git a/TermTk/TTkLayouts/layout.py b/TermTk/TTkLayouts/layout.py index 84f9b83b..5645da5f 100644 --- a/TermTk/TTkLayouts/layout.py +++ b/TermTk/TTkLayouts/layout.py @@ -218,7 +218,10 @@ class TTkLayout(TTkLayoutItem): self.parentWidget().update(repaint=True, updateLayout=True) def addItem(self, item): - self._items.append(item) + self.insertItem(len(self._items),item) + + def insertItem(self, index, item): + self._items.insert(index, item) self._zSortItems() self.update() item.setParent(self) @@ -228,9 +231,12 @@ class TTkLayout(TTkLayoutItem): self.parentWidget().update(repaint=True, updateLayout=True) def addWidget(self, widget): - if widget.parentWidget() is not None: - widget.parentWidget().removeWidget(self) - self.addItem(widget.widgetItem()) + self.insertWidget(len(self._items),widget) + + def insertWidget(self, index, widget): + if widget.parentWidget() and widget.parentWidget().layout(): + widget.parentWidget().layout().removeWidget(self) + self.insertItem(index, widget.widgetItem()) def removeItem(self, item): if item in self._items: diff --git a/TermTk/TTkWidgets/Fancy/tableview.py b/TermTk/TTkWidgets/Fancy/tableview.py index ff7a58fc..16b4fdb7 100644 --- a/TermTk/TTkWidgets/Fancy/tableview.py +++ b/TermTk/TTkWidgets/Fancy/tableview.py @@ -163,7 +163,7 @@ class _TTkFancyTableView(TTkAbstractScrollView): size = sizes[iw] if widget is not None: if widget.parentWidget() != self: - self.addWidget(widget) + self.layout().addWidget(widget) widget.setGeometry(x,y,size,1) widget.show() self._shownWidgets.append(widget) diff --git a/TermTk/TTkWidgets/listwidget.py b/TermTk/TTkWidgets/listwidget.py index cca0bd95..d4616213 100644 --- a/TermTk/TTkWidgets/listwidget.py +++ b/TermTk/TTkWidgets/listwidget.py @@ -189,7 +189,7 @@ class TTkListWidget(TTkAbstractScrollView): return self.addItemAt(label,pos) # item.listItemClicked.connect(self._labelSelectedHandler) self._items.insert(pos,item) - self.addWidget(item) + self.layout().addWidget(item) self._placeItems() def indexOf(self, item): diff --git a/TermTk/TTkWidgets/splitter.py b/TermTk/TTkWidgets/splitter.py index e24aafbf..6a871e34 100644 --- a/TermTk/TTkWidgets/splitter.py +++ b/TermTk/TTkWidgets/splitter.py @@ -49,8 +49,16 @@ class TTkSplitter(TTkFrame): self.setFocusPolicy(TTkK.ClickFocus) self._splitterInitialized = True - def addWidget(self, widget, size=None): - TTkFrame.addWidget(self, widget) + class _SplitterLayout(TTkLayout): + def addWidget(s, *args, **kwargs): + TTkLayout.addWidget(s, *args, **kwargs) + self._addWidget(*args, **kwargs) + self.setLayout(_SplitterLayout()) + + def orientation(self): + return self._orientation + + def _addWidget(self, widget, size=None): _,_,w,h = self.geometry() if self.border(): w-=2 diff --git a/TermTk/TTkWidgets/tabwidget.py b/TermTk/TTkWidgets/tabwidget.py index 47cca42d..4063ae8f 100644 --- a/TermTk/TTkWidgets/tabwidget.py +++ b/TermTk/TTkWidgets/tabwidget.py @@ -240,8 +240,8 @@ class TTkTabBar(TTkWidget): # Add and connect the scrollers - self.addWidget(self._leftScroller) - self.addWidget(self._rightScroller) + self.layout().addWidget(self._leftScroller) + self.layout().addWidget(self._rightScroller) # Signals self.currentChanged = pyTTkSignal(int) @@ -270,7 +270,7 @@ class TTkTabBar(TTkWidget): def removeTab(self, index): button = self._tabButtons[index] - self.removeWidget(button) + self.layout().removeWidget(button) self._tabButtons = self._tabButtons[:index] + self._tabButtons[index+1:] if self._currentIndex == index: self._lastIndex = -1 @@ -568,11 +568,11 @@ class TTkTabWidget(TTkFrame): def insertTab(self, index, widget, label): widget.hide() self._tabWidgets.insert(index, widget) - self.addWidget(widget) + self.layout().addWidget(widget) self._tabBar.insertTab(index, label) def removeTab(self, index): - self.removeWidget(self._tabWidgets[index]) + self.layout().removeWidget(self._tabWidgets[index]) self._tabWidgets = self._tabWidgets[:index] + self._tabWidgets[index+1:] self._tabBar.removeTab(index) diff --git a/TermTk/TTkWidgets/widget.py b/TermTk/TTkWidgets/widget.py index 5dc58468..5acd4804 100644 --- a/TermTk/TTkWidgets/widget.py +++ b/TermTk/TTkWidgets/widget.py @@ -144,8 +144,8 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents): height = self._height ) - if self._parent is not None: - self._parent.addWidget(self) + if self._parent and self._parent.layout(): + self._parent.layout().addWidget(self) self._parent.update(repaint=True, updateLayout=True) self.update(repaint=True, updateLayout=True) @@ -153,34 +153,12 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents): def __del__(self): ''' .. caution:: Don't touch this! ''' # TTkLog.debug("DESTRUCTOR") - if self._parent is not None: - self._parent.removeWidget(self) + if self._parent and self._parent.layout(): + self._parent.layout().removeWidget(self) self._parent = None def widgetItem(self): return self._widgetItem - def addWidget(self, widget): - ''' Add a child widget to the layout - - :param widget: the widget to be added - :type widget: :class:`~TermTk.TTkWidgets.widget.TTkWidget` - ''' - widget._parent = self - if self.layout(): - self.layout().addWidget(widget) - self.update(repaint=True, updateLayout=True) - # widget.show() - - def removeWidget(self, widget): - ''' Remove the child widget from the layout - - :param widget: (:class:`~TermTk.TTkWidgets.widget.TTkWidget`): the widget to be removed - ''' - if self.layout() is not None: - self.layout().removeWidget(widget) - self.update(repaint=True, updateLayout=True) - #widget._parent = None - def paintEvent(self): ''' Paint Event callback, diff --git a/demo/demo.py b/demo/demo.py index 85ad49ed..cdf107f2 100755 --- a/demo/demo.py +++ b/demo/demo.py @@ -232,7 +232,7 @@ def main(): ttk.TTkLog.use_default_file_logging() - root = ttk.TTk() + root = ttk.TTk(title="pyTermTk Demo") if args.f: root.setLayout(ttk.TTkGridLayout()) winTabbed1 = root diff --git a/demo/showcase/dragndrop.py b/demo/showcase/dragndrop.py index df8f120f..4f370613 100755 --- a/demo/showcase/dragndrop.py +++ b/demo/showcase/dragndrop.py @@ -62,7 +62,7 @@ class DropThings(ttk.TTkFrame): ttk.TTkLog.debug(f"Drop ({self.title()}) -> pos={evt.pos()}") data = evt.data() if issubclass(type(data),TTkWidget): - self.addWidget(data) + self.layout().addWidget(data) data.move(evt.x,evt.y) self.update() return True