From 13706a2952a7e8b9af6a9cf33d43200c3d360c41 Mon Sep 17 00:00:00 2001 From: David Faure Date: Tue, 22 Jan 2008 01:22:56 +0000 Subject: [PATCH] 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/dolphindetailsview.cpp | 2 +- src/dolphiniconsview.cpp | 11 ++--- src/dolphiniconsview.h | 2 +- src/dolphinmainwindow.cpp | 82 ++++---------------------------------- src/dolphinmainwindow.h | 6 +-- src/dolphinview.cpp | 80 +++++++++++++++++++++++++++++++++++-- src/dolphinview.h | 15 ++++++- 7 files changed, 108 insertions(+), 90 deletions(-) diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 4fdb76e1a..2861c134f 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -101,7 +101,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr this, SLOT(zoomIn())); connect(controller, SIGNAL(zoomOut()), this, SLOT(zoomOut())); - connect(controller->dolphinView(), SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)), + connect(controller->dolphinView(), SIGNAL(additionalInfoChanged()), this, SLOT(updateColumnVisibility())); // apply the details mode settings to the widget diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index 553cdcfe6..d3d485f1a 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -78,8 +78,8 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle const DolphinView* view = controller->dolphinView(); connect(view, SIGNAL(showPreviewChanged()), this, SLOT(slotShowPreviewChanged())); - connect(view, SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)), - this, SLOT(slotAdditionalInfoChanged(const KFileItemDelegate::InformationList&))); + connect(view, SIGNAL(additionalInfoChanged()), + this, SLOT(slotAdditionalInfoChanged())); connect(this, SIGNAL(entered(const QModelIndex&)), this, SLOT(slotEntered(const QModelIndex&))); @@ -301,10 +301,11 @@ void DolphinIconsView::slotShowPreviewChanged() updateGridSize(view->showPreview(), additionalInfoCount()); } -void DolphinIconsView::slotAdditionalInfoChanged(const KFileItemDelegate::InformationList& info) +void DolphinIconsView::slotAdditionalInfoChanged() { - const bool showPreview = m_controller->dolphinView()->showPreview(); - updateGridSize(showPreview, info.count()); + const DolphinView* view = m_controller->dolphinView(); + const bool showPreview = view->showPreview(); + updateGridSize(showPreview, view->additionalInfo().count()); } void DolphinIconsView::zoomIn() diff --git a/src/dolphiniconsview.h b/src/dolphiniconsview.h index 06c417868..af65bbda8 100644 --- a/src/dolphiniconsview.h +++ b/src/dolphiniconsview.h @@ -67,7 +67,7 @@ private slots: void triggerItem(const QModelIndex& index); void slotEntered(const QModelIndex& index); void slotShowPreviewChanged(); - void slotAdditionalInfoChanged(const KFileItemDelegate::InformationList& info); + void slotAdditionalInfoChanged(); void zoomIn(); void zoomOut(); diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index ce13796ac..44a44efa2 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -256,58 +256,10 @@ void DolphinMainWindow::slotSortOrderChanged(Qt::SortOrder order) descending->setChecked(sortDescending); } -void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::InformationList list) -{ - QAction* showSizeInfo = actionCollection()->action("show_size_info"); - QAction* showDateInfo = actionCollection()->action("show_date_info"); - QAction* showPermissionsInfo = actionCollection()->action("show_permissions_info"); - QAction* showOwnerInfo = actionCollection()->action("show_owner_info"); - QAction* showGroupInfo = actionCollection()->action("show_group_info"); - QAction* showMimeInfo = actionCollection()->action("show_mime_info"); - - showSizeInfo->setChecked(false); - showDateInfo->setChecked(false); - showPermissionsInfo->setChecked(false); - showOwnerInfo->setChecked(false); - showGroupInfo->setChecked(false); - showMimeInfo->setChecked(false); - - const DolphinView* view = m_activeViewContainer->view(); - - const bool enable = (view->mode() == DolphinView::DetailsView) || - (view->mode() == DolphinView::IconsView); - - showSizeInfo->setEnabled(enable); - showDateInfo->setEnabled(enable); - showPermissionsInfo->setEnabled(enable); - showOwnerInfo->setEnabled(enable); - showGroupInfo->setEnabled(enable); - showMimeInfo->setEnabled(enable); - - foreach (KFileItemDelegate::Information info, list) { - 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 DolphinMainWindow::slotAdditionalInfoChanged() +{ + DolphinView* view = m_activeViewContainer->view(); + view->updateAdditionalInfoActions(actionCollection()); } void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) @@ -1333,7 +1285,7 @@ void DolphinMainWindow::updateViewActions() slotSortingChanged(view->sorting()); slotSortOrderChanged(view->sortOrder()); slotCategorizedSortingChanged(); - slotAdditionalInfoChanged(view->additionalInfo()); + slotAdditionalInfoChanged(); KToggleAction* showFilterBarAction = static_cast(actionCollection()->action("show_filter_bar")); @@ -1386,8 +1338,8 @@ void DolphinMainWindow::connectViewSignals(int viewIndex) this, SLOT(slotSortingChanged(DolphinView::Sorting))); connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)), this, SLOT(slotSortOrderChanged(Qt::SortOrder))); - connect(view, SIGNAL(additionalInfoChanged(KFileItemDelegate::InformationList)), - this, SLOT(slotAdditionalInfoChanged(KFileItemDelegate::InformationList))); + connect(view, SIGNAL(additionalInfoChanged()), + this, SLOT(slotAdditionalInfoChanged())); connect(view, SIGNAL(selectionChanged(KFileItemList)), this, SLOT(slotSelectionChanged(KFileItemList))); connect(view, SIGNAL(requestItemInfo(KFileItem)), @@ -1424,25 +1376,7 @@ void DolphinMainWindow::updateSplitAction() void DolphinMainWindow::toggleAdditionalInfo(QAction* action) { clearStatusBar(); - - const KFileItemDelegate::Information info = - static_cast(action->data().toInt()); - - DolphinView* view = m_activeViewContainer->view(); - KFileItemDelegate::InformationList list = view->additionalInfo(); - - const bool show = action->isChecked(); - - const int index = list.indexOf(info); - const bool containsInfo = (index >= 0); - if (show && !containsInfo) { - list.append(info); - view->setAdditionalInfo(list); - } else if (!show && containsInfo) { - list.removeAt(index); - view->setAdditionalInfo(list); - Q_ASSERT(list.indexOf(info) < 0); - } + m_activeViewContainer->view()->toggleAdditionalInfo(action); } DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) : diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index ab96cd155..444a4a946 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -274,8 +274,8 @@ private slots: void toggleSortCategorization(); /** - * Applies \a info dependent from the current checked state of the action - * \a actionName to the file item delegate. + * Switches on or off the displaying of additional information + * as specified by \a action. */ void toggleAdditionalInfo(QAction* action); @@ -376,7 +376,7 @@ private slots: void slotSortOrderChanged(Qt::SortOrder order); /** Updates the state of the 'Additional Information' actions. */ - void slotAdditionalInfoChanged(KFileItemDelegate::InformationList info); + void slotAdditionalInfoChanged(); /** * Updates the state of the 'Edit' menu actions and emits 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() diff --git a/src/dolphinview.h b/src/dolphinview.h index e69f0bbc6..a85c184ef 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -381,6 +381,11 @@ public: */ static QActionGroup* createAdditionalInformationActionGroup(KActionCollection* collection); + /** + * Updates the state of the 'Additional Information' actions in \a collection. + */ + void updateAdditionalInfoActions(KActionCollection* collection); + /** * Returns the action name corresponding to the current view mode */ @@ -439,6 +444,12 @@ public slots: /** Switches between an ascending and descending sorting order. */ void toggleSortOrder(); + /** + * Switches on or off the displaying of additional information + * as specified by \a action. + */ + void toggleAdditionalInfo(QAction* action); + signals: /** * Is emitted if the view has been activated by e. g. a mouse click. @@ -474,8 +485,8 @@ signals: /** Is emitted if the sort order (ascending or descending) has been changed. */ void sortOrderChanged(Qt::SortOrder order); - /** Is emitted if the additional information for an item has been changed. */ - void additionalInfoChanged(const KFileItemDelegate::InformationList& info); + /** Is emitted if the additional information shown for this view has been changed. */ + void additionalInfoChanged(); /** * Is emitted if information of an item is requested to be shown e. g. in the sidebar. -- 2.47.3