Browse Source

Added menu in kodetab

pull/174/head
Eugenio Parodi 3 years ago
parent
commit
9dcdfe2142
  1. 36
      TermTk/TTkWidgets/kodetab.py
  2. 11
      demo/ttkode.py

36
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 x<w//4:
_processDrop(index, TTkK.HORIZONTAL, 0)
elif x>w*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)

11
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")
)

Loading…
Cancel
Save