From 692a1babe53c342e9f5435517a1265765f77f676 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 26 Jan 2012 11:29:24 +0100 Subject: Decouple QPlatformTheme from QDialog. - Use an enumeration for the dialog type. - Implemented on Windows and Mac Reviewed-by: Morten Johan Sorvig Change-Id: I213748a08168efbabc2ac0106308e97ff19d19c0 Reviewed-by: Friedemann Kleint --- .../platforms/cocoa/qcocoafiledialoghelper.h | 3 +- .../platforms/cocoa/qcocoafiledialoghelper.mm | 18 +++----- src/plugins/platforms/cocoa/qcocoatheme.h | 4 +- src/plugins/platforms/cocoa/qcocoatheme.mm | 17 +++----- .../platforms/windows/qwindowsdialoghelpers.cpp | 51 ++++++++-------------- .../platforms/windows/qwindowsdialoghelpers.h | 8 ++-- src/plugins/platforms/windows/qwindowstheme.cpp | 8 ++-- src/plugins/platforms/windows/qwindowstheme.h | 4 +- 8 files changed, 40 insertions(+), 73 deletions(-) (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h index 2589e13d84..dc0c8b8f66 100644 --- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h +++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h @@ -53,7 +53,7 @@ class QFileDialogPrivate; class QCocoaFileDialogHelper : public QPlatformFileDialogHelper { public: - QCocoaFileDialogHelper(QFileDialog *dialog); + QCocoaFileDialogHelper(); virtual ~QCocoaFileDialogHelper(); void platformNativeDialogModalHelp(); @@ -84,7 +84,6 @@ public: void QNSOpenSavePanelDelegate_filterSelected(int menuIndex); private: - QFileDialog *qtFileDialog; void *mDelegate; }; diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm index a8944d3bbd..f7018ecae3 100644 --- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm @@ -92,7 +92,6 @@ typedef QSharedPointer SharedPointerFileDialogOptions; NSView *mAccessoryView; NSPopUpButton *mPopUpButton; NSTextField *mTextField; - QFileDialog *mFileDialog; QCocoaFileDialogHelper *mHelper; NSString *mCurrentDir; @@ -126,12 +125,10 @@ typedef QSharedPointer SharedPointerFileDialogOptions; - (id)initWithAcceptMode: (const QString &)selectFile - fileDialog:(QFileDialog *)fileDialog options:(SharedPointerFileDialogOptions)options helper:(QCocoaFileDialogHelper *)helper { self = [super init]; - mFileDialog = fileDialog; mOptions = options; if (mOptions->acceptMode() == QT_PREPEND_NAMESPACE(QFileDialogOptions::AcceptOpen)){ mOpenPanel = [NSOpenPanel openPanel]; @@ -149,7 +146,7 @@ typedef QSharedPointer SharedPointerFileDialogOptions; mLastFilterCheckPath = new QString; mQDirFilterEntryList = new QStringList; mNameFilterDropDownList = new QStringList(mOptions->nameFilters()); - QString selectedVisualNameFilter = mFileDialog->selectedNameFilter(); + QString selectedVisualNameFilter = mOptions->initiallySelectedNameFilter(); mSelectedNameFilter = new QStringList([self findStrippedFilterWithVisualFilterName:selectedVisualNameFilter]); QFileInfo sel(selectFile); @@ -518,8 +515,8 @@ static bool qt_mac_is_macsheet(const QWidget *w) return w->parentWidget() && (modality == Qt::WindowModal || w->windowType() == Qt::Sheet); } -QCocoaFileDialogHelper::QCocoaFileDialogHelper(QFileDialog *dialog) : - qtFileDialog(dialog), mDelegate(0) +QCocoaFileDialogHelper::QCocoaFileDialogHelper() + :mDelegate(0) { } @@ -624,16 +621,12 @@ void QCocoaFileDialogHelper::deleteNativeDialog_sys() void QCocoaFileDialogHelper::hide_sys() { - if (!qtFileDialog->isHidden()) - hideCocoaFilePanel(); + hideCocoaFilePanel(); } bool QCocoaFileDialogHelper::show_sys(ShowFlags /* flags */, Qt::WindowFlags windowFlags, QWindow *parent) { // Q_Q(QFileDialog); - if (!qtFileDialog->isHidden()) - return false; - if (windowFlags & Qt::WindowStaysOnTopHint) { // The native file dialog tries all it can to stay // on the NSModalPanel level. And it might also show @@ -657,7 +650,6 @@ void QCocoaFileDialogHelper::createNSOpenSavePanelDelegate() QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = [[QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) alloc] initWithAcceptMode: selection - fileDialog:qtFileDialog options:opts helper:this]; @@ -669,7 +661,7 @@ bool QCocoaFileDialogHelper::showCocoaFilePanel(QWindow *parent) // Q_Q(QFileDialog); createNSOpenSavePanelDelegate(); QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = static_cast(mDelegate); - if (qt_mac_is_macsheet(qtFileDialog)) + if (0 /*qt_mac_is_macsheet(qtFileDialog)*/) // ### sheet support. [delegate showWindowModalSheet:parent]; else [delegate showModelessPanel]; diff --git a/src/plugins/platforms/cocoa/qcocoatheme.h b/src/plugins/platforms/cocoa/qcocoatheme.h index 7de6790617..e89bb44a11 100644 --- a/src/plugins/platforms/cocoa/qcocoatheme.h +++ b/src/plugins/platforms/cocoa/qcocoatheme.h @@ -57,8 +57,8 @@ public: QPlatformMenu *createPlatformMenu(QMenu *menu = 0) const; QPlatformMenuBar *createPlatformMenuBar(QMenuBar *menuBar = 0) const; - bool usePlatformNativeDialog(const QDialog *dialog = 0) const; - QPlatformDialogHelper *createPlatformDialogHelper(QDialog *dialog = 0) const; + bool usePlatformNativeDialog(DialogType dialogType) const; + QPlatformDialogHelper *createPlatformDialogHelper(DialogType dialogType) const; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm index 326d9988c3..2e5d976ec2 100644 --- a/src/plugins/platforms/cocoa/qcocoatheme.mm +++ b/src/plugins/platforms/cocoa/qcocoatheme.mm @@ -68,24 +68,17 @@ QPlatformMenuBar *QCocoaTheme::createPlatformMenuBar(QMenuBar *menuBar) const } -bool QCocoaTheme::usePlatformNativeDialog(const QDialog *dialog) const +bool QCocoaTheme::usePlatformNativeDialog(DialogType dialogType) const { - Q_UNUSED(dialog); - return true; -#if 0 - QFileDialog *fileDialog = qobject_cast(dialog); - if (fileDialog) { + if (dialogType == QPlatformTheme::FileDialog) return true; - } return false; -#endif } -QPlatformDialogHelper * QCocoaTheme::createPlatformDialogHelper(QDialog *dialog) const +QPlatformDialogHelper * QCocoaTheme::createPlatformDialogHelper(DialogType dialogType) const { - QFileDialog *fileDialog = qobject_cast(dialog); - if (fileDialog) { - return new QCocoaFileDialogHelper(fileDialog); + if (dialogType == QPlatformTheme::FileDialog) { + return new QCocoaFileDialogHelper(); } return 0; } diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp index ceb983d22b..cdb1505dad 100644 --- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp @@ -341,17 +341,6 @@ void eatMouseMove() qDebug("%s triggered=%d" , __FUNCTION__, msg.message == WM_MOUSEMOVE); } -Type dialogType(const QDialog *dialog) -{ - if (qobject_cast(dialog)) - return FileDialog; - if (qobject_cast(dialog)) - return FontDialog; - if (qobject_cast(dialog)) - return ColorDialog; - return UnknownType; -} - } // namespace QWindowsDialogs /*! @@ -1359,40 +1348,36 @@ QWindowsNativeDialogBase *QWindowsColorDialogHelper::createNativeDialog() namespace QWindowsDialogs { // QWindowsDialogHelperBase creation functions -bool useHelper(const QDialog *dialog) +bool useHelper(QPlatformTheme::DialogType type) { - if (dialog) { - switch (QWindowsDialogs::dialogType(dialog)) { - case QWindowsDialogs::FileDialog: - return true; - case QWindowsDialogs::ColorDialog: + switch (type) { + case QPlatformTheme::FileDialog: + return true; + break; + case QPlatformTheme::ColorDialog: #ifdef USE_NATIVE_COLOR_DIALOG - return true; + return true; +#else + break; #endif - case QWindowsDialogs::FontDialog: - case QWindowsDialogs::UnknownType: - break; - } + case QPlatformTheme::FontDialog: + break; } return false; } -QPlatformDialogHelper *createHelper(QDialog *dialog) +QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type) { - if (QWindowsContext::verboseDialogs) - qDebug("%s %p %s" , __FUNCTION__, dialog, dialog->metaObject()->className()); - if (!dialog) - return 0; - - switch (QWindowsDialogs::dialogType(dialog)) { - case QWindowsDialogs::FileDialog: + switch (type) { + case QPlatformTheme::FileDialog: return new QWindowsFileDialogHelper(); - case QWindowsDialogs::ColorDialog: + case QPlatformTheme::ColorDialog: #ifdef USE_NATIVE_COLOR_DIALOG return new QWindowsColorDialogHelper(); +#else + break; #endif - case QWindowsDialogs::FontDialog: - case QWindowsDialogs::UnknownType: + case QPlatformTheme::FontDialog: break; } return 0; diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.h b/src/plugins/platforms/windows/qwindowsdialoghelpers.h index ea5aafe2ca..58cd912510 100644 --- a/src/plugins/platforms/windows/qwindowsdialoghelpers.h +++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.h @@ -46,6 +46,7 @@ #include "qtwindows_additional.h" #include +#include #include QT_BEGIN_NAMESPACE @@ -56,13 +57,10 @@ class QWindowsNativeDialogBase; namespace QWindowsDialogs { - enum Type { UnknownType, ColorDialog, FontDialog, FileDialog }; - - Type dialogType(const QDialog *dialog); void eatMouseMove(); - bool useHelper(const QDialog *dialog = 0); - QPlatformDialogHelper *createHelper(QDialog *dialog = 0); + bool useHelper(QPlatformTheme::DialogType type); + QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type); } // namespace QWindowsDialogs template diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp index 42a7e5af53..2a622b5fc8 100644 --- a/src/plugins/platforms/windows/qwindowstheme.cpp +++ b/src/plugins/platforms/windows/qwindowstheme.cpp @@ -81,14 +81,14 @@ QVariant QWindowsTheme::themeHint(ThemeHint hint) const return QVariant(); } -bool QWindowsTheme::usePlatformNativeDialog(const QDialog *dialog) const +bool QWindowsTheme::usePlatformNativeDialog(DialogType type) const { - return QWindowsDialogs::useHelper(dialog); + return QWindowsDialogs::useHelper(type); } -QPlatformDialogHelper *QWindowsTheme::createPlatformDialogHelper(QDialog *dialog) const +QPlatformDialogHelper *QWindowsTheme::createPlatformDialogHelper(DialogType type) const { - return QWindowsDialogs::createHelper(dialog); + return QWindowsDialogs::createHelper(type); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowstheme.h b/src/plugins/platforms/windows/qwindowstheme.h index 50f4e0d8ed..0d72d0ef87 100644 --- a/src/plugins/platforms/windows/qwindowstheme.h +++ b/src/plugins/platforms/windows/qwindowstheme.h @@ -51,8 +51,8 @@ class QWindowsTheme : public QPlatformTheme public: QWindowsTheme(); - virtual bool usePlatformNativeDialog(const QDialog *dialog = 0) const; - virtual QPlatformDialogHelper *createPlatformDialogHelper(QDialog *dialog = 0) const; + virtual bool usePlatformNativeDialog(DialogType type) const; + virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const; virtual QVariant themeHint(ThemeHint) const; }; -- cgit v1.2.3