Browse Source

Added new option in the ttkDesigner

pull/99/head
Eugenio Parodi 3 years ago
parent
commit
184818ee3a
  1. 22
      ttkDesigner/app/designer.py
  2. 40
      ttkDesigner/app/windoweditor.py
  3. 477
      ttkDesigner/tui/newWindow.tui.json

22
ttkDesigner/app/designer.py

@ -38,7 +38,7 @@ from TermTk import TTkLayout, TTkGridLayout, TTkVBoxLayout, TTkHBoxLayout
from TermTk import TTkSplitter
from TermTk import TTkLogViewer, TTkTomInspector
from TermTk import TTkUiLoader
from TermTk import TTkUiLoader, TTkUtil
from .cfg import *
from .about import *
@ -126,6 +126,7 @@ class TTkDesigner(TTkGridLayout):
self.weModified.connect(self._treeInspector.refresh)
fileMenu = topMenuFrame.menubarTop().addMenu("&File")
fileMenu.addMenu("New").menuButtonClicked.connect(self.new)
fileMenu.addMenu("Open").menuButtonClicked.connect(self.open)
fileMenu.addMenu("Save").menuButtonClicked.connect(self.save)
fileMenu.addMenu("Save As...").menuButtonClicked.connect(self.saveAs)
@ -214,6 +215,25 @@ class TTkDesigner(TTkGridLayout):
win.layout().addWidget(widget)
TTkHelper.overlay(None, win, 2, 2, modal=True)
@pyTTkSlot()
def new(self):
newWindow = TTkUiLoader.loadDict(TTkUtil.base64_deflate_2_obj(
"eJytlt9L21AUx5MmbVq10zmmmz4sjMH6MEt1c1P6tOpUlinCig6kD7G59AbTpOTHrBuCjy1cxoRbNgZD2J/Wv2B/ws7Nj7baVVsxacg9OTcnn+85J7k9E1u1FOdvpzRD" +
"pM/IdnTLpCS+mM1lc5QIrqdT5oqXDdVxKEkVi0f7uqlZx5QkaqqtVh3fL+6oVQTuHXQcuZO7lqO7LFyJZhRRiSEiftS/IN9cV6YRSW3rpryvay6mSoyMMWsL6RXsUkUE" +
"p1oPndvcFHjBDL3MlnZVTdPNih9NUHi2I5L4oJ5YnktJGjg3bV2LbGlPd/RDA9EGkd6ZKow0NixallHUa5SI8we5KkgqWLaGbHDFi7oL00mGOdgByuQNy67KCzLElteR" +
"o1dMZMt/L35+C26eCJTLG4ZacQDyzCMJI3g+pAjH8QyWTiEvm8iqItc+AXAO9oJyz6UOSZaxbmg28tPlz/eTXfBcF1LI7szgFEkVXDPUhMeZ9BmQjdPBSER4UkniKUXA" +
"999zHM/h6eD0oBQ+C3aEH/qBoyizDfyoiR/jOSIWUR1SNR0pDmb42vB8g6TWMCofsdTRJpF8A5LY9PCTQN0CY8RPgwcBDIjCz0rUI4IN7QAFFsqWwc4S2E5NNanCEwmu" +
"hWMvCPO8V2rYS4HUFz1S00zqJEiVrpcKVExggwnE2U9zPMdF8tot2m59v+n3Y6zdOpfDyoa35l+u5JfyS8vL/pHLv2JmDnYwqwd9k1b75tSHCVTqgp4DxEWbnt3wa/3x" +
"YbtbcOevIWT+jsqMc028OLCo6aio+LUSw2+g0VYUEa8OKp5WQVGfcleLN0SfXi5etzGDwLcj5gcRp4G454sRvV3xDrXAqNNDUzdD6tmImgWXL79T16MLPegCoMcAnR+E" +
"vlew6lfQk3eGzoLfGl28CX2rH338MvrEyOgzEXo3+Ojk8X5ykvQ/nYfI6HySe66Enc516HlGnwB6vkMPw9HbnMTXLMOyO+tU6q0Bq08VmWypHCSF75HCh63fWwQ7UjAW" +
"KVhY7FTgWg0jva292T8JBeCvw2Nf7Z3/YC91Voi7ww4++bfHFjrYyPPIeNkyTVRmf4ccWOC97D+eTf+w"))
newWindow.getWidgetByName("BtnWindow").clicked.connect(newWindow.close)
newWindow.getWidgetByName("BtnWidget").clicked.connect(newWindow.close)
newWindow.getWidgetByName("BtnWindow").clicked.connect(self._windowEditor.newWindow)
newWindow.getWidgetByName("BtnWidget").clicked.connect(self._windowEditor.newWidget)
TTkHelper.overlay(None, newWindow, 2, 2, modal=True)
def _openFile(self, fileName):
TTkLog.info(f"Open: {fileName}")
with open(fileName) as fp:

40
ttkDesigner/app/windoweditor.py

@ -26,20 +26,44 @@ import TermTk as ttk
class WindowEditorView(ttk.TTkAbstractScrollView):
__slots__ = ('_designer', '_snapRootWidget')
__slots__ = ('_designer', '_snapRootWidget', '_ttk')
def __init__(self, designer, *args, **kwargs):
self._designer = designer
super().__init__(*args, **kwargs)
self._ttk = None
self.viewChanged.connect(self._viewChangedHandler)
self._ttk = SuperWidget(wid=ttk.TTkWidget(name = 'MainWidget'), designer=self._designer, pos=(4,2), size=(self.width()-8,self.height()-4), superRootWidget=True)
self.newWidget()
@ttk.pyTTkSlot()
def newWindow(self):
if self._ttk:
self._ttk.superResized.disconnect(self._superChanged)
self._ttk.superMoved.disconnect(self._superChanged)
self.layout().removeWidget(self._ttk)
self._ttk = SuperWidget(wid=ttk.TTkWindow(name = 'MainWindow'), designer=self._designer, pos=(4,2), superRootWidget=True)
self._ttk.resize(self.width()-8,self.height()-4)
self._snapRootWidget = True
self.layout().addWidget(self._ttk)
self._ttk.superResized.connect(self._superChanged)
self._ttk.superMoved.connect(self._superChanged)
self.layout().addWidget(self._ttk)
@ttk.pyTTkSlot()
def newWidget(self):
if self._ttk:
self._ttk.superResized.disconnect(self._superChanged)
self._ttk.superMoved.disconnect(self._superChanged)
self.layout().removeWidget(self._ttk)
self._ttk = SuperWidget(wid=ttk.TTkWidget(name = 'MainWidget'), designer=self._designer, pos=(4,2), superRootWidget=True)
self._ttk.resize(self.width()-8,self.height()-4)
self._snapRootWidget = True
self.layout().addWidget(self._ttk)
self._ttk.superResized.connect(self._superChanged)
self._ttk.superMoved.connect(self._superChanged)
def importWidget(self, wid):
if self._ttk:
self.layout().removeWidget(self._ttk)
self._ttk.superResized.disconnect(self._superChanged)
self._ttk.superMoved.disconnect(self._superChanged)
self._snapRootWidget = False
self._ttk = SuperWidget.swFromWidget(wid=wid, designer=self._designer, pos=(4,2), size=(self.width()-8,self.height()-4))
self._ttk.makeRootWidget()
@ -87,7 +111,9 @@ class WindowEditorView(ttk.TTkAbstractScrollView):
self._canvas.fill(pos=(0,0),size=(w,h), char="#", color=ttk.TTkColor.fg("#220044")+ttk.TTkColor.bg("#000022"))
class WindowEditor(ttk.TTkAbstractScrollArea):
__slots__ = ('getTTk', 'dumpDict', 'importWidget', 'importSuperWidget')
__slots__ = ('getTTk', 'dumpDict', 'importWidget', 'importSuperWidget',
# Forwarded slots
'newWindow', 'newWidget')
def __init__(self, designer, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setViewport(wev := WindowEditorView(designer))
@ -96,4 +122,6 @@ class WindowEditor(ttk.TTkAbstractScrollArea):
self.getTTk = wev.getTTk
self.dumpDict = wev.dumpDict
self.importWidget = wev.importWidget
self.importSuperWidget = wev.importSuperWidget
self.importSuperWidget = wev.importSuperWidget
self.newWindow = wev.newWindow
self.newWidget = wev.newWidget

477
ttkDesigner/tui/newWindow.tui.json

@ -0,0 +1,477 @@
{
"version": "1.0.0",
"tui": {
"class": "TTkWindow",
"params": {
"Name": "NewWindow",
"Position": [
4,
2
],
"Size": [
68,
18
],
"Min Width": 2,
"Min Height": 4,
"Max Width": 4096,
"Max Height": 4096,
"Padding": [
3,
1,
1,
1
],
"Layout": "TTkGridLayout",
"Visible": true,
"Enabled": true,
"ToolTip": "\u001b[0m",
"Border": true,
"Title": "\u001b[0m\u001b[0mNew Form - TTk Designer \ud83d\ude0e\u001b[0m",
"Window Flags": 32768
},
"layout": {
"class": "TTkGridLayout",
"params": {
"Geometry": [
0,
0,
66,
14
]
},
"children": [
{
"class": "TTkButton",
"params": {
"Name": "BtnLayout",
"Position": [
22,
1
],
"Size": [
22,
4
],
"Min Width": 8,
"Min Height": 3,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": false,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mLayout\u001b[0m",
"Border": true,
"Checkable": false,
"Checked": false
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
4
]
},
"children": []
},
"row": 2,
"col": 2,
"rowspan": 1,
"colspan": 1
},
{
"class": "TTkButton",
"params": {
"Name": "BtnWindow",
"Position": [
44,
1
],
"Size": [
22,
13
],
"Min Width": 15,
"Min Height": 7,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": true,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0m\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551 Window \u001b[0m\u001b[0;38;2;255;255;0;48;2;0;0;255m[\u001b[0m\u001b[0;38;2;255;95;0;48;2;0;0;255mx\u001b[0m\u001b[0;38;2;255;255;0;48;2;0;0;255m]\u001b[0m\u001b[0m\u2551\n\u255f\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2562\n\u2551 \u2551\n\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u001b[0m",
"Border": true,
"Checkable": false,
"Checked": false
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
13
]
},
"children": []
},
"row": 2,
"col": 3,
"rowspan": 4,
"colspan": 1
},
{
"class": "TTkButton",
"params": {
"Name": "BtnWidget",
"Position": [
0,
1
],
"Size": [
22,
13
],
"Min Width": 8,
"Min Height": 3,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": true,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mWidget\u001b[0m",
"Border": true,
"Checkable": false,
"Checked": false
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
13
]
},
"children": []
},
"row": 2,
"col": 1,
"rowspan": 4,
"colspan": 1
},
{
"class": "TTkButton",
"params": {
"Name": "BtnGridLayout",
"Position": [
22,
5
],
"Size": [
22,
3
],
"Min Width": 13,
"Min Height": 3,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": false,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mGrid Layout\u001b[0m",
"Border": true,
"Checkable": false,
"Checked": false
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
3
]
},
"children": []
},
"row": 3,
"col": 2,
"rowspan": 1,
"colspan": 1
},
{
"class": "TTkButton",
"params": {
"Name": "BtnVBoxLayout",
"Position": [
22,
8
],
"Size": [
22,
3
],
"Min Width": 13,
"Min Height": 3,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": false,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mVBox Layout\u001b[0m",
"Border": true,
"Checkable": false,
"Checked": false
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
3
]
},
"children": []
},
"row": 4,
"col": 2,
"rowspan": 1,
"colspan": 1
},
{
"class": "TTkButton",
"params": {
"Name": "BtnHBoxLayout",
"Position": [
22,
11
],
"Size": [
22,
3
],
"Min Width": 12,
"Min Height": 3,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": false,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mHBoxLayout\u001b[0m",
"Border": true,
"Checkable": false,
"Checked": false
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
3
]
},
"children": []
},
"row": 5,
"col": 2,
"rowspan": 1,
"colspan": 1
},
{
"class": "TTkLabel",
"params": {
"Name": "TTkLabel",
"Position": [
0,
0
],
"Size": [
22,
1
],
"Min Width": 6,
"Min Height": 1,
"Max Width": 65536,
"Max Height": 1,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": true,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mWidget\u001b[0m",
"Color": "\u001b[0m",
"Alignment": 4
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
1
]
},
"children": []
},
"row": 1,
"col": 1,
"rowspan": 1,
"colspan": 1
},
{
"class": "TTkLabel",
"params": {
"Name": "TTkLabel-1",
"Position": [
22,
0
],
"Size": [
22,
1
],
"Min Width": 6,
"Min Height": 1,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": true,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mLayout\u001b[0m",
"Color": "\u001b[0m",
"Alignment": 4
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
1
]
},
"children": []
},
"row": 1,
"col": 2,
"rowspan": 1,
"colspan": 1
},
{
"class": "TTkLabel",
"params": {
"Name": "TTkLabel-2",
"Position": [
44,
0
],
"Size": [
22,
1
],
"Min Width": 6,
"Min Height": 1,
"Max Width": 65536,
"Max Height": 65536,
"Padding": [
0,
0,
0,
0
],
"Layout": "TTkLayout",
"Visible": true,
"Enabled": true,
"ToolTip": "\u001b[0m",
"Text": "\u001b[0m\u001b[0mWindow\u001b[0m",
"Color": "\u001b[0m",
"Alignment": 4
},
"layout": {
"class": "TTkLayout",
"params": {
"Geometry": [
0,
0,
22,
1
]
},
"children": []
},
"row": 1,
"col": 3,
"rowspan": 1,
"colspan": 1
}
]
}
},
"connections": []
}
Loading…
Cancel
Save