Browse Source

TTkTabWidget: Finalised the menubuttons

pull/36/head
Eugenio Parodi 4 years ago
parent
commit
06357ceebb
  1. 55
      TermTk/TTkWidgets/tabwidget.py
  2. 14
      demo/demo.py

55
TermTk/TTkWidgets/tabwidget.py

@ -28,6 +28,7 @@
from TermTk.TTkCore.constant import TTkConstant, TTkK
from TermTk.TTkCore.log import TTkLog
from TermTk.TTkCore.cfg import *
from TermTk.TTkCore.string import TTkString
from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
from TermTk.TTkWidgets.widget import TTkWidget
from TermTk.TTkWidgets.spacer import TTkSpacer
@ -85,22 +86,9 @@ class TTkTabButton(TTkButton):
self._canvas.drawText(pos=(1,1 if self._border else 0), text=self.text, color=self.color())
class _TTkTabMenuButton(TTkMenuButton):
__slots__ = ('_sideBorder', '_tabPosition')
def __init__(self, *args, **kwargs):
self._sideBorder = TTkK.NONE
self._tabPosition = kwargs.get('tabPosition', TTkK.LEFT)
TTkMenuButton.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , '_TTkTabMenuButton')
txtlen = len(self.text)
self.setMinimumSize(txtlen+1,0x2)
self.setMaximumSize(txtlen+1,0x1000)
def setSideBorder(self, border):
self._sideBorder |= border
def unsetSideBorder(self, border):
self._sideBorder &= ~border
def paintEvent(self):
if self._pressed:
@ -111,17 +99,8 @@ class _TTkTabMenuButton(TTkMenuButton):
borderColor = self._borderColor
textColor = self._color
scColor = TTkCfg.theme.menuButtonShortcutColor
if self._tabPosition == TTkK.LEFT:
text = f" {self.text}"
else:
text = f"{self.text} "
self._canvas.drawTabMenuButton(
pos=(0,0),text=text,
slim=(self._height==2),
size=self.size(),
color=textColor,
borderColor=borderColor,
sideBorder = self._sideBorder)
text = TTkString('[',borderColor) + TTkString(self.text,textColor) + TTkString(']',borderColor)
self._canvas.drawText(pos=(0,0),text=text)
class _TTkTabScrollerButton(TTkButton):
__slots__ = ('_side', '_sideEnd')
@ -221,7 +200,6 @@ class TTkTabBar(TTkWidget):
self._rightScroller = _TTkTabScrollerButton(border=not self._small,side=TTkK.RIGHT)
self._leftScroller.clicked.connect( self._moveToTheLeft)
self._rightScroller.clicked.connect(self._andMoveToTheRight)
self._sideBorder = TTkK.LEFT | TTkK.RIGHT
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , '_TTkTabs')
@ -264,12 +242,6 @@ class TTkTabBar(TTkWidget):
self._borderColor = color
self.update()
def setSideBorder(self, border):
self._sideBorder |= border
def unsetSideBorder(self, border):
self._sideBorder &= ~border
def currentIndex(self):
return self._currentIndex
@ -439,7 +411,7 @@ class TTkTabWidget(TTkFrame):
self._tabBar = TTkTabBar(small = not self.border())
self._topLeftLayout = None
self._topRightLayout = None
self._tabBarTopLayout.addWidget(self._tabBar,0,1)
self._tabBarTopLayout.addWidget(self._tabBar,0,1,3 if self.border() else 2,1)
self._tabBar.currentChanged.connect(self._tabChanged)
self._tabBar.focusChanged.connect(self._focusChanged)
@ -482,24 +454,18 @@ class TTkTabWidget(TTkFrame):
self.setBorderColor(TTkCfg.theme.tabBorderColor)
def addMenu(self, text, position=TTkK.LEFT):
button = _TTkTabMenuButton(text=text, borderColor=TTkCfg.theme.tabBorderColor, menuOffset=(-1,1) if self.border() else (-1,0) , tabPosition=position)
button.focusChanged.connect(self._focusChanged)
button = _TTkTabMenuButton(text=text, borderColor=TTkCfg.theme.tabBorderColor)
self._tabBar.setSideEnd(self._tabBar.sideEnd() & ~position)
if position==TTkK.LEFT:
if not self._topLeftLayout:
self._topLeftLayout = TTkHBoxLayout()
self._tabBarTopLayout.addItem(self._topLeftLayout,0,0)
button.setSideBorder(TTkK.LEFT)
self._tabBarTopLayout.addItem(self._topLeftLayout,1 if self.border() else 0,0)
layout = self._topLeftLayout
else:
if not self._topRightLayout:
self._topRightLayout = TTkHBoxLayout()
self._tabBarTopLayout.addItem(self._topRightLayout,0,2)
self._tabBarTopLayout.addItem(self._topRightLayout,1 if self.border() else 0,2)
layout = self._topRightLayout
button.setSideBorder(TTkK.RIGHT)
for b in self._topRightLayout.iterWidgets(onlyVisible=False):
b.unsetSideBorder(TTkK.RIGHT)
self._tabBar.unsetSideBorder(position)
layout.addWidget(button)
return button
@ -518,4 +484,9 @@ class TTkTabWidget(TTkFrame):
def resizeEvent(self, w, h):
self._tabBarTopLayout.setGeometry(0,0,w,self._padt)
#def paintEvent(self): pass
def paintEvent(self):
tt = TTkCfg.theme.tab
if self.border():
self._canvas.drawBox(pos=(0,2),size=(self.width(),self.height()-2), color=self._borderColor, grid=9)
else:
self._canvas.drawText(pos=(0,1),text=tt[23] + tt[19]*(self.width()-2) + tt[24], color=self._borderColor)

14
demo/demo.py

@ -140,13 +140,13 @@ def demoShowcase(root=None, border=True):
'showcase/layout_nested.py',
'showcase/layout_span.py',
'showcase/splitter.py' ]
tabLayouts.addMenu("[Sources]", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabLayoutsSources[tabLayouts.currentIndex()]))
tabLayouts.addMenu("sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabLayoutsSources[tabLayouts.currentIndex()]))
listMenu.addItem(f"MenuBar")
tabMenuBar = ttk.TTkTabWidget(parent=mainFrame, border=False, visible=False)
tabMenuBar.addTab(demoMenuBar(), " MenuBar Test ")
tabMenuBarSources = [ 'showcase/menubar.py' ]
tabMenuBar.addMenu("[Sources]", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabMenuBarSources[tabMenuBar.currentIndex()]))
tabMenuBar.addMenu("sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabMenuBarSources[tabMenuBar.currentIndex()]))
listMenu.addItem(f"Widgets")
tabWidgets = ttk.TTkTabWidget(parent=mainFrame, border=False, visible=False)
@ -165,7 +165,7 @@ def demoShowcase(root=None, border=True):
'showcase/tab.py',
'showcase/fancytable.py',
'showcase/fancytree.py' ]
tabWidgets.addMenu("[Sources]", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabWidgetsSources[tabWidgets.currentIndex()]))
tabWidgets.addMenu("sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabWidgetsSources[tabWidgets.currentIndex()]))
listMenu.addItem(f"Pickers")
tabPickers = ttk.TTkTabWidget(parent=mainFrame, border=False, visible=False)
@ -174,19 +174,19 @@ def demoShowcase(root=None, border=True):
tabPickersSources = [
'showcase/filepicker.py',
'showcase/colorpicker.py' ]
tabPickers.addMenu("[Sources]", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabPickersSources[tabPickers.currentIndex()]))
tabPickers.addMenu("sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabPickersSources[tabPickers.currentIndex()]))
listMenu.addItem(f"Graphs")
tabGraphs = ttk.TTkTabWidget(parent=mainFrame, border=False, visible=False)
tabGraphs.addTab(demoGraph(), " Graph Test ")
tabGraphsSources = [ 'showcase/graph.py' ]
tabGraphs.addMenu("[Sources]", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabGraphsSources[tabGraphs.currentIndex()]))
tabGraphs.addMenu("sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabGraphsSources[tabGraphs.currentIndex()]))
listMenu.addItem(f"Windows")
tabWindows = ttk.TTkTabWidget(parent=mainFrame, border=False, visible=False)
tabWindows.addTab(demoWindows(), " Windows Test ")
tabWindowsSources = [ 'showcase/windows.py' ]
tabWindows.addMenu("[Sources]", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabWindowsSources[tabWindows.currentIndex()]))
tabWindows.addMenu("sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabWindowsSources[tabWindows.currentIndex()]))
listMenu.addItem(f"Extra")
tabArea = ttk.TTkTabWidget(parent=mainFrame, border=False, visible=False)
@ -195,7 +195,7 @@ def demoShowcase(root=None, border=True):
tabAreaSources = [
'showcase/scrollarea.py',
'showcase/dragndrop.py' ]
tabArea.addMenu("[Sources]", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabAreaSources[tabArea.currentIndex()]))
tabArea.addMenu("sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : showSource(tabAreaSources[tabArea.currentIndex()]))
@ttk.pyTTkSlot(str)

Loading…
Cancel
Save