diff options
author | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-07-21 18:27:56 +0200 |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-07-22 08:08:05 +0000 |
commit | 940c7a154ebf42735d51038e71601c0263ac06df (patch) | |
tree | 1601578f74d8aa03fb4a2b36e64450c0e91d1604 /examples | |
parent | b67921267c7ab4faea0e21e98573974ef82634aa (diff) | |
parent | 5c9eb4220fc04730266a58e4e65373eca574e170 (diff) | |
download | qtquickcontrols-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.cpp | 87 | ||||
-rw-r--r-- | examples/quick/controls/filesystembrowser/main.qml | 16 |
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)) } } |