Browse Source

DumbPaintTool: Tuned the Saving Routine

pull/262/head
Eugenio Parodi 2 years ago
parent
commit
30ea762d1b
  1. 8
      TermTk/TTkCrossTools/savetools.py
  2. 10
      tools/dumbPaintTool/app/glbls.py
  3. 15
      tools/dumbPaintTool/app/maintemplate.py

8
TermTk/TTkCrossTools/savetools.py

@ -69,7 +69,7 @@ if importlib.util.find_spec('pyodideProxy'):
ttkFileOpen.connect(cb)
pyodideProxy.openFile(encoding)
def _save(filePath, content, encoding, filter=None):
def _save(filePath, content, encoding, filter=None, cb=lambda _d:None):
pyodideProxy.saveFile(os.path.basename(filePath), content, encoding)
def _connectDragOpen(encoding, cb):
@ -153,7 +153,7 @@ else:
with open(filePath,'w') as fp:
fp.write(content)
def _saveAs(filePath, content, encoding, filter, cb=lambda :None):
def _saveAs(filePath, content, encoding, filter, cb=lambda _d:None):
def _approveFile(fileName):
if os.path.exists(fileName):
@pyTTkSlot(TTkMessageBox.StandardButton)
@ -163,7 +163,7 @@ else:
elif btn == TTkMessageBox.StandardButton.Cancel:
return
if cb:
cb()
cb({'name':fileName})
messageBox = TTkMessageBox(
text= (
TTkString( f'A file named "{os.path.basename(fileName)}" already exists.\nDo you want to replace it?', TTkColor.BOLD) +
@ -174,6 +174,8 @@ else:
TTkHelper.overlay(None, messageBox, 5, 5, True)
else:
ttkCrossSave(fileName,content,encoding)
if cb:
cb({'name':fileName})
filePicker = TTkFileDialogPicker(
size=(100,30), path=filePath,
acceptMode=TTkK.AcceptMode.AcceptSave,

10
tools/dumbPaintTool/app/glbls.py

@ -52,10 +52,20 @@ class Glbls:
self.brush:Brush = Brush()
self.layers:Layers = Layers()
self.documentSize = (80,25)
self.fileNameChanged = ttk.pyTTkSignal(str)
self._filename = "untitled.DPT.json"
self._snaphots = []
self._snapId:int = 0
def setFilename(self, fileName):
self._filename = fileName
self.fileNameChanged.emit(fileName)
def fileName(self):
return self._filename
def clearSnapshot(self):
self._snaphots = []
self._snapId:int = 0

15
tools/dumbPaintTool/app/maintemplate.py

@ -73,9 +73,11 @@ class PaintTemplate(ttk.TTkAppTemplate):
self.setItem(toolsPanel , self.LEFT, size=16*2)
self.setWidget(PaintScrollArea(parea) , self.MAIN)
self.setWidget(ptoolkit , self.TOP, fixed=True)
self.setWidget(ptoolkit , self.TOP, fixed=True, title=glbls.fileName())
self.setItem(rightPanel , self.RIGHT, size=40)
glbls.fileNameChanged.connect(lambda _n : self.setTitle(self.TOP,_n))
self.setMenuBar(appMenuBar:=ttk.TTkMenuBarLayout(), self.TOP)
fileMenu = appMenuBar.addMenu("&File")
fileMenu.addMenu("&New" ).menuButtonClicked.connect(self._new)
@ -162,19 +164,20 @@ class PaintTemplate(ttk.TTkAppTemplate):
@ttk.pyTTkSlot()
def _save(self):
doc = self._parea.exportDocument()
ttk.ttkCrossSave('untitled.DPT.json', json.dumps(doc, indent=1), ttk.TTkEncoding.APPLICATION_JSON)
ttk.ttkCrossSave(glbls.fileName(), json.dumps(doc, indent=1), ttk.TTkEncoding.APPLICATION_JSON)
@ttk.pyTTkSlot()
def _saveAs(self):
doc = self._parea.exportDocument()
ttk.ttkCrossSaveAs('untitled.DPT.json', json.dumps(doc, indent=1), ttk.TTkEncoding.APPLICATION_JSON,
filter="DumbPaintTool Files (*.DPT.json);;Json Files (*.json);;All Files (*)")
ttk.ttkCrossSaveAs(glbls.fileName(), json.dumps(doc, indent=1), ttk.TTkEncoding.APPLICATION_JSON,
filter="DumbPaintTool Files (*.DPT.json);;Json Files (*.json);;All Files (*)",
cb=lambda _d:glbls.setFilename(_d['name']))
@ttk.pyTTkSlot()
def _saveAsAnsi(self):
image = self._parea.exportImage()
text = ttk.TTkString(image)
ttk.ttkCrossSaveAs('untitled.DPT.Ansi.txt', text.toAnsi(), ttk.TTkEncoding.TEXT_PLAIN_UTF8,
ttk.ttkCrossSaveAs(glbls.fileName(), text.toAnsi(), ttk.TTkEncoding.TEXT_PLAIN_UTF8,
filter="Ansi text Files (*.Ansi.txt);;Text Files (*.txt);;All Files (*)")
@ttk.pyTTkSlot()
@ -193,6 +196,7 @@ class PaintTemplate(ttk.TTkAppTemplate):
@ttk.pyTTkSlot(dict)
def _openDragData(self, data):
dd = json.loads(data['data'])
glbls.setFilename(data['name'])
if 'layers' in dd:
self.importDocument(dd)
else:
@ -211,6 +215,7 @@ class PaintTemplate(ttk.TTkAppTemplate):
def _openFile(self, fileName):
ttk.TTkLog.info(f"Open: {fileName}")
glbls.setFilename(fileName)
with open(fileName) as fp:
# dd = json.load(fp)

Loading…
Cancel
Save