From 258bbc01223ce35e6c81733be49eb50b45107b39 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Fri, 14 May 2010 06:08:08 +0000 Subject: [PATCH] Fix temporary regression of sorting introduced by SVN commit 1126410 svn path=/trunk/KDE/kdebase/apps/; revision=1126487 --- src/additionalinfoaccessor.cpp | 48 +++++++++++++---- src/additionalinfoaccessor.h | 13 ++++- src/dolphinview.cpp | 3 +- src/dolphinview.h | 4 +- src/dolphinviewactionhandler.cpp | 51 ++++++++----------- ...dolphin_directoryviewpropertysettings.kcfg | 2 +- 6 files changed, 75 insertions(+), 46 deletions(-) diff --git a/src/additionalinfoaccessor.cpp b/src/additionalinfoaccessor.cpp index 505da3f4c..3d417e8e1 100644 --- a/src/additionalinfoaccessor.cpp +++ b/src/additionalinfoaccessor.cpp @@ -59,9 +59,21 @@ KFileItemDelegate::Information AdditionalInfoAccessor::keyForColumn(int columnIn return info; } -QString AdditionalInfoAccessor::actionCollectionName(KFileItemDelegate::Information info) const +QString AdditionalInfoAccessor::actionCollectionName(KFileItemDelegate::Information info, + ActionCollectionType type) const { - return QLatin1String(m_map[info]->actionCollectionName); + QString name; + switch (type) { + case SortByType: + name = QLatin1String("sort_by_") + QLatin1String(m_map[info]->actionCollectionName); + break; + + case AdditionalInfoType: + name = QLatin1String("show_") + QLatin1String(m_map[info]->actionCollectionName); + break; + } + + return name; } QString AdditionalInfoAccessor::translation(KFileItemDelegate::Information info) const @@ -69,6 +81,11 @@ QString AdditionalInfoAccessor::translation(KFileItemDelegate::Information info) return i18n(m_map[info]->translation); } +DolphinView::Sorting AdditionalInfoAccessor::sorting(KFileItemDelegate::Information info) const +{ + return m_map[info]->sorting; +} + int AdditionalInfoAccessor::bitValue(KFileItemDelegate::Information info) const { return m_map[info]->bitValue; @@ -79,14 +96,14 @@ AdditionalInfoAccessor::AdditionalInfoAccessor() : m_map() { static const AdditionalInfoAccessor::AdditionalInfo additionalInfos[] = { - { "size", I18N_NOOP2("@label", "Size"), 1 }, - { "date", I18N_NOOP2("@label", "Date"), 2 }, - { "permissions", I18N_NOOP2("@label", "Permissions"), 4 }, - { "owner", I18N_NOOP2("@label", "Owner"), 8 }, - { "group", I18N_NOOP2("@label", "Group"), 16 }, - { "type", I18N_NOOP2("@label", "Type"), 32 }, - { "destination", I18N_NOOP2("@label", "Destination"), 64 }, - { "path", I18N_NOOP2("@label", "Path"), 128 } + { "size", I18N_NOOP2("@label", "Size"), DolphinView::SortBySize, 1 }, + { "date", I18N_NOOP2("@label", "Date"), DolphinView::SortByDate, 2 }, + { "permissions", I18N_NOOP2("@label", "Permissions"), DolphinView::SortByPermissions, 4 }, + { "owner", I18N_NOOP2("@label", "Owner"), DolphinView::SortByOwner, 8 }, + { "group", I18N_NOOP2("@label", "Group"), DolphinView::SortByGroup, 16 }, + { "type", I18N_NOOP2("@label", "Type"), DolphinView::SortByType, 32 }, + { "destination", I18N_NOOP2("@label", "Destination"), DolphinView::SortByDestination, 64 }, + { "path", I18N_NOOP2("@label", "Path"), DolphinView::SortByPath, 128 } }; m_map.insert(KFileItemDelegate::Size, &additionalInfos[0]); @@ -98,7 +115,16 @@ AdditionalInfoAccessor::AdditionalInfoAccessor() : m_map.insert(KFileItemDelegate::LinkDest, &additionalInfos[6]); m_map.insert(KFileItemDelegate::LocalPathOrUrl, &additionalInfos[7]); - m_informations = m_map.keys(); + // 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); } AdditionalInfoAccessor::~AdditionalInfoAccessor() diff --git a/src/additionalinfoaccessor.h b/src/additionalinfoaccessor.h index 4e8df46a8..ca43e35e7 100644 --- a/src/additionalinfoaccessor.h +++ b/src/additionalinfoaccessor.h @@ -20,6 +20,7 @@ #ifndef ADDITIONALINFOACCESSOR_H #define ADDITIONALINFOACCESSOR_H +#include #include #include @@ -45,6 +46,13 @@ class LIBDOLPHINPRIVATE_EXPORT AdditionalInfoAccessor { public: + enum ActionCollectionType { + /// Action collection from "View -> Sort By" + SortByType, + /// Action collection from "View -> Additional Information" + AdditionalInfoType + }; + static AdditionalInfoAccessor& instance(); /** @@ -59,10 +67,12 @@ public: */ KFileItemDelegate::Information keyForColumn(int columnIndex) const; - QString actionCollectionName(KFileItemDelegate::Information info) const; + QString actionCollectionName(KFileItemDelegate::Information info, ActionCollectionType type) const; QString translation(KFileItemDelegate::Information info) const; + DolphinView::Sorting sorting(KFileItemDelegate::Information info) const; + /** * @return Bitvalue for \p info that is stored in a ViewProperties instance. */ @@ -77,6 +87,7 @@ private: struct AdditionalInfo { const char* const actionCollectionName; const char* const translation; + const DolphinView::Sorting sorting; const int bitValue; }; diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 83f700374..1c06f560c 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -981,7 +981,8 @@ void DolphinView::updateAdditionalInfoActions(KActionCollection* collection) (m_mode == DolphinView::IconsView); foreach (const KFileItemDelegate::Information& info, infos) { - QAction* action = collection->action(infoAccessor.actionCollectionName(info)); + const QString name = infoAccessor.actionCollectionName(info, AdditionalInfoAccessor::AdditionalInfoType); + QAction* action = collection->action(name); Q_ASSERT(action != 0); action->setEnabled(enable); action->setChecked(checkedInfos.contains(info)); diff --git a/src/dolphinview.h b/src/dolphinview.h index 07c6e32c4..352841f4a 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -113,7 +113,9 @@ public: SortByOwner, SortByGroup, SortByType, - MaxSortEnum = SortByType + SortByDestination, + SortByPath, + MaxSortingEnum = SortByPath }; /** diff --git a/src/dolphinviewactionhandler.cpp b/src/dolphinviewactionhandler.cpp index 2f98d8426..aa4ce6214 100644 --- a/src/dolphinviewactionhandler.cpp +++ b/src/dolphinviewactionhandler.cpp @@ -204,7 +204,6 @@ void DolphinViewActionHandler::createActions() connect(adjustViewProps, SIGNAL(triggered()), this, SLOT(slotAdjustViewProperties())); // Tools menu - KAction* findFile = m_actionCollection->addAction("find_file"); findFile->setText(i18nc("@action:inmenu Tools", "Find File...")); findFile->setShortcut(Qt::CTRL | Qt::Key_F); @@ -225,7 +224,7 @@ QActionGroup* DolphinViewActionHandler::createAdditionalInformationActionGroup() const KFileItemDelegate::InformationList infos = infoAccessor.keys(); foreach (KFileItemDelegate::Information info, infos) { - const QString name = infoAccessor.actionCollectionName(info); + const QString name = infoAccessor.actionCollectionName(info, AdditionalInfoAccessor::AdditionalInfoType); KToggleAction* action = m_actionCollection->add(name); action->setText(infoAccessor.translation(info)); action->setData(info); @@ -242,7 +241,7 @@ QActionGroup* DolphinViewActionHandler::createSortByActionGroup() QActionGroup* sortByActionGroup = new QActionGroup(m_actionCollection); sortByActionGroup->setExclusive(true); - KToggleAction* sortByName = m_actionCollection->add("name"); + KToggleAction* sortByName = m_actionCollection->add("sort_by_name"); sortByName->setText(i18nc("@action:inmenu Sort By", "Name")); sortByName->setData(QVariant::fromValue(DolphinView::SortByName)); sortByActionGroup->addAction(sortByName); @@ -250,11 +249,11 @@ QActionGroup* DolphinViewActionHandler::createSortByActionGroup() const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance(); const KFileItemDelegate::InformationList infos = infoAccessor.keys(); foreach (KFileItemDelegate::Information info, infos) { - const QString name = infoAccessor.actionCollectionName(info); + const QString name = infoAccessor.actionCollectionName(info, AdditionalInfoAccessor::SortByType); KToggleAction* action = m_actionCollection->add(name); action->setText(infoAccessor.translation(info)); - // TODO: replace DolphinView::Sorting by KFileItemDelegate::Information! - action->setData(QVariant::fromValue(DolphinView::SortByName)); + const DolphinView::Sorting sorting = infoAccessor.sorting(info); + action->setData(QVariant::fromValue(sorting)); sortByActionGroup->addAction(action); } @@ -282,10 +281,11 @@ void DolphinViewActionHandler::slotTrashActivated(Qt::MouseButtons, Qt::Keyboard // Note: kde3's konq_mainwindow.cpp used to check // reason == KAction::PopupMenuActivation && ... // but this isn't supported anymore - if (modifiers & Qt::ShiftModifier) + if (modifiers & Qt::ShiftModifier) { m_currentView->deleteSelectedItems(); - else + } else { m_currentView->trashSelectedItems(); + } } void DolphinViewActionHandler::slotDeleteItems() @@ -456,31 +456,20 @@ KToggleAction* DolphinViewActionHandler::columnsModeAction() void DolphinViewActionHandler::slotSortingChanged(DolphinView::Sorting sorting) { + const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance(); + const KFileItemDelegate::InformationList infos = infoAccessor.keys(); + QAction* action = 0; - switch (sorting) { - case DolphinView::SortByName: + if (sorting == DolphinView::SortByName) { action = m_actionCollection->action("sort_by_name"); - break; - case DolphinView::SortBySize: - action = m_actionCollection->action("sort_by_size"); - break; - case DolphinView::SortByDate: - action = m_actionCollection->action("sort_by_date"); - break; - case DolphinView::SortByPermissions: - action = m_actionCollection->action("sort_by_permissions"); - break; - case DolphinView::SortByOwner: - action = m_actionCollection->action("sort_by_owner"); - break; - case DolphinView::SortByGroup: - action = m_actionCollection->action("sort_by_group"); - break; - case DolphinView::SortByType: - action = m_actionCollection->action("sort_by_type"); - break; - default: - break; + } else { + foreach (const KFileItemDelegate::Information info, infos) { + if (sorting == infoAccessor.sorting(info)) { + const QString name = infoAccessor.actionCollectionName(info, AdditionalInfoAccessor::SortByType); + action = m_actionCollection->action(name); + break; + } + } } if (action != 0) { diff --git a/src/settings/dolphin_directoryviewpropertysettings.kcfg b/src/settings/dolphin_directoryviewpropertysettings.kcfg index 415b872b3..ff9b60a45 100644 --- a/src/settings/dolphin_directoryviewpropertysettings.kcfg +++ b/src/settings/dolphin_directoryviewpropertysettings.kcfg @@ -40,7 +40,7 @@ This option defines which attribute (name, size, date, etc.) sorting is performed on. DolphinView::SortByName 0 - DolphinView::MaxSortEnum + DolphinView::MaxSortingEnum -- 2.47.3