diff options
author | hjk <[email protected]> | 2021-07-16 15:24:26 +0200 |
---|---|---|
committer | hjk <[email protected]> | 2021-07-26 09:44:20 +0000 |
commit | 3edc5673b58e55971150ff4971c4ad6585ef0dc8 (patch) | |
tree | a012a312ad8c912283b064751f940f30a5e569ec | |
parent | 09286d062f276244949e45dd086c359d8a38d29c (diff) |
Utils: Provide FilePath based wrappers for common dialogs
Change-Id: I464a7b5775495f32648905335f2d798384867900
Reviewed-by: Christian Stenger <[email protected]>
-rw-r--r-- | src/libs/utils/fileutils.cpp | 73 | ||||
-rw-r--r-- | src/libs/utils/fileutils.h | 30 | ||||
-rw-r--r-- | src/plugins/coreplugin/icore.cpp | 2 |
3 files changed, 104 insertions, 1 deletions
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index ff7745761c8..48d9fc5a21c 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -405,5 +405,76 @@ void withNtfsPermissions(const std::function<void()> &task) } #endif -} // namespace Utils +#ifdef QT_WIDGETS_LIB + +static std::function<QWidget *()> s_dialogParentGetter; + +void FileUtils::setDialogParentGetter(const std::function<QWidget *()> &getter) +{ + s_dialogParentGetter = getter; +} + +static QWidget *dialogParent() +{ + return s_dialogParentGetter ? s_dialogParentGetter() : nullptr; +} + +FilePath FileUtils::getOpenFilePath(const QString &caption, + const FilePath &dir, + const QString &filter, + QString *selectedFilter, + QFileDialog::Options options) +{ + const QString result = QFileDialog::getOpenFileName(dialogParent(), + caption, + dir.toString(), + filter, + selectedFilter, + options); + return FilePath::fromString(result); +} + +FilePath FileUtils::getSaveFilePath(const QString &caption, + const FilePath &dir, + const QString &filter, + QString *selectedFilter, + QFileDialog::Options options) +{ + const QString result = QFileDialog::getSaveFileName(dialogParent(), + caption, + dir.toString(), + filter, + selectedFilter, + options); + return FilePath::fromString(result); +} + +FilePath FileUtils::getExistingDirectory(const QString &caption, + const FilePath &dir, + QFileDialog::Options options) +{ + const QString result = QFileDialog::getExistingDirectory(dialogParent(), + caption, + dir.toString(), + options); + return FilePath::fromString(result); +} + +FilePaths FileUtils::getOpenFilePaths(const QString &caption, + const FilePath &dir, + const QString &filter, + QString *selectedFilter, + QFileDialog::Options options) +{ + const QStringList result = QFileDialog::getOpenFileNames(dialogParent(), + caption, + dir.toString(), + filter, + selectedFilter, + options); + return transform(result, &FilePath::fromString); +} +#endif // QT_WIDGETS_LIB + +} // namespace Utils diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 9901f678763..8b5f97b6cde 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -38,6 +38,10 @@ #include <QUrl> #include <QXmlStreamWriter> // Mac. +#ifdef QT_WIDGETS_LIB +#include <QFileDialog> +#endif + #include <functional> #include <memory> @@ -128,6 +132,32 @@ public: static bool renameFile(const FilePath &srcFilePath, const FilePath &tgtFilePath); static void setDeviceFileHooks(const DeviceFileHooks &hooks); + +#ifdef QT_WIDGETS_LIB + static void setDialogParentGetter(const std::function<QWidget *()> &getter); + + static FilePath getOpenFilePath(const QString &caption = {}, + const FilePath &dir = {}, + const QString &filter = {}, + QString *selectedFilter = nullptr, + QFileDialog::Options options = {}); + + static FilePath getSaveFilePath(const QString &caption = {}, + const FilePath &dir = {}, + const QString &filter = {}, + QString *selectedFilter = nullptr, + QFileDialog::Options options = {}); + + static FilePath getExistingDirectory(const QString &caption = {}, + const FilePath &dir = {}, + QFileDialog::Options options = QFileDialog::ShowDirsOnly); + + static FilePaths getOpenFilePaths(const QString &caption = {}, + const FilePath &dir = {}, + const QString &filter = {}, + QString *selectedFilter = nullptr, + QFileDialog::Options options = {}); +#endif }; template<typename T> diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index aef14225f0d..73bcc5e793d 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -214,6 +214,8 @@ ICore::ICore(MainWindow *mainwindow) emit coreAboutToClose(); QCoreApplication::exit(exitCode); }); + + FileUtils::setDialogParentGetter(&ICore::dialogParent); } /*! |