diff options
author | Shawn Rutledge <shawn.rutledge@digia.com> | 2013-12-16 16:19:20 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-11 13:29:28 +0100 |
commit | 77a6b6448200c263a862bc34546106a6b0e698a6 (patch) | |
tree | cb3c6da821934dded9810a55db63e0c146a17a64 /src/dialogs/qquickfiledialog.cpp | |
parent | a5da0d56dbad39259e20b17de340c3dd757e74ae (diff) | |
download | qtquickcontrols-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.cpp | 41 |
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 |