]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistwidget.cpp
Add new settings for permissions column format
[dolphin.git] / src / kitemviews / kfileitemlistwidget.cpp
index a62b75824c268ec4442d7ef61692af569aac03eb..d9644bef5f8762bb1d1b6ba052817d57c397cc50 100644 (file)
@@ -18,8 +18,8 @@
 #include <QGraphicsView>
 #include <QMimeDatabase>
 
-KFileItemListWidgetInformant::KFileItemListWidgetInformant() :
-    KStandardItemListWidgetInformant()
+KFileItemListWidgetInformant::KFileItemListWidgetInformant()
+    KStandardItemListWidgetInformant()
 {
 }
 
@@ -27,26 +27,25 @@ KFileItemListWidgetInformant::~KFileItemListWidgetInformant()
 {
 }
 
-QString KFileItemListWidgetInformant::itemText(int index, const KItemListViewview) const
+QString KFileItemListWidgetInformant::itemText(int index, const KItemListView *view) const
 {
-    Q_ASSERT(qobject_cast<KFileItemModel*>(view->model()));
-    KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(view->model());
+    Q_ASSERT(qobject_cast<KFileItemModel *>(view->model()));
+    KFileItemModel *fileItemModel = static_cast<KFileItemModel *>(view->model());
 
     const KFileItem item = fileItemModel->fileItem(index);
     return item.text();
 }
 
-bool KFileItemListWidgetInformant::itemIsLink(int index, const KItemListViewview) const
+bool KFileItemListWidgetInformant::itemIsLink(int index, const KItemListView *view) const
 {
-    Q_ASSERT(qobject_cast<KFileItemModel*>(view->model()));
-    KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(view->model());
+    Q_ASSERT(qobject_cast<KFileItemModel *>(view->model()));
+    KFileItemModel *fileItemModel = static_cast<KFileItemModel *>(view->model());
 
     const KFileItem item = fileItemModel->fileItem(index);
     return item.isLink();
 }
 
-QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
-                                               const QHash<QByteArray, QVariant>& values) const
+QString KFileItemListWidgetInformant::roleText(const QByteArray &role, const QHash<QByteArray, QVariant> &values) const
 {
     QString text;
     const QVariant roleValue = values.value(role);
@@ -56,7 +55,7 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
     // Implementation note: In case if more roles require a custom handling
     // use a hash + switch for a linear runtime.
 
-    auto formatDate = [formatter, local](const QDateTimetime) {
+    auto formatDate = [formatter, local](const QDateTime &time) {
         if (DetailsModeSettings::useShortRelativeDates()) {
             return formatter.formatRelativeDateTime(time, QLocale::ShortFormat);
         } else {
@@ -83,12 +82,12 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
             text = formatter.formatByteSize(size);
         }
     } else if (role == "modificationtime" || role == "creationtime" || role == "accesstime") {
-            bool ok;
-            const long long time = roleValue.toLongLong(&ok);
-            if (ok && time != -1) {
-                const QDateTime dateTime = QDateTime::fromSecsSinceEpoch(time);
-                text = formatDate(dateTime);
-            }
+        bool ok;
+        const long long time = roleValue.toLongLong(&ok);
+        if (ok && time != -1) {
+            const QDateTime dateTime = QDateTime::fromSecsSinceEpoch(time);
+            text = formatDate(dateTime);
+        }
     } else if (role == "deletiontime" || role == "imageDateTime") {
         const QDateTime dateTime = roleValue.toDateTime();
         if (dateTime.isValid()) {
@@ -99,6 +98,20 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
         if (dimensions.isValid()) {
             text = i18nc("width × height", "%1 × %2", dimensions.width(), dimensions.height());
         }
+    } else if (role == "permissions") {
+        const auto permissions = roleValue.value<QVariantList>();
+
+        switch (DetailsModeSettings::usePermissionsFormat()) {
+        case DetailsModeSettings::EnumUsePermissionsFormat::SymbolicFormat:
+            text = permissions.at(0).toString();
+            break;
+        case DetailsModeSettings::EnumUsePermissionsFormat::NumericFormat:
+            text = QString::number(permissions.at(1).toInt(), 8);
+            break;
+        case DetailsModeSettings::EnumUsePermissionsFormat::CombinedFormat:
+            text = QString("%1 (%2)").arg(permissions.at(0).toString()).arg(permissions.at(1).toInt(), 0, 8);
+            break;
+        }
     } else {
         text = KStandardItemListWidgetInformant::roleText(role, values);
     }
@@ -106,7 +119,7 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
     return text;
 }
 
-QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFontbaseFont) const
+QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont &baseFont) const
 {
     // The customized font should be italic if the file is a symbolic link.
     QFont font(baseFont);
@@ -114,8 +127,8 @@ QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont
     return font;
 }
 
-KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) :
-    KStandardItemListWidget(informant, parent)
+KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant *informant, QGraphicsItem *parent)
+    KStandardItemListWidget(informant, parent)
 {
 }
 
@@ -123,14 +136,14 @@ KFileItemListWidget::~KFileItemListWidget()
 {
 }
 
-KItemListWidgetInformantKFileItemListWidget::createInformant()
+KItemListWidgetInformant *KFileItemListWidget::createInformant()
 {
     return new KFileItemListWidgetInformant();
 }
 
-bool KFileItemListWidget::isRoleRightAligned(const QByteArrayrole) const
+bool KFileItemListWidget::isRoleRightAligned(const QByteArray &role) const
 {
-    return role == "size";
+    return role == "size" || role == "permissions";
 }
 
 bool KFileItemListWidget::isHidden() const
@@ -138,7 +151,7 @@ bool KFileItemListWidget::isHidden() const
     return data().value("isHidden").toBool();
 }
 
-QFont KFileItemListWidget::customizedFont(const QFontbaseFont) const
+QFont KFileItemListWidget::customizedFont(const QFont &baseFont) const
 {
     // The customized font should be italic if the file is a symbolic link.
     QFont font(baseFont);
@@ -146,14 +159,14 @@ QFont KFileItemListWidget::customizedFont(const QFont& baseFont) const
     return font;
 }
 
-int KFileItemListWidget::selectionLength(const QStringtext) const
+int KFileItemListWidget::selectionLength(const QString &text) const
 {
     // Select the text without MIME-type extension
     int selectionLength = text.length();
 
     // If item is a directory, use the whole text length for
     // selection (ignore all points)
-    if(data().value("isDir").toBool()) {
+    if (data().value("isDir").toBool()) {
         return selectionLength;
     }
 
@@ -179,7 +192,7 @@ int KFileItemListWidget::selectionLength(const QString& text) const
 
 void KFileItemListWidget::hoverSequenceStarted()
 {
-    KFileItemListViewview = listView();
+    KFileItemListView *view = listView();
 
     if (!view) {
         return;
@@ -192,7 +205,7 @@ void KFileItemListWidget::hoverSequenceStarted()
 
 void KFileItemListWidget::hoverSequenceIndexChanged(int sequenceIndex)
 {
-    KFileItemListViewview = listView();
+    KFileItemListView *view = listView();
 
     if (!view) {
         return;
@@ -209,7 +222,7 @@ void KFileItemListWidget::hoverSequenceIndexChanged(int sequenceIndex)
 
 void KFileItemListWidget::hoverSequenceEnded()
 {
-    KFileItemListViewview = listView();
+    KFileItemListView *view = listView();
 
     if (!view) {
         return;
@@ -218,8 +231,7 @@ void KFileItemListWidget::hoverSequenceEnded()
     view->setHoverSequenceState(QUrl(), 0);
 }
 
-KFileItemListViewKFileItemListWidget::listView()
+KFileItemListView *KFileItemListWidget::listView()
 {
-    return dynamic_cast<KFileItemListView*>(parentItem());
+    return dynamic_cast<KFileItemListView *>(parentItem());
 }
-