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__ = (
'_text', '_border', '_pressed', '_keyPressed',
'_text', '_border',
'_checkable', '_checked',
# Signals
'clicked', 'toggled'
@ -127,7 +127,7 @@ class TTkButton(TTkWidget):
else:
self.setDefaultSize(kwargs, textWidth+2, len(self._text))
TTkWidget.__init__(self, *args, **kwargs)
super().__init__(*args, **kwargs)
# Define Signals
self.clicked = pyTTkSignal()
self.toggled = pyTTkSignal(bool)
@ -135,8 +135,6 @@ class TTkButton(TTkWidget):
self._checked = kwargs.get('checked', False )
self._checkable = kwargs.get('checkable', False )
self._pressed = False
self._keyPressed = False
if self._border:
if 'minSize' not in kwargs:
if 'minWidth' not in kwargs:
@ -218,13 +216,11 @@ class TTkButton(TTkWidget):
def mousePressEvent(self, evt):
# TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = True
self.update()
return True
def mouseReleaseEvent(self, evt):
# TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = False
if self._checkable:
self._checked = not self._checked
self.toggled.emit(self._checked)
@ -235,17 +231,11 @@ class TTkButton(TTkWidget):
def keyEvent(self, evt):
if ( evt.type == TTkK.Character and evt.key==" " ) or \
( evt.type == TTkK.SpecialKey and evt.key == TTkK.Key_Enter ):
self._keyPressed = True
self._pressed = True
self.update()
self.clicked.emit()
return True
return False
def mouseMoveEvent(self, evt) -> bool:
self.update()
return super().mouseMoveEvent(evt)
def paintEvent(self, canvas):
if self.isEnabled() and self._checkable:
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.helper import TTkHelper
from TermTk.TTkCore.string import TTkString
from TermTk.TTkCore.color import TTkColor
from TermTk.TTkLayouts.gridlayout import TTkGridLayout
from TermTk.TTkWidgets.widget import TTkWidget
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
: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',
#signals
'currentIndexChanged', 'currentTextChanged', 'editTextChanged')
@ -154,15 +165,11 @@ class TTkComboBox(TTkContainer):
self._lineEdit.setGeometry(1,0,w-4,h)
def paintEvent(self, canvas):
if not self.isEnabled():
borderColor = TTkCfg.theme.comboboxBorderColorDisabled
color = TTkCfg.theme.comboboxContentColorDisabled
elif self.hasFocus():
borderColor = TTkCfg.theme.comboboxBorderColorFocus
color = TTkCfg.theme.comboboxContentColorFocus
else:
borderColor = TTkCfg.theme.comboboxBorderColor
color = TTkCfg.theme.comboboxContentColor
style = self.currentStyle()
color = style['color']
borderColor = style['borderColor']
if self._id == -1:
text = "- select -"
else:

65
TermTk/TTkWidgets/widget.py

@ -38,20 +38,20 @@ from TermTk.TTkLayouts.layout import TTkLayout, TTkWidgetItem
from TermTk.TTkCore.TTkTerm.inputmouse import TTkMouseEvent
class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
''' Widget Layout sizes:
''' Widget sizes:
::
Terminal area (i.e. XTerm)
Terminal area (i.e. XTerm) = TTk
TTkWidget width
(x,y)
padt (Top Padding)
height
padl Layout/child padr
padb (Bottom Pad.)
height
@ -70,11 +70,6 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
: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 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 maxHeight: the maxHeight of the widget, optional, defaults to 0x10000
: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 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 = {
@ -116,12 +109,13 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
'_toolTip',
'_widgetCursor', '_widgetCursorEnabled', '_widgetCursorType',
#Signals
'focusChanged', 'sizeChanged')
'focusChanged', 'sizeChanged', 'currentStyleChanged')
def __init__(self, *args, **kwargs):
#Signals
self.focusChanged = pyTTkSignal(bool)
self.sizeChanged = pyTTkSignal(int,int)
self.currentStyleChanged = pyTTkSignal(dict)
# self.sizeChanged.connect(self.resizeEvent)
self._widgetCursor = (0,0)
@ -161,6 +155,7 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
self._widgetItem = TTkWidgetItem(widget=self)
self._currentStyle = TTkWidget.classStyle['default']
self.setStyle(self.classStyle)
self._processStyleEvent(TTkWidget._S_DEFAULT)
@ -362,10 +357,10 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
w = self
while w._parent and (w.focusPolicy() & TTkK.ParentFocus) == TTkK.ParentFocus:
w = w._parent
self._processStyleEvent(TTkWidget._S_PRESSED)
if w.focusPolicy() & TTkK.ClickFocus == TTkK.ClickFocus:
w.setFocus()
w.raiseWidget()
self._processStyleEvent(TTkWidget._S_PRESSED)
if evt.tap == 2 and self.mouseDoubleClickEvent(evt):
#self._pendingMouseRelease = True
return True
@ -608,6 +603,12 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
def currentStyle(self):
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):
if 'default' not in style:
# find the closest subclass/parent holding the style
@ -624,40 +625,42 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
self._style = mergeStyle
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):
if not self._style: return False
if not self._enabled and 'disabled' in self._style:
self._currentStyle = self._style['disabled']
self.update()
self.setCurrentStyle(self._style['disabled'])
return True
self._currentStyle = self._style['default']
if evt in (TTkWidget._S_DEFAULT,
TTkWidget._S_NONE,
TTkWidget._S_ACTIVE):
if self.hasFocus() and 'focus' in self._style:
self._currentStyle = self._style['focus']
self.update()
self.setCurrentStyle(self._style['focus'])
return True
elif 'default' in self._style:
self._currentStyle = self._style['default']
self.update()
self.setCurrentStyle(self._style['default'])
return True
elif evt & TTkWidget._S_HOVER and 'hover' in self._style:
self._currentStyle = self._style['hover']
self.update()
self.setCurrentStyle(self._style['hover'])
return True
elif evt & TTkWidget._S_PRESSED and 'clicked' in self._style:
self._currentStyle = self._style['clicked']
self.update()
self.setCurrentStyle(self._style['clicked'])
return True
elif evt & TTkWidget._S_DISABLED and 'disabled' in self._style:
self._currentStyle = self._style['disabled']
self.update()
self.setCurrentStyle(self._style['disabled'])
return True
if self.hasFocus() and 'focus' in self._style:
self._currentStyle = self._style['focus']
self.update()
self.setCurrentStyle(self._style['focus'])
return True
return False

16
demo/showcase/tab.py

@ -57,17 +57,21 @@ def demoTab(root=None, border=True):
def main():
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()
windowed = args.w
mouseTrack = args.t
root = ttk.TTk()
if args.f:
root = ttk.TTk(title="pyTermTk Tab Demo", mouseTrack=mouseTrack)
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
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())
border=True
demoTab(rootTab, border)
root.mainloop()

Loading…
Cancel
Save