]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Better separation of classes
[dolphin.git] / src / dolphinmainwindow.cpp
index aea0d31ad585c1dafeceeca6458dae0087fb4bdf..d8d30448321c3d87a52fc5753a9055feb6982b1c 100644 (file)
@@ -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 <QToolButton>
 #include <QWhatsThisClickedEvent>
 
-#include <iostream>
-
 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,9 +161,10 @@ 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);
@@ -195,7 +195,6 @@ DolphinMainWindow::DolphinMainWindow() :
 
     auto hamburgerMenu = static_cast<KHamburgerMenu *>(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: <shortcut>Ctrl+X</shortcut>, "
         "<shortcut>Ctrl+C</shortcut> and <shortcut>Ctrl+V</shortcut>.</para>");
     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 <emphasis>clipboard</emphasis>.<nl/>"
         "Use the <emphasis>Paste</emphasis> 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 <emphasis>clipboard</emphasis>."
         "<nl/>Use the <emphasis>Paste</emphasis> 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 <emphasis>active</emphasis> 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 <emphasis>active</emphasis> view to the inactive split view."));
     moveToOtherViewAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-cut")));
@@ -1676,10 +1679,10 @@ void DolphinMainWindow::setupActions()
     // So in a way "Select" here is used to mean both "Select files" and also "Select what to do" but mostly the first.
     // 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", "<para>This application doesn't know which files or folders should be acted on, "
-        "unless they are <emphasis>selected</emphasis> first. Press this to toggle the <emphasis>Selection Mode</emphasis> which makes selecting and deselecting as "
-        "easy as pressing an item once.</para><para>While in this mode, a quick access bar at the bottom shows all the available actions for the current "
-        "selection of items.</para>"));
+    toggleSelectionModeAction->setWhatsThis(xi18nc("@info:whatsthis", "<para>This application only knows which files or folders should be acted on if they are"
+        " <emphasis>selected</emphasis> first. Press this to toggle a <emphasis>Selection Mode</emphasis> which makes selecting and deselecting as easy as "
+        "pressing an item once.</para><para>While in this mode, a quick access bar at the bottom shows available actions for the currently selected items."
+        "</para>"));
     toggleSelectionModeAction->setIcon(QIcon::fromTheme(QStringLiteral("quickwizard")));
     toggleSelectionModeAction->setCheckable(true);
     actionCollection()->setDefaultShortcut(toggleSelectionModeAction, Qt::Key_Space );
@@ -1690,7 +1693,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 +2235,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 +2251,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