Browse Source

Added Borderless Tab widget, FIX: show event propagate to child

pull/4/head
Eugenio Parodi 5 years ago
parent
commit
3946c3ca6a
  1. 49
      TermTk/TTkCore/canvas.py
  2. 6
      TermTk/TTkGui/theme.py
  3. 9
      TermTk/TTkWidgets/tabwidget.py
  4. 13
      TermTk/TTkWidgets/widget.py
  5. 8
      tests/test.showcase.001.py

49
TermTk/TTkCore/canvas.py

@ -55,6 +55,8 @@ class TTkCanvas:
self._visible = True
self._width = 0
self._height = 0
self._data = [[0]]
self._colors = [[TTkColor.RST]]
self._newWidth = kwargs.get('width', 0 )
self._newHeight = kwargs.get('height', 0 )
self.updateSize()
@ -290,19 +292,30 @@ class TTkCanvas:
def drawTab(
self, pos, size,
labels, labelsPos, selected,
offset, leftScroller, rightScroller,
offset, leftScroller, rightScroller, slim=False,
color=TTkColor.RST, borderColor=TTkColor.RST, selectColor=TTkColor.RST):
x,y = pos
w,h = size
tt = TTkCfg.theme.tab
# phase 0 - Draw the Bottom bar
bottomBar = tt[11]+tt[12]*(w-2)+tt[15]
self.drawText(pos=(x,y+2),text=bottomBar)
if slim:
bottomBar = tt[16]+tt[12]*(w-2)+tt[17]
bottomPos = y+1
else:
bottomBar = tt[11]+tt[12]*(w-2)+tt[15]
bottomPos = y+2
self.drawText(pos=(x,bottomPos),text=bottomBar)
# phase 1 - Draw From left to 'Selected'
# phase 2 - Draw From right to 'Selected'
def _drawTab(x,y,a,b,c,d,e,f,g,h,txt,txtColor,borderColor):
text = labels[i]
posx = labelsPos[i]
def _drawTabSlim(x,y,a,b,c,d,e,txt,txtColor,borderColor):
lentext = len(txt)
center = a+txt+b
bottom = c+d*(lentext)+e
self.drawText(pos=(x,y),text=center, color=borderColor)
self.drawText(pos=(x+1,y),text=txt, color=txtColor)
self.drawText(pos=(x,y+1),text=bottom, color=borderColor)
def _drawTab(x,y,a,b,c,d,e,f,g,h,i,j,k,l,m,txt,txtColor,borderColor,slim):
if slim: return _drawTabSlim(x,y,i,j,k,l,m,txt,txtColor,borderColor)
lentext = len(txt)
top = a+b*lentext+c
center = d+txt+e
@ -316,29 +329,35 @@ class TTkCanvas:
list(reversed(range(offset+1, len(labels)) )):
text = labels[i]
posx = labelsPos[i]
_drawTab(x+posx, y, tt[0], tt[1], tt[3], tt[9], tt[9], tt[12], tt[12], tt[12], text, color, borderColor)
_drawTab(x+posx,y,tt[0],tt[1],tt[3],tt[9],tt[9],tt[12],tt[12],tt[12],tt[9],tt[9],tt[13],tt[12],tt[13], text, color, borderColor, slim)
# phase 3 - Draw 'Selected'
if selected != -1:
i = selected
text = labels[i]
posx = labelsPos[i]
_drawTab(x+posx, y, tt[4], tt[5], tt[6], tt[10], tt[10], tt[14], tt[12], tt[14], text, selectColor, borderColor)
_drawTab(x+posx,y,tt[4],tt[5],tt[6],tt[10],tt[10],tt[14],tt[12],tt[14],tt[10],tt[10],tt[14],tt[12],tt[14], text, selectColor, borderColor, slim)
if selected != offset:
i = offset
text = labels[i]
posx = labelsPos[i]
_drawTab(x+posx, y, tt[0], tt[1], tt[3], tt[9], tt[9], tt[13], tt[12], tt[13], text, color, borderColor)
_drawTab(x+posx,y,tt[0],tt[1],tt[3],tt[9],tt[9],tt[13],tt[12],tt[13],tt[9],tt[9],tt[13],tt[12],tt[13], text, color, borderColor, slim)
# phase 4 - Draw left right tilt
if leftScroller:
top = tt[7]+tt[1]
center = tt[9]+tt[16]
self.drawText(pos=(x,y+0),text=top, color=borderColor)
self.drawText(pos=(x,y+1),text=center, color=borderColor)
center = tt[9]+tt[18]
if slim:
self.drawText(pos=(x,y),text=center, color=borderColor)
else:
self.drawText(pos=(x,y+0),text=top, color=borderColor)
self.drawText(pos=(x,y+1),text=center, color=borderColor)
if rightScroller:
top = tt[1]+tt[8]
center = tt[17]+tt[9]
self.drawText(pos=(x+w-2,y+0),text=top, color=borderColor)
self.drawText(pos=(x+w-2,y+1),text=center, color=borderColor)
center = tt[19]+tt[9]
if slim:
self.drawText(pos=(x+w-2,y),text=center, color=borderColor)
else:
self.drawText(pos=(x+w-2,y+0),text=top, color=borderColor)
self.drawText(pos=(x+w-2,y+1),text=center, color=borderColor)
def drawHChart(self, pos, values, zoom=1.0, color=TTkColor.RST):
x,y=pos

6
TermTk/TTkGui/theme.py

@ -136,9 +136,9 @@ class TTkTheme():
'','','','','','','','','',
#9 10
'','',
#11 12 13 14 15
'','','','','',
#16 17
#11 12 13 14 15 16 17
'','','','','','','',
#18 19
'',''
)
'''

9
TermTk/TTkWidgets/tabwidget.py

@ -74,7 +74,7 @@ class TTkTabWidget(TTkFrame):
if self.border():
self.setPadding(3,1,1,1)
else:
self.setPadding(3,0,0,0)
self.setPadding(2,0,0,0)
self.setFocusPolicy(TTkK.ClickFocus)
@ -125,7 +125,10 @@ class TTkTabWidget(TTkFrame):
x,y = evt.x, evt.y
w = self.width()
offset = self._offset
if y>2: return False
if self.border():
if y>2: return False
else:
if y>1: return False
# Check from the selected to the left and from selected+1 to the right
if self._leftScroller and x<2 and offset>0:
self._offset -= 1
@ -166,7 +169,7 @@ class TTkTabWidget(TTkFrame):
if self.border():
self._canvas.drawBox(pos=(0,2),size=(self._width,self._height-2), color=self._borderColor, grid=9)
self._canvas.drawTab(
pos=(0,0), size=self.size(),
pos=(0,0), size=self.size(), slim=not self.border(),
labels=self._labels, labelsPos=self._labelsPos,
selected=self._currentIndex, offset=self._offset,
leftScroller=self._leftScroller, rightScroller=self._rightScroller,

13
TermTk/TTkWidgets/widget.py

@ -95,6 +95,9 @@ class TTkWidget:
def __del__(self):
TTkLog.debug("DESTRUCTOR")
if self._parent is not None:
self._parent.removeWidget(self)
self._parent = None
def addWidget(self, widget):
widget._parent = self
@ -382,12 +385,20 @@ class TTkWidget:
# elif isinstance(item, CuLayout):
# CuWidget._showHandle(item)
def _propagateShow(self):
if not self._visible: return
self.update(updateLayout=True, updateParent=True)
for item in self._layout.zSortedItems:
if isinstance(item, TTkWidgetItem) and not item.isEmpty():
child = item.widget()
child._propagateShow()
@pyTTkSlot()
def show(self):
if self._visible: return
self._canvas.show()
self._visible = True
self.update(updateLayout=True, updateParent=True)
self._propagateShow()
#@staticmethod
#def _hideHandle(layout):

8
tests/test.showcase.001.py

@ -37,8 +37,8 @@ from showcase.splitter import demoSplitter
from showcase.windows import demoWindows
from showcase.formwidgets import demoFormWidgets
def demoShowcase(root= None):
tabWidget1 = ttk.TTkTabWidget(parent=root, border=True)
def demoShowcase(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.TTkTestWidget(border=True, title="Frame1.2"), " Label Test 1.2 ")
tabWidget1.addTab(demoLayout(), " Layout Test ")
@ -62,9 +62,11 @@ def main():
if args.f:
root.setLayout(ttk.TTkGridLayout())
winTabbed1 = root
border = False
else:
winTabbed1 = ttk.TTkWindow(parent=root,pos=(0,0), size=(120,40), title="Test Tab", border=True, layout=ttk.TTkGridLayout())
demoShowcase(winTabbed1)
border = True
demoShowcase(winTabbed1, border)
root.mainloop()
if __name__ == "__main__":

Loading…
Cancel
Save