summaryrefslogtreecommitdiff
path: root/src/dialogs/qquickfiledialog.cpp
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2013-12-16 16:19:20 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-11 13:29:28 +0100
commit77a6b6448200c263a862bc34546106a6b0e698a6 (patch)
treecb3c6da821934dded9810a55db63e0c146a17a64 /src/dialogs/qquickfiledialog.cpp
parenta5da0d56dbad39259e20b17de340c3dd757e74ae (diff)
downloadqtquickcontrols-77a6b6448200c263a862bc34546106a6b0e698a6.tar.gz
FileDialog: new features in DefaultFileDialog.qml
Use a ComboBox for the filters. Add a sidebar showing shortcuts for the common paths and drives that the user will most likely need, and an editable list of favorite paths. [ChangeLog][QtQuickDialogs][FileDialog] The FileDialog fallback QML implementation now uses QtQuick.Controls, and has added features including a Combobox for file extension filters, and a sidebar with common paths, drives/volumes and favorite paths. Change-Id: I228ebdadcf338917db81a2b3d03d3c0b09584e7d Reviewed-by: Liang Qi <liang.qi@digia.com>
Diffstat (limited to 'src/dialogs/qquickfiledialog.cpp')
-rw-r--r--src/dialogs/qquickfiledialog.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/dialogs/qquickfiledialog.cpp b/src/dialogs/qquickfiledialog.cpp
index f408713e..3891308d 100644
--- a/src/dialogs/qquickfiledialog.cpp
+++ b/src/dialogs/qquickfiledialog.cpp
@@ -42,9 +42,12 @@
#include "qquickfiledialog_p.h"
#include <QQuickItem>
#include <private/qguiapplication_p.h>
+#include <private/qv4object_p.h>
QT_BEGIN_NAMESPACE
+using namespace QV4;
+
/*!
\qmltype AbstractFileDialog
\instantiates QQuickFileDialog
@@ -108,6 +111,44 @@ QList<QUrl> QQuickFileDialog::fileUrls() const
return m_selections;
}
+
+void QQuickFileDialog::addShortcut(int &i, const QString &name, const QString &path)
+{
+ QJSEngine *engine = qmlEngine(this);
+ QJSValue o = engine->newObject();
+ o.setProperty("name", name);
+ o.setProperty("url", QUrl::fromLocalFile(path).toString());
+ m_shortcuts.setProperty(i++, o);
+}
+
+void QQuickFileDialog::addIfReadable(int &i, const QString &name, QStandardPaths::StandardLocation loc)
+{
+ QStringList paths = QStandardPaths::standardLocations(loc);
+ if (!paths.isEmpty() && QDir(paths.first()).isReadable())
+ addShortcut(i, name, paths.first());
+}
+
+QJSValue QQuickFileDialog::shortcuts()
+{
+ if (m_shortcuts.isUndefined()) {
+ QJSEngine *engine = qmlEngine(this);
+ m_shortcuts = engine->newArray();
+ int i = 0;
+
+ addIfReadable(i, "Desktop", QStandardPaths::DesktopLocation);
+ addIfReadable(i, "Documents", QStandardPaths::DocumentsLocation);
+ addIfReadable(i, "Music", QStandardPaths::MusicLocation);
+ addIfReadable(i, "Movies", QStandardPaths::MoviesLocation);
+ addIfReadable(i, "Pictures", QStandardPaths::PicturesLocation);
+ addIfReadable(i, "Home", QStandardPaths::HomeLocation);
+
+ QFileInfoList drives = QDir::drives();
+ foreach (QFileInfo fi, drives)
+ addShortcut(i, fi.absoluteFilePath(), fi.absoluteFilePath());
+ }
+ return m_shortcuts;
+}
+
/*!
\qmlproperty bool AbstractFileDialog::visible