Browse Source

feat: add iterWidgets to KodeTab (#390)

pull/393/head
Pier CeccoPierangioliEugenio 11 months ago committed by GitHub
parent
commit
40ad352478
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 88
      demo/ttkode.py
  2. 31
      libs/pyTermTk/TermTk/TTkWidgets/kodetab.py

88
demo/ttkode.py

@ -29,17 +29,19 @@ import time
sys.path.append(os.path.join(sys.path[0],'..'))
from TermTk import TTk, TTkLog, TTkHelper
from TermTk import TTkGridLayout, TTkFileTree, TTkWidget, TTkFrame
from TermTk import TTkWindow, TTkColor, TTkColorGradient, TTkRadioButton, TTkSpacer
from TermTk import TTkTheme, TTkK, TTkSplitter, TTkTabWidget, TTkKodeTab
# TTkFileTree(parent=self, path=".")
class _KolorFrame(TTkFrame):
__slots__ = ('_fillColor')
def __init__(self, *args, **kwargs):
TTkFrame.__init__(self, *args, **kwargs)
self._fillColor = kwargs.get('fillColor', TTkColor.RST)
import TermTk as ttk
# ttk.TTkFileTree(parent=self, path=".")
class _KolorFrame(ttk.TTkFrame):
__slots__ = ('_fillColor', '_text')
def __init__(self, fillColor=ttk.TTkColor.RST, text:str="", **kwargs):
self._text = text
self._fillColor = fillColor
ttk.TTkFrame.__init__(self, **kwargs)
self.setFocusPolicy(ttk.TTkK.FocusPolicy.ClickFocus)
def text(self):
return self._text
def setFillColor(self, color):
self._fillColor = color
@ -48,6 +50,7 @@ class _KolorFrame(TTkFrame):
w,h = self.size()
for y in range(h):
canvas.drawText(pos=(0,y),text='',width=w,color=self._fillColor)
canvas.drawText(pos=(2,2),text=self._text)
return super().paintEvent(canvas)
def main():
@ -55,38 +58,39 @@ def main():
parser.add_argument('-f', help='Full Screen', action='store_true')
args = parser.parse_args()
TTkTheme.loadTheme(TTkTheme.NERD)
ttk.TTkTheme.loadTheme(ttk.TTkTheme.NERD)
root = TTk(title="ttkode")
layout = TTkGridLayout()
root = ttk.TTk(title="ttkode", mouseTrack=True)
layout = ttk.TTkGridLayout()
if args.f:
root.setLayout(layout)
container = root
border = False
else:
container = TTkWindow(
container = ttk.TTkWindow(
parent=root,pos=(0,0), size=(100,40), title="pyTermTk Showcase", border=True, layout=layout,
flags = TTkK.WindowFlag.WindowMaximizeButtonHint | TTkK.WindowFlag.WindowCloseButtonHint)
border = True
splitter = TTkSplitter(parent=container)
splitter.addWidget(fileTree:=TTkFileTree(path='.'), 15)
flags = ttk.TTkK.WindowFlag.WindowMaximizeButtonHint | ttk.TTkK.WindowFlag.WindowCloseButtonHint)
border = False
hSplitter = TTkSplitter(parent=splitter, orientation=TTkK.HORIZONTAL)
kt = TTkKodeTab(parent=hSplitter, border=False, closable=True)
at = ttk.TTkAppTemplate(parent=container, border=border)
kodeTab = ttk.TTkKodeTab(border=False, closable=True)
fileTree = ttk.TTkFileTree(path='.')
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#008800", modifier=TTkColorGradient(increment=-6)), title="uno"),"uno")
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#880000", modifier=TTkColorGradient(increment=-6)), title="due"),"due")
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#000088", modifier=TTkColorGradient(increment=-6)), title="tre"),"tre")
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#888800", modifier=TTkColorGradient(increment=-6)), title="quattro"),"quattro")
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#008888", modifier=TTkColorGradient(increment=-6)), title="cinque"),"cinque")
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#880088", modifier=TTkColorGradient(increment=-6)), title="sei"),"sei")
at.setWidget(widget=fileTree, position=at.LEFT, size=15)
at.setWidget(widget=kodeTab, position=at.MAIN)
at.setWidget(widget=ttk.TTkLogViewer(), position=at.BOTTOM, size=3, title="Logs")
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#888888", modifier=TTkColorGradient(increment=-6)), title="sette"),"sette")
kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#444444", modifier=TTkColorGradient(increment= 3)), title="otto"),"otto")
kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#008800", modifier=ttk.TTkColorGradient(increment=-6)), title=" uno ")," uno ")
kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#880000", modifier=ttk.TTkColorGradient(increment=-6)), title=" due ")," due ")
kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#000088", modifier=ttk.TTkColorGradient(increment=-6)), title=" tre ")," tre ")
kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#888800", modifier=ttk.TTkColorGradient(increment=-6)), title=" quattro ")," quattro ")
kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#008888", modifier=ttk.TTkColorGradient(increment=-6)), title=" cinque ")," cinque ")
kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#880088", modifier=ttk.TTkColorGradient(increment=-6)), title=" sei ")," sei ")
# kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#888888", modifier=ttk.TTkColorGradient(increment=-6)), title=" sette ")," sette ")
# kodeTab.addTab(_KolorFrame(fillColor=ttk.TTkColor.bg("#444444", modifier=ttk.TTkColorGradient(increment= 3)), title=" otto ")," otto ")
m1 = kt.addMenu('Test1')
m2 = kt.addMenu('Test2')
m1 = kodeTab.addMenu('Test1')
m2 = kodeTab.addMenu('Test2')
m1.addMenu("Open",checkable=True)
m1.addMenu("Save",checkable=True,checked=True)
@ -96,8 +100,24 @@ def main():
m2.addMenu("m2 Save",checkable=True,checked=True)
m2.addMenu("m2 Save as").setDisabled()
fileTree.fileActivated.connect(lambda item:kt.addTab(_KolorFrame(fillColor=TTkColor.bg("#888888", modifier=TTkColorGradient(increment=-6)), title=item.path()),"File")
)
def _openFile(item):
kt = _KolorFrame(
text=item.path(),
title=item.path(),
fillColor=ttk.TTkColor.bg("#888888", modifier=ttk.TTkColorGradient(increment=-6)),)
kt.focusChanged.connect(lambda _f, _p=item.path() : ttk.TTkLog.debug(f"Focus Changed ({_f}) -> {_p}"))
kodeTab.addTab(kt, 'File')
kodeTab.setCurrentWidget(kt)
for wid in kodeTab.iterWidgets():
ttk.TTkLog.debug(wid)
kt.setFocus()
fileTree.fileActivated.connect(_openFile)
def _reportClose(tab:ttk.TTkTabWidget, num:int):
ttk.TTkLog.debug(f"DEL: {num} - {tab} - {tab.widget(num).text()}")
kodeTab.tabCloseRequested.connect(_reportClose)
root.mainloop()

31
libs/pyTermTk/TermTk/TTkWidgets/kodetab.py

@ -37,23 +37,6 @@ from TermTk.TTkWidgets.frame import TTkFrame
from TermTk.TTkLayouts.gridlayout import TTkGridLayout
from TermTk.TTkGui.drag import TTkDnDEvent
class _KolorFrame(TTkFrame):
__slots__ = ('_fillColor')
def __init__(self, *,
fillColor:TTkColor=TTkColor.RST,
**kwargs) -> None:
self._fillColor = fillColor
super().__init__(*kwargs)
def setFillColor(self, color):
self._fillColor = color
def paintEvent(self, canvas):
w,h = self.size()
for y in range(h):
canvas.drawText(pos=(0,y),text='',width=w,color=self._fillColor)
return super().paintEvent()
class _TTkKodeTab(TTkTabWidget):
__slots__ = (
'_frameOverlay','_baseWidget')
@ -85,6 +68,10 @@ class _TTkKodeTab(TTkTabWidget):
self._tabBarTopLayout.update()
kt._tabBarTopLayout.update()
def iterWidgets(self):
for i in range(self.count()):
yield self.widget(i)
def dragEnterEvent(self, evt:TTkDnDEvent) -> bool:
TTkLog.debug(f"Drag Enter")
return True
@ -243,6 +230,16 @@ class TTkKodeTab(TTkSplitter):
while type(item:=kt.widget(0)) != _TTkKodeTab: kt = item
return item if type(item)==_TTkKodeTab else None
def iterWidgets(self):
def _iterSplitter(split:TTkSplitter):
for i in range(split.count()):
_wid = split.widget(i)
if issubclass(type(_wid), TTkSplitter):
yield from _iterSplitter(_wid)
elif issubclass(type(_wid), _TTkKodeTab):
yield from _wid.iterWidgets()
yield from _iterSplitter(self)
def setDropEventProxy(self, proxy:Callable) -> None:
for widget in self.layout().iterWidgets(onlyVisible=False):
if issubclass(type(widget),_TTkKodeTab):

Loading…
Cancel
Save