]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/additionalinfoaccessor.cpp
Allow custom sorting of details-view columns
[dolphin.git] / src / views / additionalinfoaccessor.cpp
index bcd971516797016a10bfe853d283bf13fef247e8..b102282a643401d5c081f4ff88cd4873257f5ec7 100644 (file)
@@ -19,9 +19,8 @@
 
 #include "additionalinfoaccessor.h"
 
-#include "dolphinmodel.h"
-#include <kglobal.h>
-#include <klocale.h>
+#include <KGlobal>
+#include <KLocale>
 
 class AdditionalInfoAccessorSingleton
 {
@@ -35,103 +34,83 @@ AdditionalInfoAccessor& AdditionalInfoAccessor::instance()
     return s_additionalInfoManager->instance;
 }
 
-KFileItemDelegate::InformationList AdditionalInfoAccessor::keys() const
+QList<DolphinView::AdditionalInfo> AdditionalInfoAccessor::keys() const
 {
-    return m_informations;
+    return m_map.keys();
 }
 
-KFileItemDelegate::Information AdditionalInfoAccessor::keyForColumn(int columnIndex) const
+QByteArray AdditionalInfoAccessor::role(DolphinView::AdditionalInfo info) const
 {
-    KFileItemDelegate::Information info = KFileItemDelegate::NoInformation;
-
-    switch (columnIndex) {
-    case DolphinModel::Size:           info = KFileItemDelegate::Size; break;
-    case DolphinModel::ModifiedTime:   info = KFileItemDelegate::ModificationTime; break;
-    case DolphinModel::Permissions:    info = KFileItemDelegate::Permissions; break;
-    case DolphinModel::Owner:          info = KFileItemDelegate::Owner; break;
-    case DolphinModel::Group:          info = KFileItemDelegate::OwnerAndGroup; break;
-    case DolphinModel::Type:           info = KFileItemDelegate::FriendlyMimeType; break;
-    case DolphinModel::LinkDest:       info = KFileItemDelegate::LinkDest; break;
-    case DolphinModel::LocalPathOrUrl: info = KFileItemDelegate::LocalPathOrUrl; break;
-    default: break;
-    }
+    return m_map[info]->role;
+}
 
-    return info;
+DolphinView::AdditionalInfo AdditionalInfoAccessor::additionalInfo(const QByteArray& role) const
+{
+    return m_infoForRole.value(role);
 }
 
-QString AdditionalInfoAccessor::actionCollectionName(KFileItemDelegate::Information info,
+QString AdditionalInfoAccessor::actionCollectionName(DolphinView::AdditionalInfo info,
                                                      ActionCollectionType type) const
 {
     QString name;
     switch (type) {
     case SortByType:
-        name = QLatin1String("sort_by_") + QLatin1String(m_map[info]->actionCollectionName);
+        name = QLatin1String("sort_by_") + QLatin1String(m_map[info]->role);
         break;
 
     case AdditionalInfoType:
-        name = QLatin1String("show_") + QLatin1String(m_map[info]->actionCollectionName);
+        name = QLatin1String("show_") + QLatin1String(m_map[info]->role);
         break;
     }
 
     return name;
 }
 
-QString AdditionalInfoAccessor::translation(KFileItemDelegate::Information info) const
+QString AdditionalInfoAccessor::translation(DolphinView::AdditionalInfo info) const
 {
-    return i18nc(m_map[info]->context, m_map[info]->translation);
+    return i18nc(m_map[info]->roleTranslationContext, m_map[info]->roleTranslation);
 }
 
-QString AdditionalInfoAccessor::value(KFileItemDelegate::Information info) const
+QString AdditionalInfoAccessor::value(DolphinView::AdditionalInfo info) const
 {
     return m_map[info]->value;
 }
 
-DolphinView::Sorting AdditionalInfoAccessor::sorting(KFileItemDelegate::Information info) const
+DolphinView::Sorting AdditionalInfoAccessor::sorting(DolphinView::AdditionalInfo info) const
 {
     return m_map[info]->sorting;
 }
 
-int AdditionalInfoAccessor::bitValue(KFileItemDelegate::Information info) const
-{
-    return m_map[info]->bitValue;
-}
-
 AdditionalInfoAccessor::AdditionalInfoAccessor() :
-    m_informations(),
-    m_map()
+    m_map(),
+    m_infoForRole()
 {
-    static const AdditionalInfoAccessor::AdditionalInfo additionalInfos[] = {
-        // Entries for view-properties version 1:
-        { "size",        I18N_NOOP2_NOSTRIP("@label", "Size"),             "Size",            DolphinView::SortBySize,          1 },
-        { "date",        I18N_NOOP2_NOSTRIP("@label", "Date"),             "Date",            DolphinView::SortByDate,          2 },
-        { "permissions", I18N_NOOP2_NOSTRIP("@label", "Permissions"),      "Permissions",     DolphinView::SortByPermissions,   4 },
-        { "owner",       I18N_NOOP2_NOSTRIP("@label", "Owner"),            "Owner",           DolphinView::SortByOwner,         8 },
-        { "group",       I18N_NOOP2_NOSTRIP("@label", "Group"),            "Group",           DolphinView::SortByGroup,        16 },
-        { "type",        I18N_NOOP2_NOSTRIP("@label", "Type"),             "Type",            DolphinView::SortByType,         32 },
-        { "destination", I18N_NOOP2_NOSTRIP("@label", "Link Destination"), "LinkDestination", DolphinView::SortByDestination,  64 },
-        { "path",        I18N_NOOP2_NOSTRIP("@label", "Path"),             "Path",            DolphinView::SortByPath,        128 }
-        // Entries for view-properties version >= 2 (the last column can be set to 0):
+    static const AdditionalInfoAccessor::AdditionalInfo additionalInfo[] = {
+        // role          roleTranslationContext       roleTranslation      value              sorting
+        { "size",        I18N_NOOP2_NOSTRIP("@label", "Size"),             "Size",            DolphinView::SortBySize},
+        { "date",        I18N_NOOP2_NOSTRIP("@label", "Date"),             "Date",            DolphinView::SortByDate},
+        { "permissions", I18N_NOOP2_NOSTRIP("@label", "Permissions"),      "Permissions",     DolphinView::SortByPermissions},
+        { "owner",       I18N_NOOP2_NOSTRIP("@label", "Owner"),            "Owner",           DolphinView::SortByOwner},
+        { "group",       I18N_NOOP2_NOSTRIP("@label", "Group"),            "Group",           DolphinView::SortByGroup},
+        { "type",        I18N_NOOP2_NOSTRIP("@label", "Type"),             "Type",            DolphinView::SortByType},
+        { "destination", I18N_NOOP2_NOSTRIP("@label", "Link Destination"), "LinkDestination", DolphinView::SortByDestination},
+        { "path",        I18N_NOOP2_NOSTRIP("@label", "Path"),             "Path",            DolphinView::SortByPath}
     };
 
-    m_map.insert(KFileItemDelegate::Size, &additionalInfos[0]);
-    m_map.insert(KFileItemDelegate::ModificationTime, &additionalInfos[1]);
-    m_map.insert(KFileItemDelegate::Permissions, &additionalInfos[2]);
-    m_map.insert(KFileItemDelegate::Owner, &additionalInfos[3]);
-    m_map.insert(KFileItemDelegate::OwnerAndGroup, &additionalInfos[4]);
-    m_map.insert(KFileItemDelegate::FriendlyMimeType, &additionalInfos[5]);
-    m_map.insert(KFileItemDelegate::LinkDest, &additionalInfos[6]);
-    m_map.insert(KFileItemDelegate::LocalPathOrUrl, &additionalInfos[7]);
-
-    // The m_informations list defines all available keys and the sort order
-    // (don't use m_informations = m_map.keys(), as the order is undefined).
-    m_informations.append(KFileItemDelegate::Size);
-    m_informations.append(KFileItemDelegate::ModificationTime);
-    m_informations.append(KFileItemDelegate::Permissions);
-    m_informations.append(KFileItemDelegate::Owner);
-    m_informations.append(KFileItemDelegate::OwnerAndGroup);
-    m_informations.append(KFileItemDelegate::FriendlyMimeType);
-    m_informations.append(KFileItemDelegate::LinkDest);
-    m_informations.append(KFileItemDelegate::LocalPathOrUrl);
+    m_map.insert(DolphinView::SizeInfo, &additionalInfo[0]);
+    m_map.insert(DolphinView::DateInfo, &additionalInfo[1]);
+    m_map.insert(DolphinView::PermissionsInfo, &additionalInfo[2]);
+    m_map.insert(DolphinView::OwnerInfo, &additionalInfo[3]);
+    m_map.insert(DolphinView::GroupInfo, &additionalInfo[4]);
+    m_map.insert(DolphinView::TypeInfo, &additionalInfo[5]);
+    m_map.insert(DolphinView::DestinationInfo, &additionalInfo[6]);
+    m_map.insert(DolphinView::PathInfo, &additionalInfo[7]);
+
+    QMapIterator<DolphinView::AdditionalInfo, const AdditionalInfo*> it(m_map);
+    while (it.hasNext()) {
+        it.next();
+        m_infoForRole.insert(it.value()->role, it.key());
+    }
 }
 
 AdditionalInfoAccessor::~AdditionalInfoAccessor()