diff --git a/assets/text/TODO b/assets/text/TODO index 3908635..d9818a9 100644 --- a/assets/text/TODO +++ b/assets/text/TODO @@ -18,13 +18,11 @@ Release roadmap: 1) BUG: fix & finish Arabic/RTL text tool support 2) BUG: a) text tool b) paste text c) undo -3) BUG: a) tile once b) tile twice -4) {copy,cut,delete,insert from,paste}, edit asset in new canvas, import from {canvas,object} -5) add hotkeys.txt mIRC art canvas to help menu -6) {load,store} LRU {open,save} directory -7) operators: crop, scale, shift, slice -8) auto{load,save} & {backup,restore} -9) tools: unicode block elements -10) floating/dockable toolbar +3) {copy,cut,delete,insert from,paste}, edit asset in new canvas, import from {canvas,object} +4) add hotkeys.txt mIRC art canvas to help menu +5) operators: crop, scale, shift, slice +6) auto{load,save} & {backup,restore} +7) tools: unicode block elements +8) floating/dockable toolbar vim:ff=dos tw=0 diff --git a/libroar/RoarAssetsWindow.py b/libroar/RoarAssetsWindow.py index 24cdc99..b0d07a2 100644 --- a/libroar/RoarAssetsWindow.py +++ b/libroar/RoarAssetsWindow.py @@ -7,6 +7,7 @@ from Canvas import Canvas from GuiFrame import GuiMiniFrame from GuiWindow import GuiWindow +from RtlPlatform import getLocalConfPathName import json, os, sys, wx class RoarAssetsWindow(GuiMiniFrame): @@ -37,7 +38,9 @@ class RoarAssetsWindow(GuiMiniFrame): else: for pathName in dialog.GetPaths(): resultList += [self._import(f, pathName)] - self.lastDir = os.path.dirname(pathName) + lastDir = os.path.dirname(pathName) + if self.lastDir != lastDir: + self.lastDir = lastDir; self._storeLastDir(self.lastDir); return resultList def _load_list(self, pathName): @@ -81,6 +84,17 @@ class RoarAssetsWindow(GuiMiniFrame): with wx.MessageDialog(self, "Error: {}".format(str(e)), "", wx.OK | wx.OK_DEFAULT) as dialog: dialogChoice = dialog.ShowModal() + def _loadLastDir(self): + localConfFileName = getLocalConfPathName("RecentAssetsDir.txt") + if os.path.exists(localConfFileName): + with open(localConfFileName, "r", encoding="utf-8") as inFile: + self.lastDir = inFile.read().rstrip("\r\n") + + def _storeLastDir(self, pathName): + localConfFileName = getLocalConfPathName("RecentAssetsDir.txt") + with open(localConfFileName, "w", encoding="utf-8") as outFile: + print(pathName, file=outFile) + def _updateScrollBars(self): clientSize = self.panelCanvas.GetClientSize() if self.currentIndex != None: @@ -235,7 +249,8 @@ class RoarAssetsWindow(GuiMiniFrame): if self.lastDir != None: dialog.SetDirectory(self.lastDir) if dialog.ShowModal() != wx.ID_CANCEL: - pathName = dialog.GetPath(); self.lastDir = os.path.dirname(pathName); + pathName = dialog.GetPath() + self.lastDir = os.path.dirname(pathName); self._storeLastDir(self.lastDir); self._load_list(pathName) def onRemove(self, event): @@ -264,7 +279,8 @@ class RoarAssetsWindow(GuiMiniFrame): if self.lastDir != None: dialog.SetDirectory(self.lastDir) if dialog.ShowModal() != wx.ID_CANCEL: - pathName = dialog.GetPath(); self.lastDir = os.path.dirname(pathName); + pathName = dialog.GetPath() + self.lastDir = os.path.dirname(pathName); self._storeLastDir(self.lastDir); with open(pathName, "w") as fileObject: for pathName in [self.canvasList[k][1] for k in self.canvasList.keys()]: print(pathName, file=fileObject) @@ -284,6 +300,7 @@ class RoarAssetsWindow(GuiMiniFrame): self.backend, self.canvasList, self.lastDir = backend((0, 0), cellSize), {}, None self.cellSize, self.currentIndex, self.leftDown, self.parent, self.scrollFlag = cellSize, None, False, parent, False self.Bind(wx.EVT_CHAR, self.onChar) + self._loadLastDir() self.contextMenu, self.contextMenuItems = wx.Menu(), [] for text, f in ( diff --git a/libroar/RoarCanvasCommandsFile.py b/libroar/RoarCanvasCommandsFile.py index 970ce6e..cbe90ea 100644 --- a/libroar/RoarCanvasCommandsFile.py +++ b/libroar/RoarCanvasCommandsFile.py @@ -48,9 +48,15 @@ class RoarCanvasCommandsFile(): if dialog.ShowModal() == wx.ID_CANCEL: return False, None elif self._promptSaveChanges(): - pathName = dialog.GetPath(); self.lastDir = os.path.dirname(pathName); + pathName = dialog.GetPath(); self.lastDir = os.path.dirname(pathName); self._storeLastDir(self.lastDir); return self._import(f, newDirty, pathName) + def _loadLastDir(self): + localConfFileName = getLocalConfPathName("RecentDir.txt") + if os.path.exists(localConfFileName): + with open(localConfFileName, "r", encoding="utf-8") as inFile: + self.lastDir = inFile.read().rstrip("\r\n") + def _loadRecent(self): localConfFileName = getLocalConfPathName("Recent.lst") if os.path.exists(localConfFileName): @@ -91,6 +97,11 @@ class RoarCanvasCommandsFile(): for lastFile in [l["pathName"] for l in self.lastFiles]: print(lastFile, file=outFile) + def _storeLastDir(self, pathName): + localConfFileName = getLocalConfPathName("RecentDir.txt") + with open(localConfFileName, "w", encoding="utf-8") as outFile: + print(pathName, file=outFile) + @GuiCommandDecorator("Clear list", "&Clear list", None, None, False) def canvasClearRecent(self, event): if self.lastFiles != None: @@ -115,7 +126,7 @@ class RoarCanvasCommandsFile(): if dialog.ShowModal() == wx.ID_CANCEL: return False else: - outPathName = dialog.GetPath(); self.lastDir = os.path.dirname(outPathName); + outPathName = dialog.GetPath(); self.lastDir = os.path.dirname(outPathName); self._storeLastDir(self.lastDir); self.parentCanvas.SetCursor(wx.Cursor(wx.CURSOR_WAIT)) with open(outPathName, "w", encoding="utf-8") as outFile: self.parentCanvas.canvas.exportStore.exportAnsiFile(self.parentCanvas.canvas.map, self.parentCanvas.canvas.size, outFile) @@ -130,7 +141,7 @@ class RoarCanvasCommandsFile(): if dialog.ShowModal() == wx.ID_CANCEL: return False else: - outPathName = dialog.GetPath(); self.lastDir = os.path.dirname(outPathName); + outPathName = dialog.GetPath(); self.lastDir = os.path.dirname(outPathName); self._storeLastDir(self.lastDir); self.parentCanvas.SetCursor(wx.Cursor(wx.CURSOR_WAIT)) self.parentCanvas.canvas.exportStore.exportBitmapToPngFile(self.parentCanvas.backend.canvasBitmap, outPathName, wx.BITMAP_TYPE_PNG) self.parentCanvas.SetCursor(wx.Cursor(wx.NullCursor)) @@ -258,7 +269,7 @@ class RoarCanvasCommandsFile(): if dialog.ShowModal() == wx.ID_CANCEL: return False else: - self.canvasPathName = dialog.GetPath(); self.lastDir = os.path.dirname(self.canvasPathName); + self.canvasPathName = dialog.GetPath(); self.lastDir = os.path.dirname(self.canvasPathName); self._storeLastDir(self.lastDir); if self.canvasSave(event, newDirty=True): self._pushRecent(self.canvasPathName) diff --git a/roar.py b/roar.py index 72e3900..dd52e43 100755 --- a/roar.py +++ b/roar.py @@ -20,7 +20,7 @@ def main(*argv): os.makedirs(localConfirName) wxApp, roarClient = wx.App(False), RoarClient(None) argv0, argv = argv[0], argv[1:] - roarClient.canvasPanel.commands._loadRecent() + roarClient.canvasPanel.commands._loadLastDir(); roarClient.canvasPanel.commands._loadRecent(); if len(argv) >= 1: if (len(argv) >= 2) and (argv[1].endswith(".lst")): roarClient.assetsWindow._load_list(argv[1])