def menuButtonEvent(self, listItem=None): if not self._menu: self.menuButtonClicked.emit(self) return # Import here to avoid circular import from TermTk.TTkWidgets.list_ import TTkList from TermTk.TTkWidgets.resizableframe import TTkResizableFrame # Stupid way to find out if I am a submenu isSubmenu = not self._border frameHeight = len(self._menu) + 2 frameWidth = self.width() if frameHeight > 15: frameHeight = 15 if frameWidth < 15: frameWidth = 15 if isSubmenu: frame = TTkResizableFrame(layout=TTkHBoxLayout(), size=(frameWidth, frameHeight)) pos = (self.width(), -1) else: frame = TTkResizableFrame(layout=TTkHBoxLayout(), size=(frameWidth, frameHeight), title=self.text, titleAlign=TTkK.LEFT_ALIGN) pos = self._menuOffset menuListWidget = _TTkMenuListWidget() 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 clearFocus(self): # TTkLog.debug(f"clearFocus: {self._name} - {self._focus}") if not self._focus and self != TTkHelper.getFocus(): return TTkHelper.clearFocus() self._focus = False self.focusChanged.emit(self._focus) self.focusOutEvent() self.update(repaint=True, updateLayout=False)
def _colorClicked(self): colorPicker = TTkColorDialogPicker(pos=(3, 3), size=(75, 24), color=self._textColor, title="Test Color Picker", border=True) colorPicker.colorSelected.connect(self.setColor) colorPicker.colorSelected.connect(self.colorSelected.emit) TTkHelper.overlay(self, colorPicker, -1, -1)
def keyEvent(self, evt): if evt.type == TTkK.SpecialKey: if evt.key == TTkK.Key_Left: TTkHelper.removeOverlayAndChild(self) if self._previous: self._previous.setFocus() return True elif evt.key == TTkK.Key_Right: if self._highlighted and \ isinstance(self._highlighted,TTkMenuButton) and \ self._highlighted._menu: self._highlighted.menuButtonEvent() return True return TTkListWidget.keyEvent(self, evt)
def update(self, repaint=True, updateLayout=False, updateParent=False): if repaint: TTkHelper.addUpdateBuffer(self) TTkHelper.addUpdateWidget(self) if updateLayout and self.rootLayout() is not None: self.rootLayout().setGeometry(0, 0, self._width, self._height) self.layout().setGeometry(self._padl, self._padt, self._width - self._padl - self._padr, self._height - self._padt - self._padb) if updateParent and self._parent is not None: self._parent.update(updateLayout=True) if updateLayout and self.rootLayout() is not None: if self.rootLayout().update(): self.layoutUpdated()
def loadTheme(theme): TTkTheme.hline = theme['draw'].TTkTheme.hline TTkTheme.vline = theme['draw'].TTkTheme.vline TTkTheme.box = theme['draw'].TTkTheme.box TTkTheme.grid = theme['draw'].TTkTheme.grid TTkTheme.buttonBox = theme['draw'].TTkTheme.buttonBox TTkTheme.hscroll = theme['draw'].TTkTheme.hscroll TTkTheme.vscroll = theme['draw'].TTkTheme.vscroll TTkTheme.tree = theme['draw'].TTkTheme.tree TTkTheme.menuBar = theme['draw'].TTkTheme.menuBar TTkTheme.tab = theme['draw'].TTkTheme.tab TTkTheme.braille = theme['draw'].TTkTheme.braille TTkTheme.fileIcon = theme['file'].FileIcon TTkHelper.updateAll()
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._menuOffset = kwargs.get('menuOffset', (-1, 0)) self._shortcut = [] self._menu = [] while self.text.find('&') != -1: index = self.text.find('&') shortcut = self.text[index + 1] TTkHelper.addShortcut(self, shortcut) self._shortcut.append(index) self.text = self.text[:index] + self.text[index + 1:] txtlen = len(self.text) self.resize(txtlen, 1) self.setMinimumSize(txtlen + 2, 1) self.setMaximumSize(txtlen + 2, 1) self.listItemClicked.connect(self.menuButtonEvent)
def setFocus(self): # TTkLog.debug(f"setFocus: {self._name} - {self._focus}") if self._focus and self == TTkHelper.getFocus(): return tmp = TTkHelper.getFocus() if tmp == self: return if tmp is not None: tmp.clearFocus() #if not TTkHelper.isOverlay(self): # TTkHelper.removeOverlay(refocus=False) TTkHelper.removeOverlayChild(self) TTkHelper.setFocus(self) self._focus = True self.focusChanged.emit(self._focus) self.focusInEvent()
def __init__(self, *args, **kwargs): TTkListWidget.__init__(self, *args, **kwargs) self._name = kwargs.get('name', '_TTkMenuListWidget') self._previous = kwargs.get('previous', TTkHelper.getFocus())
def _menuCallback(self, button): #self._id = self._list.index(label) TTkLog.debug(f"Bind Clicked {button.text}") self.menuButtonClicked.emit(button) TTkHelper.removeOverlay() self.update()
def close(self): if self._parent is not None and \ self._parent.rootLayout() is not None: self._parent.rootLayout().removeWidget(self) TTkHelper.removeOverlayAndChild(self)