diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qplatformdialoghelper.cpp | 21 | ||||
-rw-r--r-- | src/gui/kernel/qplatformdialoghelper.h | 5 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog.cpp | 29 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog.h | 1 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog_p.h | 16 |
5 files changed, 69 insertions, 3 deletions
diff --git a/src/gui/kernel/qplatformdialoghelper.cpp b/src/gui/kernel/qplatformdialoghelper.cpp index c36186b815..16f31db50d 100644 --- a/src/gui/kernel/qplatformdialoghelper.cpp +++ b/src/gui/kernel/qplatformdialoghelper.cpp @@ -451,6 +451,7 @@ public: QString defaultSuffix; QStringList history; QUrl initialDirectory; + QString initiallySelectedMimeTypeFilter; QString initiallySelectedNameFilter; QList<QUrl> initiallySelectedFiles; QStringList supportedSchemes; @@ -668,6 +669,16 @@ void QFileDialogOptions::setInitialDirectory(const QUrl &directory) d->initialDirectory = directory; } +QString QFileDialogOptions::initiallySelectedMimeTypeFilter() const +{ + return d->initiallySelectedMimeTypeFilter; +} + +void QFileDialogOptions::setInitiallySelectedMimeTypeFilter(const QString &filter) +{ + d->initiallySelectedMimeTypeFilter = filter; +} + QString QFileDialogOptions::initiallySelectedNameFilter() const { return d->initiallySelectedNameFilter; @@ -699,6 +710,16 @@ QStringList QFileDialogOptions::supportedSchemes() const return d->supportedSchemes; } +void QPlatformFileDialogHelper::selectMimeTypeFilter(const QString &filter) +{ + Q_UNUSED(filter) +} + +QString QPlatformFileDialogHelper::selectedMimeTypeFilter() const +{ + return QString(); +} + // Return true if the URL is supported by the filedialog implementation *and* by the application. bool QPlatformFileDialogHelper::isSupportedUrl(const QUrl &url) const { diff --git a/src/gui/kernel/qplatformdialoghelper.h b/src/gui/kernel/qplatformdialoghelper.h index 6caef070e2..ed88c19c84 100644 --- a/src/gui/kernel/qplatformdialoghelper.h +++ b/src/gui/kernel/qplatformdialoghelper.h @@ -372,6 +372,9 @@ public: QUrl initialDirectory() const; void setInitialDirectory(const QUrl &); + QString initiallySelectedMimeTypeFilter() const; + void setInitiallySelectedMimeTypeFilter(const QString &); + QString initiallySelectedNameFilter() const; void setInitiallySelectedNameFilter(const QString &); @@ -397,7 +400,9 @@ public: virtual void selectFile(const QUrl &filename) = 0; virtual QList<QUrl> selectedFiles() const = 0; virtual void setFilter() = 0; + virtual void selectMimeTypeFilter(const QString &filter); virtual void selectNameFilter(const QString &filter) = 0; + virtual QString selectedMimeTypeFilter() const; virtual QString selectedNameFilter() const = 0; virtual bool isSupportedUrl(const QUrl &url) const; diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 8058dee567..5bfb7553a5 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -1461,6 +1461,19 @@ void QFileDialog::selectNameFilter(const QString &filter) } /*! + * \since 5.9 + * \return The mimetype of the file that the user selected in the file dialog. + */ +QString QFileDialog::selectedMimeTypeFilter() const +{ + Q_D(const QFileDialog); + if (!d->usingWidgets()) + return d->selectedMimeTypeFilter_sys(); + + return d->options->initiallySelectedMimeTypeFilter(); +} + +/*! \since 4.4 Returns the filter that the user selected in the file dialog. @@ -1579,9 +1592,19 @@ QStringList QFileDialog::mimeTypeFilters() const */ void QFileDialog::selectMimeTypeFilter(const QString &filter) { - const QString text = nameFilterForMime(filter); - if (!text.isEmpty()) - selectNameFilter(text); + Q_D(QFileDialog); + d->options->setInitiallySelectedMimeTypeFilter(filter); + + const QString filterForMime = nameFilterForMime(filter); + + if (!d->usingWidgets()) { + d->selectMimeTypeFilter_sys(filter); + if (d->selectedMimeTypeFilter_sys().isEmpty() && !filterForMime.isEmpty()) { + selectNameFilter(filterForMime); + } + } else if (!filterForMime.isEmpty()) { + selectNameFilter(filterForMime); + } } #endif // QT_NO_MIMETYPE diff --git a/src/widgets/dialogs/qfiledialog.h b/src/widgets/dialogs/qfiledialog.h index c2ab0b3918..7959eebd7b 100644 --- a/src/widgets/dialogs/qfiledialog.h +++ b/src/widgets/dialogs/qfiledialog.h @@ -125,6 +125,7 @@ public: void setNameFilters(const QStringList &filters); QStringList nameFilters() const; void selectNameFilter(const QString &filter); + QString selectedMimeTypeFilter() const; QString selectedNameFilter() const; #ifndef QT_NO_MIMETYPE diff --git a/src/widgets/dialogs/qfiledialog_p.h b/src/widgets/dialogs/qfiledialog_p.h index afebad4457..b665b54a9b 100644 --- a/src/widgets/dialogs/qfiledialog_p.h +++ b/src/widgets/dialogs/qfiledialog_p.h @@ -258,6 +258,8 @@ public: void selectFile_sys(const QUrl &filename); QList<QUrl> selectedFiles_sys() const; void setFilter_sys(); + void selectMimeTypeFilter_sys(const QString &filter); + QString selectedMimeTypeFilter_sys() const; void selectNameFilter_sys(const QString &filter); QString selectedNameFilter_sys() const; ////////////////////////////////////////////// @@ -400,6 +402,20 @@ inline void QFileDialogPrivate::setFilter_sys() helper->setFilter(); } +inline void QFileDialogPrivate::selectMimeTypeFilter_sys(const QString &filter) +{ + if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) + helper->selectMimeTypeFilter(filter); +} + +QString QFileDialogPrivate::selectedMimeTypeFilter_sys() const +{ + if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) + return helper->selectedMimeTypeFilter(); + + return QString(); +} + inline void QFileDialogPrivate::selectNameFilter_sys(const QString &filter) { if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) |