Browse Source

Added Quick Export in ttkDesigner

pull/99/head
Eugenio Parodi 3 years ago
parent
commit
bbcc7e247a
  1. 5
      TermTk/TTkCore/helper.py
  2. 3
      demo/demo.py
  3. 1
      ttkDesigner/app/__init__.py
  4. 33
      ttkDesigner/app/designer.py
  5. 60
      ttkDesigner/app/quickexport.py

5
TermTk/TTkCore/helper.py

@ -76,7 +76,7 @@ class TTkHelper:
@staticmethod @staticmethod
def addUpdateWidget(widget): def addUpdateWidget(widget):
if not widget.isVisibleAndParent(): return # if not widget.isVisibleAndParent(): return
if widget not in TTkHelper._updateWidget: if widget not in TTkHelper._updateWidget:
TTkHelper._updateWidget.append(widget) TTkHelper._updateWidget.append(widget)
@ -247,6 +247,7 @@ class TTkHelper:
def mousePos(): def mousePos():
return TTkHelper._mousePos return TTkHelper._mousePos
# paintDbg = []
@staticmethod @staticmethod
def paintAll(): def paintAll():
''' '''
@ -274,6 +275,8 @@ class TTkHelper:
TTkHelper._updateBuffer = [] TTkHelper._updateBuffer = []
TTkHelper._updateWidget = [] TTkHelper._updateWidget = []
# TTkHelper.paintDbg.append((updateBuffers,updateWidgets))
# Paint all the canvas # Paint all the canvas
for widget in updateBuffers: for widget in updateBuffers:
if not widget.isVisibleAndParent(): continue if not widget.isVisibleAndParent(): continue

3
demo/demo.py

@ -274,6 +274,9 @@ def main():
demoShowcase(winTabbed1, border) demoShowcase(winTabbed1, border)
root.mainloop() root.mainloop()
# for i,(a,b) in enumerate(ttk.TTkHelper.paintDbg):
# print(f"{i=} a={[w.name() for w in a]}")
# print(f"{i=} b={[w.name() for w in b]}")
if __name__ == "__main__": if __name__ == "__main__":
main() main()

1
ttkDesigner/app/__init__.py

@ -30,4 +30,5 @@ from .widgetbox import DragDesignItem, WidgetBox
from .windoweditor import WindowEditor from .windoweditor import WindowEditor
from .propertyeditor import PropertyEditor from .propertyeditor import PropertyEditor
from .signalsloteditor import SignalSlotEditor from .signalsloteditor import SignalSlotEditor
from .quickexport import QuickExport
from .superobj import * from .superobj import *

33
ttkDesigner/app/designer.py

@ -47,6 +47,7 @@ from .windoweditor import WindowEditor, SuperWidget
from .treeinspector import TreeInspector from .treeinspector import TreeInspector
from .propertyeditor import PropertyEditor from .propertyeditor import PropertyEditor
from .signalsloteditor import SignalSlotEditor from .signalsloteditor import SignalSlotEditor
from .quickexport import QuickExport
# #
# Mimic the QT Designer layout # Mimic the QT Designer layout
@ -147,6 +148,7 @@ class TTkDesigner(TTkGridLayout):
centralSplit.setSizes([None,8]) centralSplit.setSizes([None,8])
self._toolBar.addWidget(btnPreview := TTkButton(maxWidth=12, text='Preview...')) self._toolBar.addWidget(btnPreview := TTkButton(maxWidth=12, text='Preview...'))
self._toolBar.addWidget(btnExport := TTkButton(maxWidth=17, text='Quick Export 📦'))
self._toolBar.addWidget(btnColors := TTkButton(maxWidth=11, checkable=True, text= self._toolBar.addWidget(btnColors := TTkButton(maxWidth=11, checkable=True, text=
TTkString("",TTkColor.fg("#ff0000")) + TTkString("",TTkColor.fg("#ff0000")) +
TTkString("",TTkColor.fg("#ffff00")) + TTkString("",TTkColor.fg("#ffff00")) +
@ -155,16 +157,11 @@ class TTkDesigner(TTkGridLayout):
TTkString("",TTkColor.fg("#0000ff")) + "🦄")) TTkString("",TTkColor.fg("#0000ff")) + "🦄"))
btnPreview.clicked.connect(self.preview) btnPreview.clicked.connect(self.preview)
btnExport.clicked.connect(self.quickExport)
btnColors.toggled.connect(self.toggleColors) btnColors.toggled.connect(self.toggleColors)
self._toolBar.addItem(TTkLayout()) self._toolBar.addItem(TTkLayout())
# # Internal Debug Stuff
# mainSplit.addWidget(debugSplit := TTkSplitter(orientation=TTkK.VERTICAL))
# # debugSplit.addWidget(TTkLabel(text='My Own Debug', maxHeight=1, minHeight=1))
# debugSplit.addWidget(TTkTomInspector())
# debugSplit.addWidget(TTkLogViewer())
def getWidgets(self): def getWidgets(self):
widgets = [] widgets = []
def _getItems(layoutItem): def _getItems(layoutItem):
@ -177,11 +174,27 @@ class TTkDesigner(TTkGridLayout):
_getItems(self._windowEditor.getTTk().widgetItem()) _getItems(self._windowEditor.getTTk().widgetItem())
return widgets return widgets
pyTTkSlot(bool) @pyTTkSlot(bool)
def toggleColors(self, state): def toggleColors(self, state):
SuperWidget.toggleHighlightLayout.emit(state) SuperWidget.toggleHighlightLayout.emit(state)
def preview(self, btn=None): @pyTTkSlot()
def quickExport(self):
tui = self._windowEditor.dumpDict()
connections = self._sigslotEditor.dumpDict()
data = {
'version':'1.0.0',
'tui':tui,
'connections':connections}
win = QuickExport(
data=data,
title="Mr Export", size=(80,30),
flags=TTkK.WindowFlag.WindowMaximizeButtonHint|TTkK.WindowFlag.WindowCloseButtonHint)
TTkHelper.overlay(None, win, 2, 2, modal=True)
@pyTTkSlot()
def preview(self):
tui = self._windowEditor.dumpDict() tui = self._windowEditor.dumpDict()
connections = self._sigslotEditor.dumpDict() connections = self._sigslotEditor.dumpDict()
# for line in jj.split('\n'): # for line in jj.split('\n'):
@ -204,10 +217,6 @@ class TTkDesigner(TTkGridLayout):
def _openFile(self, fileName): def _openFile(self, fileName):
TTkLog.info(f"Open: {fileName}") TTkLog.info(f"Open: {fileName}")
with open(fileName) as fp: with open(fileName) as fp:
# jj = fp.read()
# # ttk = SuperWidget.loadDict(self._windowEditor.viewport(), jj['tui'])
# wid = TTkUiLoader.loadJson(jj)
# self._windowEditor.importWidget(wid)
dd = json.load(fp) dd = json.load(fp)
sw = SuperWidget.loadDict(self, self._windowEditor.viewport(), dd['tui']) sw = SuperWidget.loadDict(self, self._windowEditor.viewport(), dd['tui'])
self._windowEditor.importSuperWidget(sw) self._windowEditor.importSuperWidget(sw)

60
ttkDesigner/app/quickexport.py

@ -0,0 +1,60 @@
# MIT License
#
# Copyright (c) 2023 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import TermTk as ttk
class QuickExport(ttk.TTkWindow):
__slots__ = ('_data', '_te')
def __init__(self, data, *args, **kwargs):
self._data = data
super().__init__(*args, **kwargs|{'layout':ttk.TTkGridLayout()})
self.layout().addWidget(btnCompressed := ttk.TTkButton(text='Compressed', border=True, maxHeight=3), 0,1)
self.layout().addWidget(btnNormal := ttk.TTkButton(text='Normal', border=True, maxHeight=3), 0,0)
self._te = ttk.TTkTextEdit(lineNumber=True, readOnly=False)
self.layout().addWidget(self._te, 1,0,1,2)
btnNormal.clicked.connect(self.useNormmal)
btnCompressed.clicked.connect(self.useCompressed)
self.useCompressed()
ttk.pyTTkSlot()
def useNormmal(self):
self._te.setLineWrapMode(ttk.TTkK.WidgetWidth)
self._te.setWordWrapMode(ttk.TTkK.WordWrap)
self._te.setText('from TermTk import TTkUtil, TTkUiLoader, TTk\n')
self._te.append(f'# Data generated using ttkDesigner')
self._te.append('widget = TTkUiLoader.loadDict(')
self._te.append(str(self._data)+ '")')
self._te.append('\nroot=TTk()\nroot.layout().addWidget(widget)\nroot.mainloop()\n')
ttk.pyTTkSlot()
def useCompressed(self):
self._te.setLineWrapMode(ttk.TTkK.NoWrap)
b64str = ttk.TTkUtil.obj_inflate_2_base64(self._data)
self._te.setText('from TermTk import TTkUtil, TTkUiLoader, TTk\n')
self._te.append(f'# Data generated using ttkDesigner')
self._te.append('widget = TTkUiLoader.loadDict(TTkUtil.base64_deflate_2_obj(')
b64list = ' "' + '" +\n "'.join([b64str[i:i+128] for i in range(0,len(b64str),128)]) + '"))'
self._te.append(b64list)
self._te.append('\nroot=TTk()\nroot.layout().addWidget(widget)\nroot.mainloop()\n')
Loading…
Cancel
Save