From 13706a2952a7e8b9af6a9cf33d43200c3d360c41 Mon Sep 17 00:00:00 2001 From: David Faure Date: Tue, 22 Jan 2008 01:22:56 +0000 Subject: Move the code handling the additional-info-actions to DolphinView; simplify signal from DolphinView (it has the info anyway). The fact that the last additional-info doesn't show up in the icon view is in fact a KFileItemDelegate bug, not a bug in this code :) svn path=/branches/KDE/4.0/kdebase/apps/; revision=764544 --- src/dolphinview.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 4 deletions(-) (limited to 'src/dolphinview.cpp') diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 575af51bd..4aeabb265 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -215,7 +215,7 @@ void DolphinView::setMode(Mode mode) // additional information manually const KFileItemDelegate::InformationList infoList = props.additionalInfo(); m_fileItemDelegate->setShowInformation(infoList); - emit additionalInfoChanged(infoList); + emit additionalInfoChanged(); // Not all view modes support categorized sorting. Adjust the sorting model // if changing the view mode results in a change of the categorized sorting @@ -467,7 +467,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::InformationList info) props.setAdditionalInfo(info); m_fileItemDelegate->setShowInformation(info); - emit additionalInfoChanged(info); + emit additionalInfoChanged(); if (itemView() != m_detailsView) { // the details view requires no reloading of the directory, as it maps @@ -708,7 +708,7 @@ void DolphinView::applyViewProperties(const KUrl& url) KFileItemDelegate::InformationList info = props.additionalInfo(); if (info != m_fileItemDelegate->showInformation()) { m_fileItemDelegate->setShowInformation(info); - emit additionalInfoChanged(info); + emit additionalInfoChanged(); } const bool showPreview = props.showPreview(); @@ -810,8 +810,80 @@ void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList& m_fileItemDelegate->setShowInformation(info); - emit additionalInfoChanged(info); + emit additionalInfoChanged(); // will call updateAdditionalInfoActions just below +} + +void DolphinView::updateAdditionalInfoActions(KActionCollection* collection) +{ + const bool enable = (m_mode == DolphinView::DetailsView) || + (m_mode == DolphinView::IconsView); + + QAction* showSizeInfo = collection->action("show_size_info"); + QAction* showDateInfo = collection->action("show_date_info"); + QAction* showPermissionsInfo = collection->action("show_permissions_info"); + QAction* showOwnerInfo = collection->action("show_owner_info"); + QAction* showGroupInfo = collection->action("show_group_info"); + QAction* showMimeInfo = collection->action("show_mime_info"); + + showSizeInfo->setChecked(false); + showDateInfo->setChecked(false); + showPermissionsInfo->setChecked(false); + showOwnerInfo->setChecked(false); + showGroupInfo->setChecked(false); + showMimeInfo->setChecked(false); + + showSizeInfo->setEnabled(enable); + showDateInfo->setEnabled(enable); + showPermissionsInfo->setEnabled(enable); + showOwnerInfo->setEnabled(enable); + showGroupInfo->setEnabled(enable); + showMimeInfo->setEnabled(enable); + + foreach (KFileItemDelegate::Information info, m_fileItemDelegate->showInformation()) { + switch (info) { + case KFileItemDelegate::Size: + showSizeInfo->setChecked(true); + break; + case KFileItemDelegate::ModificationTime: + showDateInfo->setChecked(true); + break; + case KFileItemDelegate::Permissions: + showPermissionsInfo->setChecked(true); + break; + case KFileItemDelegate::Owner: + showOwnerInfo->setChecked(true); + break; + case KFileItemDelegate::OwnerAndGroup: + showGroupInfo->setChecked(true); + break; + case KFileItemDelegate::FriendlyMimeType: + showMimeInfo->setChecked(true); + break; + default: + break; + } + } +} + +void DolphinView::toggleAdditionalInfo(QAction* action) +{ + const KFileItemDelegate::Information info = + static_cast(action->data().toInt()); + + KFileItemDelegate::InformationList list = additionalInfo(); + const bool show = action->isChecked(); + + const int index = list.indexOf(info); + const bool containsInfo = (index >= 0); + if (show && !containsInfo) { + list.append(info); + setAdditionalInfo(list); + } else if (!show && containsInfo) { + list.removeAt(index); + setAdditionalInfo(list); + Q_ASSERT(list.indexOf(info) < 0); + } } void DolphinView::emitContentsMoved() -- cgit v1.3