Skip to content

Commit fef1b0e

Browse files
chore: autogen code for scrollarea classes (#406)
1 parent e9ecb19 commit fef1b0e

11 files changed

Lines changed: 1357 additions & 95 deletions

File tree

.github/workflows/testing.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,24 @@ on:
1111
branches: [ main ]
1212

1313
jobs:
14+
test-autogen:
15+
runs-on: self-hosted
16+
steps:
17+
- uses: actions/checkout@v4
18+
with:
19+
ref: ${{ github.sha }}
20+
- run: |
21+
PYTHONPATH=libs/pyTermTk tools/autogenForwarded.py --apply
22+
if [[ $(git status --porcelain) ]] ; then
23+
git diff
24+
echo "❌ PR failed due to missing release files:"
25+
echo " - run: PYTHONPATH=libs/pyTermTk tools/autogenForwarded.py --apply"
26+
echo " and push the generated files"
27+
exit 1
28+
else
29+
echo "✅ - Release Clean"
30+
fi
31+
1432
build:
1533
# runs-on: ubuntu-latest
1634
runs-on: self-hosted

docs/source/sphinx_modules/sphinx_ext_autosummary_reworked.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,16 @@ def _getSignals(_obj):
164164

165165
def _getSignalsForwarded(_obj):
166166
ret = {}
167-
if hasattr(_obj,'_forwardedSignals'):
168-
ret['baseClass'] = _obj._forwardWidget.__name__
169-
ret['signals'] = sorted(_obj._forwardedSignals)
167+
if hasattr(_obj,'_ttk_forward'):
168+
ret['baseClass'] = _obj._ttk_forward.forwardClass.__name__
169+
ret['signals'] = sorted(_obj._ttk_forward.signals)
170170
return ret
171171

172172
def _getMethodsForwarded(_obj):
173173
ret = {}
174-
if hasattr(_obj,'_forwardedMethods'):
175-
ret['baseClass'] = _obj._forwardWidget.__name__
176-
ret['methods'] = sorted(_obj._forwardedMethods)
174+
if hasattr(_obj,'_ttk_forward'):
175+
ret['baseClass'] = _obj._ttk_forward.forwardClass.__name__
176+
ret['methods'] = sorted(_obj._ttk_forward.methods)
177177
return ret
178178

179179
def _parseModules(_mod):
@@ -278,10 +278,10 @@ def _mergeDoc(_da,_db,_title=''):
278278
print(ttk.TTkString(f"[{_name}] Params in the class docstring", ttk.TTkColor.BG_RED + ttk.TTkColor.FG_YELLOW).toAnsi())
279279
if hasattr(_obj,'__init__'):
280280
_obj.__doc__ = _mergeDoc(_obj.__doc__, _obj.__init__.__doc__)
281-
if hasattr(_obj,'_forwardWidget') and hasattr(_obj._forwardWidget,'__init__'):
281+
if hasattr(_obj,'_ttk_forward') and hasattr(_obj._ttk_forward.forwardClass,'__init__'):
282282
_obj.__doc__ = _mergeDoc(_obj.__doc__,
283-
_obj._forwardWidget.__init__.__doc__,
284-
f"\n:py:class:`{_obj._forwardWidget.__name__}`'s forwarded init params:\n")
283+
_obj._ttk_forward.forwardClass.__init__.__doc__,
284+
f"\n:py:class:`{_obj._ttk_forward.forwardClass.__name__}`'s forwarded init params:\n")
285285
for _iname in ttkInherited[_name]:
286286
if _iname not in ttkClasses:
287287
continue

libs/pyTermTk/TermTk/TTkAbstract/abstractscrollarea.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222

2323
__all__ = ['TTkAbstractScrollArea']
2424

25+
from dataclasses import dataclass
26+
from typing import List,Any,Type
27+
2528
from TermTk.TTkCore.constant import TTkK
2629
# from TermTk.TTkCore.log import TTkLog
2730
from TermTk.TTkCore.signal import pyTTkSlot
@@ -31,6 +34,13 @@
3134
from TermTk.TTkLayouts.gridlayout import TTkGridLayout
3235
from TermTk.TTkAbstract.abstractscrollview import TTkAbstractScrollViewInterface
3336

37+
@dataclass
38+
class _ForwardData():
39+
forwardClass: Type
40+
instance: str
41+
signals: List[str]
42+
methods: List[str]
43+
3444
class TTkAbstractScrollArea(TTkContainer):
3545
__slots__ = (
3646
'_processing', # this flag is required to avoid unnecessary loop on edge cases

libs/pyTermTk/TermTk/TTkGui/textdocument.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
__all__ = ['TTkTextDocument']
2424

25-
from typing import TYPE_CHECKING
25+
from typing import TYPE_CHECKING, Optional, Union
2626
from threading import Lock
2727

2828
from TermTk.TTkCore.log import TTkLog
@@ -237,7 +237,7 @@ def lineCount(self):
237237
def characterCount(self):
238238
return sum([len[x] for x in self._dataLines])+self.lineCount()
239239

240-
def setText(self, text):
240+
def setText(self, text:Union[str,TTkString]):
241241
remLines = len(self._dataLines)
242242
if not isinstance(text, str) and not isinstance(text,TTkString):
243243
text=str(text)

libs/pyTermTk/TermTk/TTkWidgets/TTkModelView/filetree.py

Lines changed: 153 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,33 @@
2222

2323
__all__ = ['TTkFileTree']
2424

25+
from TermTk.TTkCore.constant import TTkK
26+
from TermTk.TTkCore.string import TTkString
27+
from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
2528
from TermTk.TTkWidgets.TTkModelView.tree import TTkTree
2629
from TermTk.TTkWidgets.TTkModelView.filetreewidget import TTkFileTreeWidget
30+
from TermTk.TTkWidgets.TTkModelView.treewidgetitem import TTkTreeWidgetItem
31+
from TermTk.TTkAbstract.abstractscrollarea import _ForwardData
2732

2833
class TTkFileTree(TTkTree):
2934
__doc__ = '''
3035
:py:class:`TTkFileTree` is a container widget which place :py:class:`TTkFileTreeWidget` in a scrolling area with on-demand scroll bars.
3136
3237
''' + TTkFileTreeWidget.__doc__
3338

34-
__slots__ = tuple(
35-
['_fileTreeWidget'] +
36-
(_forwardedSignals:=[# Forwarded Signals from TTkFileTreeWidget
37-
*TTkTree._forwardedSignals,
38-
'fileClicked', 'folderClicked', 'fileDoubleClicked', 'folderDoubleClicked', 'fileActivated', 'folderActivated']) +
39-
(_forwardedMethods:=[# Forwarded Methods From TTkTreeWidget
40-
*TTkTree._forwardedMethods,
41-
'openPath', 'getOpenPath',
42-
'setFilter'])
39+
_ttk_forward = _ForwardData(
40+
forwardClass=TTkFileTreeWidget,
41+
instance="self._fileTreeWidget",
42+
signals=[# Forwarded Signals from TTkFileTreeWidget
43+
*TTkTree._ttk_forward.signals,
44+
'fileClicked', 'folderClicked', 'fileDoubleClicked', 'folderDoubleClicked', 'fileActivated', 'folderActivated'],
45+
methods=[# Forwarded Methods From TTkTreeWidget
46+
*TTkTree._ttk_forward.methods,
47+
'openPath', 'getOpenPath',
48+
'setFilter']
4349
)
44-
_forwardWidget = TTkFileTreeWidget
50+
51+
__slots__ = ('_fileTreeWidget', *_ttk_forward.signals)
4552

4653
def __init__(self, **kwargs) -> None:
4754
wkwargs = kwargs.copy()
@@ -51,5 +58,140 @@ def __init__(self, **kwargs) -> None:
5158

5259
super().__init__(**kwargs, treeWidget=self._fileTreeWidget)
5360

54-
for _attr in self._forwardedSignals+self._forwardedMethods:
61+
for _attr in self._ttk_forward.signals:
5562
setattr(self,_attr,getattr(self._fileTreeWidget,_attr))
63+
64+
#--FORWARD-AUTOGEN-START--#
65+
def setHeaderLabels(self, labels:TTkString) -> None:
66+
'''
67+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.setHeaderLabels`
68+
69+
setHeaderLabels
70+
'''
71+
return self._fileTreeWidget.setHeaderLabels(labels=labels)
72+
def setColumnWidth(self, column:int, width: int) -> None:
73+
'''
74+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.setColumnWidth`
75+
76+
setColumnWidth
77+
'''
78+
return self._fileTreeWidget.setColumnWidth(column=column, width=width)
79+
def resizeColumnToContents(self, column:int) -> None:
80+
'''
81+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.resizeColumnToContents`
82+
83+
resizeColumnToContents
84+
'''
85+
return self._fileTreeWidget.resizeColumnToContents(column=column)
86+
def sortColumn(self):
87+
'''
88+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.sortColumn`
89+
90+
Returns the column used to sort the contents of the widget.
91+
'''
92+
return self._fileTreeWidget.sortColumn()
93+
def sortItems(self, col:int, order:TTkK.SortOrder) -> None:
94+
'''
95+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.sortItems`
96+
97+
Sorts the items in the widget in the specified order by the values in the given column.
98+
'''
99+
return self._fileTreeWidget.sortItems(col=col, order=order)
100+
def dragDropMode(self):
101+
'''
102+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.dragDropMode`
103+
104+
dragDropMode
105+
'''
106+
return self._fileTreeWidget.dragDropMode()
107+
def setDragDropMode(self, dndMode):
108+
'''
109+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.setDragDropMode`
110+
111+
setDragDropMode
112+
'''
113+
return self._fileTreeWidget.setDragDropMode(dndMode=dndMode)
114+
@pyTTkSlot()
115+
def expandAll(self) -> None:
116+
'''
117+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.expandAll`
118+
119+
expandAll
120+
'''
121+
return self._fileTreeWidget.expandAll()
122+
@pyTTkSlot()
123+
def collapseAll(self) -> None:
124+
'''
125+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.collapseAll`
126+
127+
collapseAll
128+
'''
129+
return self._fileTreeWidget.collapseAll()
130+
def addTopLevelItem(self, item:TTkTreeWidgetItem) -> None:
131+
'''
132+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.addTopLevelItem`
133+
134+
addTopLevelItem
135+
'''
136+
return self._fileTreeWidget.addTopLevelItem(item=item)
137+
def addTopLevelItems(self, items:TTkTreeWidgetItem) -> None:
138+
'''
139+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.addTopLevelItems`
140+
141+
addTopLevelItems
142+
'''
143+
return self._fileTreeWidget.addTopLevelItems(items=items)
144+
def takeTopLevelItem(self, index) -> None:
145+
'''
146+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.takeTopLevelItem`
147+
148+
takeTopLevelItem
149+
'''
150+
return self._fileTreeWidget.takeTopLevelItem(index=index)
151+
def topLevelItem(self, index) -> TTkTreeWidgetItem:
152+
'''
153+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.topLevelItem`
154+
155+
topLevelItem
156+
'''
157+
return self._fileTreeWidget.topLevelItem(index=index)
158+
def indexOfTopLevelItem(self, item:TTkTreeWidgetItem) -> int:
159+
'''
160+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.indexOfTopLevelItem`
161+
162+
indexOfTopLevelItem
163+
'''
164+
return self._fileTreeWidget.indexOfTopLevelItem(item=item)
165+
def selectedItems(self) -> list[TTkTreeWidgetItem]:
166+
'''
167+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.selectedItems`
168+
169+
selectedItems
170+
'''
171+
return self._fileTreeWidget.selectedItems()
172+
def clear(self) -> None:
173+
'''
174+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.clear`
175+
176+
clear
177+
'''
178+
return self._fileTreeWidget.clear()
179+
def openPath(self, path):
180+
'''
181+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.openPath`
182+
183+
'''
184+
return self._fileTreeWidget.openPath(path=path)
185+
def getOpenPath(self):
186+
'''
187+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.getOpenPath`
188+
189+
'''
190+
return self._fileTreeWidget.getOpenPath()
191+
def setFilter(self, filter):
192+
'''
193+
.. seealso:: this method is forwarded to :py:meth:`TTkFileTreeWidget.setFilter`
194+
195+
'''
196+
return self._fileTreeWidget.setFilter(filter=filter)
197+
#--FORWARD-AUTOGEN-END--#

0 commit comments

Comments
 (0)