|
|
|
|
@ -32,28 +32,47 @@ from TermTk.TTkWidgets.listwidget import TTkListWidget, TTkAbstractListItem
|
|
|
|
|
from TermTk.TTkLayouts.layout import TTkLayout |
|
|
|
|
from TermTk.TTkLayouts.boxlayout import TTkHBoxLayout |
|
|
|
|
|
|
|
|
|
class _TTkMenuSpacer(TTkWidget): |
|
|
|
|
__slots__ = ('clicked') |
|
|
|
|
|
|
|
|
|
class _TTkMenuListWidget(TTkListWidget): |
|
|
|
|
__slots__ = ('_previous') |
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
TTkListWidget.__init__(self, *args, **kwargs) |
|
|
|
|
self._name = kwargs.get('name' , '_TTkMenuListWidget' ) |
|
|
|
|
self._previous = kwargs.get('previous',None) |
|
|
|
|
|
|
|
|
|
def keyEvent(self, evt): |
|
|
|
|
if evt.type == TTkK.SpecialKey: |
|
|
|
|
if evt.key == TTkK.Key_Left: |
|
|
|
|
TTkHelper.removeSingleOverlay(self) |
|
|
|
|
if self._previous: |
|
|
|
|
self._previous.setFocus() |
|
|
|
|
return True |
|
|
|
|
elif evt.key == TTkK.Key_Right: |
|
|
|
|
if self._highlighted and \ |
|
|
|
|
self._highlighted._menu: |
|
|
|
|
self._highlighted.menuButtonEvent() |
|
|
|
|
return True |
|
|
|
|
return TTkListWidget.keyEvent(self, evt) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _TTkMenuSpacer(TTkAbstractListItem): |
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
TTkWidget.__init__(self, *args, **kwargs) |
|
|
|
|
TTkAbstractListItem.__init__(self, *args, **kwargs) |
|
|
|
|
self._name = kwargs.get('name' , '_TTkMenuSpacer' ) |
|
|
|
|
# Define Signals |
|
|
|
|
self.clicked = pyTTkSignal() |
|
|
|
|
self.resize(1,1) |
|
|
|
|
#self.setMinimumHeight(1) |
|
|
|
|
|
|
|
|
|
def paintEvent(self): |
|
|
|
|
TTkLog.debug("pippo") |
|
|
|
|
self._canvas.drawText(pos=(0,0), text="-"*self.width()) |
|
|
|
|
|
|
|
|
|
class _TTkMenuButton(TTkAbstractListItem): |
|
|
|
|
__slots__ = ('_color', '_borderColor', '_shortcut', '_menu', 'menuButtonClicked') |
|
|
|
|
__slots__ = ('_border', '_borderColor', '_shortcut', '_menu', 'menuButtonClicked') |
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
TTkAbstractListItem.__init__(self, *args, **kwargs) |
|
|
|
|
self._name = kwargs.get('name' , '_TTkMenuButton' ) |
|
|
|
|
# signals |
|
|
|
|
self.menuButtonClicked = pyTTkSignal(TTkButton) |
|
|
|
|
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._shortcut = [] |
|
|
|
|
self._menu = [] |
|
|
|
|
@ -94,7 +113,7 @@ class _TTkMenuButton(TTkAbstractListItem):
|
|
|
|
|
#self._id = self._list.index(label) |
|
|
|
|
TTkLog.debug(f"Bind Clicked {button._text}") |
|
|
|
|
self.menuButtonClicked.emit(button) |
|
|
|
|
self.setFocus() |
|
|
|
|
TTkHelper.removeOverlay() |
|
|
|
|
self.update() |
|
|
|
|
|
|
|
|
|
@pyTTkSlot(TTkAbstractListItem) |
|
|
|
|
@ -118,20 +137,22 @@ class _TTkMenuButton(TTkAbstractListItem):
|
|
|
|
|
else: |
|
|
|
|
frame = TTkResizableFrame(layout=TTkHBoxLayout(), size=(frameWidth,frameHeight), title=self._text, titleAlign=TTkK.LEFT_ALIGN) |
|
|
|
|
pos = (-1, 0) |
|
|
|
|
listw = TTkList(parent=frame) |
|
|
|
|
menuListWidget = _TTkMenuListWidget(previous=self) |
|
|
|
|
listw = TTkList(parent=frame, listWidget = menuListWidget) |
|
|
|
|
# listw.textClicked.connect(self._menuCallback) |
|
|
|
|
# listw.textClicked.connect(self._menuCallback) |
|
|
|
|
TTkLog.debug(f"{self._menu}") |
|
|
|
|
for item in self._menu: |
|
|
|
|
listw.addItem(item) |
|
|
|
|
TTkHelper.overlay(self, frame, pos[0], pos[1]) |
|
|
|
|
listw.viewport().setFocus() |
|
|
|
|
self.update() |
|
|
|
|
|
|
|
|
|
def paintEvent(self): |
|
|
|
|
if self._pressed: |
|
|
|
|
borderColor = self._borderColor |
|
|
|
|
textColor = TTkCfg.theme.menuButtonColorClicked |
|
|
|
|
scColor = TTkCfg.theme.menuButtonShortcutColor |
|
|
|
|
scColor = TTkCfg.theme.menuButtonShortcutColor |
|
|
|
|
else: |
|
|
|
|
borderColor = self._borderColor |
|
|
|
|
textColor = self._color |
|
|
|
|
@ -146,6 +167,12 @@ class _TTkMenuButton(TTkAbstractListItem):
|
|
|
|
|
borderColor=borderColor, |
|
|
|
|
shortcutColor=scColor ) |
|
|
|
|
|
|
|
|
|
def focusInEvent(self): |
|
|
|
|
self.highlighted=True |
|
|
|
|
|
|
|
|
|
def focusOutEvent(self): |
|
|
|
|
self.highlighted=False |
|
|
|
|
|
|
|
|
|
class TTkMenuLayout(TTkHBoxLayout): |
|
|
|
|
__slots__ = ('_itemsLeft', '_itemsCenter', '_itemsRight', '_buttons') |
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
|