From: Kevin Krammer Date: Fri, 2 Nov 2012 14:26:24 +0000 (+0100) Subject: Refactor file dialog attached to common base class X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=229d6580d046885db7ab7262b0adcdd2d88bbf4c;p=web%2Fkonrad%2FDeclarativeWidgets.git Refactor file dialog attached to common base class --- diff --git a/lib/declarativefiledialog.cpp b/lib/declarativefiledialog.cpp index 93c9a62..9bffaf9 100644 --- a/lib/declarativefiledialog.cpp +++ b/lib/declarativefiledialog.cpp @@ -23,7 +23,6 @@ class DeclarativeFileDialogAttached::Private { public: - QPointer dialogParent; QString caption; QString dir; QStringList nameFilters; @@ -31,7 +30,7 @@ class DeclarativeFileDialogAttached::Private }; DeclarativeFileDialogAttached::DeclarativeFileDialogAttached(QObject *parent) - : QObject(parent), d(new Private) + : StaticDialogMethodAttached(parent), d(new Private) { } @@ -40,20 +39,6 @@ DeclarativeFileDialogAttached::~DeclarativeFileDialogAttached() delete d; } -void DeclarativeFileDialogAttached::setDialogParent(QObject *parent) -{ - if (parent == d->dialogParent) - return; - - d->dialogParent = parent; - emit dialogParentChanged(parent); -} - -QObject *DeclarativeFileDialogAttached::dialogParent() const -{ - return d->dialogParent; -} - void DeclarativeFileDialogAttached::setCaption(const QString &caption) { if (caption == d->caption) @@ -103,13 +88,13 @@ QString DeclarativeFileDialogAttached::selectedFilter() const QString DeclarativeFileDialogAttached::getExistingDirectory() { - return QFileDialog::getExistingDirectory(bestParentWindow(d->dialogParent), d->caption, d->dir, QFileDialog::ShowDirsOnly); + return QFileDialog::getExistingDirectory(bestParentWindow(), d->caption, d->dir, QFileDialog::ShowDirsOnly); } QString DeclarativeFileDialogAttached::getOpenFileName() { QString selectedFilter; - const QString retVal = QFileDialog::getOpenFileName(bestParentWindow(d->dialogParent), d->caption, d->dir, + const QString retVal = QFileDialog::getOpenFileName(bestParentWindow(), d->caption, d->dir, d->nameFilters.join(";;"), &selectedFilter, 0); setSelectedFilter(selectedFilter); return retVal; @@ -118,7 +103,7 @@ QString DeclarativeFileDialogAttached::getOpenFileName() QStringList DeclarativeFileDialogAttached::getOpenFileNames() { QString selectedFilter; - const QStringList retVal = QFileDialog::getOpenFileNames(bestParentWindow(d->dialogParent), d->caption, d->dir, + const QStringList retVal = QFileDialog::getOpenFileNames(bestParentWindow(), d->caption, d->dir, d->nameFilters.join(";;"), &selectedFilter, 0); setSelectedFilter(selectedFilter); return retVal; @@ -127,33 +112,12 @@ QStringList DeclarativeFileDialogAttached::getOpenFileNames() QString DeclarativeFileDialogAttached::getSaveFileName() { QString selectedFilter; - const QString retVal = QFileDialog::getSaveFileName(bestParentWindow(d->dialogParent), d->caption, d->dir, + const QString retVal = QFileDialog::getSaveFileName(bestParentWindow(), d->caption, d->dir, d->nameFilters.join(";;"), &selectedFilter, 0); setSelectedFilter(selectedFilter); return retVal; } -QWidget *DeclarativeFileDialogAttached::bestParentWindow(QObject *parent) const -{ - if (!parent) - parent = this->parent(); - - // if parent is a Declarative Object, search the proxied hierarchy - AbstractDeclarativeObject *declarativeObject = dynamic_cast(parent); - if (declarativeObject) - parent = declarativeObject->object(); - - while (parent) { - QWidget *widget = qobject_cast(parent); - if (widget) - return widget->topLevelWidget(); - - parent = parent->parent(); - } - - return 0; -} - void DeclarativeFileDialogAttached::setSelectedFilter(const QString &filter) { if (filter == d->selectedFilter) diff --git a/lib/declarativefiledialog_p.h b/lib/declarativefiledialog_p.h index 69fa604..6fa5d25 100644 --- a/lib/declarativefiledialog_p.h +++ b/lib/declarativefiledialog_p.h @@ -24,11 +24,11 @@ #include "declarativewidgetproxy_p.h" #include "objectadaptors_p.h" +#include "staticdialogmethodattached_p.h" -class DeclarativeFileDialogAttached : public QObject +class DeclarativeFileDialogAttached : public StaticDialogMethodAttached { Q_OBJECT - Q_PROPERTY(QObject* parent READ dialogParent WRITE setDialogParent NOTIFY dialogParentChanged) Q_PROPERTY(QString caption READ caption WRITE setCaption NOTIFY captionChanged) Q_PROPERTY(QString dir READ dir WRITE setDir NOTIFY dirChanged) Q_PROPERTY(QStringList nameFilters READ nameFilters WRITE setNameFilters NOTIFY nameFiltersChanged) @@ -39,9 +39,6 @@ class DeclarativeFileDialogAttached : public QObject DeclarativeFileDialogAttached(QObject *parent = 0); ~DeclarativeFileDialogAttached(); - void setDialogParent(QObject *parent); - QObject *dialogParent() const; - void setCaption(const QString &caption); QString caption() const; @@ -62,14 +59,12 @@ class DeclarativeFileDialogAttached : public QObject Q_INVOKABLE QString getSaveFileName(); Q_SIGNALS: - void dialogParentChanged(QObject *parent); void captionChanged(const QString &caption); void dirChanged(const QString &dir); void nameFiltersChanged(const QStringList &filters); void selectedFilterChanged(const QString &filter); private: - QWidget *bestParentWindow(QObject *parent) const; void setSelectedFilter(const QString &filter); class Private;