X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/3b7c05b385dc56fbc0b9ffdd332f8d30e7624d0c..0f50abe12dce43341c7921cf35f71da95b3df8cc:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index aea0d31ad..7cdfbc6fb 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -24,6 +24,7 @@ #include "panels/folders/folderspanel.h" #include "panels/places/placespanel.h" #include "panels/terminal/terminalpanel.h" +#include "selectionmode/actiontexthelper.h" #include "settings/dolphinsettingsdialog.h" #include "statusbar/dolphinstatusbar.h" #include "views/dolphinviewactionhandler.h" @@ -83,8 +84,6 @@ #include #include -#include - namespace { // Used for GeneralSettings::version() to determine whether // an updated version of Dolphin is running, so as to migrate @@ -126,7 +125,7 @@ DolphinMainWindow::DolphinMainWindow() : setComponentName(QStringLiteral("dolphin"), QGuiApplication::applicationDisplayName()); setObjectName(QStringLiteral("Dolphin#")); - //setStateConfigGroup("State"); // TODO: Don't leave this as a comment. + setStateConfigGroup("State"); connect(&DolphinNewFileMenuObserver::instance(), &DolphinNewFileMenuObserver::errorMessage, this, &DolphinMainWindow::showErrorMessage); @@ -162,12 +161,13 @@ DolphinMainWindow::DolphinMainWindow() : this, &DolphinMainWindow::updateWindowTitle); setCentralWidget(m_tabWidget); + m_actionTextHelper = new SelectionMode::ActionTextHelper(this); setupActions(); - m_actionHandler = new DolphinViewActionHandler(actionCollection(), this); + m_actionHandler = new DolphinViewActionHandler(actionCollection(), m_actionTextHelper, this); connect(m_actionHandler, &DolphinViewActionHandler::actionBeingHandled, this, &DolphinMainWindow::clearStatusBar); connect(m_actionHandler, &DolphinViewActionHandler::createDirectoryTriggered, this, &DolphinMainWindow::createDirectory); - connect(m_actionHandler, &DolphinViewActionHandler::setSelectionMode, this, &DolphinMainWindow::slotSetSelectionMode); + connect(m_actionHandler, &DolphinViewActionHandler::selectionModeChangeTriggered, this, &DolphinMainWindow::slotSetSelectionMode); m_remoteEncoding = new DolphinRemoteEncoding(this, m_actionHandler); connect(this, &DolphinMainWindow::urlChanged, @@ -195,7 +195,6 @@ DolphinMainWindow::DolphinMainWindow() : auto hamburgerMenu = static_cast(actionCollection()->action( KStandardAction::name(KStandardAction::HamburgerMenu))); - hamburgerMenu->icon(); hamburgerMenu->setMenuBar(menuBar()); hamburgerMenu->setShowMenuBarAction(showMenuBarAction); connect(hamburgerMenu, &KHamburgerMenu::aboutToShowMenu, @@ -718,7 +717,7 @@ void DolphinMainWindow::undo() void DolphinMainWindow::cut() { if (m_activeViewContainer->view()->selectedItems().isEmpty()) { - m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionModeBottomBar::Contents::CutContents); + m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionMode::BottomBar::Contents::CutContents); } else { m_activeViewContainer->view()->cutSelectedItemsToClipboard(); m_activeViewContainer->setSelectionModeEnabled(false); @@ -728,7 +727,7 @@ void DolphinMainWindow::cut() void DolphinMainWindow::copy() { if (m_activeViewContainer->view()->selectedItems().isEmpty()) { - m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionModeBottomBar::Contents::CopyContents); + m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionMode::BottomBar::Contents::CopyContents); } else { m_activeViewContainer->view()->copySelectedItemsToClipboard(); m_activeViewContainer->setSelectionModeEnabled(false); @@ -859,7 +858,7 @@ void DolphinMainWindow::slotGoForward(QAction* action) } } -void DolphinMainWindow::slotSetSelectionMode(bool enabled, SelectionModeBottomBar::Contents bottomBarContents) +void DolphinMainWindow::slotSetSelectionMode(bool enabled, SelectionMode::BottomBar::Contents bottomBarContents) { m_activeViewContainer->setSelectionModeEnabled(enabled, actionCollection(), bottomBarContents); } @@ -906,7 +905,7 @@ void DolphinMainWindow::toggleSplitStash() void DolphinMainWindow::copyToInactiveSplitView() { if (m_activeViewContainer->view()->selectedItems().isEmpty()) { - m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionModeBottomBar::Contents::CopyToOtherViewContents); + m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionMode::BottomBar::Contents::CopyToOtherViewContents); } else { m_tabWidget->copyToInactiveSplitView(); m_activeViewContainer->setSelectionModeEnabled(false); @@ -916,7 +915,7 @@ void DolphinMainWindow::copyToInactiveSplitView() void DolphinMainWindow::moveToInactiveSplitView() { if (m_activeViewContainer->view()->selectedItems().isEmpty()) { - m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionModeBottomBar::Contents::MoveToOtherViewContents); + m_activeViewContainer->setSelectionModeEnabled(true, actionCollection(), SelectionMode::BottomBar::Contents::MoveToOtherViewContents); } else { m_tabWidget->moveToInactiveSplitView(); m_activeViewContainer->setSelectionModeEnabled(false); @@ -949,7 +948,7 @@ void DolphinMainWindow::toggleSelectionMode() { const bool checked = !m_activeViewContainer->isSelectionModeEnabled(); - m_activeViewContainer->setSelectionModeEnabled(checked, actionCollection(), SelectionModeBottomBar::Contents::GeneralContents); + m_activeViewContainer->setSelectionModeEnabled(checked, actionCollection(), SelectionMode::BottomBar::Contents::GeneralContents); actionCollection()->action(QStringLiteral("toggle_selection_mode"))->setChecked(checked); } @@ -1331,7 +1330,7 @@ void DolphinMainWindow::updateHamburgerMenu() menu->addMenu(m_newFileMenu->menu()); if (!toolBar()->isVisible() - || !toolbarActions.contains(ac->action(QStringLiteral("toggle_selection_mode_with_popup"))) + || !toolbarActions.contains(ac->action(QStringLiteral("toggle_selection_mode_tool_bar"))) ) { menu->addAction(ac->action(QStringLiteral("toggle_selection_mode"))); } @@ -1587,12 +1586,14 @@ void DolphinMainWindow::setupActions() "next to each other on the keyboard: Ctrl+X, " "Ctrl+C and Ctrl+V."); QAction* cutAction = KStandardAction::cut(this, &DolphinMainWindow::cut, actionCollection()); + m_actionTextHelper->registerTextWhenNothingIsSelected(cutAction, i18nc("@action", "Cut…")); cutAction->setWhatsThis(xi18nc("@info:whatsthis cut", "This copies the items " "in your current selection to the clipboard." "Use the Paste action afterwards to copy them from " "the clipboard to a new location. The items will be removed from their " "initial location.") + cutCopyPastePara); QAction* copyAction = KStandardAction::copy(this, &DolphinMainWindow::copy, actionCollection()); + m_actionTextHelper->registerTextWhenNothingIsSelected(copyAction, i18nc("@action", "Copy…")); copyAction->setWhatsThis(xi18nc("@info:whatsthis copy", "This copies the " "items in your current selection to the clipboard." "Use the Paste action afterwards to copy them " @@ -1609,6 +1610,7 @@ void DolphinMainWindow::setupActions() QAction* copyToOtherViewAction = actionCollection()->addAction(QStringLiteral("copy_to_inactive_split_view")); copyToOtherViewAction->setText(i18nc("@action:inmenu", "Copy to Inactive Split View")); + m_actionTextHelper->registerTextWhenNothingIsSelected(copyToOtherViewAction, i18nc("@action:inmenu", "Copy to Inactive Split View…")); copyToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Copy", "This copies the selected items from " "the active view to the inactive split view.")); copyToOtherViewAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-copy"))); @@ -1618,6 +1620,7 @@ void DolphinMainWindow::setupActions() QAction* moveToOtherViewAction = actionCollection()->addAction(QStringLiteral("move_to_inactive_split_view")); moveToOtherViewAction->setText(i18nc("@action:inmenu", "Move to Inactive Split View")); + m_actionTextHelper->registerTextWhenNothingIsSelected(moveToOtherViewAction, i18nc("@action:inmenu", "Move to Inactive Split View…")); moveToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Move", "This moves the selected items from " "the active view to the inactive split view.")); moveToOtherViewAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-cut"))); @@ -1672,14 +1675,13 @@ void DolphinMainWindow::setupActions() QAction *toggleSelectionModeAction = actionCollection()->addAction(QStringLiteral("toggle_selection_mode")); // i18n: This action toggles a selection mode. toggleSelectionModeAction->setText(i18nc("@action:inmenu", "Select Files and Folders")); - // i18n: Opens a selection mode for selecting files/folders and later selecting an action that acts on them. - // So in a way "Select" here is used to mean both "Select files" and also "Select what to do" but mostly the first. + // i18n: Opens a selection mode for selecting files/folders. // The text is kept so unspecific because it will be shown on the toolbar where space is at a premium. toggleSelectionModeAction->setIconText(i18nc("@action:intoolbar", "Select")); - toggleSelectionModeAction->setWhatsThis(xi18nc("@info:whatsthis", "This application doesn't know which files or folders should be acted on, " - "unless they are selected first. Press this to toggle the Selection Mode which makes selecting and deselecting as " - "easy as pressing an item once.While in this mode, a quick access bar at the bottom shows all the available actions for the current " - "selection of items.")); + toggleSelectionModeAction->setWhatsThis(xi18nc("@info:whatsthis", "This application only knows which files or folders should be acted on if they are" + " selected first. Press this to toggle a Selection Mode which makes selecting and deselecting as easy as " + "pressing an item once.While in this mode, a quick access bar at the bottom shows available actions for the currently selected items." + "")); toggleSelectionModeAction->setIcon(QIcon::fromTheme(QStringLiteral("quickwizard"))); toggleSelectionModeAction->setCheckable(true); actionCollection()->setDefaultShortcut(toggleSelectionModeAction, Qt::Key_Space ); @@ -1690,7 +1692,7 @@ void DolphinMainWindow::setupActions() auto *toggleSelectionModeToolBarAction = new KToolBarPopupAction(toggleSelectionModeAction->icon(), toggleSelectionModeAction->iconText(), actionCollection()); toggleSelectionModeToolBarAction->setToolTip(toggleSelectionModeAction->text()); toggleSelectionModeToolBarAction->setWhatsThis(toggleSelectionModeAction->whatsThis()); - actionCollection()->addAction(QStringLiteral("toggle_selection_mode_with_popup"), toggleSelectionModeToolBarAction); + actionCollection()->addAction(QStringLiteral("toggle_selection_mode_tool_bar"), toggleSelectionModeToolBarAction); toggleSelectionModeToolBarAction->setCheckable(true); toggleSelectionModeToolBarAction->setPopupMode(QToolButton::DelayedPopup); connect(toggleSelectionModeToolBarAction, &QAction::triggered, toggleSelectionModeAction, &QAction::trigger); @@ -2232,7 +2234,7 @@ void DolphinMainWindow::updateFileAndEditActions() QAction* deleteAction = col->action(KStandardAction::name(KStandardAction::DeleteFile)); QAction* cutAction = col->action(KStandardAction::name(KStandardAction::Cut)); QAction* duplicateAction = col->action(QStringLiteral("duplicate")); // see DolphinViewActionHandler - QAction* addToPlacesAction = col->action(QStringLiteral("add_to_places")); + QAction* addToPlacesAction = col->action(QStringLiteral("add_to_places")); QAction* copyToOtherViewAction = col->action(QStringLiteral("copy_to_inactive_split_view")); QAction* moveToOtherViewAction = col->action(QStringLiteral("move_to_inactive_split_view")); QAction* copyLocation = col->action(QString("copy_location")); @@ -2248,7 +2250,11 @@ void DolphinMainWindow::updateFileAndEditActions() duplicateAction->setEnabled(true); addToPlacesAction->setEnabled(true); copyLocation->setEnabled(true); + // Them triggering selection mode and not directly acting on selected items is signified by adding "…" to their text. + m_actionTextHelper->textsWhenNothingIsSelectedEnabled(true); + } else { + m_actionTextHelper->textsWhenNothingIsSelectedEnabled(false); stateChanged(QStringLiteral("has_selection")); QAction* deleteWithTrashShortcut = col->action(QStringLiteral("delete_shortcut")); // see DolphinViewActionHandler