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<QFileDialog::Options>(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<QFileDialog::Options>(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<QFileDialog::Options>(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<QFileDialog::Options>(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<AbstractDeclarativeObject*>(parent);
+ if (declarativeObject)
+ parent = declarativeObject->object();
+
+ while (parent) {
+ QWidget *widget = qobject_cast<QWidget*>(parent);
+ if (widget)
+ return widget->topLevelWidget();
+
+ parent = parent->parent();
+ }
+
+ return 0;
+}
+
DeclarativeFileDialog::DeclarativeFileDialog(QObject *parent) : DeclarativeWidgetProxy<FileDialog>(parent)
{
connectAllSignals(m_proxiedObject, this);
}
+DeclarativeFileDialogAttached *DeclarativeFileDialog::qmlAttachedProperties(QObject *parent)
+{
+ return new DeclarativeFileDialogAttached(parent);
+}
+
CUSTOM_METAOBJECT(DeclarativeFileDialog, FileDialog)
// DeclarativeFontDialog
DeclarativeDialogButtonBox(QObject *parent = 0);
};
+class DeclarativeFileDialogAttached : public QObject
+{
+ Q_OBJECT
+
+ public:
+ DeclarativeFileDialogAttached(QObject *parent = 0);
+
+ Q_INVOKABLE QString getExistingDirectory(QObject *parent = 0, const QString &caption = QString(),
+ const QString &dir = QString(), int options = QFileDialog::ShowDirsOnly);
+
+ Q_INVOKABLE QString getOpenFileName(QObject *parent = 0, const QString &caption = QString(),
+ const QString &dir = QString(), const QString &filter = QString(),
+ int options = QFileDialog::ShowDirsOnly);
+
+ 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);
+
+ private:
+ QWidget *bestParentWindow(QObject *parent) const;
+};
+
class DeclarativeFileDialog : public DeclarativeWidgetProxy<FileDialog>
{
DECLARATIVE_OBJECT
public:
DeclarativeFileDialog(QObject *parent = 0);
+
+ static DeclarativeFileDialogAttached *qmlAttachedProperties(QObject *parent);
};
+QML_DECLARE_TYPEINFO(DeclarativeFileDialog, QML_HAS_ATTACHED_PROPERTIES)
+
class DeclarativeFontDialog : public DeclarativeWidgetProxy<QFontDialog>
{
DECLARATIVE_OBJECT
qmlRegisterType<DeclarativeColorDialog>("QtGui", 1, 0, "ColorDialog");
qmlRegisterType<DeclarativeDialog>("QtGui", 1, 0, "Dialog");
qmlRegisterType<DeclarativeDialogButtonBox>("QtGui", 1, 0, "DialogButtonBox");
+ qmlRegisterType<DeclarativeFileDialogAttached>();
qmlRegisterType<DeclarativeFileDialog>("QtGui", 1, 0, "FileDialog");
qmlRegisterType<DeclarativeFontDialog>("QtGui", 1, 0, "FontDialog");
qmlRegisterType<DeclarativeInputDialog>("QtGui", 1, 0, "InputDialog");
--- /dev/null
+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)
+ }
+ }
+ }
+}