Refactor file dialog attached to common base class
authorKevin Krammer <kevin.krammer@kdab.com>
Fri, 2 Nov 2012 14:26:24 +0000 (15:26 +0100)
committerKevin Krammer <kevin.krammer@kdab.com>
Fri, 2 Nov 2012 15:20:24 +0000 (16:20 +0100)
lib/declarativefiledialog.cpp
lib/declarativefiledialog_p.h

index 93c9a62..9bffaf9 100644 (file)
@@ -23,7 +23,6 @@
 class DeclarativeFileDialogAttached::Private
 {
   public:
-    QPointer<QObject> 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<AbstractDeclarativeObject*>(parent);
-  if (declarativeObject)
-    parent = declarativeObject->object();
-
-  while (parent) {
-    QWidget *widget = qobject_cast<QWidget*>(parent);
-    if (widget)
-      return widget->topLevelWidget();
-
-    parent = parent->parent();
-  }
-
-  return 0;
-}
-
 void DeclarativeFileDialogAttached::setSelectedFilter(const QString &filter)
 {
   if (filter == d->selectedFilter)
index 69fa604..6fa5d25 100644 (file)
 #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;