From: Kevin Krammer Date: Mon, 22 Oct 2012 13:33:05 +0000 (+0200) Subject: Support for QFileDialog static get methods X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=894353159a95116b8c48e2192eccb2b31c7070cf;p=web%2Fkonrad%2FDeclarativeWidgets.git Support for QFileDialog static get methods --- diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index b34c07c..fc174f4 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -703,11 +703,66 @@ DeclarativeDialogButtonBox::DeclarativeDialogButtonBox(QObject *parent) : Declar CUSTOM_METAOBJECT(DeclarativeDialogButtonBox, QDialogButtonBox) // DeclarativeFileDialog +DeclarativeFileDialogAttached::DeclarativeFileDialogAttached(QObject *parent) : QObject(parent) +{ +} + +QString DeclarativeFileDialogAttached::getExistingDirectory(QObject *parent, const QString &caption, + const QString &dir, int options) +{ + return QFileDialog::getExistingDirectory(bestParentWindow(parent), caption, dir, static_cast(options)); +} + +QString DeclarativeFileDialogAttached::getOpenFileName(QObject *parent, const QString &caption, + const QString &dir, const QString &filter, int options) +{ + return QFileDialog::getOpenFileName(bestParentWindow(parent), caption, dir, filter, 0, static_cast(options)); +} + +QStringList DeclarativeFileDialogAttached::getOpenFileNames(QObject *parent, const QString &caption, + const QString &dir, const QString &filter, int options) +{ + return QFileDialog::getOpenFileNames(bestParentWindow(parent), caption, dir, filter, 0, static_cast(options)); + +} + +QString DeclarativeFileDialogAttached::getSaveFileName(QObject *parent, const QString &caption, + const QString &dir, const QString &filter, int options) +{ + return QFileDialog::getSaveFileName(bestParentWindow(parent), caption, dir, filter, 0, static_cast(options)); +} + +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(parent); + if (declarativeObject) + parent = declarativeObject->object(); + + while (parent) { + QWidget *widget = qobject_cast(parent); + if (widget) + return widget->topLevelWidget(); + + parent = parent->parent(); + } + + return 0; +} + DeclarativeFileDialog::DeclarativeFileDialog(QObject *parent) : DeclarativeWidgetProxy(parent) { connectAllSignals(m_proxiedObject, this); } +DeclarativeFileDialogAttached *DeclarativeFileDialog::qmlAttachedProperties(QObject *parent) +{ + return new DeclarativeFileDialogAttached(parent); +} + CUSTOM_METAOBJECT(DeclarativeFileDialog, FileDialog) // DeclarativeFontDialog diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index fd170e5..3cb552b 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -442,14 +442,43 @@ class DeclarativeDialogButtonBox : public DeclarativeWidgetProxy { DECLARATIVE_OBJECT public: DeclarativeFileDialog(QObject *parent = 0); + + static DeclarativeFileDialogAttached *qmlAttachedProperties(QObject *parent); }; +QML_DECLARE_TYPEINFO(DeclarativeFileDialog, QML_HAS_ATTACHED_PROPERTIES) + class DeclarativeFontDialog : public DeclarativeWidgetProxy { DECLARATIVE_OBJECT diff --git a/declarativewidgetdocument.cpp b/declarativewidgetdocument.cpp index 31e0d13..05d22ad 100644 --- a/declarativewidgetdocument.cpp +++ b/declarativewidgetdocument.cpp @@ -50,6 +50,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p qmlRegisterType("QtGui", 1, 0, "ColorDialog"); qmlRegisterType("QtGui", 1, 0, "Dialog"); qmlRegisterType("QtGui", 1, 0, "DialogButtonBox"); + qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "FileDialog"); qmlRegisterType("QtGui", 1, 0, "FontDialog"); qmlRegisterType("QtGui", 1, 0, "InputDialog"); diff --git a/filedialog.qml b/filedialog.qml new file mode 100644 index 0000000..8c0a79b --- /dev/null +++ b/filedialog.qml @@ -0,0 +1,34 @@ +import QtGui 1.0 + +Widget { + VBoxLayout { + PushButton { + text: "FileDialog::getExistingDirectory" + onClicked: { + var file = FileDialog.getExistingDirectory() + console.log("FileDialog.getExistingDirectory returned " + file) + } + } + PushButton { + text: "FileDialog::getOpenFileName" + onClicked: { + var file = FileDialog.getOpenFileName() + console.log("FileDialog.getOpenFileName returned " + file) + } + } + PushButton { + text: "FileDialog::getOpenFileNames" + onClicked: { + var files = FileDialog.getOpenFileNames() + console.log("FileDialog.getOpenFileNames returned " + files) + } + } + PushButton { + text: "FileDialog::getSaveFileName" + onClicked: { + var file = FileDialog.getSaveFileName() + console.log("FileDialog.getSaveFileName returned " + file) + } + } + } +}