From c900f7d255aa8fb326cf20f598a5de1a1edbcfe9 Mon Sep 17 00:00:00 2001 From: Chris Rizzitello Date: Sun, 11 Nov 2018 16:02:08 -0500 Subject: [PATCH] Improve Ux for the places panel's hidden items Summary: BUG: 400860 FIXED-IN: 18.12.0 Clean up the context menu for the places panel. - Change Text "Show All Entries" -> "Show Hidden Places" - Use State dependent icon (like hidden files) - Disable instead of hide if not places are hidden. - Toggle to unchecked if last item of group is unhidden. Create a copy of this "Show Hidden Places" entry in the main dolphin menu View->Places. Test Plan: With Hidden Places {F6398756} {F6398759} Context Menu: {F6398762} {F6398761} Without Hidden Places. {F6414694} {F6414696} Reviewers: #dolphin, #vdg, elvisangelaccio, ngraham Reviewed By: #dolphin, #vdg, elvisangelaccio, ngraham Subscribers: cfeck, elvisangelaccio, veqz, davidc, ngraham, kfm-devel Tags: #dolphin Maniphest Tasks: T8349 Differential Revision: https://phabricator.kde.org/D16767 --- src/dolphinmainwindow.cpp | 19 ++++++++++++++++++ src/panels/places/placespanel.cpp | 33 ++++++++++++++++++++++++------- src/panels/places/placespanel.h | 3 +++ 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index b14f5289cd..3ff2ad1e92 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1335,6 +1335,20 @@ void DolphinMainWindow::setupDockWidgets() this, &DolphinMainWindow::slotStorageTearDownExternallyRequested); m_tabWidget->slotPlacesPanelVisibilityChanged(m_placesPanel->isVisible()); + auto actionShowAllPlaces = new QAction(QIcon::fromTheme(QStringLiteral("hint")), i18nc("@item:inmenu", "Show Hidden Places"), this); + actionShowAllPlaces->setCheckable(true); + actionShowAllPlaces->setDisabled(true); + + connect(actionShowAllPlaces, &QAction::triggered, this, [actionShowAllPlaces, this](bool checked){ + actionShowAllPlaces->setIcon(QIcon::fromTheme(checked ? QStringLiteral("visibility") : QStringLiteral("hint"))); + m_placesPanel->showHiddenEntries(checked); + }); + + connect(m_placesPanel, &PlacesPanel::showHiddenEntriesChanged, this, [actionShowAllPlaces] (bool checked){ + actionShowAllPlaces->setChecked(checked); + actionShowAllPlaces->setIcon(QIcon::fromTheme(checked ? QStringLiteral("visibility") : QStringLiteral("hint"))); + }); + // Add actions into the "Panels" menu KActionMenu* panelsMenu = new KActionMenu(i18nc("@action:inmenu View", "Panels"), this); actionCollection()->addAction(QStringLiteral("panels"), panelsMenu); @@ -1347,7 +1361,12 @@ void DolphinMainWindow::setupDockWidgets() panelsMenu->addAction(ac->action(QStringLiteral("show_folders_panel"))); panelsMenu->addAction(ac->action(QStringLiteral("show_terminal_panel"))); panelsMenu->addSeparator(); + panelsMenu->addAction(actionShowAllPlaces); panelsMenu->addAction(lockLayoutAction); + + connect(panelsMenu->menu(), &QMenu::aboutToShow, this, [actionShowAllPlaces, this]{ + actionShowAllPlaces->setEnabled(m_placesPanel->hiddenListCount()); + }); } void DolphinMainWindow::updateEditActions() diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index 7b4900f7c3..1a8b0ecd48 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -258,6 +258,9 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos) m_model->deleteItem(index); } else if (action == hideAction) { item->setHidden(hideAction->isChecked()); + if (!m_model->hiddenCount()) { + showHiddenEntries(false); + } } else if (action == openInNewWindowAction) { Dolphin::openNewWindow({KFilePlacesModel::convertedUrl(m_model->data(index).value("url").toUrl())}, this); } else if (action == openInNewTabAction) { @@ -287,12 +290,11 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos) QAction* addAction = menu.addAction(QIcon::fromTheme(QStringLiteral("document-new")), i18nc("@item:inmenu", "Add Entry...")); - QAction* showAllAction = nullptr; - if (m_model->hiddenCount() > 0) { - showAllAction = menu.addAction(QIcon::fromTheme(QStringLiteral("visibility")), i18nc("@item:inmenu", "Show All Entries")); - showAllAction->setCheckable(true); - showAllAction->setChecked(m_model->hiddenItemsShown()); - } + QAction* showAllAction = menu.addAction(i18nc("@item:inmenu", "Show Hidden Places")); + showAllAction->setCheckable(true); + showAllAction->setChecked(m_model->hiddenItemsShown()); + showAllAction->setIcon(QIcon::fromTheme(m_model->hiddenItemsShown() ? QStringLiteral("visibility") : QStringLiteral("hint"))); + showAllAction->setEnabled(m_model->hiddenCount()); buildGroupContextMenu(&menu, m_controller->indexCloseToMousePressedPosition()); @@ -340,7 +342,7 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos) if (action == addAction) { addEntry(); } else if (action == showAllAction) { - m_model->setHiddenItemsShown(showAllAction->isChecked()); + showHiddenEntries(showAllAction->isChecked()); } else if (iconSizeActionMap.contains(action)) { m_view->setIconSize(iconSizeActionMap.value(action)); } @@ -362,6 +364,9 @@ QAction *PlacesPanel::buildGroupContextMenu(QMenu *menu, int index) connect(hideGroupAction, &QAction::triggered, this, [this, groupType, hideGroupAction]{ m_model->setGroupHidden(groupType, hideGroupAction->isChecked()); + if (!m_model->hiddenCount()) { + showHiddenEntries(false); + } }); return hideGroupAction; @@ -541,3 +546,17 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button) } } } + +void PlacesPanel::showHiddenEntries(bool shown) +{ + m_model->setHiddenItemsShown(shown); + emit showHiddenEntriesChanged(shown); +} + +int PlacesPanel::hiddenListCount() +{ + if(!m_model) { + return 0; + } + return m_model->hiddenCount(); +} diff --git a/src/panels/places/placespanel.h b/src/panels/places/placespanel.h index c6f959d231..9d9624ff8e 100644 --- a/src/panels/places/placespanel.h +++ b/src/panels/places/placespanel.h @@ -49,6 +49,7 @@ signals: void errorMessage(const QString& error); void storageTearDownRequested(const QString& mountPath); void storageTearDownExternallyRequested(const QString& mountPath); + void showHiddenEntriesChanged(bool shown); protected: bool urlChanged() override; @@ -56,6 +57,8 @@ protected: public slots: void readSettings() override; + void showHiddenEntries(bool shown); + int hiddenListCount(); private slots: void slotItemActivated(int index);