Browse Source

Added eyecandies, frame title and fixed boxlayout wrong size

pull/3/head
Eugenio Parodi 5 years ago
parent
commit
f65a4f7765
  1. 1
      .gitignore
  2. 36
      TermTk/TTkCore/canvas.py
  3. 1
      TermTk/TTkCore/helper.py
  4. 2
      TermTk/TTkCore/ttk.py
  5. 27
      TermTk/TTkGui/theme.py
  6. 2
      TermTk/TTkLayouts/gridlayout.py
  7. 19
      TermTk/TTkWidgets/button.py
  8. 15
      TermTk/TTkWidgets/frame.py
  9. 1
      TermTk/TTkWidgets/widget.py
  10. 2
      docs/TODO.md
  11. 18
      tests/test.ui.003.layout.py

1
.gitignore vendored

@ -4,6 +4,7 @@ __pycache__/
*$py.class
# other
*.swp
tmp
profiler.txt
.vscode

36
TermTk/TTkCore/canvas.py

@ -108,10 +108,46 @@ class TTkCanvas:
for i in range(0, len(arr)):
self._set(y, x+i, arr[i], color)
def drawBoxTitle(self, pos, size, text, color=TTkColor.RST, colorText=TTkColor.RST, grid=0):
if not self._visible: return
x,y = pos
w,h = size
if w < 4: return
gg = self._theme.grid[grid]
if len(text) > w-4:
text = text[:w-4]
l = (w-2-len(text))//2
r = l+len(text)+1
self._set(y,l, gg[7], color)
self._set(y,r, gg[6], color)
self.drawText((l+1,y),text,colorText)
def drawBox(self, pos, size, color=TTkColor.RST):
self.drawGrid(pos=pos, size=size, color=color)
def drawButtonBox(self, pos, size, color=TTkColor.RST, grid=0):
if not self._visible: return
x,y = pos
w,h = size
gg = self._theme.buttonBox[grid]
# 4 corners
self._set(y, x, gg[0], color)
self._set(y, x+w-1, gg[2], color)
self._set(y+h-1, x, gg[6], color)
self._set(y+h-1, x+w-1, gg[8], color)
if w > 2:
for i in range(x+1,x+w-1):
self._set(y, i, gg[1], color)
self._set(y+h-1, i, gg[7], color)
if h > 2:
for i in range(y+1,y+h-1):
self._set(i, x, gg[3], color)
self._set(i, x+w-1, gg[5], color)
def drawGrid(self, pos, size, hlines=[], vlines=[], color=TTkColor.RST, grid=0):
if not self._visible: return
x,y = pos

1
TermTk/TTkCore/helper.py

@ -62,6 +62,7 @@ class TTkHelper:
updateBuffers = [w for w in TTkHelper._updateBuffer]
updateWidgets = [w for w in TTkHelper._updateWidget]
# TTkLog.debug(f"{len(TTkHelper._updateBuffer)} {len(TTkHelper._updateWidget)}")
for widget in TTkHelper._updateWidget:
parent = widget.parentWidget()
while parent is not None:

2
TermTk/TTkCore/ttk.py

@ -74,7 +74,7 @@ class TTk(TTkWidget):
curtime = time.time()
self.frame+=1
delta = curtime - self.time
if delta > 3:
if delta > 5:
TTkLog.debug(f"fps: {int(self.frame/delta)}")
self.frame = 0
self.time = curtime

27
TermTk/TTkGui/theme.py

@ -43,10 +43,15 @@ class TTkTheme():
'','')
'''
grid0 grid1 grid2 grid3
grid4 grid5 grid6 grid7 grid8
'''
grid = (
( '','', # Grid 0
@ -66,5 +71,19 @@ class TTkTheme():
'','','','',
'','','',))
'''
grid0 grid1
'''
buttonBox = (
('','','',
'',' ','',
'','',''),
('','','',
'',' ','',
'','',''))
hscroll = ('','','','')
vscroll = ('','','','')

2
TermTk/TTkLayouts/gridlayout.py

@ -79,6 +79,8 @@ class TTkGridLayout(TTkLayout):
# addWidget(self, widget, row, col)
def addWidget(self, *args, **kwargs):
widget = args[0]
self.removeWidget(widget)
widget._parent = self.parentWidget()
if len(args) == 3:
row = args[1]
col = args[2]

19
TermTk/TTkWidgets/button.py

@ -46,26 +46,25 @@ class TTkButton(TTkWidget):
def paintEvent(self):
if self._pressed:
# borderColor = TTkColor.fg("#00ffff")
# textColor = TTkColor.fg("#0000ff")
borderColor = TTkColor.fg("#ffff88")+TTkColor.BOLD
textColor = TTkColor.fg("#00ff00")+TTkColor.BOLD
else:
# borderColor = TTkColor.fg("#ffff00")
borderColor = TTkColor.RST
textColor = TTkColor.fg("#00ff00")
textColor = TTkColor.RST
grid = 0
else:
borderColor = TTkColor.RST+TTkColor.BOLD
textColor = TTkColor.RST+TTkColor.BOLD
grid = 1
self._canvas.drawText(pos=(1,1), color=textColor ,text=self.text)
if self._border:
self._canvas.drawBox(pos=(0,0),size=(self._width,self._height),color=borderColor)
self._canvas.drawButtonBox(pos=(0,0),size=(self._width,self._height),color=borderColor, grid=grid)
def mousePressEvent(self, evt):
TTkLog.debug(f"{self._name} Test Mouse {evt}")
TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = True
self.update()
return True
def mouseReleaseEvent(self, evt):
TTkLog.debug(f"{self._name} Test Mouse {evt}")
TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = False
self.update()
self.clicked.emit()

15
TermTk/TTkWidgets/frame.py

@ -26,14 +26,25 @@ from TermTk.TTkCore.log import TTkLog
from .widget import *
class TTkFrame(TTkWidget):
__slots__ = ('_border')
__slots__ = ('_border','_title', '_titleColor', '_borderColor')
def __init__(self, *args, **kwargs):
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkFrame' )
self._title = kwargs.get('title' , '' )
self._border = kwargs.get('border', True )
self._borderColor = kwargs.get('borderColor', TTkColor.RST )
self._titleColor = kwargs.get('titleColor', TTkColor.RST )
if self._border:
self.setPadding(1,1,1,1)
def paintEvent(self):
if self._border:
self._canvas.drawBox(pos=(0,0),size=(self._width,self._height))
self._canvas.drawBox(pos=(0,0),size=(self._width,self._height), color=self._borderColor)
if self._title != '':
self._canvas.drawBoxTitle(
pos=(0,0),
size=(self._width,self._height),
text=self._title,
color=self._borderColor,
colorText=self._titleColor)

1
TermTk/TTkWidgets/widget.py

@ -106,6 +106,7 @@ class TTkWidget:
self.update(repaint=True, updateLayout=True)
def addWidget(self, widget):
widget._parent = self
if self._layout is not None:
self._layout.addWidget(widget)
self.update(repaint=True, updateLayout=True)

2
docs/TODO.md

@ -43,6 +43,8 @@
## Widgets
- [ ] Add Size Policy (fixed minimum maximum expanding)
- [x] Add Show/Hide
- [ ] Clean the way the parent is assigned, propagated
*Widget \[setParent, addWidget, . . ], GridLayout \[addWidget]*
### Layout
- [ ] Add Weight in V and H Layout
- [ ] Add addLayout method

18
tests/test.ui.003.layout.py

@ -33,28 +33,30 @@ root = ttk.TTk()
root.setLayout(ttk.TTkHBoxLayout())
ttk.TTkTestWidget(parent=root,border=True, maxWidth=52)
rightframe = ttk.TTkFrame(parent=root)
rightframe = ttk.TTkFrame(parent=root, border=True, title="V Box Layout", titleColor=ttk.TTkColor.BOLD+ttk.TTkColor.fg('#8888dd'))
rightframe.setLayout(ttk.TTkVBoxLayout())
gridFrame = ttk.TTkFrame(parent=rightframe, border=False)
gridFrame = ttk.TTkFrame(parent=rightframe, border=True, title="Grid Layout", titleColor=ttk.TTkColor.fg('#88dd88'))
gridFrame.setLayout(ttk.TTkGridLayout())
ttk.TTkButton(parent=gridFrame, text="Button1")
ttk.TTkButton(parent=gridFrame, text="Button2")
gridFrame.layout().addWidget(ttk.TTkButton(text="Button (1,0)"),1,0)
ttk.TTkButton(parent=gridFrame, text="Button4")
gridFrame.layout().addWidget(ttk.TTkButton(text="Button (0,3)"),0,3)
gridFrame.layout().addWidget(ttk.TTkButton(text="Button (1,2)"),1,2)
# Test (add a widget to the same parent with a different layout params than the default)
gridFrame.layout().addWidget(ttk.TTkButton(parent=gridFrame, text="Button (2,1)"),2,1)
gridFrame.layout().addWidget(ttk.TTkButton(text="Button (5,5)"),5,5)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True),0,5)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True),2,3)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True),5,3)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True),5,1)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True,title="Frame1"),0,5)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True,title="Frame2"),2,3)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True,title="Frame3"),5,3)
gridFrame.layout().addWidget(ttk.TTkFrame(border=True,title="Frame4"),5,1)
centerrightframe=ttk.TTkFrame(parent=rightframe, border=True)
centerrightframe=ttk.TTkFrame(parent=rightframe, border=True, title="H Box Layout", titleColor=ttk.TTkColor.fg('#dd88dd'))
centerrightframe.setLayout(ttk.TTkHBoxLayout())
ttk.TTkTestWidget(parent=rightframe, border=True)
ttk.TTkTestWidget(parent=rightframe, border=True, title="Test Widget", titleColor=ttk.TTkColor.fg('#dddddd'))
smallframe = ttk.TTkFrame(parent=centerrightframe, border=True)

Loading…
Cancel
Save