diff options
Diffstat (limited to 'src/views')
| -rw-r--r-- | src/views/additionalinfoaccessor.cpp | 48 | ||||
| -rw-r--r-- | src/views/additionalinfoaccessor.h | 13 | ||||
| -rw-r--r-- | src/views/dolphinview.cpp | 25 | ||||
| -rw-r--r-- | src/views/dolphinview.h | 8 | ||||
| -rw-r--r-- | src/views/viewproperties.cpp | 13 |
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) { |
