┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2012-03-07 22:12:07 +0100
committerPeter Penz <[email protected]>2012-03-07 22:18:59 +0100
commit08a485349f2bd73682ac806b97d3630c3a7dd3fd (patch)
tree196869487673eeca1f4d2a3b208efb0f329951d7 /src/views
parent90e6190f13caa50773c5d84550a7b42a18adce13 (diff)
Allow custom sorting of details-view columns
Fix regression that Dolphin 2.0 did not allow to adjust the sorting of the details-view columns. BUG: 164696 FIXED-IN: 4.8.2
Diffstat (limited to 'src/views')
-rw-r--r--src/views/additionalinfoaccessor.cpp48
-rw-r--r--src/views/additionalinfoaccessor.h13
-rw-r--r--src/views/dolphinview.cpp25
-rw-r--r--src/views/dolphinview.h8
-rw-r--r--src/views/viewproperties.cpp13
5 files changed, 58 insertions, 49 deletions
diff --git a/src/views/additionalinfoaccessor.cpp b/src/views/additionalinfoaccessor.cpp
index 465a2b3dd..b102282a6 100644
--- a/src/views/additionalinfoaccessor.cpp
+++ b/src/views/additionalinfoaccessor.cpp
@@ -36,26 +36,17 @@ AdditionalInfoAccessor& AdditionalInfoAccessor::instance()
QList<DolphinView::AdditionalInfo> AdditionalInfoAccessor::keys() const
{
- return m_infoList;
+ return m_map.keys();
}
QByteArray AdditionalInfoAccessor::role(DolphinView::AdditionalInfo info) const
{
- QByteArray role;
- switch (info) {
- case DolphinView::NameInfo: role = "name"; break;
- case DolphinView::SizeInfo: role = "size"; break;
- case DolphinView::DateInfo: role = "date"; break;
- case DolphinView::PermissionsInfo: role = "permissions"; break;
- case DolphinView::OwnerInfo: role = "owner"; break;
- case DolphinView::GroupInfo: role = "group"; break;
- case DolphinView::TypeInfo: role = "type"; break;
- case DolphinView::DestinationInfo: role = "destination"; break;
- case DolphinView::PathInfo: role = "path"; break;
- default: break;
- }
+ return m_map[info]->role;
+}
- return role;
+DolphinView::AdditionalInfo AdditionalInfoAccessor::additionalInfo(const QByteArray& role) const
+{
+ return m_infoForRole.value(role);
}
QString AdditionalInfoAccessor::actionCollectionName(DolphinView::AdditionalInfo info,
@@ -64,11 +55,11 @@ QString AdditionalInfoAccessor::actionCollectionName(DolphinView::AdditionalInfo
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;
}
@@ -77,7 +68,7 @@ QString AdditionalInfoAccessor::actionCollectionName(DolphinView::AdditionalInfo
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(DolphinView::AdditionalInfo info) const
@@ -91,11 +82,11 @@ DolphinView::Sorting AdditionalInfoAccessor::sorting(DolphinView::AdditionalInfo
}
AdditionalInfoAccessor::AdditionalInfoAccessor() :
- m_infoList(),
- m_map()
+ m_map(),
+ m_infoForRole()
{
static const AdditionalInfoAccessor::AdditionalInfo additionalInfo[] = {
- // Entries for view-properties version 1:
+ // 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},
@@ -115,16 +106,11 @@ AdditionalInfoAccessor::AdditionalInfoAccessor() :
m_map.insert(DolphinView::DestinationInfo, &additionalInfo[6]);
m_map.insert(DolphinView::PathInfo, &additionalInfo[7]);
- // The m_infoList defines all available keys and the sort order
- // (don't use m_information = m_map.keys(), as the order would be undefined).
- m_infoList.append(DolphinView::SizeInfo);
- m_infoList.append(DolphinView::DateInfo);
- m_infoList.append(DolphinView::PermissionsInfo);
- m_infoList.append(DolphinView::OwnerInfo);
- m_infoList.append(DolphinView::GroupInfo);
- m_infoList.append(DolphinView::TypeInfo);
- m_infoList.append(DolphinView::DestinationInfo);
- m_infoList.append(DolphinView::PathInfo);
+ QMapIterator<DolphinView::AdditionalInfo, const AdditionalInfo*> it(m_map);
+ while (it.hasNext()) {
+ it.next();
+ m_infoForRole.insert(it.value()->role, it.key());
+ }
}
AdditionalInfoAccessor::~AdditionalInfoAccessor()
diff --git a/src/views/additionalinfoaccessor.h b/src/views/additionalinfoaccessor.h
index d6dcc8e3f..0fd7eed0c 100644
--- a/src/views/additionalinfoaccessor.h
+++ b/src/views/additionalinfoaccessor.h
@@ -64,6 +64,8 @@ public:
QByteArray role(DolphinView::AdditionalInfo info) const;
+ DolphinView::AdditionalInfo additionalInfo(const QByteArray& role) const;
+
QString actionCollectionName(DolphinView::AdditionalInfo info, ActionCollectionType type) const;
QString translation(DolphinView::AdditionalInfo info) const;
@@ -72,6 +74,7 @@ public:
* @return String representation of the value that is stored in the .directory
* by ViewProperties.
*/
+ // TODO Dolphin 3.0: Deprecate - just use role() instead.
QString value(DolphinView::AdditionalInfo info) const;
DolphinView::Sorting sorting(DolphinView::AdditionalInfo info) const;
@@ -83,15 +86,15 @@ protected:
private:
struct AdditionalInfo {
- const char* const actionCollectionName;
- const char* const context;
- const char* const translation;
- const char* const value;
+ const char* const role;
+ const char* const roleTranslationContext;
+ const char* const roleTranslation;
+ const char* const value; // TODO Dolphin 3.0: Deprecate and use role instead
const DolphinView::Sorting sorting;
};
- QList<DolphinView::AdditionalInfo> m_infoList;
QMap<DolphinView::AdditionalInfo, const AdditionalInfo*> m_map;
+ QHash<QByteArray, DolphinView::AdditionalInfo> m_infoForRole;
};
#endif
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp
index ea7441600..148459f68 100644
--- a/src/views/dolphinview.cpp
+++ b/src/views/dolphinview.cpp
@@ -161,6 +161,8 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
this, SLOT(slotSortOrderChangedByHeader(Qt::SortOrder,Qt::SortOrder)));
connect(view, SIGNAL(sortRoleChanged(QByteArray,QByteArray)),
this, SLOT(slotSortRoleChangedByHeader(QByteArray,QByteArray)));
+ connect(view, SIGNAL(visibleRolesChanged(QList<QByteArray>,QList<QByteArray>)),
+ this, SLOT(slotVisibleRolesChangedByHeader(QList<QByteArray>,QList<QByteArray>)));
KItemListSelectionManager* selectionManager = controller->selectionManager();
connect(selectionManager, SIGNAL(selectionChanged(QSet<int>,QSet<int>)),
@@ -1157,6 +1159,29 @@ void DolphinView::slotSortRoleChangedByHeader(const QByteArray& current, const Q
emit sortingChanged(sorting);
}
+void DolphinView::slotVisibleRolesChangedByHeader(const QList<QByteArray>& current,
+ const QList<QByteArray>& previous)
+{
+ Q_UNUSED(previous);
+ Q_ASSERT(m_container->controller()->view()->visibleRoles() == current);
+
+ const QList<AdditionalInfo> previousAdditionalInfoList = m_additionalInfoList;
+
+ m_additionalInfoList.clear();
+ m_additionalInfoList.reserve(current.count());
+ const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance();
+ foreach (const QByteArray& role, current) {
+ if (role != "name") {
+ m_additionalInfoList.append(infoAccessor.additionalInfo(role));
+ }
+ }
+
+ ViewProperties props(url());
+ props.setAdditionalInfoList(m_additionalInfoList);
+
+ emit additionalInfoListChanged(m_additionalInfoList, previousAdditionalInfoList);
+}
+
KFileItemModel* DolphinView::fileItemModel() const
{
return static_cast<KFileItemModel*>(m_container->controller()->model());
diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h
index 7b7db3f9f..f2f15c592 100644
--- a/src/views/dolphinview.h
+++ b/src/views/dolphinview.h
@@ -111,7 +111,6 @@ public:
enum AdditionalInfo
{
NoInfo = 0,
- NameInfo,
SizeInfo,
DateInfo,
PermissionsInfo,
@@ -655,6 +654,13 @@ private slots:
void slotSortRoleChangedByHeader(const QByteArray& current, const QByteArray& previous);
/**
+ * Is invoked when the visible roles have been changed by the user by dragging
+ * a header item. The view properties of the directory will get updated.
+ */
+ void slotVisibleRolesChangedByHeader(const QList<QByteArray>& current,
+ const QList<QByteArray>& previous);
+
+ /**
* Observes the item with the URL \a url. As soon as the directory
* model indicates that the item is available, the item will
* get selected and it is assured that the item stays visible.
diff --git a/src/views/viewproperties.cpp b/src/views/viewproperties.cpp
index 9f8b4d8ba..36ec6bdb0 100644
--- a/src/views/viewproperties.cpp
+++ b/src/views/viewproperties.cpp
@@ -219,18 +219,7 @@ void ViewProperties::setAdditionalInfoList(const QList<DolphinView::AdditionalIn
newInfoStringList.append(prefix + infoAccessor.value(info));
}
- // Only update the information if it has been changed
- bool changed = oldInfoStringList.count() != newInfoStringList.count();
- if (!changed) {
- foreach (const QString& oldInfoString, oldInfoStringList) {
- if (!newInfoStringList.contains(oldInfoString)) {
- changed = true;
- break;
- }
- }
- }
-
- if (changed) {
+ if (oldInfoStringList != newInfoStringList) {
const bool markCustomizedDetails = (m_node->viewMode() == DolphinView::DetailsView)
&& !newInfoStringList.contains(CustomizedDetailsString);
if (markCustomizedDetails) {