From 06357ceebb2c2d1702fd5294b3cbd97337d1492b Mon Sep 17 00:00:00 2001 From: Eugenio Parodi Date: Thu, 31 Mar 2022 23:49:17 +0100 Subject: [PATCH] TTkTabWidget: Finalised the menubuttons --- TermTk/TTkWidgets/tabwidget.py | 55 ++++++++-------------------------- demo/demo.py | 14 ++++----- 2 files changed, 20 insertions(+), 49 deletions(-) diff --git a/TermTk/TTkWidgets/tabwidget.py b/TermTk/TTkWidgets/tabwidget.py index 07d3d7e6..ec132bce 100644 --- a/TermTk/TTkWidgets/tabwidget.py +++ b/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) diff --git a/demo/demo.py b/demo/demo.py index 45024617..8b831c54 100755 --- a/demo/demo.py +++ b/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)