Browse Source

Adapted the tabwidget and the combobox to the new layout

pull/167/head
Eugenio Parodi 3 years ago
parent
commit
b111dc937d
  1. 10
      TermTk/TTkCore/helper.py
  2. 5
      TermTk/TTkWidgets/combobox.py
  3. 24
      TermTk/TTkWidgets/tabwidget.py
  4. 10
      TermTk/TTkWidgets/widget.py

10
TermTk/TTkCore/helper.py

@ -197,8 +197,9 @@ class TTkHelper:
TTkHelper._rootWidget.rootLayout().addWidget(widget)
widget.setFocus()
widget.raiseWidget()
for w in widget.rootLayout().iterWidgets(onlyVisible=True):
w.update()
if hasattr(widget,'rootLayout'):
for w in widget.rootLayout().iterWidgets(onlyVisible=True):
w.update()
@staticmethod
def getOverlay():
@ -372,7 +373,10 @@ class TTkHelper:
wx,wy,ww,wh = widget.geometry()
if wx <= x < wx+ww and wy <= y < wy+wh:
return TTkHelper.widgetAt(x-wx, y-wy, widget.rootLayout())
if hasattr(widget,'rootLayout'):
return TTkHelper.widgetAt(x-wx, y-wy, widget.rootLayout())
else:
return widget
continue
elif item.layoutItemType() == TTkK.LayoutItem:

5
TermTk/TTkWidgets/combobox.py

@ -30,11 +30,12 @@ from TermTk.TTkCore.helper import TTkHelper
from TermTk.TTkCore.string import TTkString
from TermTk.TTkLayouts.gridlayout import TTkGridLayout
from TermTk.TTkWidgets.widget import TTkWidget
from TermTk.TTkWidgets.container import TTkContainer
from TermTk.TTkWidgets.list_ import TTkList
from TermTk.TTkWidgets.lineedit import TTkLineEdit
from TermTk.TTkWidgets.resizableframe import TTkResizableFrame
class TTkComboBox(TTkWidget):
class TTkComboBox(TTkContainer):
''' TTkComboBox:
Editable = False
@ -67,7 +68,7 @@ class TTkComboBox(TTkWidget):
self.currentIndexChanged = pyTTkSignal(int)
self.currentTextChanged = pyTTkSignal(str)
self.editTextChanged = pyTTkSignal(str)
TTkWidget.__init__(self, *args, **kwargs)
super().__init__(*args, **kwargs)
# self.checked = pyTTkSignal()
self._lineEdit = TTkLineEdit(parent=self)
self._list = kwargs.get('list', [] )

24
TermTk/TTkWidgets/tabwidget.py

@ -57,19 +57,17 @@ class _TTkTabBarDragData():
class TTkTabButton(TTkButton):
'''TTkTabButton'''
__slots__ = ('_sideEnd', '_tabStatus', '_closable', 'closeClicked', '_closeButton')
__slots__ = ('_sideEnd', '_tabStatus', '_closable', 'closeClicked', '_closeButtonPressed')
def __init__(self, *args, **kwargs):
self._sideEnd = TTkK.NONE
self._tabStatus = TTkK.Unchecked
self._closable = kwargs.get('closable', False)
self.closeClicked = pyTTkSignal()
TTkButton.__init__(self, *args, **kwargs)
self._closeButtonPressed = False
size = self.text().termWidth() + 2
if self._closable:
size += 3
self._closeButton = TTkButton(parent=self, border=False, text="x", pos=(size-4,1 if self._border else 0), size=(3,1))
self._closeButton.setFocusPolicy(TTkK.ParentFocus)
self._closeButton.clicked.connect(self.closeClicked.emit)
if self._border:
self.resize(size, 3)
self.setMinimumSize(size, 3)
@ -97,14 +95,28 @@ class TTkTabButton(TTkButton):
# This is a hack to force the action aftet the keypress
# And not key release as normally happen to the button
def mousePressEvent(self, evt):
x,y = evt.x,evt.y
w,h = self.size()
self._closeButtonPressed = False
if self._closable and evt.key == TTkK.MidButton:
self.closeClicked.emit()
return True
if y == (1 if self._border else 0) and w-4<=x<w-1:
self._closeButtonPressed = True
return True
return super().mouseReleaseEvent(evt)
def mouseReleaseEvent(self, evt):
x,y = evt.x,evt.y
w,h = self.size()
if y == (1 if self._border else 0) and w-4<=x<w-1 and self._closeButtonPressed:
self._closeButtonPressed = False
self.closeClicked.emit()
return True
self._closeButtonPressed = False
return False
def mouseDragEvent(self, evt) -> bool:
drag = TTkDrag()
self._closeButtonPressed = False
if tb := self.parentWidget():
if issubclass(type(tb),TTkTabBar):
if tw:= tb.parentWidget():
@ -124,12 +136,16 @@ class TTkTabButton(TTkButton):
return super().mouseDragEvent(evt)
def paintEvent(self, canvas):
w,h = self.size()
canvas.drawTabButton(
pos=(0,0), size=self.size(),
small=(not self._border),
sideEnd=self._sideEnd, status=self._tabStatus,
color=self._borderColor )
canvas.drawText(pos=(1,1 if self._border else 0), text=self.text(), color=self.color())
if self._closable:
canvas.drawText(pos=(w-4,1 if self._border else 0), text="[X]", color=self.color())
class _TTkTabMenuButton(TTkMenuBarButton):
def __init__(self, *args, **kwargs):

10
TermTk/TTkWidgets/widget.py

@ -169,9 +169,13 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents):
# TODO: Check this,
# The parent should always have a layout
if hasattr(self._parent,'layout') and self._parent.layout():
self._parent.layout().addWidget(self)
self._parent.update(repaint=True, updateLayout=True)
if self._parent:
if not hasattr(self._parent,'layout'):
TTkLog.warn(f"The parent={self._parent} is not a container")
else:
if self._parent.layout():
self._parent.layout().addWidget(self)
self._parent.update(repaint=True, updateLayout=True)
self.update(repaint=True, updateLayout=True)

Loading…
Cancel
Save