Skip to content

Commit e34de0a

Browse files
committed
[ui] Add new saveAs window
1 parent da30eaf commit e34de0a

6 files changed

Lines changed: 807 additions & 0 deletions

File tree

meshroom/core/graph.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1442,6 +1442,20 @@ def _unsetFilepath(self):
14421442
self.cacheDir = ""
14431443
self.filepathChanged.emit()
14441444

1445+
@Slot(result=str)
1446+
def getCurrentFilename(self):
1447+
if os.path.exists(self._filepath):
1448+
return os.path.basename(self._filepath)
1449+
else:
1450+
return ""
1451+
1452+
@Slot(result=str)
1453+
def getCurrentFolder(self):
1454+
if os.path.exists(self._filepath):
1455+
return os.path.dirname(self._filepath)
1456+
else:
1457+
return os.getcwd()
1458+
14451459
def updateInternals(self, startNodes=None, force=False):
14461460
nodes, edges = self.dfsOnFinish(startNodes=startNodes)
14471461
for node in nodes:

meshroom/ui/graph.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,7 @@ def _saveAs(self, url, setupProjectFile=True, template=False):
531531
# ensure file is saved with ".mg" extension
532532
if os.path.splitext(localFile)[-1] != ".mg":
533533
localFile += ".mg"
534+
self.parent().showMessage(f"Saving file to {localFile}", "ok")
534535
self._graph.save(localFile, setupProjectFile=setupProjectFile, template=template)
535536
self._undoStack.setClean()
536537
# saving file on disk impacts cache folder location

meshroom/ui/qml/Application.qml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import GraphEditor 1.0
1212
import MaterialIcons 2.2
1313
import Utils 1.0
1414
import Controls 1.0
15+
import Dialogs 1.0
1516

1617
Page {
1718
id: root
@@ -174,6 +175,32 @@ Page {
174175
}
175176
}
176177

178+
MrFileDialog {
179+
id: newSaveFileDialog
180+
saveMode: true
181+
nameFilters: ["*"]
182+
property string fileToSave: ""
183+
184+
onFileSelected: (path) => {
185+
fileToSave = path.toString().replace("file://", "")
186+
// Do something with the file path
187+
}
188+
189+
onAccepted: {
190+
if (!validateFilepathForSave(fileToSave, newSaveFileDialog))
191+
{
192+
return;
193+
}
194+
195+
// Only save a valid file
196+
_reconstruction.saveAs("file://" + fileToSave)
197+
MeshroomApp.addRecentProjectFile(fileToSave.toString())
198+
}
199+
// onRejected: {
200+
// console.log("File not saved")
201+
// }
202+
}
203+
177204
Platform.FileDialog {
178205
id: saveTemplateDialog
179206

@@ -775,6 +802,14 @@ Page {
775802
saveFileDialog.open()
776803
}
777804
}
805+
Action {
806+
id: newSaveAsAction
807+
text: "New Save As..."
808+
onTriggered: {
809+
initFileDialogFolder(saveFileDialog)
810+
newSaveFileDialog.open()
811+
}
812+
}
778813
MenuSeparator { }
779814
Action {
780815
id: importImagesAction

0 commit comments

Comments
 (0)