diff --git a/TermTk/TTkCore/canvas.py b/TermTk/TTkCore/canvas.py index 845b92ba..37fc95ae 100644 --- a/TermTk/TTkCore/canvas.py +++ b/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 diff --git a/TermTk/TTkGui/theme.py b/TermTk/TTkGui/theme.py index 00c372a3..81232ea1 100644 --- a/TermTk/TTkGui/theme.py +++ b/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 '◀','▶' ) ''' diff --git a/TermTk/TTkWidgets/tabwidget.py b/TermTk/TTkWidgets/tabwidget.py index f1f85003..257245ad 100644 --- a/TermTk/TTkWidgets/tabwidget.py +++ b/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, diff --git a/TermTk/TTkWidgets/widget.py b/TermTk/TTkWidgets/widget.py index b3c64c2b..b8d8bcd8 100644 --- a/TermTk/TTkWidgets/widget.py +++ b/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): diff --git a/tests/test.showcase.001.py b/tests/test.showcase.001.py index b18ae2fd..9a019189 100755 --- a/tests/test.showcase.001.py +++ b/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__":