diff --git a/TermTk/TTkWidgets/kodetab.py b/TermTk/TTkWidgets/kodetab.py index d1deea1d..2cc2f9c9 100644 --- a/TermTk/TTkWidgets/kodetab.py +++ b/TermTk/TTkWidgets/kodetab.py @@ -25,6 +25,7 @@ __all__ = ['TTkKodeTab'] from TermTk.TTkCore.constant import TTkK from TermTk.TTkCore.helper import TTkHelper from TermTk.TTkCore.log import TTkLog +from TermTk.TTkCore.string import TTkString from TermTk.TTkCore.color import TTkColor, TTkColorGradient from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal from TermTk.TTkWidgets.widget import TTkWidget @@ -60,6 +61,23 @@ class _TTkKodeTab(TTkTabWidget): self.tabCloseRequested.connect(lambda i:self._baseWidget.tabCloseRequested.emit(self, i)) self.tabCloseRequested.connect( self._kodeTabClosed) + def _hasMenu(self): + return True if (self._topLeftLayout or self._topRightLayout) else False + + def _importMenu(self, kt): + kt._tabBarTopLayout.removeItem(ll := kt._topLeftLayout) + kt._tabBarTopLayout.removeItem(rl := kt._topRightLayout) + kt._topLeftLayout = None + kt._topRightLayout = None + self._topLeftLayout = ll + self._topRightLayout = rl + if ll: + self._tabBarTopLayout.addItem(ll, 1 if self.border() else 0,0) + if rl: + self._tabBarTopLayout.addItem(rl,1 if self.border() else 0,2) + self._tabBarTopLayout.update() + kt._tabBarTopLayout.update() + def dragEnterEvent(self, evt) -> bool: TTkLog.debug(f"leave") return True @@ -108,6 +126,7 @@ class _TTkKodeTab(TTkTabWidget): widget = tw._tabWidgets[index] def _processDrop(index, orientation, offset): + fwold = self._baseWidget._getFirstWidget() tw.removeTab(index) splitter = self.parentWidget() index = splitter.indexOf(self) @@ -117,6 +136,8 @@ class _TTkKodeTab(TTkTabWidget): index=offset splitter.insertWidget(index+offset, kt:=_TTkKodeTab(baseWidget=self._baseWidget, border=self.border(), closable=self.tabsClosable())) kt.addTab(widget,tb.text()) + if fwold!=(fwnew := self._baseWidget._getFirstWidget()) and fwold._hasMenu(): + fwnew._importMenu(fwold) if xw*3//4: @@ -136,6 +157,7 @@ class _TTkKodeTab(TTkTabWidget): @pyTTkSlot() def _kodeTabClosed(self, widget=None): # Remove the widget and/or all the cascade empty splitters + fwold = self._baseWidget._getFirstWidget() widget = widget if type(widget) is _TTkKodeTab else self if not widget._tabWidgets: if splitter := widget.parentWidget(): @@ -145,6 +167,8 @@ class _TTkKodeTab(TTkTabWidget): splitter.removeWidget(widget) if splitter == self._baseWidget and splitter.count() == 0: splitter.addWidget(self) + if fwold!=(fwnew := self._baseWidget._getFirstWidget()) and fwold._hasMenu(): + fwnew._importMenu(fwold) # Stupid hack to paint on top of the child widgets def paintChildCanvas(self): @@ -171,6 +195,12 @@ class TTkKodeTab(TTkSplitter): self._lastKodeTabWidget = _TTkKodeTab(baseWidget=self, **kwargs) self.addWidget(self._lastKodeTabWidget) + def _getFirstWidget(self): + kt = self + item = None + while type(item:=kt.widget(0)) != _TTkKodeTab: kt = item + return item if type(item)==_TTkKodeTab else None + @pyTTkSlot(TTkWidget) def setCurrentWidget(self, *args, **kwargs): return self._lastKodeTabWidget.setCurrentWidget(*args, **kwargs) @@ -183,3 +213,9 @@ class TTkKodeTab(TTkSplitter): return self._lastKodeTabWidget.addTab(*args, **kwargs) raise Exception("No TTkKodeTab found to be used") return self._lastKodeTabWidget.addTab(*args, **kwargs) + + # def addMenu(self, text, position=TTkK.LEFT, data=None): + def addMenu(self, text:TTkString, data:object=None, checkable:bool=False, checked:bool=False, position=TTkK.LEFT): + '''addMenu''' + # return self._lastKodeTabWidget.addMenu(text=text, data=data, checkable=checkable, checked=checked, position=position) + return self._lastKodeTabWidget.addMenu(text=text, data=data, position=position) diff --git a/demo/ttkode.py b/demo/ttkode.py index e75fa81b..e20ec393 100755 --- a/demo/ttkode.py +++ b/demo/ttkode.py @@ -85,6 +85,17 @@ def main(): kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#888888", modifier=TTkColorGradient(increment=-6)), title="sette"),"sette") kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#444444", modifier=TTkColorGradient(increment= 3)), title="otto"),"otto") + m1 = kt.addMenu('Test1') + m2 = kt.addMenu('Test2') + + m1.addMenu("Open",checkable=True) + m1.addMenu("Save",checkable=True,checked=True) + m1.addMenu("Save as").setDisabled() + + m2.addMenu("m2 Open",checkable=True) + m2.addMenu("m2 Save",checkable=True,checked=True) + m2.addMenu("m2 Save as").setDisabled() + fileTree.fileActivated.connect(lambda item:kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#888888", modifier=TTkColorGradient(increment=-6)), title=item.path()),"File") )