diff --git a/src/framework/uicomponents/qml/Muse/UiComponents/FilePicker.qml b/src/framework/uicomponents/qml/Muse/UiComponents/FilePicker.qml index 489073ddf359d..662e542e9a72e 100644 --- a/src/framework/uicomponents/qml/Muse/UiComponents/FilePicker.qml +++ b/src/framework/uicomponents/qml/Muse/UiComponents/FilePicker.qml @@ -31,7 +31,8 @@ Item { enum PickerType { File, Directory, - MultipleDirectories + MultipleDirectories, + Any } property int pickerType: FilePicker.PickerType.File @@ -120,6 +121,14 @@ Item { root.pathEdited(selectedDirectories) break } + case FilePicker.PickerType.Any:{ + var selectedAny = filePickerModel.selectAny() + if (Boolean(selectedAny)) { + root.pathEdited(selectedAny) + } + + break + } } } } diff --git a/src/framework/uicomponents/view/filepickermodel.cpp b/src/framework/uicomponents/view/filepickermodel.cpp index 0533ca2cc764b..a653e1cbf2cc2 100644 --- a/src/framework/uicomponents/view/filepickermodel.cpp +++ b/src/framework/uicomponents/view/filepickermodel.cpp @@ -84,6 +84,22 @@ QString FilePickerModel::selectMultipleDirectories(const QString& selectedDirect return result.join(";"); } +QString FilePickerModel::selectAny() +{ + std::vector filter; + for (const QString& nameFilter : m_filter) { + filter.push_back(nameFilter.toStdString()); + } + + io::path_t file = interactive()->selectSavingFileSync(m_title.toStdString(), m_dir, filter); + + if (!file.empty()) { + m_dir = io::dirpath(file).toQString(); + } + + return file.toQString(); +} + void FilePickerModel::setTitle(const QString& title) { if (title == m_title) { diff --git a/src/framework/uicomponents/view/filepickermodel.h b/src/framework/uicomponents/view/filepickermodel.h index 819af99f9ffd2..f1394ae11dd21 100644 --- a/src/framework/uicomponents/view/filepickermodel.h +++ b/src/framework/uicomponents/view/filepickermodel.h @@ -48,6 +48,7 @@ class FilePickerModel : public QObject, public muse::Injectable Q_INVOKABLE QString selectFile(); Q_INVOKABLE QString selectDirectory(); Q_INVOKABLE QString selectMultipleDirectories(const QString& selectedDirectoriesStr); + Q_INVOKABLE QString selectAny(); public slots: void setTitle(const QString& title);