|
|
|
|
@ -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) |
|
|
|
|
|