CUSTOM_METAOBJECT(DeclarativeDialogButtonBox, QDialogButtonBox)
// DeclarativeFileDialog
-DeclarativeFileDialogAttached::DeclarativeFileDialogAttached(QObject *parent) : QObject(parent)
+class DeclarativeFileDialogAttached::Private
{
+ public:
+ QPointer<QObject> 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<QFileDialog::Options>(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<QFileDialog::Options>(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<QFileDialog::Options>(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<QFileDialog::Options>(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
return 0;
}
+void DeclarativeFileDialogAttached::setSelectedFilter(const QString &filter)
+{
+ if (filter == d->selectedFilter)
+ return;
+
+ d->selectedFilter = filter;
+ emit selectedFilterChanged(filter);
+}
+
DeclarativeFileDialog::DeclarativeFileDialog(QObject *parent) : DeclarativeWidgetProxy<FileDialog>(parent)
{
connectAllSignals(m_proxiedObject, this);
class DeclarativeFileDialogAttached : public QObject
{
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)
+ // TODO dialog option
+ Q_PROPERTY(QString selectedFilter READ selectedFilter NOTIFY selectedFilterChanged)
public:
DeclarativeFileDialogAttached(QObject *parent = 0);
+ ~DeclarativeFileDialogAttached();
- Q_INVOKABLE QString getExistingDirectory(QObject *parent = 0, const QString &caption = QString(),
- const QString &dir = QString(), int options = QFileDialog::ShowDirsOnly);
+ void setDialogParent(QObject *parent);
+ QObject *dialogParent() const;
- Q_INVOKABLE QString getOpenFileName(QObject *parent = 0, const QString &caption = QString(),
- const QString &dir = QString(), const QString &filter = QString(),
- int options = QFileDialog::ShowDirsOnly);
+ void setCaption(const QString &caption);
+ QString caption() const;
- Q_INVOKABLE QStringList getOpenFileNames(QObject *parent = 0, const QString &caption = QString(),
- const QString &dir = QString(), const QString &filter = QString(),
- int options = QFileDialog::ShowDirsOnly);
- Q_INVOKABLE QString getSaveFileName(QObject *parent = 0, const QString &caption = QString(),
- const QString &dir = QString(), const QString &filter = QString(),
- int options = QFileDialog::ShowDirsOnly);
+ void setDir(const QString &dir);
+ QString dir() const;
+
+ void setNameFilters(const QStringList &nameFilters);
+ QStringList nameFilters() const;
+
+ QString selectedFilter() const;
+
+ Q_INVOKABLE QString getExistingDirectory();
+
+ Q_INVOKABLE QString getOpenFileName();
+
+ Q_INVOKABLE QStringList getOpenFileNames();
+
+ 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;
+ Private *const d;
};
class DeclarativeFileDialog : public DeclarativeWidgetProxy<FileDialog>