summaryrefslogtreecommitdiffstats
path: root/src/widgets/dialogs/qfiledialog.cpp
diff options
context:
space:
mode:
authorMorten Sorvig <morten.sorvig@nokia.com>2011-09-28 09:52:15 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-27 11:12:38 +0200
commit8f912c5c0f3f89e6f3042c0a948ccd155e57e216 (patch)
tree8b0ebe25160243e43ef1dc83bc669714779ffb68 /src/widgets/dialogs/qfiledialog.cpp
parenta94c960b75453ef2eb9dca0be1db426de7a1091d (diff)
Native file dialog support for Mac
* New API: QPlatformDialogHelper to support native dialog on QPA. (Currently, It supports only file dialog.) * Modify QDialog* and QFileDialog* to support native dialog. * Add native file dialog support to cocoa platform plugin. Change-Id: I957f046748a27a33fd9f8af3c525feabd1b0f582 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'src/widgets/dialogs/qfiledialog.cpp')
-rw-r--r--src/widgets/dialogs/qfiledialog.cpp46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
index 22d334a1ec..4c0d50f55b 100644
--- a/src/widgets/dialogs/qfiledialog.cpp
+++ b/src/widgets/dialogs/qfiledialog.cpp
@@ -45,6 +45,7 @@
#ifndef QT_NO_FILEDIALOG
#include "qfiledialog_p.h"
+#include <private/qguiapplication_p.h>
#include <qfontmetrics.h>
#include <qaction.h>
#include <qheaderview.h>
@@ -70,6 +71,7 @@ extern bool qt_priv_ptr_valid;
#include <pwd.h>
#endif
#endif
+#include "qplatformdialoghelper_qpa.h"
QT_BEGIN_NAMESPACE
@@ -295,9 +297,9 @@ Q_WIDGETS_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_h
This signal is emitted when the user selects a \a filter.
*/
-#if defined(Q_WS_WIN) || defined(Q_WS_MAC)
-bool Q_WIDGETS_EXPORT qt_use_native_dialogs = true; // for the benefit of testing tools, until we have a proper API
-#endif
+//#if defined(Q_WS_WIN) || defined(Q_WS_MAC)
+//bool Q_WIDGETS_EXPORT qt_use_native_dialogs = true; // for the benefit of testing tools, until we have a proper API
+//#endif
QT_BEGIN_INCLUDE_NAMESPACE
#ifdef Q_WS_WIN
@@ -400,7 +402,7 @@ QList<QUrl> QFileDialog::sidebarUrls() const
static const qint32 QFileDialogMagic = 0xbe;
-const char *qt_file_dialog_filter_reg_exp =
+const char *QFileDialogPrivate::qt_file_dialog_filter_reg_exp =
"^(.*)\\(([a-zA-Z0-9_.*? +;#\\-\\[\\]@\\{\\}/!<>\\$%&=^~:\\|]*)\\)$";
/*!
@@ -515,9 +517,6 @@ QFileDialogPrivate::QFileDialogPrivate()
defaultFileTypes(true),
fileNameLabelExplicitlySat(false),
nativeDialogInUse(false),
-#ifdef Q_WS_MAC
- mDelegate(0),
-#endif
qFileDialogUi(0)
{
}
@@ -1066,7 +1065,7 @@ bool QFileDialog::isNameFilterDetailsVisible() const
QStringList qt_strip_filters(const QStringList &filters)
{
QStringList strippedFilters;
- QRegExp r(QString::fromLatin1(qt_file_dialog_filter_reg_exp));
+ QRegExp r(QString::fromLatin1(QFileDialogPrivate::qt_file_dialog_filter_reg_exp));
for (int i = 0; i < filters.count(); ++i) {
QString filterName;
int index = r.indexIn(filters[i]);
@@ -1361,7 +1360,7 @@ void QFileDialog::setAcceptMode(QFileDialog::AcceptMode mode)
d->qFileDialogUi->lookInCombo->setEditable(false);
}
d->retranslateWindowTitle();
-#if defined(Q_WS_MAC)
+#if defined(Q_OS_MAC)
d->deleteNativeDialog_sys();
setAttribute(Qt::WA_DontShowOnScreen, false);
#endif
@@ -1761,7 +1760,7 @@ QString QFileDialog::getOpenFileName(QWidget *parent,
args.mode = ExistingFile;
args.options = options;
#if defined(Q_WS_WIN)
- if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog)) {
+ if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog)) {
return qt_win_get_open_file_name(args, &(args.directory), selectedFilter);
}
#endif
@@ -1854,7 +1853,7 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent,
args.options = options;
#if defined(Q_WS_WIN)
- if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog)) {
+ if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog)) {
return qt_win_get_open_file_names(args, &(args.directory), selectedFilter);
}
#endif
@@ -1948,7 +1947,7 @@ QString QFileDialog::getSaveFileName(QWidget *parent,
args.options = options;
#if defined(Q_WS_WIN)
- if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog)) {
+ if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog)) {
return qt_win_get_save_file_name(args, &(args.directory), selectedFilter);
}
#endif
@@ -2028,7 +2027,7 @@ QString QFileDialog::getExistingDirectory(QWidget *parent,
args.options = options;
#if defined(Q_WS_WIN)
- if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog) && (options & ShowDirsOnly)
+ if (QGuiApplicationPrivate::platformIntegration()->usePlatformNativeDialog() && !(args.options & DontUseNativeDialog) && (options & ShowDirsOnly)
#if defined(Q_WS_WINCE)
&& qt_priv_ptr_valid
#endif
@@ -2224,6 +2223,10 @@ void QFileDialogPrivate::init(const QString &directory, const QString &nameFilte
const QString &caption)
{
Q_Q(QFileDialog);
+ platformHelper = QGuiApplicationPrivate::platformIntegration()->createPlatformDialogHelper(q);
+ if (platformHelper)
+ platformHelper->d_ptr = this;
+
if (!caption.isEmpty()) {
useDefaultCaption = false;
setWindowTitle = caption;
@@ -2270,11 +2273,10 @@ void QFileDialogPrivate::createWidgets()
Q_Q(QFileDialog);
model = new QFileSystemModel(q);
model->setObjectName(QLatin1String("qt_filesystem_model"));
-#ifdef Q_WS_MAC
- model->setNameFilterDisables(true);
-#else
- model->setNameFilterDisables(false);
-#endif
+ if (platformHelper)
+ model->setNameFilterDisables(platformHelper->defaultNameFilterDisables());
+ else
+ model->setNameFilterDisables(false);
model->d_func()->disableRecursiveSort = true;
QFileDialog::connect(model, SIGNAL(fileRenamed(QString,QString,QString)), q, SLOT(_q_fileRenamed(QString,QString,QString)));
QFileDialog::connect(model, SIGNAL(rootPathChanged(QString)),
@@ -3013,7 +3015,7 @@ void QFileDialogPrivate::_q_goToDirectory(const QString &path)
}
// Makes a list of filters from a normal filter string "Image Files (*.png *.jpg)"
-QStringList qt_clean_filter_list(const QString &filter)
+QStringList QFileDialogPrivate::qt_clean_filter_list(const QString &filter)
{
QRegExp regexp(QString::fromLatin1(qt_file_dialog_filter_reg_exp));
QString f = filter;
@@ -3126,6 +3128,12 @@ void QFileDialogPrivate::_q_fileRenamed(const QString &path, const QString oldNa
}
}
+void QFileDialogPrivate::_q_platformRunNativeAppModalPanel()
+{
+ if (platformHelper)
+ platformHelper->_q_platformRunNativeAppModalPanel();
+}
+
/*!
\internal