Add support for options in file dialog "static" methods
authorKevin Krammer <kevin.krammer@kdab.com>
Sun, 4 Nov 2012 22:08:13 +0000 (23:08 +0100)
committerKevin Krammer <kevin.krammer@kdab.com>
Sun, 4 Nov 2012 22:08:13 +0000 (23:08 +0100)
examples/filedialog.qml
lib/declarativefiledialog.cpp
lib/declarativefiledialog_p.h

index 4d04cc5..a34db3f 100644 (file)
@@ -10,6 +10,14 @@ Widget {
       }
     }
     PushButton {
+      text: "FileDialog::getExistingDirectory non-native dialog"
+      onClicked: {
+        FileDialog.options = FileDialog.ShowDirsOnly | FileDialog.DontUseNativeDialog
+        var file = FileDialog.getExistingDirectory()
+        console.log("FileDialog.getExistingDirectory returned " + file)
+      }
+    }
+    PushButton {
       text: "FileDialog::getOpenFileName"
       onClicked: {
         var file = FileDialog.getOpenFileName()
index 9bffaf9..34baf80 100644 (file)
 class DeclarativeFileDialogAttached::Private
 {
   public:
+    Private() : options(-1) {}
+
+  public:
     QString caption;
     QString dir;
     QStringList nameFilters;
+    int options;
     QString selectedFilter;
 };
 
@@ -81,6 +85,20 @@ QStringList DeclarativeFileDialogAttached::nameFilters() const
   return d->nameFilters;
 }
 
+void DeclarativeFileDialogAttached::setOptions(int options)
+{
+  if (d->options == options)
+    return;
+
+  d->options = static_cast<QFileDialog::Options>(options);
+  emit optionsChanged(options);
+}
+
+int DeclarativeFileDialogAttached::options() const
+{
+  return d->options < 0 ? 0 : d->options;
+}
+
 QString DeclarativeFileDialogAttached::selectedFilter() const
 {
   return d->selectedFilter;
@@ -88,32 +106,43 @@ QString DeclarativeFileDialogAttached::selectedFilter() const
 
 QString DeclarativeFileDialogAttached::getExistingDirectory()
 {
-  return QFileDialog::getExistingDirectory(bestParentWindow(), d->caption, d->dir, QFileDialog::ShowDirsOnly);
+  const QFileDialog::Options options = (d->options < 0 ? QFileDialog::ShowDirsOnly : static_cast<QFileDialog::Options>(d->options));
+
+  return QFileDialog::getExistingDirectory(bestParentWindow(), d->caption, d->dir, options);
 }
 
 QString DeclarativeFileDialogAttached::getOpenFileName()
 {
+  const QFileDialog::Options options = static_cast<QFileDialog::Options>(d->options < 0 ? 0 : d->options);
   QString selectedFilter;
+
   const QString retVal = QFileDialog::getOpenFileName(bestParentWindow(), d->caption, d->dir,
-                                                      d->nameFilters.join(";;"), &selectedFilter, 0);
+                                                      d->nameFilters.join(";;"), &selectedFilter, options);
+
   setSelectedFilter(selectedFilter);
   return retVal;
 }
 
 QStringList DeclarativeFileDialogAttached::getOpenFileNames()
 {
+  const QFileDialog::Options options = static_cast<QFileDialog::Options>(d->options < 0 ? 0 : d->options);
   QString selectedFilter;
+
   const QStringList retVal = QFileDialog::getOpenFileNames(bestParentWindow(), d->caption, d->dir,
-                                                           d->nameFilters.join(";;"), &selectedFilter, 0);
+                                                           d->nameFilters.join(";;"), &selectedFilter, options);
+
   setSelectedFilter(selectedFilter);
   return retVal;
 }
 
 QString DeclarativeFileDialogAttached::getSaveFileName()
 {
+  const QFileDialog::Options options = static_cast<QFileDialog::Options>(d->options < 0 ? 0 : d->options);
   QString selectedFilter;
+
   const QString retVal = QFileDialog::getSaveFileName(bestParentWindow(), d->caption, d->dir,
-                                                      d->nameFilters.join(";;"), &selectedFilter, 0);
+                                                      d->nameFilters.join(";;"), &selectedFilter, options);
+
   setSelectedFilter(selectedFilter);
   return retVal;
 }
index 6fa5d25..3690d01 100644 (file)
@@ -32,7 +32,7 @@ class DeclarativeFileDialogAttached : public StaticDialogMethodAttached
   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)
-  // TODO dialog option
+  Q_PROPERTY(int options READ options WRITE setOptions NOTIFY optionsChanged)
   Q_PROPERTY(QString selectedFilter READ selectedFilter NOTIFY selectedFilterChanged)
 
   public:
@@ -48,6 +48,9 @@ class DeclarativeFileDialogAttached : public StaticDialogMethodAttached
     void setNameFilters(const QStringList &nameFilters);
     QStringList nameFilters() const;
 
+    void setOptions(int options);
+    int options() const;
+
     QString selectedFilter() const;
 
     Q_INVOKABLE QString getExistingDirectory();
@@ -62,6 +65,7 @@ class DeclarativeFileDialogAttached : public StaticDialogMethodAttached
     void captionChanged(const QString &caption);
     void dirChanged(const QString &dir);
     void nameFiltersChanged(const QStringList &filters);
+    void optionsChanged(int options);
     void selectedFilterChanged(const QString &filter);
 
   private: