Browse Source

Adapted ComboBox to the new style format

pull/165/head
Eugenio Parodi 3 years ago
parent
commit
a63d7aca63
  1. 14
      TermTk/TTkWidgets/button.py
  2. 25
      TermTk/TTkWidgets/combobox.py
  3. 65
      TermTk/TTkWidgets/widget.py
  4. 16
      demo/showcase/tab.py

14
TermTk/TTkWidgets/button.py

@ -113,7 +113,7 @@ class TTkButton(TTkWidget):
} }
__slots__ = ( __slots__ = (
'_text', '_border', '_pressed', '_keyPressed', '_text', '_border',
'_checkable', '_checked', '_checkable', '_checked',
# Signals # Signals
'clicked', 'toggled' 'clicked', 'toggled'
@ -127,7 +127,7 @@ class TTkButton(TTkWidget):
else: else:
self.setDefaultSize(kwargs, textWidth+2, len(self._text)) self.setDefaultSize(kwargs, textWidth+2, len(self._text))
TTkWidget.__init__(self, *args, **kwargs) super().__init__(*args, **kwargs)
# Define Signals # Define Signals
self.clicked = pyTTkSignal() self.clicked = pyTTkSignal()
self.toggled = pyTTkSignal(bool) self.toggled = pyTTkSignal(bool)
@ -135,8 +135,6 @@ class TTkButton(TTkWidget):
self._checked = kwargs.get('checked', False ) self._checked = kwargs.get('checked', False )
self._checkable = kwargs.get('checkable', False ) self._checkable = kwargs.get('checkable', False )
self._pressed = False
self._keyPressed = False
if self._border: if self._border:
if 'minSize' not in kwargs: if 'minSize' not in kwargs:
if 'minWidth' not in kwargs: if 'minWidth' not in kwargs:
@ -218,13 +216,11 @@ class TTkButton(TTkWidget):
def mousePressEvent(self, evt): def mousePressEvent(self, evt):
# TTkLog.debug(f"{self._text} Test Mouse {evt}") # TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = True
self.update() self.update()
return True return True
def mouseReleaseEvent(self, evt): def mouseReleaseEvent(self, evt):
# TTkLog.debug(f"{self._text} Test Mouse {evt}") # TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = False
if self._checkable: if self._checkable:
self._checked = not self._checked self._checked = not self._checked
self.toggled.emit(self._checked) self.toggled.emit(self._checked)
@ -235,17 +231,11 @@ class TTkButton(TTkWidget):
def keyEvent(self, evt): def keyEvent(self, evt):
if ( evt.type == TTkK.Character and evt.key==" " ) or \ if ( evt.type == TTkK.Character and evt.key==" " ) or \
( evt.type == TTkK.SpecialKey and evt.key == TTkK.Key_Enter ): ( evt.type == TTkK.SpecialKey and evt.key == TTkK.Key_Enter ):
self._keyPressed = True
self._pressed = True
self.update() self.update()
self.clicked.emit() self.clicked.emit()
return True return True
return False return False
def mouseMoveEvent(self, evt) -> bool:
self.update()
return super().mouseMoveEvent(evt)
def paintEvent(self, canvas): def paintEvent(self, canvas):
if self.isEnabled() and self._checkable: if self.isEnabled() and self._checkable:
if self._checked: if self._checked:

25
TermTk/TTkWidgets/combobox.py

@ -28,6 +28,7 @@ from TermTk.TTkCore.log import TTkLog
from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
from TermTk.TTkCore.helper import TTkHelper from TermTk.TTkCore.helper import TTkHelper
from TermTk.TTkCore.string import TTkString from TermTk.TTkCore.string import TTkString
from TermTk.TTkCore.color import TTkColor
from TermTk.TTkLayouts.gridlayout import TTkGridLayout from TermTk.TTkLayouts.gridlayout import TTkGridLayout
from TermTk.TTkWidgets.widget import TTkWidget from TermTk.TTkWidgets.widget import TTkWidget
from TermTk.TTkWidgets.container import TTkContainer from TermTk.TTkWidgets.container import TTkContainer
@ -60,6 +61,16 @@ class TTkComboBox(TTkContainer):
:param editable: This property holds whether the combo box can be edited by the user, defaults to False :param editable: This property holds whether the combo box can be edited by the user, defaults to False
:type editable: bool, optional :type editable: bool, optional
''' '''
classStyle = {
'default': {'color': TTkColor.fg("#dddd88")+TTkColor.bg("#222222"),
'borderColor':TTkColor.RST},
'disabled': {'color': TTkColor.fg('#888888'),
'borderColor':TTkColor.fg('#888888')},
'focus': {'color': TTkColor.fg("#ffff88")+TTkColor.bg("#222222"),
'borderColor': TTkColor.fg("#ffff00") + TTkColor.BOLD},
}
__slots__ = ('_list', '_id', '_lineEdit', '_listw', '_editable', '_insertPolicy', '_textAlign', '_popupFrame', __slots__ = ('_list', '_id', '_lineEdit', '_listw', '_editable', '_insertPolicy', '_textAlign', '_popupFrame',
#signals #signals
'currentIndexChanged', 'currentTextChanged', 'editTextChanged') 'currentIndexChanged', 'currentTextChanged', 'editTextChanged')
@ -154,15 +165,11 @@ class TTkComboBox(TTkContainer):
self._lineEdit.setGeometry(1,0,w-4,h) self._lineEdit.setGeometry(1,0,w-4,h)
def paintEvent(self, canvas): def paintEvent(self, canvas):
if not self.isEnabled(): style = self.currentStyle()
borderColor = TTkCfg.theme.comboboxBorderColorDisabled
color = TTkCfg.theme.comboboxContentColorDisabled color = style['color']
elif self.hasFocus(): borderColor = style['borderColor']
borderColor = TTkCfg.theme.comboboxBorderColorFocus
color = TTkCfg.theme.comboboxContentColorFocus
else:
borderColor = TTkCfg.theme.comboboxBorderColor
color = TTkCfg.theme.comboboxContentColor
if self._id == -1: if self._id == -1:
text = "- select -" text = "- select -"
else: else:

65
TermTk/TTkWidgets/widget.py

@ -38,20 +38,20 @@ from TermTk.TTkLayouts.layout import TTkLayout, TTkWidgetItem
from TermTk.TTkCore.TTkTerm.inputmouse import TTkMouseEvent from TermTk.TTkCore.TTkTerm.inputmouse import TTkMouseEvent
class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents): class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
''' Widget Layout sizes: ''' Widget sizes:
:: ::
Terminal area (i.e. XTerm) Terminal area (i.e. XTerm) = TTk
TTkWidget width TTkWidget width
(x,y) (x,y)
padt (Top Padding)
height height
padl Layout/child padr
padb (Bottom Pad.)
@ -70,11 +70,6 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
:param int height: the height of the widget, defaults to 0 :param int height: the height of the widget, defaults to 0
:param [int,int] size: the size [width, height] of the widget (override the previously defined sizes), optional, default=[0,0] :param [int,int] size: the size [width, height] of the widget (override the previously defined sizes), optional, default=[0,0]
:param int padding: the padding (top, bottom, left, right) of the widget, defaults to 0
:param int paddingTop: the Top padding, override Top padding if already defined, optional, default=padding
:param int paddingBottom: the Bottom padding, override Bottom padding if already defined, optional, default=padding
:param int paddingLeft: the Left padding, override Left padding if already defined, optional, default=padding
:param int paddingRight: the Right padding, override Right padding if already defined, optional, default=padding
:param int maxWidth: the maxWidth of the widget, optional, defaults to 0x10000 :param int maxWidth: the maxWidth of the widget, optional, defaults to 0x10000
:param int maxHeight: the maxHeight of the widget, optional, defaults to 0x10000 :param int maxHeight: the maxHeight of the widget, optional, defaults to 0x10000
:param [int,int] maxSize: the max [width,height] of the widget, optional :param [int,int] maxSize: the max [width,height] of the widget, optional
@ -90,8 +85,6 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
:param bool,optional visible: the visibility, optional, defaults to True :param bool,optional visible: the visibility, optional, defaults to True
:param bool,optional enabled: the ability to handle input events, optional, defaults to True :param bool,optional enabled: the ability to handle input events, optional, defaults to True
:param layout: the layout of this widget, optional, defaults to :class:`~TermTk.TTkLayouts.layout.TTkLayout`
:type layout: :mod:`TermTk.TTkLayouts`
''' '''
classStyle = { classStyle = {
@ -116,12 +109,13 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
'_toolTip', '_toolTip',
'_widgetCursor', '_widgetCursorEnabled', '_widgetCursorType', '_widgetCursor', '_widgetCursorEnabled', '_widgetCursorType',
#Signals #Signals
'focusChanged', 'sizeChanged') 'focusChanged', 'sizeChanged', 'currentStyleChanged')
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
#Signals #Signals
self.focusChanged = pyTTkSignal(bool) self.focusChanged = pyTTkSignal(bool)
self.sizeChanged = pyTTkSignal(int,int) self.sizeChanged = pyTTkSignal(int,int)
self.currentStyleChanged = pyTTkSignal(dict)
# self.sizeChanged.connect(self.resizeEvent) # self.sizeChanged.connect(self.resizeEvent)
self._widgetCursor = (0,0) self._widgetCursor = (0,0)
@ -161,6 +155,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
self._widgetItem = TTkWidgetItem(widget=self) self._widgetItem = TTkWidgetItem(widget=self)
self._currentStyle = TTkWidget.classStyle['default']
self.setStyle(self.classStyle) self.setStyle(self.classStyle)
self._processStyleEvent(TTkWidget._S_DEFAULT) self._processStyleEvent(TTkWidget._S_DEFAULT)
@ -362,10 +357,10 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
w = self w = self
while w._parent and (w.focusPolicy() & TTkK.ParentFocus) == TTkK.ParentFocus: while w._parent and (w.focusPolicy() & TTkK.ParentFocus) == TTkK.ParentFocus:
w = w._parent w = w._parent
self._processStyleEvent(TTkWidget._S_PRESSED)
if w.focusPolicy() & TTkK.ClickFocus == TTkK.ClickFocus: if w.focusPolicy() & TTkK.ClickFocus == TTkK.ClickFocus:
w.setFocus() w.setFocus()
w.raiseWidget() w.raiseWidget()
self._processStyleEvent(TTkWidget._S_PRESSED)
if evt.tap == 2 and self.mouseDoubleClickEvent(evt): if evt.tap == 2 and self.mouseDoubleClickEvent(evt):
#self._pendingMouseRelease = True #self._pendingMouseRelease = True
return True return True
@ -608,6 +603,12 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
def currentStyle(self): def currentStyle(self):
return self._currentStyle return self._currentStyle
def setCurrentStyle(self, style):
if style == self._currentStyle: return
self._currentStyle = style
self.currentStyleChanged.emit(style)
self.update()
def setStyle(self, style): def setStyle(self, style):
if 'default' not in style: if 'default' not in style:
# find the closest subclass/parent holding the style # find the closest subclass/parent holding the style
@ -624,40 +625,42 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
self._style = mergeStyle self._style = mergeStyle
self._processStyleEvent(TTkWidget._S_DEFAULT) self._processStyleEvent(TTkWidget._S_DEFAULT)
def mergeStyle(self, style):
cs = None
for t in self._style:
if self._style[t] == self._currentStyle:
cs = t
if t in style:
self._style[t] = self._style[t] | style[t]
if cs:
self.setCurrentStyle(self._style[cs])
def _processStyleEvent(self, evt=_S_DEFAULT): def _processStyleEvent(self, evt=_S_DEFAULT):
if not self._style: return False if not self._style: return False
if not self._enabled and 'disabled' in self._style: if not self._enabled and 'disabled' in self._style:
self._currentStyle = self._style['disabled'] self.setCurrentStyle(self._style['disabled'])
self.update()
return True return True
self._currentStyle = self._style['default']
if evt in (TTkWidget._S_DEFAULT, if evt in (TTkWidget._S_DEFAULT,
TTkWidget._S_NONE, TTkWidget._S_NONE,
TTkWidget._S_ACTIVE): TTkWidget._S_ACTIVE):
if self.hasFocus() and 'focus' in self._style: if self.hasFocus() and 'focus' in self._style:
self._currentStyle = self._style['focus'] self.setCurrentStyle(self._style['focus'])
self.update()
return True return True
elif 'default' in self._style: elif 'default' in self._style:
self._currentStyle = self._style['default'] self.setCurrentStyle(self._style['default'])
self.update()
return True return True
elif evt & TTkWidget._S_HOVER and 'hover' in self._style: elif evt & TTkWidget._S_HOVER and 'hover' in self._style:
self._currentStyle = self._style['hover'] self.setCurrentStyle(self._style['hover'])
self.update()
return True return True
elif evt & TTkWidget._S_PRESSED and 'clicked' in self._style: elif evt & TTkWidget._S_PRESSED and 'clicked' in self._style:
self._currentStyle = self._style['clicked'] self.setCurrentStyle(self._style['clicked'])
self.update()
return True return True
elif evt & TTkWidget._S_DISABLED and 'disabled' in self._style: elif evt & TTkWidget._S_DISABLED and 'disabled' in self._style:
self._currentStyle = self._style['disabled'] self.setCurrentStyle(self._style['disabled'])
self.update()
return True return True
if self.hasFocus() and 'focus' in self._style: if self.hasFocus() and 'focus' in self._style:
self._currentStyle = self._style['focus'] self.setCurrentStyle(self._style['focus'])
self.update()
return True return True
return False return False

16
demo/showcase/tab.py

@ -57,17 +57,21 @@ def demoTab(root=None, border=True):
def main(): def main():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('-f', help='Full Screen', action='store_true') parser.add_argument('-f', help='Full Screen (default)', action='store_true')
parser.add_argument('-w', help='Windowed', action='store_true')
parser.add_argument('-t', help='Track Mouse', action='store_true')
args = parser.parse_args() args = parser.parse_args()
windowed = args.w
mouseTrack = args.t
root = ttk.TTk() root = ttk.TTk(title="pyTermTk Tab Demo", mouseTrack=mouseTrack)
if args.f: if windowed:
rootTab = ttk.TTkWindow(parent=root,pos=(1,1), size=(100,40), title="Test Tab", border=True, layout=ttk.TTkGridLayout())
border=True
else:
rootTab = root rootTab = root
root.setLayout(ttk.TTkGridLayout()) root.setLayout(ttk.TTkGridLayout())
border=False border=False
else:
rootTab = ttk.TTkWindow(parent=root,pos=(1,1), size=(100,40), title="Test Tab", border=True, layout=ttk.TTkGridLayout())
border=True
demoTab(rootTab, border) demoTab(rootTab, border)
root.mainloop() root.mainloop()

Loading…
Cancel
Save