Utilize Q_FORWARD_DECLARE_OBJC_CLASS in QCocoaFileDialogHelper.

Change-Id: I94ae91ac8fb625de4a328c6628ce0ab45919708f
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
This commit is contained in:
Jake Petroules 2014-09-15 16:24:41 -04:00
parent 50430a8392
commit 3b1de67fde
2 changed files with 25 additions and 34 deletions

View File

@ -37,6 +37,8 @@
#include <QObject>
#include <qpa/qplatformdialoghelper.h>
Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate));
QT_BEGIN_NAMESPACE
class QFileDialog;
@ -73,7 +75,7 @@ public:
void QNSOpenSavePanelDelegate_filterSelected(int menuIndex);
private:
void *mDelegate;
QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *mDelegate;
QUrl mDir;
};

View File

@ -77,8 +77,6 @@ QT_USE_NAMESPACE
typedef QSharedPointer<QFileDialogOptions> SharedPointerFileDialogOptions;
@class QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate);
@interface QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate)
: NSObject<NSOpenSavePanelDelegate>
{
@ -568,7 +566,7 @@ QCocoaFileDialogHelper::~QCocoaFileDialogHelper()
if (!mDelegate)
return;
QCocoaAutoReleasePool pool;
[reinterpret_cast<QNSOpenSavePanelDelegate *>(mDelegate) release];
[mDelegate release];
mDelegate = 0;
}
@ -604,18 +602,16 @@ extern void qt_mac_to_pascal_string(QString s, Str255 str, TextEncoding encoding
void QCocoaFileDialogHelper::setDirectory(const QUrl &directory)
{
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if (delegate)
[delegate->mSavePanel setDirectoryURL:[NSURL fileURLWithPath:QCFString::toNSString(directory.toLocalFile())]];
if (mDelegate)
[mDelegate->mSavePanel setDirectoryURL:[NSURL fileURLWithPath:QCFString::toNSString(directory.toLocalFile())]];
else
mDir = directory;
}
QUrl QCocoaFileDialogHelper::directory() const
{
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if (delegate) {
QString path = QCFString::toQString([[delegate->mSavePanel directoryURL] path]).normalized(QString::NormalizationForm_C);
if (mDelegate) {
QString path = QCFString::toQString([[mDelegate->mSavePanel directoryURL] path]).normalized(QString::NormalizationForm_C);
return QUrl::fromLocalFile(path);
}
return mDir;
@ -634,25 +630,23 @@ void QCocoaFileDialogHelper::selectFile(const QUrl &filename)
QList<QUrl> QCocoaFileDialogHelper::selectedFiles() const
{
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if (delegate)
return [delegate selectedFiles];
if (mDelegate)
return [mDelegate selectedFiles];
return QList<QUrl>();
}
void QCocoaFileDialogHelper::setFilter()
{
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if (!delegate)
if (!mDelegate)
return;
const SharedPointerFileDialogOptions &opts = options();
[delegate->mSavePanel setTitle:QCFString::toNSString(opts->windowTitle())];
[mDelegate->mSavePanel setTitle:QCFString::toNSString(opts->windowTitle())];
if (opts->isLabelExplicitlySet(QFileDialogOptions::Accept))
[delegate->mSavePanel setPrompt:[delegate strip:opts->labelText(QFileDialogOptions::Accept)]];
[mDelegate->mSavePanel setPrompt:[mDelegate strip:opts->labelText(QFileDialogOptions::Accept)]];
if (opts->isLabelExplicitlySet(QFileDialogOptions::FileName))
[delegate->mSavePanel setNameFieldLabel:[delegate strip:opts->labelText(QFileDialogOptions::FileName)]];
[mDelegate->mSavePanel setNameFieldLabel:[mDelegate strip:opts->labelText(QFileDialogOptions::FileName)]];
[delegate updateProperties];
[mDelegate updateProperties];
}
void QCocoaFileDialogHelper::selectNameFilter(const QString &filter)
@ -661,22 +655,20 @@ void QCocoaFileDialogHelper::selectNameFilter(const QString &filter)
return;
const int index = options()->nameFilters().indexOf(filter);
if (index != -1) {
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if (!delegate) {
if (!mDelegate) {
options()->setInitiallySelectedNameFilter(filter);
return;
}
[delegate->mPopUpButton selectItemAtIndex:index];
[delegate filterChanged:nil];
[mDelegate->mPopUpButton selectItemAtIndex:index];
[mDelegate filterChanged:nil];
}
}
QString QCocoaFileDialogHelper::selectedNameFilter() const
{
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if (!delegate)
if (!mDelegate)
return options()->initiallySelectedNameFilter();
int index = [delegate->mPopUpButton indexOfSelectedItem];
int index = [mDelegate->mPopUpButton indexOfSelectedItem];
if (index >= options()->nameFilters().count())
return QString();
return index != -1 ? options()->nameFilters().at(index) : QString();
@ -723,13 +715,12 @@ void QCocoaFileDialogHelper::createNSOpenSavePanelDelegate()
bool QCocoaFileDialogHelper::showCocoaFilePanel(Qt::WindowModality windowModality, QWindow *parent)
{
createNSOpenSavePanelDelegate();
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if (!delegate)
if (!mDelegate)
return false;
if (windowModality == Qt::NonModal)
[delegate showModelessPanel];
[mDelegate showModelessPanel];
else if (windowModality == Qt::WindowModal && parent)
[delegate showWindowModalSheet:parent];
[mDelegate showWindowModalSheet:parent];
// no need to show a Qt::ApplicationModal dialog here, since it will be done in _q_platformRunNativeAppModalPanel()
return true;
}
@ -741,8 +732,7 @@ bool QCocoaFileDialogHelper::hideCocoaFilePanel()
// open regarding whether or not to go native:
return false;
} else {
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
[delegate closePanel];
[mDelegate closePanel];
// Even when we hide it, we are still using a
// native dialog, so return true:
return true;
@ -756,8 +746,7 @@ void QCocoaFileDialogHelper::exec()
// yet been reactivated (regardless if [NSApp run] is still on the stack)),
// showing a native modal dialog will fail.
QCocoaAutoReleasePool pool;
QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate);
if ([delegate runApplicationModalPanel])
if ([mDelegate runApplicationModalPanel])
emit accept();
else
emit reject();