From eb6dddd5e05aec19ee1789708c60fda6fdad7a34 Mon Sep 17 00:00:00 2001 From: Gabriel Sartori Date: Thu, 6 Aug 2026 09:33:15 -0300 Subject: [PATCH] ui: Return file with ext from save dialog --- .../qml/Muse/Interactive/FileDialog.qml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/framework/interactive/qml/Muse/Interactive/FileDialog.qml b/framework/interactive/qml/Muse/Interactive/FileDialog.qml index 9ee3f5d00f..d3aadd5627 100644 --- a/framework/interactive/qml/Muse/Interactive/FileDialog.qml +++ b/framework/interactive/qml/Muse/Interactive/FileDialog.qml @@ -28,13 +28,35 @@ QtPlatform.FileDialog { property string objectId: "" property var ret: null + readonly property string allFilesExtension: "*" + signal opened() signal closed() function show() { + //! NOTE `selectedNameFilter` is created on first access + root.selectedNameFilter.index = 0 root.open() } + function appendSuffixIfNeeded(filePath) { + const extensions = root.selectedNameFilter.extensions || [] + let defaultExtension = "" + for (let i = 0; i < extensions.length; ++i) { + const extension = extensions[i] + if (extension === "" || extension === root.allFilesExtension) { + continue + } + if (defaultExtension === "") { + defaultExtension = extension + } + if (filePath.endsWith("." + extension)) { + return filePath + } + } + return defaultExtension === "" ? filePath : filePath + "." + defaultExtension + } + onVisibleChanged: { if (visible) { root.opened() @@ -45,6 +67,8 @@ QtPlatform.FileDialog { if (root.fileMode === FileDialog.OpenFiles) { const selectedUrls = root.fileUrls || [] root.ret = { "errcode": 0, "value": selectedUrls } + } else if (root.fileMode === FileDialog.SaveFile) { + root.ret = { "errcode": 0, "value": root.appendSuffixIfNeeded(root.currentFile.toString()) } } else { root.ret = { "errcode": 0, "value": root.currentFile.toString() } }