From 4f03d3d3bd8f621f935276f89f1d19d52e219be6 Mon Sep 17 00:00:00 2001 From: Kevin Krammer Date: Tue, 23 Oct 2012 17:59:27 +0200 Subject: [PATCH] QFileDialog static methods optional arguments and output arguments --- declarativeobjects.cpp | 119 ++++++++++++++++++++++++++++++++++++++++++----- declarativeobjects_p.h | 48 +++++++++++++++---- filedialog.qml | 10 ++++ 3 files changed, 153 insertions(+), 24 deletions(-) diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index 378a874..a6771db 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -703,33 +703,117 @@ DeclarativeDialogButtonBox::DeclarativeDialogButtonBox(QObject *parent) : Declar CUSTOM_METAOBJECT(DeclarativeDialogButtonBox, QDialogButtonBox) // DeclarativeFileDialog -DeclarativeFileDialogAttached::DeclarativeFileDialogAttached(QObject *parent) : QObject(parent) +class DeclarativeFileDialogAttached::Private { + public: + QPointer dialogParent; + QString caption; + QString dir; + QStringList nameFilters; + QString selectedFilter; +}; + +DeclarativeFileDialogAttached::DeclarativeFileDialogAttached(QObject *parent) + : QObject(parent), d(new Private) +{ +} + +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) + return; + + d->caption = caption; + emit captionChanged(caption); +} + +QString DeclarativeFileDialogAttached::caption() const +{ + return d->caption; +} + +void DeclarativeFileDialogAttached::setDir(const QString &dir) +{ + if (dir == d->dir) + return; + + d->dir = dir; + emit dirChanged(dir); +} + +QString DeclarativeFileDialogAttached::dir() const +{ + return d->dir; +} + +void DeclarativeFileDialogAttached::setNameFilters(const QStringList &nameFilters) +{ + if (nameFilters == d->nameFilters) + return; + + d->nameFilters = nameFilters; + emit nameFiltersChanged(nameFilters); +} + +QStringList DeclarativeFileDialogAttached::nameFilters() const +{ + return d->nameFilters; } -QString DeclarativeFileDialogAttached::getExistingDirectory(QObject *parent, const QString &caption, - const QString &dir, int options) +QString DeclarativeFileDialogAttached::selectedFilter() const { - return QFileDialog::getExistingDirectory(bestParentWindow(parent), caption, dir, static_cast(options)); + return d->selectedFilter; } -QString DeclarativeFileDialogAttached::getOpenFileName(QObject *parent, const QString &caption, - const QString &dir, const QString &filter, int options) +QString DeclarativeFileDialogAttached::getExistingDirectory() { - return QFileDialog::getOpenFileName(bestParentWindow(parent), caption, dir, filter, 0, static_cast(options)); + return QFileDialog::getExistingDirectory(bestParentWindow(d->dialogParent), d->caption, d->dir, QFileDialog::ShowDirsOnly); } -QStringList DeclarativeFileDialogAttached::getOpenFileNames(QObject *parent, const QString &caption, - const QString &dir, const QString &filter, int options) +QString DeclarativeFileDialogAttached::getOpenFileName() { - return QFileDialog::getOpenFileNames(bestParentWindow(parent), caption, dir, filter, 0, static_cast(options)); + QString selectedFilter; + const QString retVal = QFileDialog::getOpenFileName(bestParentWindow(d->dialogParent), d->caption, d->dir, + d->nameFilters.join(";;"), &selectedFilter, 0); + setSelectedFilter(selectedFilter); + return retVal; +} +QStringList DeclarativeFileDialogAttached::getOpenFileNames() +{ + QString selectedFilter; + const QStringList retVal = QFileDialog::getOpenFileNames(bestParentWindow(d->dialogParent), d->caption, d->dir, + d->nameFilters.join(";;"), &selectedFilter, 0); + setSelectedFilter(selectedFilter); + return retVal; } -QString DeclarativeFileDialogAttached::getSaveFileName(QObject *parent, const QString &caption, - const QString &dir, const QString &filter, int options) +QString DeclarativeFileDialogAttached::getSaveFileName() { - return QFileDialog::getSaveFileName(bestParentWindow(parent), caption, dir, filter, 0, static_cast(options)); + QString selectedFilter; + const QString retVal = QFileDialog::getSaveFileName(bestParentWindow(d->dialogParent), d->caption, d->dir, + d->nameFilters.join(";;"), &selectedFilter, 0); + setSelectedFilter(selectedFilter); + return retVal; } QWidget *DeclarativeFileDialogAttached::bestParentWindow(QObject *parent) const @@ -753,6 +837,15 @@ QWidget *DeclarativeFileDialogAttached::bestParentWindow(QObject *parent) const return 0; } +void DeclarativeFileDialogAttached::setSelectedFilter(const QString &filter) +{ + if (filter == d->selectedFilter) + return; + + d->selectedFilter = filter; + emit selectedFilterChanged(filter); +} + DeclarativeFileDialog::DeclarativeFileDialog(QObject *parent) : DeclarativeWidgetProxy(parent) { connectAllSignals(m_proxiedObject, this); diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index 078212d..8f80f8d 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -445,26 +445,52 @@ class DeclarativeDialogButtonBox : public DeclarativeWidgetProxy diff --git a/filedialog.qml b/filedialog.qml index 8c0a79b..4d04cc5 100644 --- a/filedialog.qml +++ b/filedialog.qml @@ -17,6 +17,16 @@ Widget { } } PushButton { + text: "FileDialog::getOpenFileName, with options" + onClicked: { + FileDialog.caption = "Select a file to open"; + FileDialog.nameFilters = [ "Headers (*.h)", "Sources (*.cpp)", "All Files (*.*)" ] + var file = FileDialog.getOpenFileName() + console.log("FileDialog.getOpenFileName returned " + file) + console.log("Selected filter " + FileDialog.selectedFilter) + } + } + PushButton { text: "FileDialog::getOpenFileNames" onClicked: { var files = FileDialog.getOpenFileNames() -- 1.7.2.5