Browse Source

Added default methods doc prototypes

pull/95/head
Eugenio Parodi 3 years ago
parent
commit
b771f9886b
  1. 25
      TermTk/TTkCore/constant.py
  2. 5
      TermTk/TTkCore/ttk.py
  3. 18
      TermTk/TTkTestWidgets/domtreeview.py
  4. 1
      TermTk/TTkWidgets/checkbox.py
  5. 93
      TermTk/TTkWidgets/combobox.py
  6. 5
      TermTk/TTkWidgets/frame.py
  7. 5
      TermTk/TTkWidgets/label.py
  8. 3
      TermTk/TTkWidgets/lineedit.py
  9. 2
      TermTk/TTkWidgets/list_.py
  10. 18
      TermTk/TTkWidgets/listwidget.py
  11. 8
      TermTk/TTkWidgets/menubar.py
  12. 11
      TermTk/TTkWidgets/progressbar.py
  13. 1
      TermTk/TTkWidgets/radiobutton.py
  14. 1
      TermTk/TTkWidgets/resizableframe.py
  15. 3
      TermTk/TTkWidgets/scrollarea.py
  16. 6
      TermTk/TTkWidgets/scrollbar.py
  17. 3
      TermTk/TTkWidgets/spacer.py
  18. 4
      TermTk/TTkWidgets/spinbox.py
  19. 15
      TermTk/TTkWidgets/splitter.py
  20. 19
      TermTk/TTkWidgets/tabwidget.py
  21. 3
      TermTk/TTkWidgets/texedit.py
  22. 3
      TermTk/TTkWidgets/window.py

25
TermTk/TTkCore/constant.py

@ -104,13 +104,22 @@ class TTkConstant:
Checked = CheckState.Checked
class InsertPolicy(int):
NoInsert = 0x00 # The string will not be inserted into the combobox.
InsertAtTop = 0x01 # The string will be inserted as the first item in the combobox.
# InsertAtCurrent = 0x02 # The current item will be replaced by the string.
InsertAtBottom = 0x03 # The string will be inserted after the last item in the combobox.
# InsertAfterCurrent = 0x04 # The string is inserted after the current item in the combobox.
# InsertBeforeCurrent = 0x05 # The string is inserted before the current item in the combobox.
# InsertAlphabetically = 0x06 # The string is inserted in the alphabetic order in the combobox.
'''Specifies what the :class:`~TermTk.TTkWidgets.combobox.TTkComboBox` should do when a new string is entered by the user.
'''
NoInsert = 0x00
'''The string will not be inserted into the combobox.'''
InsertAtTop = 0x01
'''The string will be inserted as the first item in the combobox.'''
# InsertAtCurrent = 0x02
# '''The current item will be replaced by the string.'''
InsertAtBottom = 0x03
'''The string will be inserted after the last item in the combobox.'''
# InsertAfterCurrent = 0x04
# '''The string is inserted after the current item in the combobox.'''
# InsertBeforeCurrent = 0x05
# '''The string is inserted before the current item in the combobox.'''
# InsertAlphabetically = 0x06
# '''The string is inserted in the alphabetic order in the combobox.'''
class ChildIndicatorPolicy(int):
ShowIndicator = 0x00 #The controls for expanding and collapsing will be shown for this item even if there are no children.
@ -232,7 +241,7 @@ class TTkConstant:
# Alignment
class Alignment(int):
''' This class type is used to describe alignment.
''' This type is used to describe alignment.
.. autosummary::
NONE

5
TermTk/TTkCore/ttk.py

@ -48,7 +48,7 @@ class TTk(TTkWidget):
__slots__ = ('_cursor','_color')
def __init__(self, input):
super().__init__()
self._name = 'mouseCursor'
self._name = 'MouseCursor'
self._cursor = ''
self._color = TTkColor.RST
self.resize(1,1)
@ -85,8 +85,7 @@ class TTk(TTkWidget):
'_lastMultiTap')
def __init__(self, *args, **kwargs):
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTk' )
super().__init__(*args, **kwargs)
self._input = TTkInput()
self._input.inputEvent.connect(self._processInput)
self._title = kwargs.get('title','TermTk')

18
TermTk/TTkTestWidgets/domtreeview.py

@ -180,8 +180,7 @@ class TTkDomTreeView(TTkWidget):
lox, loy = layout.offset()
lx,ly,lw,lh = lx+lox, ly+loy, lw-lox, lh-loy
# opt of bounds
if x<lx or x>=lx+lw or y<ly or y>=lh+ly:
return False
if x<lx or x>=lx+lw or y<ly or y>=lh+ly: return None
x-=lx
y-=ly
for item in reversed(layout.zSortedItems):
@ -199,7 +198,7 @@ class TTkDomTreeView(TTkWidget):
elif item.layoutItemType == TTkK.LayoutItem:
levt = evt.clone(pos=(x, y))
if (wid:=TTkDomTreeView._findWidget(levt, item)) is not None:
if (wid:=TTkDomTreeView._findWidget(levt, item)):
return wid
return layout.parentWidget()
@ -207,6 +206,8 @@ class TTkDomTreeView(TTkWidget):
def _processInput(self, kevt, mevt):
TTkLog.debug(f"{kevt} {mevt}")
if mevt.evt == TTkK.Press:
# TTkHelper._rootWidget.setEnabled(True)
# TTkHelper._rootWidget._input.inputEvent.connect(TTkHelper._rootWidget._processInput)
TTkHelper._rootWidget._input.inputEvent.disconnect(self._processInput)
widget = TTkDomTreeView._findWidget(mevt,TTkHelper._rootWidget.rootLayout())
TTkLog.debug(f"{widget=}")
@ -219,6 +220,8 @@ class TTkDomTreeView(TTkWidget):
@pyTTkSlot()
def _btnPickCb(self):
# TTkHelper._rootWidget.setEnabled(True)
# TTkHelper._rootWidget._input.inputEvent.disconnect(TTkHelper._rootWidget._processInput)
TTkHelper._rootWidget._input.inputEvent.connect(self._processInput)
@pyTTkSlot()
@ -272,7 +275,7 @@ class TTkDomTreeView(TTkWidget):
elif prop['get']['type'] == 'singleflag' and 'set' in prop:
flags = prop['get']['flags']
items = [(k,v) for k,v in flags.items()]
value = TTkComboBox(list=[n for n,_ in items], height=1)
value = TTkComboBox(list=[n for n,_ in items], height=1, textAlign=TTkK.LEFT_ALIGN)
value.setCurrentIndex([cs for _,cs in items].index(getval))
value.currentTextChanged.connect(_bound(prop['set']['cb'],domw, lambda v:flags[v]))
elif prop['get']['type'] == bool and 'set' in prop:
@ -320,9 +323,10 @@ class TTkDomTreeView(TTkWidget):
for c in widget.rootLayout().children():
if c == widget.layout(): continue
top.addChild(tc:=_TTkDomTreeWidgetItem(["layout (Other)", c.__class__.__name__, ""]))
for cc in c.children():
tc.addChild(TTkDomTreeView._getDomTreeItem(cc,widSelected))
if c.layoutItemType == TTkK.LayoutItem:
top.addChild(tc:=_TTkDomTreeWidgetItem(["layout (Other)", c.__class__.__name__, ""]))
for cc in c.children():
tc.addChild(TTkDomTreeView._getDomTreeItem(cc,widSelected))
return top
if layoutItem.layoutItemType == TTkK.LayoutItem:

1
TermTk/TTkWidgets/checkbox.py

@ -84,7 +84,6 @@ class TTkCheckbox(TTkWidget):
)
def __init__(self, *args, **kwargs):
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkCheckbox' )
# Define Signals
self.stateChanged = pyTTkSignal(TTkK.CheckState)
self.clicked = pyTTkSignal(bool)

93
TermTk/TTkWidgets/combobox.py

@ -35,6 +35,30 @@ from TermTk.TTkWidgets.lineedit import TTkLineEdit
from TermTk.TTkWidgets.resizableframe import TTkResizableFrame
class TTkComboBox(TTkWidget):
''' TTkComboBox:
Editable = False
::
[ - select - ^]
Editable = True
::
[ Text [^]
:param list: the list of the items selectable by this combobox, defaults to "[]"
:type list: list(str), optional
:param insertPolicy: the policy used to determine where user-inserted items should appear in the combobox, defaults to :class:`~TermTk.TTkCore.constant.TTkConstant.InsertPolicy.InsertAtBottom`
:type insertPolicy: :class:`~TermTk.TTkCore.constant.TTkConstant.InsertPolicy`, optional
:param textAlign: This enum type is used to define the text alignment, defaults to :class:`~TermTk.TTkCore.constant.TTkConstant.Alignment.CENTER_ALIGN`
:tye textAlign: :class:`~TermTk.TTkCore.constant.TTkConstant.Alignment`, optional
:param editable: This property holds whether the combo box can be edited by the user, defaults to False
:type editable: bool, optional
'''
__slots__ = ('_list', '_id', '_lineEdit', '_listw', '_editable', '_insertPolicy', '_textAlign', '_popupFrame',
#signals
'currentIndexChanged', 'currentTextChanged', 'editTextChanged')
@ -83,15 +107,35 @@ class TTkComboBox(TTkWidget):
self.currentTextChanged.emit(text)
self.editTextChanged.emit(text)
def textAlign(self):
'''his property holds the displayed text alignment
:return: :class:`~TermTk.TTkCore.constant.TTkConstant.Alignment`
'''
return self._textAlign
def setTextAlign(self, align):
'''This property holds the displayed text alignment
:param align:
:type align: :class:`~TermTk.TTkCore.constant.TTkConstant.Alignment`
'''
if self._textAlign != align:
self._textAlign = align
self.update()
def addItem(self,item):
'''addItem'''
self._list.append(item)
self.update()
def addItems(self,items):
'''addItems'''
for item in items:
self.addItem(item)
def clear(self):
'''clear'''
self._lineEdit.setText("")
self._list = []
self._id = -1
@ -120,7 +164,7 @@ class TTkComboBox(TTkWidget):
text = self._list[self._id]
w = self.width()
self._canvas.drawTTkString(pos=(1,0), text=TTkString(text), width=w-2, alignment=self._textAlign, color=color)
self._canvas.drawTTkString(pos=(1,0), text=TTkString(text), width=w-3, alignment=self._textAlign, color=color)
self._canvas.drawText(pos=(0,0), text="[", color=borderColor)
if self._editable:
self._canvas.drawText(pos=(w-3,0), text="[^]", color=borderColor)
@ -128,6 +172,7 @@ class TTkComboBox(TTkWidget):
self._canvas.drawText(pos=(w-2,0), text="^]", color=borderColor)
def currentText(self):
'''currentText'''
if self._editable:
return self._lineEdit.text()
elif self._id >= 0:
@ -135,10 +180,12 @@ class TTkComboBox(TTkWidget):
return ""
def currentIndex(self):
'''currentIndex'''
return self._id
@pyTTkSlot(int)
def setCurrentIndex(self, index):
'''setCurrentIndex'''
if index > len(self._list)-1: return
self._id = index
if self._editable:
@ -150,6 +197,7 @@ class TTkComboBox(TTkWidget):
@pyTTkSlot(str)
def setCurrentText(self, text):
'''setCurrentText'''
if self._editable:
self.setEditText(text)
else:
@ -158,19 +206,24 @@ class TTkComboBox(TTkWidget):
@pyTTkSlot(str)
def setEditText(self, text):
'''setEditText'''
if self._editable:
self._lineEdit.setText(text)
def insertPolicy(self):
'''insertPolicy'''
return self._insertPolicy
def setInsertPolicy(self, ip):
'''setInsertPolicy'''
self._insertPolicy = ip
def isEditable(self):
'''isEditable'''
return self._editable
def setEditable(self, editable):
'''setEditable'''
self._editable = editable
if editable:
self._lineEdit.show()
@ -228,4 +281,42 @@ class TTkComboBox(TTkWidget):
'init': {'name':'editable', 'type':bool } ,
'get': {'cb':isEditable, 'type':bool } ,
'set': {'cb':setEditable, 'type':bool } },
'Text Align.' : {
'init': {'name':'textAlign', 'type':'singleflag',
'flags': {
'None' : TTkK.Alignment.NONE,
'Left' : TTkK.Alignment.LEFT_ALIGN,
'Right' : TTkK.Alignment.RIGHT_ALIGN,
'Center' : TTkK.Alignment.CENTER_ALIGN,
'Justify': TTkK.Alignment.JUSTIFY } },
'get': {'cb':textAlign, 'type':'singleflag',
'flags': {
'None' : TTkK.Alignment.NONE,
'Left' : TTkK.Alignment.LEFT_ALIGN,
'Right' : TTkK.Alignment.RIGHT_ALIGN,
'Center' : TTkK.Alignment.CENTER_ALIGN,
'Justify': TTkK.Alignment.JUSTIFY } } ,
'set': {'cb':setTextAlign, 'type':'singleflag',
'flags': {
'None' : TTkK.Alignment.NONE,
'Left' : TTkK.Alignment.LEFT_ALIGN,
'Right' : TTkK.Alignment.RIGHT_ALIGN,
'Center' : TTkK.Alignment.CENTER_ALIGN,
'Justify': TTkK.Alignment.JUSTIFY } } },
'Insert Policy' : {
'init': {'name':'insertPolicy', 'type':'singleflag',
'flags': {
'No Insert' : TTkK.InsertPolicy.NoInsert,
'At Top' : TTkK.InsertPolicy.InsertAtTop,
'At Bottom' : TTkK.InsertPolicy.InsertAtBottom } },
'get': {'cb':insertPolicy, 'type':'singleflag',
'flags': {
'No Insert' : TTkK.InsertPolicy.NoInsert,
'At Top' : TTkK.InsertPolicy.InsertAtTop,
'At Bottom' : TTkK.InsertPolicy.InsertAtBottom } },
'set': {'cb':setInsertPolicy, 'type':'singleflag',
'flags': {
'No Insert' : TTkK.InsertPolicy.NoInsert,
'At Top' : TTkK.InsertPolicy.InsertAtTop,
'At Bottom' : TTkK.InsertPolicy.InsertAtBottom } } },
}

5
TermTk/TTkWidgets/frame.py

@ -63,7 +63,6 @@ class TTkFrame(TTkWidget):
self._menubarTop = None
self._menubarBottom = None
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkFrame' )
self.setBorder(self._border)
def menubarTop(self):
@ -81,19 +80,23 @@ class TTkFrame(TTkWidget):
super().resizeEvent(w,h)
def title(self):
'''title'''
return self._title
def setTitle(self, title):
'''setTitle'''
self._title = title
self.update()
def setBorder(self, border):
'''setBorder'''
self._border = border
if border: self.setPadding(1,1,1,1)
else: self.setPadding(0,0,0,0)
self.update()
def border(self):
'''border'''
return self._border
def borderColor(self):

5
TermTk/TTkWidgets/label.py

@ -28,6 +28,7 @@ from TermTk.TTkCore.signal import pyTTkSlot
from TermTk.TTkWidgets.widget import TTkWidget
class TTkLabel(TTkWidget):
'''TTkLabel'''
__slots__ = ('_text','_color')
def __init__(self, *args, **kwargs):
self._color = kwargs.get('color', TTkColor.RST )
@ -42,18 +43,22 @@ class TTkLabel(TTkWidget):
self._textUpdated()
def color(self):
'''color'''
return self._color
def setColor(self, color):
'''setColor'''
if self._color != color:
self._color = color
self.update()
def text(self):
'''text'''
return self._text
@pyTTkSlot(str)
def setText(self, text):
'''setText'''
if self._text != text:
if issubclass(type(text), TTkString):
self._text = text

3
TermTk/TTkWidgets/lineedit.py

@ -39,6 +39,7 @@ from TermTk.TTkWidgets.widget import TTkWidget
<--> Offset
'''
class TTkLineEdit(TTkWidget):
'''TTkLineEdit'''
__slots__ = (
'_text', '_cursorPos', '_offset', '_replace', '_inputType', '_selectionFrom', '_selectionTo', '_color',
# Signals
@ -65,6 +66,7 @@ class TTkLineEdit(TTkWidget):
@pyTTkSlot(str)
def setText(self, text, cursorPos=0x1000):
'''setText'''
if text != self._text:
self.textChanged.emit(text)
self._text = TTkString(text)
@ -72,6 +74,7 @@ class TTkLineEdit(TTkWidget):
self._pushCursor()
def text(self):
'''text'''
return self._text
def _pushCursor(self):

2
TermTk/TTkWidgets/list_.py

@ -26,6 +26,7 @@ from TermTk.TTkWidgets.listwidget import TTkListWidget
from TermTk.TTkAbstract.abstractscrollarea import TTkAbstractScrollArea
class TTkList(TTkAbstractScrollArea):
'''TTkList'''
__slots__ = (
'_listView', 'itemClicked', 'textClicked',
# Forwarded Methods
@ -36,7 +37,6 @@ class TTkList(TTkAbstractScrollArea):
def __init__(self, *args, **kwargs):
TTkAbstractScrollArea.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkList' )
if 'parent' in kwargs: kwargs.pop('parent')
self._listView = kwargs.get('listWidget',TTkListWidget(*args, **kwargs))
self.setViewport(self._listView)

18
TermTk/TTkWidgets/listwidget.py

@ -33,6 +33,7 @@ from TermTk.TTkWidgets.label import TTkLabel
from TermTk.TTkAbstract.abstractscrollview import TTkAbstractScrollView
class TTkAbstractListItem(TTkLabel):
'''TTkAbstractListItem'''
__slots__ = ('_pressed', '_selected', '_highlighted', 'listItemClicked', '_data')
def __init__(self, *args, **kwargs):
TTkLabel.__init__(self, *args, **kwargs)
@ -56,9 +57,11 @@ class TTkAbstractListItem(TTkLabel):
self.setColor(TTkCfg.theme.listColor)
def data(self):
'''data'''
return self._data
def setData(self, data):
'''setData'''
if self._data != data:
self._data = data
self.update()
@ -100,6 +103,7 @@ class TTkAbstractListItem(TTkLabel):
class TTkListWidget(TTkAbstractScrollView):
'''TTkListWidget'''
__slots__ = ('itemClicked', 'textClicked', '_color', '_selectedColor', '_selectedItems', '_selectionMode', '_highlighted', '_items')
def __init__(self, *args, **kwargs):
# Default Class Specific Values
@ -114,7 +118,6 @@ class TTkListWidget(TTkAbstractScrollView):
self.textClicked = pyTTkSignal(str)
# Init Super
TTkAbstractScrollView.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkListWidget' )
self.viewChanged.connect(self._viewChangedHandler)
self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus)
@ -148,15 +151,19 @@ class TTkListWidget(TTkAbstractScrollView):
self.textClicked.emit(label.text())
def setSelectionMode(self, mode):
'''setSelectionMode'''
self._selectionMode = mode
def selectedItems(self):
'''selectedItems'''
return self._selectedItems
def selectedLabels(self):
'''selectedLabels'''
return [i.text() for i in self._selectedItems]
def items(self):
'''items'''
return self._items
def resizeEvent(self, w, h):
@ -177,6 +184,7 @@ class TTkListWidget(TTkAbstractScrollView):
return self.size()
def addItem(self, item, data=None):
'''addItem'''
self.addItemAt(item, len(self._items), data)
def _placeItems(self):
@ -188,6 +196,7 @@ class TTkListWidget(TTkAbstractScrollView):
self.viewChanged.emit()
def addItemAt(self, item, pos, data=None):
'''addItemAt'''
if isinstance(item, str) or isinstance(item, TTkString):
#label = TTkAbstractListItem(text=item, width=max(len(item),self.width()))
label = TTkAbstractListItem(text=item, data=data)
@ -199,15 +208,18 @@ class TTkListWidget(TTkAbstractScrollView):
self._placeItems()
def indexOf(self, item):
'''indexOf'''
for i, it in enumerate(self._items):
if it == item:
return i
return -1
def itemAt(self, pos):
'''itemAt'''
return self._items[pos]
def moveItem(self, fr, to):
'''moveItem'''
fr = max(min(fr,len(self._items)-1),0)
to = max(min(to,len(self._items)-1),0)
# Swap
@ -215,6 +227,7 @@ class TTkListWidget(TTkAbstractScrollView):
self._placeItems()
def removeItem(self, item):
'''removeItem'''
self.removeWidget(item)
self._items.remove(item)
if item in self._selectedItems:
@ -222,14 +235,17 @@ class TTkListWidget(TTkAbstractScrollView):
self._placeItems()
def removeAt(self, pos):
'''removeAt'''
self.removeItem(self._items[pos])
def setCurrentRow(self, row):
'''setCurrentRow'''
if row<len(self._items):
item = self._items[row]
self.setCurrentItem(item)
def setCurrentItem(self, item):
'''setCurrentItem'''
item.listItemClicked.emit(item)
def _moveToHighlighted(self):

8
TermTk/TTkWidgets/menubar.py

@ -36,7 +36,6 @@ 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',TTkHelper.getFocus())
def keyEvent(self, evt):
@ -58,17 +57,16 @@ class _TTkMenuListWidget(TTkListWidget):
class _TTkMenuSpacer(TTkAbstractListItem):
def __init__(self, *args, **kwargs):
TTkAbstractListItem.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , '_TTkMenuSpacer' )
self.resize(1,1)
def paintEvent(self):
self._canvas.drawText(pos=(0,0), text="-"*self.width())
class TTkMenuButton(TTkAbstractListItem):
'''TTkMenuButton'''
__slots__ = ('_border', '_borderColor', '_shortcut', '_menu', 'menuButtonClicked', '_menuOffset')
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 )
@ -90,12 +88,14 @@ class TTkMenuButton(TTkAbstractListItem):
self.listItemClicked.connect(self.menuButtonEvent)
def addMenu(self, text):
'''addMenu'''
button = TTkMenuButton(text=text, borderColor=self._borderColor, border=False)
button.menuButtonClicked.connect(self._menuCallback)
self._menu.append(button)
return button
def addSpacer(self):
'''addSpacer'''
self._menu.append(_TTkMenuSpacer())
def setColor(self, color):
@ -175,6 +175,7 @@ class TTkMenuButton(TTkAbstractListItem):
self.highlighted=False
class TTkMenuLayout(TTkHBoxLayout):
'''TTkMenuLayout'''
__slots__ = ('_borderColor', '_itemsLeft', '_itemsCenter', '_itemsRight', '_buttons')
def __init__(self, *args, **kwargs):
self._buttons = []
@ -196,6 +197,7 @@ class TTkMenuLayout(TTkHBoxLayout):
self.update()
def addMenu(self, text, alignment=TTkK.LEFT_ALIGN):
'''addMenu'''
button = TTkMenuButton(text=text, borderColor=self._borderColor, border=True)
if alignment == TTkK.LEFT_ALIGN:
self._itemsLeft.addWidget(button)

11
TermTk/TTkWidgets/progressbar.py

@ -68,6 +68,8 @@ class TTkLookAndFeelPBar(TTkLookAndFeel):
full blocks ^^^^^^^^
'''
class TTkProgressBar(TTkWidget):
'''TTkProgressBar'''
__slots__ = (
'_value', '_minimum', '_maximum',
# Signals
@ -83,10 +85,12 @@ class TTkProgressBar(TTkWidget):
self.setMinimumSize(3, 1)
def value(self):
'''value'''
return self._value
@pyTTkSlot(float)
def setValue(self, new_value):
'''setValue'''
new_value = min(max(float(new_value), self._value_min), self._value_max)
if new_value == self._value:
return
@ -95,9 +99,11 @@ class TTkProgressBar(TTkWidget):
self.update()
def minimum(self):
'''minimum'''
return self._value_min
def setMinimum(self, new_value):
'''setMinimum'''
if not math.isfinite(new_value):
raise ValueError(f'minimum must be finite, but value was {new_value}')
if not new_value < self._value_max:
@ -109,9 +115,11 @@ class TTkProgressBar(TTkWidget):
self.setValue(self._value_min)
def maximum(self):
'''maximum'''
return self._value_max
def setMaximum(self, new_value):
'''setMaximum'''
if not math.isfinite(new_value):
raise ValueError(f'maximum must be finite, but value was {new_value}')
if not new_value > self._value_min:
@ -123,6 +131,7 @@ class TTkProgressBar(TTkWidget):
self.setValue(self._value_max)
def setMinimumMaximum(self, new_min, new_max):
'''setMinimumMaximum'''
if not math.isfinite(new_min) or not math.isfinite(new_max):
raise ValueError(
f'minimum and maximum must be finite, but '
@ -136,9 +145,11 @@ class TTkProgressBar(TTkWidget):
self.setValue(self._value) # setValue takes care for min/max-constraint
def textWidth(self):
'''textWidth'''
return self._textWidth
def setTextWidth(self, new_width):
'''setTextWidth'''
self._textWidth = max(0, new_width)
def paintEvent(self):

1
TermTk/TTkWidgets/radiobutton.py

@ -69,7 +69,6 @@ class TTkRadioButton(TTkWidget):
# Define Signals
self.clicked = pyTTkSignal()
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkRadioButton' )
# self.checked = pyTTkSignal()
self._checked = kwargs.get('checked', False )
self._text = TTkString(kwargs.get('text', '' ))

1
TermTk/TTkWidgets/resizableframe.py

@ -26,6 +26,7 @@ from TermTk.TTkCore.constant import TTkK
from TermTk.TTkWidgets.frame import TTkFrame
class TTkResizableFrame(TTkFrame):
'''TTkResizableFrame'''
__slots__ = ('_mouseDelta', '_resizable')
def __init__(self, *args, **kwargs):
TTkFrame.__init__(self, *args, **kwargs)

3
TermTk/TTkWidgets/scrollarea.py

@ -31,7 +31,6 @@ class _TTkAreaWidget(TTkAbstractScrollView):
__slots__ = ()
def __init__(self, *args, **kwargs):
TTkAbstractScrollView.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , '_TTkAreaWidget' )
self.viewChanged.connect(self._viewChangedHandler)
@pyTTkSlot()
@ -47,10 +46,10 @@ class _TTkAreaWidget(TTkAbstractScrollView):
return self.size()
class TTkScrollArea(TTkAbstractScrollArea):
'''TTkScrollArea'''
__slots__ = ('_areaView')
def __init__(self, *args, **kwargs):
TTkAbstractScrollArea.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkScrollArea' )
if 'parent' in kwargs: kwargs.pop('parent')
self._areaView = _TTkAreaWidget(*args, **kwargs)
self.setFocusPolicy(TTkK.ClickFocus)

6
TermTk/TTkWidgets/scrollbar.py

@ -31,6 +31,7 @@ from TermTk.TTkWidgets.widget import TTkWidget
ref: https://doc.qt.io/qt-5/qscrollbar.html
'''
class TTkScrollBar(TTkWidget):
'''TTkScrollBar'''
__slots__ = (
'_orientation',
'_minimum', '_maximum',
@ -49,7 +50,6 @@ class TTkScrollBar(TTkWidget):
def __init__(self, *args, **kwargs):
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkScrollBar' )
# Define Signals
self.valueChanged = pyTTkSignal(int) # Value
self.rangeChanged = pyTTkSignal(int, int) # Min, Max
@ -185,14 +185,17 @@ class TTkScrollBar(TTkWidget):
@pyTTkSlot(int)
def setPageStep(self, pageStep):
'''setPageStep'''
self._pagestep = pageStep
@pyTTkSlot(int)
def setRangeTo(self, max):
'''setRangeTo'''
self.setRange(0,max)
@pyTTkSlot(int, int)
def setRange(self, min, max):
'''setRange'''
if self._minimum == min and \
self._maximum == max :
return
@ -202,6 +205,7 @@ class TTkScrollBar(TTkWidget):
@pyTTkSlot(int)
def setValue(self, v):
'''setValue'''
self.value = v
@property

3
TermTk/TTkWidgets/spacer.py

@ -25,8 +25,7 @@
from TermTk.TTkWidgets.widget import TTkWidget
class TTkSpacer(TTkWidget):
'''TTkSpacer'''
__slots__ = ()
def __init__(self, *args, **kwargs):
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkSpacer')
# self.hide()

4
TermTk/TTkWidgets/spinbox.py

@ -32,6 +32,7 @@ from TermTk.TTkWidgets.lineedit import TTkLineEdit
class TTkSpinBox(TTkWidget):
'''TTkSpinBox'''
__slots__= (
'_lineEdit', '_value', '_maximum', '_minimum',
'_mouseDelta', '_valueDelta', '_draggable',
@ -41,7 +42,6 @@ class TTkSpinBox(TTkWidget):
# Signals
self.valueChanged=pyTTkSignal(int)
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkSpinBox' )
self._value = kwargs.get("value",0)
self._maximum = kwargs.get("maximum",99)
self._minimum = kwargs.get("minimum",0)
@ -57,10 +57,12 @@ class TTkSpinBox(TTkWidget):
self._lineEdit.textEdited.connect(self._textEdited)
def value(self):
'''value'''
return self._value
@pyTTkSlot(int)
def setValue(self, value):
'''setValue'''
value = min(value,self._maximum)
value = max(value,self._minimum)
if self._value == value: return

15
TermTk/TTkWidgets/splitter.py

@ -27,6 +27,7 @@ from TermTk.TTkWidgets.widget import *
from TermTk.TTkWidgets.frame import *
class TTkSplitter(TTkFrame):
'''TTkSplitter'''
__slots__ = (
'_splitterInitialized', '_orientation',
'_separators', '_separatorsRef', '_sizeRef', '_initSizes',
@ -42,7 +43,6 @@ class TTkSplitter(TTkFrame):
self._separatorSelected = None
self._orientation = TTkK.HORIZONTAL
TTkFrame.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkSpacer')
self._orientation = kwargs.get('orientation', TTkK.HORIZONTAL)
self.setBorder(kwargs.get('border' , False))
self.setFocusPolicy(TTkK.ClickFocus)
@ -60,30 +60,37 @@ class TTkSplitter(TTkFrame):
self.setLayout(_SplitterLayout())
def orientation(self):
'''orientation'''
return self._orientation
def count(self):
'''count'''
return len(self._items)
def indexOf(self, widget):
'''indexOf'''
return self._items.index(widget)
def widget(self, index):
'''widget'''
return self._items[index]
def replaceItem(self, index, item):
'''replaceItem'''
TTkLayout.removeItem(self.layout(), self._items[index])
TTkLayout.insertItem(self.layout(), index, item)
self._items[index] = item
self._updateGeometries()
def replaceWidget(self, index, widget):
'''replaceWidget'''
TTkLayout.removeWidget(self.layout(), self._items[index])
TTkLayout.insertWidget(self.layout(), index, widget)
self._items[index] = widget
self._updateGeometries()
def removeItem(self, item):
'''removeItem'''
index = self.indexOf(item)
self._items.pop(index)
self._initSizes.pop(index)
@ -93,6 +100,7 @@ class TTkSplitter(TTkFrame):
self._updateGeometries()
def removeWidget(self, widget):
'''removeWidget'''
index = self.indexOf(widget)
self._items.pop(index)
self._initSizes.pop(index)
@ -102,16 +110,20 @@ class TTkSplitter(TTkFrame):
self._updateGeometries()
def addItem(self, item, size=None):
'''addItem'''
self.insertItem(len(self._items), item, size)
def insertItem(self, index, item, size=None):
'''insertItem'''
TTkLayout.insertItem(self.layout(), index, item)
self._insertWidgetItem(index, item, size)
def addWidget(self, widget, size=None):
'''addWidget'''
self.insertWidget(len(self._items), widget, size)
def insertWidget(self, index, widget, size=None):
'''insertWidget'''
TTkLayout.insertWidget(self.layout(), index, widget)
self._insertWidgetItem(index, widget, size)
@ -137,6 +149,7 @@ class TTkSplitter(TTkFrame):
self.parentWidget().update(repaint=True, updateLayout=True)
def setSizes(self, sizes):
'''setSizes'''
s = 0
sizes=sizes[:len(self._separators)]
for i, l in enumerate(sizes):

19
TermTk/TTkWidgets/tabwidget.py

@ -54,6 +54,7 @@ class _TTkTabBarDragData():
def tabBar(self): return self._tabBar
class TTkTabButton(TTkButton):
'''TTkTabButton'''
__slots__ = ('_sideEnd', '_tabStatus', '_closable', 'closeClicked', '_closeButton')
def __init__(self, *args, **kwargs):
self._sideEnd = TTkK.NONE
@ -214,6 +215,7 @@ _labels= │◀│La│Label1║Label2║Label3│Label4│▶│
'''
class TTkTabBar(TTkWidget):
'''TTkTabBar'''
__slots__ = (
'_tabButtons', '_tabData', '_tabMovable', '_small',
'_highlighted', '_currentIndex','_lastIndex',
@ -265,9 +267,11 @@ class TTkTabBar(TTkWidget):
self._updateTabs()
def addTab(self, label, data=None):
'''addTab'''
return self.insertTab(len(self._tabButtons), label, data)
def insertTab(self, index, label, data=None):
'''insertTab'''
if index <= self._currentIndex:
self._currentIndex += 1
button = TTkTabButton(parent=self, text=label, border=not self._small, closable=self._tabClosable)
@ -281,6 +285,7 @@ class TTkTabBar(TTkWidget):
@pyTTkSlot(int)
def removeTab(self, index):
'''removeTab'''
button = self._tabButtons[index]
self.layout().removeWidget(button)
self._tabButtons.pop(index)
@ -293,9 +298,11 @@ class TTkTabBar(TTkWidget):
self._updateTabs()
def tabData(self, index):
'''tabData'''
return self._tabData[index]
def setTabData(self, index, data):
'''setTabData'''
self._tabData[index] = data
def borderColor(self):
@ -310,16 +317,20 @@ class TTkTabBar(TTkWidget):
self.update()
def tabsClosable(self):
'''tabsClosable'''
return self._tabClosable
def setTabsClosable(self, closable):
'''setTabsClosable'''
self._tabClosable = closable
def currentIndex(self):
'''currentIndex'''
return self._currentIndex
@pyTTkSlot(int)
def setCurrentIndex(self, index):
'''setCurrentIndex'''
TTkLog.debug(index)
if 0 <= index < len(self._tabButtons):
self._currentIndex = index
@ -462,6 +473,7 @@ class TTkTabBar(TTkWidget):
'''
class TTkTabWidget(TTkFrame):
'''TTkTabWidget'''
__slots__ = (
'_tabBarTopLayout', '_tabBar', '_topLeftLayout', '_topRightLayout',
'_tabWidgets', '_spacer',
@ -513,9 +525,11 @@ class TTkTabWidget(TTkFrame):
self.tabCloseRequested = self._tabBar.tabCloseRequested
def widget(self, index):
'''widget'''
return self._tabWidgets[index]
def currentWidget(self):
'''currentWidget'''
for w in self._tabWidgets:
if w.isVisible():
return w
@ -523,6 +537,7 @@ class TTkTabWidget(TTkFrame):
@pyTTkSlot(TTkWidget)
def setCurrentWidget(self, widget):
'''setCurrentWidget'''
for i, w in enumerate(self._tabWidgets):
if widget == w:
self.setCurrentIndex(i)
@ -586,6 +601,7 @@ class TTkTabWidget(TTkFrame):
return True
def addMenu(self, text, position=TTkK.LEFT):
'''addMenu'''
button = _TTkTabMenuButton(text=text, borderColor=TTkCfg.theme.tabBorderColor)
self._tabBar.setSideEnd(self._tabBar.sideEnd() & ~position)
if position==TTkK.LEFT:
@ -602,12 +618,14 @@ class TTkTabWidget(TTkFrame):
return button
def addTab(self, widget, label, data=None):
'''addTab'''
widget.hide()
self._tabWidgets.append(widget)
self.layout().addWidget(widget)
self._tabBar.addTab(label, data)
def insertTab(self, index, widget, label, data=None):
'''insertTab'''
widget.hide()
self._tabWidgets.insert(index, widget)
self.layout().addWidget(widget)
@ -615,6 +633,7 @@ class TTkTabWidget(TTkFrame):
@pyTTkSlot(int)
def removeTab(self, index):
'''removeTab'''
self.layout().removeWidget(self._tabWidgets[index])
self._tabWidgets.pop(index)
self._tabBar.removeTab(index)

3
TermTk/TTkWidgets/texedit.py

@ -87,6 +87,7 @@ class _TTkTextEditViewLineNumber(TTkAbstractScrollView):
self._canvas.drawChar(pos=(w-1,y), char='', color=TTkCfg.theme.textEditLineNumberSeparatorColor)
class TTkTextEditView(TTkAbstractScrollView):
'''TTkTextEditView'''
__slots__ = (
'_textDocument', '_hsize',
'_textCursor', '_textColor', '_cursorParams',
@ -529,6 +530,7 @@ class TTkTextEditView(TTkAbstractScrollView):
self._pushCursor()
class TTkTextEdit(TTkAbstractScrollArea):
'''TTkTextEdit'''
__slots__ = (
'_textEditView',
'_lineNumberView', '_lineNumber',
@ -545,7 +547,6 @@ class TTkTextEdit(TTkAbstractScrollArea):
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._name = kwargs.get('name' , 'TTkTextEdit' )
if 'parent' in kwargs: kwargs.pop('parent')
self._textEditView = kwargs.get('textEditView', TTkTextEditView(*args, **kwargs))
# self.setFocusPolicy(self._textEditView.focusPolicy())

3
TermTk/TTkWidgets/window.py

@ -40,6 +40,7 @@ class _MinimizedButton(TTkButton):
self.clicked.connect(_cb)
class TTkWindow(TTkResizableFrame):
'''TTkWindow'''
__slots__ = (
'_title', '_mouseDelta', '_draggable',
'_btnClose', '_btnMax', '_btnMin', '_btnReduce',
@ -121,9 +122,11 @@ class TTkWindow(TTkResizableFrame):
self.hide()
def windowFlag(self):
'''windowFlag'''
return self._flags
def setWindowFlag(self, flag):
'''setWindowFlag'''
if self._flags == flag: return
self._flags = flag
self._btnClose.setVisible( bool(flag & TTkK.WindowFlag.WindowCloseButtonHint))

Loading…
Cancel
Save