Browse Source

reworked the TTkMenuBarButton to be a subclass of TTkMenuButton

pull/146/head
Eugenio Parodi 3 years ago
parent
commit
7bb7f9c0fa
  1. 83
      TermTk/TTkWidgets/menubar.py
  2. 11
      TermTk/TTkWidgets/tabwidget.py

83
TermTk/TTkWidgets/menubar.py

@ -27,25 +27,23 @@ from TermTk.TTkCore.helper import TTkHelper
from TermTk.TTkCore.color import TTkColor
from TermTk.TTkCore.log import TTkLog
from TermTk.TTkCore.signal import pyTTkSignal, pyTTkSlot
from TermTk.TTkCore.string import TTkString
from TermTk.TTkWidgets.button import TTkButton
from TermTk.TTkWidgets.listwidget import TTkListWidget, TTkAbstractListItem
from TermTk.TTkLayouts.layout import TTkLayout
from TermTk.TTkLayouts.boxlayout import TTkHBoxLayout
from TermTk.TTkWidgets.menu import TTkMenu, TTkMenuButton, _TTkMenuSpacer
class TTkMenuBarButton(TTkAbstractListItem):
'''TTkMenuButton'''
__slots__ = ('_border', '_borderColor', '_shortcut', '_menu', 'menuButtonClicked', '_menuOffset')
def __init__(self, *args, **kwargs):
TTkAbstractListItem.__init__(self, *args, **kwargs)
# signals
self.menuButtonClicked = pyTTkSignal(TTkMenuButton)
self._color = kwargs.get('color', TTkCfg.theme.menuButtonColor )
self._border = kwargs.get('border', TTkCfg.theme.menuButtonColor )
self._borderColor = kwargs.get('borderColor', TTkCfg.theme.menuButtonBorderColor )
self._menuOffset = kwargs.get('menuOffset', (-1,0) )
class TTkMenuBarButton(TTkMenuButton):
classStyle = TTkMenuButton.classStyle | {
'default': TTkMenuButton.classStyle['default'] | {'borderColor':TTkColor.RST, 'shortcutColor': TTkColor.fg("#dddddd") + TTkColor.UNDERLINE},
'clicked': TTkMenuButton.classStyle['clicked'] | {'color': TTkColor.fg("#ffff88")},
}
__slots__=('_shortcut')
def __init__(self, *, text=..., data=None, checkable=False, checked=False, **kwargs):
self._shortcut = []
self._menu = []
super().__init__(text=text, data=data, checkable=checkable, checked=checked, **kwargs)
while self.text().find('&') != -1:
index = self.text().find('&')
shortcut = self.text().charAt(index+1)
@ -53,71 +51,30 @@ class TTkMenuBarButton(TTkAbstractListItem):
self._shortcut.append(index)
self.setText(self.text().substring(to=index)+self.text().substring(fr=index+1))
txtlen = self.text().termWidth()
self.resize(txtlen,1)
self.resize(txtlen+2,1)
self.setMinimumSize(txtlen+2,1)
self.setMaximumSize(txtlen+2,1)
self.listItemClicked.connect(self.menuButtonEvent)
def addMenu(self, text, data:object=None, checkable:bool=False, checked:bool=False):
'''addMenu'''
button = TTkMenuButton(text=text, data=data, checkable=checkable, checked=checked)
self._menu.append(button)
return button
def addSpacer(self):
'''addSpacer'''
self._menu.append(_TTkMenuSpacer())
def setColor(self, color):
self._color = color
self.update()
def setBorderColor(self, color):
self._borderColor = color
self.update()
def shortcutEvent(self):
self.menuButtonEvent()
@pyTTkSlot(TTkAbstractListItem)
def menuButtonEvent(self, listItem=None):
if not self._menu:
self.menuButtonClicked.emit(self)
return
width = 3+max((len(smb._text) + (2 if smb._submenu else 0)) for smb in self._menu if type(smb) is TTkMenuButton)
height = len(self._menu)+2
subMenu = TTkMenu(pos=(8,6), size=(width,height), title=self.text(), titleAlign=TTkK.LEFT_ALIGN)
for smb in self._menu:
subMenu.addMenuItem(smb)
TTkHelper.overlay(self, subMenu, -1, 0)
self.update()
style = self.style()
style['default'] |= {'borderColor':color}
self.setStyle(style)
def paintEvent(self, canvas):
if self._pressed:
borderColor = self._borderColor
textColor = TTkCfg.theme.menuButtonColorClicked
scColor = TTkCfg.theme.menuButtonShortcutColor
else:
borderColor = self._borderColor
textColor = self._color
scColor = TTkCfg.theme.menuButtonShortcutColor
style = self.currentStyle()
borderColor = style['borderColor']
textColor = style['color']
scColor = style['shortcutColor']
canvas.drawMenuBarButton(
pos=(0,0),text=self.text(),
width=self.width(),
shortcuts=self._shortcut,
border=self._border,
submenu=len(self._menu)>0,
border=True,
submenu=len(self._submenu)>0,
color=textColor,
borderColor=borderColor,
shortcutColor=scColor )
def focusInEvent(self):
self.highlighted=True
def focusOutEvent(self):
self.highlighted=False
class TTkMenuBarLayout(TTkHBoxLayout):
'''TTkMenuBarLayout'''
__slots__ = ('_borderColor', '_itemsLeft', '_itemsCenter', '_itemsRight', '_buttons')

11
TermTk/TTkWidgets/tabwidget.py

@ -135,14 +135,9 @@ class _TTkTabMenuButton(TTkMenuBarButton):
super().__init__(*args, **kwargs)
def paintEvent(self, canvas):
if self._pressed:
borderColor = self._borderColor
textColor = TTkCfg.theme.menuButtonColorClicked
# scColor = TTkCfg.theme.menuButtonShortcutColor
else:
borderColor = self._borderColor
textColor = self._color
# scColor = TTkCfg.theme.menuButtonShortcutColor
style = self.currentStyle()
borderColor = style['borderColor']
textColor = style['color']
text = TTkString('[',borderColor) + TTkString(self.text(),textColor) + TTkString(']',borderColor)
canvas.drawText(pos=(0,0),text=text)

Loading…
Cancel
Save