Browse Source

Added focusChanged Event, propagate the border color to the tab widgets

pull/15/head
Eugenio Parodi 5 years ago
parent
commit
3088728784
  1. 5
      TermTk/TTkWidgets/menubar.py
  2. 72
      TermTk/TTkWidgets/tabwidget.py
  3. 53
      TermTk/TTkWidgets/widget.py
  4. 16
      demo/showcase/tab.py

5
TermTk/TTkWidgets/menubar.py

@ -66,7 +66,7 @@ class _TTkMenuSpacer(TTkAbstractListItem):
self._canvas.drawText(pos=(0,0), text="-"*self.width())
class TTkMenuButton(TTkAbstractListItem):
__slots__ = ('_border', '_borderColor', '_shortcut', '_menu', 'menuButtonClicked')
__slots__ = ('_border', '_borderColor', '_shortcut', '_menu', 'menuButtonClicked', '_menuOffset')
def __init__(self, *args, **kwargs):
TTkAbstractListItem.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkMenuButton' )
@ -75,6 +75,7 @@ class TTkMenuButton(TTkAbstractListItem):
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:
@ -137,7 +138,7 @@ class TTkMenuButton(TTkAbstractListItem):
pos = (self.width(), -1)
else:
frame = TTkResizableFrame(layout=TTkHBoxLayout(), size=(frameWidth,frameHeight), title=self._text, titleAlign=TTkK.LEFT_ALIGN)
pos = (-1, 0)
pos = self._menuOffset
menuListWidget = _TTkMenuListWidget()
listw = TTkList(parent=frame, listWidget = menuListWidget)
# listw.textClicked.connect(self._menuCallback)

72
TermTk/TTkWidgets/tabwidget.py

@ -29,10 +29,36 @@ from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
from TermTk.TTkWidgets.widget import TTkWidget
from TermTk.TTkWidgets.spacer import TTkSpacer
from TermTk.TTkWidgets.frame import TTkFrame
from TermTk.TTkWidgets.menubar import TTkMenuButton
from TermTk.TTkLayouts.boxlayout import TTkHBoxLayout
from TermTk.TTkLayouts.gridlayout import TTkGridLayout
class _TTkTabMenuButton(TTkMenuButton):
def __init__(self, *args, **kwargs):
TTkMenuButton.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , '_TTkTabMenuButton')
self.setMaximumHeight(0x1000)
def paintEvent(self):
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
self._canvas.drawMenuBarButton(
pos=(0,1),text=self._text,
width=self.width(),
shortcuts=self._shortcut,
border=self._border,
submenu=len(self._menu)>0,
color=textColor,
borderColor=borderColor,
shortcutColor=scColor )
'''
_curentIndex = 2
_labelPos = [0],[1], [2], [3], [4],
@ -41,7 +67,6 @@ _labels= │◀│La│Label1║Label2║Label3│Label4│▶│
leftscroller rightScroller
'''
class _TTkTabs(TTkWidget):
__slots__ = (
'_tabColor', '_tabBorderColor', '_tabSelectColor', '_tabOffsetColor',
@ -84,6 +109,10 @@ class _TTkTabs(TTkWidget):
def insertTab(self, index, label):
self._labels.insert(index, label)
self._updateTabs()
def setBorderColor(self, color):
self._tabBorderColor = color
self._tabBorderColorFocus = color
def _updateTabs(self):
xpos = 0+2
@ -194,7 +223,7 @@ class _TTkTabs(TTkWidget):
Root Layout
Right M TABS Left M
Left M TABS RightM
Layout
@ -205,7 +234,7 @@ class _TTkTabs(TTkWidget):
class TTkTabWidget(TTkFrame):
__slots__ = (
'_tabBarTopLayout', '_tabBar',
'_tabBarTopLayout', '_tabBar', '_topLeftLayout', '_topRightLayout',
'_tabColor', '_tabBorderColor', '_tabSelectColor', '_tabOffsetColor',
'_tabColorFocus', '_tabBorderColorFocus', '_tabSelectColorFocus', '_tabOffsetColorFocus',
'_tabWidgets', '_labels', '_labelsPos',
@ -233,8 +262,11 @@ class TTkTabWidget(TTkFrame):
self._tabOffsetColorFocus = TTkCfg.theme.tabOffsetColorFocus
self._tabBar = _TTkTabs()
self._tabBar.currentChanged.connect(self._tabChanged)
self._tabBarTopLayout = TTkHBoxLayout()
self._tabBarTopLayout.addWidget(self._tabBar)
self._tabBar.focusChanged.connect(self._focusChanged)
self._tabBarTopLayout = TTkGridLayout()
self._topLeftLayout = None
self._topRightLayout = None
self._tabBarTopLayout.addWidget(self._tabBar,0,1)
TTkFrame.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkTabWidget')
self.setLayout(TTkGridLayout())
@ -252,6 +284,34 @@ class TTkTabWidget(TTkFrame):
widget.show()
else:
widget.hide()
@pyTTkSlot(bool)
def _focusChanged(self, focus):
if focus:
tabBorderColor = self._tabBorderColorFocus
else:
tabBorderColor = self._tabBorderColor
for widget in self._tabBarTopLayout.iterWidgets():
widget.setBorderColor(tabBorderColor)
widget.update()
def addMenu(self, text, position=TTkK.LEFT):
button = _TTkTabMenuButton(text=text, borderColor=self._tabBorderColor, menuOffset=(-1,1))
button.focusChanged.connect(self._focusChanged)
if position==TTkK.LEFT:
if not self._topLeftLayout:
self._topLeftLayout = TTkHBoxLayout()
self._tabBarTopLayout.addItem(self._topLeftLayout,0,0)
layout = self._topLeftLayout
else:
if not self._topRightLayout:
self._topRightLayout = TTkHBoxLayout()
self._tabBarTopLayout.addItem(self._topRightLayout,0,2)
layout = self._topRightLayout
layout.addWidget(button)
return button
def addTab(self, widget, label):
widget.hide()
@ -269,7 +329,7 @@ class TTkTabWidget(TTkFrame):
self._tabBarTopLayout.setGeometry(0,0,w,self._padt)
def paintEvent(self):
if self.hasFocus():
if any(w.hasFocus() for w in self._tabBarTopLayout.iterWidgets()):
tabBorderColor = self._tabBorderColorFocus
else:
tabBorderColor = self._tabBorderColor

53
TermTk/TTkWidgets/widget.py

@ -91,9 +91,13 @@ class TTkWidget(TMouseEvents,TKeyEvents):
'_focus','_focus_policy',
'_layout', '_canvas', '_widgetItem',
'_visible', '_transparent',
'_pendingMouseRelease')
'_pendingMouseRelease',
#Signals
'focusChanged')
def __init__(self, *args, **kwargs):
#Signals
self.focusChanged = pyTTkSignal(bool)
self._name = kwargs.get('name', 'TTkWidget' )
self._parent = kwargs.get('parent', None )
@ -308,21 +312,10 @@ class TTkWidget(TMouseEvents,TKeyEvents):
wevt = evt.clone(pos=(x-wx, y-wy))
if mouseEvent:
if wevt is not None:
#if not widget._data['mouse']['underMouse']:
# widget._data['mouse']['underMouse'] = True
# widget.enterEvent(wevt)
if widget.mouseEvent(wevt):
return True
#else:
# if widget._data['mouse']['underMouse']:
# widget._data['mouse']['underMouse'] = False
# widget.leaveEvent(evt)
# if widget._data['layout'] is not None:
# CuWidget._broadcastLeaveEvent(evt, widget._data['layout'])
continue
#if widget.event(evt):
# return True
elif item.layoutItemType == TTkK.LayoutItem:
levt = evt.clone(pos=(x, y))
if TTkWidget._mouseEventLayoutHandle(levt, item):
@ -347,8 +340,6 @@ class TTkWidget(TMouseEvents,TKeyEvents):
return True
if evt.evt == TTkK.Release:
#if self.hasFocus():
# self.clearFocus()
self._pendingMouseRelease = False
if self.mouseReleaseEvent(evt):
return True
@ -365,38 +356,8 @@ class TTkWidget(TMouseEvents,TKeyEvents):
if evt.key == TTkK.Wheel:
if self.wheelEvent(evt):
return True
#if self.focusPolicy() & CuT.WheelFocus == CuT.WheelFocus:
# self.setFocus()
#elif evt.type() == CuEvent.KeyPress:
# self.keyPressEvent(evt)
#elif evt.type() == CuEvent.KeyRelease:
# self.keyReleaseEvent(evt)
# Trigger this event to the childs
return False
#def event(self, evt):
# pass
# # handle own events
# if evt.type() == CuEvent.MouseMove:
# if evt.button() == CuT.NoButton:
# self.mouseMoveEvent(evt)
# elif evt.type() == CuEvent.MouseButtonRelease:
# self.mouseReleaseEvent(evt)
# elif evt.type() == CuEvent.MouseButtonPress:
# self.mousePressEvent(evt)
# if self.focusPolicy() & CuT.ClickFocus == CuT.ClickFocus:
# self.setFocus()
# elif evt.type() == CuEvent.Wheel:
# self.wheelEvent(evt)
# if self.focusPolicy() & CuT.WheelFocus == CuT.WheelFocus:
# self.setFocus()
# elif evt.type() == CuEvent.KeyPress:
# self.keyPressEvent(evt)
# elif evt.type() == CuEvent.KeyRelease:
# self.keyReleaseEvent(evt)
# # Trigger this event to the childs
# if self.layout() is not None:
# return CuWidget._eventLayoutHandle(evt, self.layout())
return False
def setLayout(self, layout):
self._layout.replaceItem(layout, 0)
@ -572,12 +533,14 @@ class TTkWidget(TMouseEvents,TKeyEvents):
TTkHelper.removeOverlay()
TTkHelper.setFocus(self)
self._focus = True
self.focusChanged.emit(self._focus)
self.focusInEvent()
def clearFocus(self):
if not self._focus: return
TTkHelper.clearFocus()
self._focus = False
self.focusChanged.emit(self._focus)
self.focusOutEvent()
def hasFocus(self):

16
demo/showcase/tab.py

@ -27,8 +27,8 @@ import sys, os, argparse
sys.path.append(os.path.join(sys.path[0],'../..'))
import TermTk as ttk
def demoTab(root=None):
tabWidget1 = ttk.TTkTabWidget(parent=root, border=True)
def demoTab(root=None, border=True):
tabWidget1 = ttk.TTkTabWidget(parent=root, border=border)
tabWidget1.addTab(ttk.TTkTestWidgetSizes(border=True, title="Frame1.1"), "Label 1.1")
tabWidget1.addTab(ttk.TTkTestWidgetSizes(border=True, title="Frame1.2"), "Label 1.2")
tabWidget1.addTab(ttk.TTkTestWidget( border=True, title="Frame1.3"), "Label Test 1.3")
@ -39,6 +39,14 @@ def demoTab(root=None):
tabWidget1.addTab(ttk.TTkTestWidgetSizes(border=True, title="Frame1.8"), "Label 1.8")
#tabWidget1.addTab(ttk.TTkTestWidget( border=True, title="Frame1.9"), "Label Test 1.9")
#tabWidget1.addTab(ttk.TTkTestWidgetSizes(border=True, title="Frame1.10"), "Label 1.10")
fileMenu = tabWidget1.addMenu("XX")
fileMenu.addMenu("Open")
fileMenu.addMenu("Close")
fileMenu.addMenu("Exit")
tabWidget1.addMenu("RIGHT", ttk.TTkK.RIGHT)
return tabWidget1
def main():
@ -52,9 +60,11 @@ def main():
if args.f:
rootTab = root
root.setLayout(ttk.TTkGridLayout())
border=False
else:
rootTab = ttk.TTkWindow(parent=root,pos=(1,1), size=(100,40), title="Test Tab", border=True, layout=ttk.TTkGridLayout())
demoTab(rootTab)
border=True
demoTab(rootTab, border)
root.mainloop()
if __name__ == "__main__":

Loading…
Cancel
Save