summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-07-15 14:44:59 +0200
committerFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-07-16 11:14:39 +0000
commit984b72d31b42f9457e17b7c093b80f88a6ffd29f (patch)
tree087769c7215a9341b4a4cd4bcc87eaafca2480e1 /examples
parentc48d14501fff75741c5d218141005831cd8dc051 (diff)
downloadqtquickcontrols-984b72d31b42f9457e17b7c093b80f88a6ffd29f.tar.gz
Polish the new filesystembrowser example.
Introduce a special model that provides more information. Replace numerical permissions column by a readable, ls-style string and add size/date columns. On activation, launch the file using Qt.openUrlExternally() with the local file URL. Change-Id: Ic0801e40cc3ad8498129da06670ba7e11bbf8003 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Diffstat (limited to 'examples')
-rw-r--r--examples/quick/controls/filesystembrowser/main.cpp87
-rw-r--r--examples/quick/controls/filesystembrowser/main.qml16
2 files changed, 101 insertions, 2 deletions
diff --git a/examples/quick/controls/filesystembrowser/main.cpp b/examples/quick/controls/filesystembrowser/main.cpp
index e64a9a22..176d334c 100644
--- a/examples/quick/controls/filesystembrowser/main.cpp
+++ b/examples/quick/controls/filesystembrowser/main.cpp
@@ -42,13 +42,98 @@
#include <QQmlApplicationEngine>
#include <QtQml>
#include <QFileSystemModel>
+#include <QDateTime>
+#include <QDesktopServices>
+#include <QUrl>
+
+static inline QString permissionString(const QFileInfo &fi)
+{
+ const QFile::Permissions permissions = fi.permissions();
+ QString result = QLatin1String("----------");
+ if (fi.isSymLink())
+ result[0] = QLatin1Char('l');
+ else if (fi.isDir())
+ result[0] = QLatin1Char('d');
+ if (permissions & QFileDevice::ReadUser)
+ result[1] = QLatin1Char('r');
+ if (permissions & QFileDevice::WriteUser)
+ result[2] = QLatin1Char('w');
+ if (permissions & QFileDevice::ExeUser)
+ result[3] = QLatin1Char('x');
+ if (permissions & QFileDevice::ReadGroup)
+ result[4] = QLatin1Char('r');
+ if (permissions & QFileDevice::WriteGroup)
+ result[5] = QLatin1Char('w');
+ if (permissions & QFileDevice::ExeGroup)
+ result[6] = QLatin1Char('x');
+ if (permissions & QFileDevice::ReadOther)
+ result[7] = QLatin1Char('r');
+ if (permissions & QFileDevice::WriteOther)
+ result[8] = QLatin1Char('w');
+ if (permissions & QFileDevice::ExeOther)
+ result[9] = QLatin1Char('x');
+ return result;
+}
+
+static inline QString sizeString(const QFileInfo &fi)
+{
+ if (!fi.isFile())
+ return QString();
+ const qint64 size = fi.size();
+ if (size > 1024 * 1024 * 10)
+ return QString::number(size / (1024 * 1024)) + QLatin1Char('M');
+ if (size > 1024 * 10)
+ return QString::number(size / 1024) + QLatin1Char('K');
+ return QString::number(size);
+}
+
+class DisplayFileSystemModel : public QFileSystemModel {
+public:
+ explicit DisplayFileSystemModel(QObject *parent = Q_NULLPTR)
+ : QFileSystemModel(parent) {}
+
+ enum {
+ SizeRole = Qt::UserRole + 4,
+ DisplayableFilePermissionsRole = Qt::UserRole + 5,
+ LastModifiedRole = Qt::UserRole + 6,
+ UrlStringRole = Qt::UserRole + 7 // 263
+ };
+
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE
+ {
+ if (index.isValid() && role >= SizeRole) {
+ switch (role) {
+ case SizeRole:
+ return QVariant(sizeString(fileInfo(index)));
+ case DisplayableFilePermissionsRole:
+ return QVariant(permissionString(fileInfo(index)));
+ case LastModifiedRole:
+ return QVariant(fileInfo(index).lastModified().toString(Qt::SystemLocaleShortDate));
+ case UrlStringRole:
+ return QVariant(QUrl::fromLocalFile(filePath(index)).toString());
+ default:
+ break;
+ }
+ }
+ return QFileSystemModel::data(index, role);
+ }
+
+ QHash<int,QByteArray> roleNames() const Q_DECL_OVERRIDE
+ {
+ QHash<int, QByteArray> result = QFileSystemModel::roleNames();
+ result.insert(SizeRole, QByteArrayLiteral("size"));
+ result.insert(DisplayableFilePermissionsRole, QByteArrayLiteral("displayableFilePermissions"));
+ result.insert(LastModifiedRole, QByteArrayLiteral("lastModified"));
+ return result;
+ }
+};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
- QFileSystemModel *fsm = new QFileSystemModel(&engine);
+ QFileSystemModel *fsm = new DisplayFileSystemModel(&engine);
fsm->setRootPath(QDir::homePath());
fsm->setResolveSymlinks(true);
engine.rootContext()->setContextProperty("fileSystemModel", fsm);
diff --git a/examples/quick/controls/filesystembrowser/main.qml b/examples/quick/controls/filesystembrowser/main.qml
index 454a9f31..abc3c20c 100644
--- a/examples/quick/controls/filesystembrowser/main.qml
+++ b/examples/quick/controls/filesystembrowser/main.qml
@@ -99,11 +99,25 @@ ApplicationWindow {
}
TableViewColumn {
+ title: "Size"
+ role: "size"
+ resizable: true
+ horizontalAlignment : Text.AlignRight
+ }
+
+ TableViewColumn {
title: "Permissions"
- role: "filePermissions"
+ role: "displayableFilePermissions"
+ resizable: true
+ }
+
+ TableViewColumn {
+ title: "Date Modified"
+ role: "lastModified"
resizable: true
}
onDoubleClicked: isExpanded(index) ? collapse(index) : expand(index)
+ onActivated : Qt.openUrlExternally(fileSystemModel.data(index, 263))
}
}