From: Kevin Krammer Date: Sun, 4 Nov 2012 22:08:13 +0000 (+0100) Subject: Add support for options in file dialog "static" methods X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=1de9bade29cf86f294d13cc0bc8b2b01986f22a3;p=web%2Fkonrad%2FDeclarativeWidgets.git Add support for options in file dialog "static" methods --- diff --git a/examples/filedialog.qml b/examples/filedialog.qml index 4d04cc5..a34db3f 100644 --- a/examples/filedialog.qml +++ b/examples/filedialog.qml @@ -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() diff --git a/lib/declarativefiledialog.cpp b/lib/declarativefiledialog.cpp index 9bffaf9..34baf80 100644 --- a/lib/declarativefiledialog.cpp +++ b/lib/declarativefiledialog.cpp @@ -23,9 +23,13 @@ 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(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(d->options)); + + return QFileDialog::getExistingDirectory(bestParentWindow(), d->caption, d->dir, options); } QString DeclarativeFileDialogAttached::getOpenFileName() { + const QFileDialog::Options options = static_cast(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(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(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; } diff --git a/lib/declarativefiledialog_p.h b/lib/declarativefiledialog_p.h index 6fa5d25..3690d01 100644 --- a/lib/declarativefiledialog_p.h +++ b/lib/declarativefiledialog_p.h @@ -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: