summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-07-21 18:27:56 +0200
committerGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-07-22 08:08:05 +0000
commit940c7a154ebf42735d51038e71601c0263ac06df (patch)
tree1601578f74d8aa03fb4a2b36e64450c0e91d1604 /examples
parentb67921267c7ab4faea0e21e98573974ef82634aa (diff)
parent5c9eb4220fc04730266a58e4e65373eca574e170 (diff)
downloadqtquickcontrols-940c7a154ebf42735d51038e71601c0263ac06df.tar.gz
Merge remote-tracking branch 'origin/5.5' into dev
Change-Id: I689c18ad192a38581d3058e2a555d6438a8d08e2
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))
}
}