diff --git a/TermTk/TTkCrossTools/savetools.py b/TermTk/TTkCrossTools/savetools.py index 2ae469fd..a69c131a 100644 --- a/TermTk/TTkCrossTools/savetools.py +++ b/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, diff --git a/tools/dumbPaintTool/app/glbls.py b/tools/dumbPaintTool/app/glbls.py index 6a283c6c..e443a909 100644 --- a/tools/dumbPaintTool/app/glbls.py +++ b/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 diff --git a/tools/dumbPaintTool/app/maintemplate.py b/tools/dumbPaintTool/app/maintemplate.py index 0a32e4d9..a306dd55 100644 --- a/tools/dumbPaintTool/app/maintemplate.py +++ b/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)