aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <[email protected]>2021-07-16 15:24:26 +0200
committerhjk <[email protected]>2021-07-26 09:44:20 +0000
commit3edc5673b58e55971150ff4971c4ad6585ef0dc8 (patch)
treea012a312ad8c912283b064751f940f30a5e569ec
parent09286d062f276244949e45dd086c359d8a38d29c (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.cpp73
-rw-r--r--src/libs/utils/fileutils.h30
-rw-r--r--src/plugins/coreplugin/icore.cpp2
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);
}
/*!