X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/b58a346be96f7d0973ed96e52c4cf95463ba244d..0464ea82a6850f58805bc4d6fc1df5369d83c3df:/src/views/dolphinviewactionhandler.cpp diff --git a/src/views/dolphinviewactionhandler.cpp b/src/views/dolphinviewactionhandler.cpp index 397ff5d5e..ce698a178 100644 --- a/src/views/dolphinviewactionhandler.cpp +++ b/src/views/dolphinviewactionhandler.cpp @@ -60,6 +60,7 @@ void DolphinViewActionHandler::setCurrentView(DolphinView *view) connect(view, &DolphinView::sortRoleChanged, this, &DolphinViewActionHandler::slotSortRoleChanged); connect(view, &DolphinView::zoomLevelChanged, this, &DolphinViewActionHandler::slotZoomLevelChanged); connect(view, &DolphinView::writeStateChanged, this, &DolphinViewActionHandler::slotWriteStateChanged); + slotWriteStateChanged(view->isFolderWritable()); connect(view, &DolphinView::selectionModeChangeRequested, this, [this](bool enabled) { Q_EMIT selectionModeChangeTriggered(enabled); }); @@ -83,13 +84,19 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac newDirAction->setEnabled(false); // Will be enabled in slotWriteStateChanged(bool) if the current URL is writable connect(newDirAction, &QAction::triggered, this, &DolphinViewActionHandler::createDirectoryTriggered); + QAction *newFileAction = m_actionCollection->addAction(QStringLiteral("create_file")); + newFileAction->setText(i18nc("@action", "Create File…")); + newFileAction->setIcon(QIcon::fromTheme(QStringLiteral("document-new"))); + newFileAction->setEnabled(false); // Will be enabled in slotWriteStateChanged(bool) if the current URL is writable + connect(newFileAction, &QAction::triggered, this, &DolphinViewActionHandler::createFileTriggered); + // File menu auto renameAction = KStandardAction::renameFile(this, &DolphinViewActionHandler::slotRename, m_actionCollection); renameAction->setWhatsThis(xi18nc("@info:whatsthis", "This renames the " "items in your current selection.Renaming multiple items " - "at once amounts to their new names differing only in a number.")); + "at once results in their new names differing only in a number.")); auto trashAction = KStandardAction::moveToTrash(this, &DolphinViewActionHandler::slotTrashActivated, m_actionCollection); auto trashShortcuts = trashAction->shortcuts(); @@ -101,8 +108,8 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac trashAction->setWhatsThis(xi18nc("@info:whatsthis", "This moves the " "items in your current selection to the Trash" - ".The trash is a temporary storage where " - "items can be deleted from if disk space is needed.")); + ".The trash is a temporary storage location where " + "items can be deleted later if disk space is needed.")); auto deleteAction = KStandardAction::deleteFile(this, &DolphinViewActionHandler::slotDeleteItems, m_actionCollection); auto deleteShortcuts = deleteAction->shortcuts(); @@ -113,8 +120,8 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac } deleteAction->setWhatsThis(xi18nc("@info:whatsthis", "This deletes " - "the items in your current selection completely. They can " - "not be recovered by normal means.")); + "the items in your current selection permanently. They " + "cannot be recovered by normal means.")); // This action is useful for being enabled when KStandardAction::MoveToTrash should be // disabled and KStandardAction::DeleteFile is enabled (e.g. non-local files), so that Key_Del @@ -198,7 +205,7 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac compactAction->setWhatsThis(xi18nc("@info:whatsthis Compact view mode", "This switches to a compact view mode that lists the folders " "and files in columns with the names beside the icons." - "This helps to keep the overview in folders with many items.")); + "This helps to give you an overview in folders with many items.")); detailsAction->setWhatsThis(xi18nc("@info:whatsthis Details view mode", "This switches to a list view mode that focuses on folder " "and file details.Click on a detail in the column " @@ -206,16 +213,29 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac "way around. To select which details should be displayed click " "the header with the right mouse button.You can " "view the contents of a folder without leaving the current " - "location by clicking to the left of it. This way you can view " - "the contents of multiple folders in the same list.")); + "location by clicking the region to the left of it. This way you can " + "view the contents of multiple folders in the same list.")); KSelectAction *viewModeActions = m_actionCollection->add(QStringLiteral("view_mode")); - viewModeActions->setText(i18nc("@action:intoolbar", "View Mode")); + viewModeActions->setText(i18nc("@action:intoolbar", "Change View Mode")); + viewModeActions->setWhatsThis(xi18nc("@info:whatsthis View Mode Toolbutton", "This cycles through all view modes.")); viewModeActions->addAction(iconsAction); viewModeActions->addAction(compactAction); viewModeActions->addAction(detailsAction); viewModeActions->setToolBarMode(KSelectAction::MenuMode); + viewModeActions->setToolButtonPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup); connect(viewModeActions, &KSelectAction::actionTriggered, this, &DolphinViewActionHandler::slotViewModeActionTriggered); + connect(viewModeActions, &KSelectAction::triggered, this, [this, viewModeActions, iconsAction, compactAction, detailsAction]() { + // Loop through the actions when button is clicked + const auto currentAction = viewModeActions->currentAction(); + if (currentAction == iconsAction) { + slotViewModeActionTriggered(compactAction); + } else if (currentAction == compactAction) { + slotViewModeActionTriggered(detailsAction); + } else if (currentAction == detailsAction) { + slotViewModeActionTriggered(iconsAction); + } + }); QAction *zoomInAction = KStandardAction::zoomIn(this, &DolphinViewActionHandler::zoomIn, m_actionCollection); zoomInAction->setWhatsThis(i18nc("@info:whatsthis zoom in", "This increases the icon size.")); @@ -248,6 +268,7 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac "contents.For example the icons of images become scaled " "down versions of the images.")); showPreview->setIcon(QIcon::fromTheme(QStringLiteral("view-preview"))); + m_actionCollection->setDefaultShortcut(showPreview, QKeySequence(Qt::Key_F12)); connect(showPreview, &KToggleAction::triggered, this, &DolphinViewActionHandler::togglePreview); KToggleAction *sortFoldersFirst = m_actionCollection->add(QStringLiteral("folders_first")); @@ -318,11 +339,15 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac showHiddenFiles->setText(i18nc("@action:inmenu View", "Show Hidden Files")); showHiddenFiles->setWhatsThis(xi18nc("@info:whatsthis", "When " - "this is enabled hidden files and folders " + "this is enabled, hidden files and folders " "are visible. They will be displayed semi-transparent." - "Hidden items only differ from other ones in that their " - "name starts with a \".\". In general there is no need for " - "users to access them which is why they are hidden.")); + "Hidden items only differ from normal ones in that their " + "name starts with a dot (\".\"). Typically, there is no need for " + "users to access them, which is why they are hidden." + "Items can also be hidden if their names are listed in a text file " + "named \".hidden\". Files with the \"application/x-trash\" MIME type, " + "such as backup files, can also be hidden by enabling that setting in " + "Configure Dolphin > View > General.")); m_actionCollection->setDefaultShortcuts(showHiddenFiles, KStandardShortcut::showHideHiddenFiles()); connect(showHiddenFiles, &KToggleAction::triggered, this, &DolphinViewActionHandler::toggleShowHiddenFiles); @@ -333,6 +358,26 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac "This opens a window " "in which all folder view properties can be adjusted.")); connect(adjustViewProps, &QAction::triggered, this, &DolphinViewActionHandler::slotAdjustViewProperties); + + // View settings: the dropdown menu contains various view-related actions + KActionMenu *viewSettings = m_actionCollection->add(QStringLiteral("view_settings")); + viewSettings->setText(i18nc("@action:intoolbar", "View Settings")); + viewSettings->setWhatsThis( + xi18nc("@info:whatsthis View Settings Toolbutton", "This cycles through all view modes. The dropdown menu contains various view-related actions.")); + const auto actions = viewModeActions->actions(); + for (QAction *action : actions) { + viewSettings->addAction(action); + } + viewSettings->addSeparator(); + viewSettings->addAction(zoomMenu); + viewSettings->addAction(sortByActionMenu); + viewSettings->addAction(visibleRolesMenu); + viewSettings->addAction(showPreview); + viewSettings->addAction(showInGroups); + viewSettings->addAction(showHiddenFiles); + viewSettings->addAction(adjustViewProps); + viewSettings->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup); + connect(viewSettings, &KActionMenu::triggered, viewModeActions, &KSelectAction::triggered); } QActionGroup *DolphinViewActionHandler::createFileItemRolesActionGroup(const QString &groupPrefix) @@ -413,6 +458,9 @@ void DolphinViewActionHandler::slotViewModeActionTriggered(QAction *action) QAction *viewModeMenu = m_actionCollection->action(QStringLiteral("view_mode")); viewModeMenu->setIcon(action->icon()); + + QAction *viewSettingsAction = m_actionCollection->action(QStringLiteral("view_settings")); + viewSettingsAction->setIcon(action->icon()); } void DolphinViewActionHandler::slotRename() @@ -491,6 +539,9 @@ void DolphinViewActionHandler::updateViewActions() QAction *viewModeMenu = m_actionCollection->action(QStringLiteral("view_mode")); viewModeMenu->setIcon(viewModeAction->icon()); + + QAction *viewSettingsAction = m_actionCollection->action(QStringLiteral("view_settings")); + viewSettingsAction->setIcon(viewModeAction->icon()); } QAction *showPreviewAction = m_actionCollection->action(QStringLiteral("show_preview")); @@ -620,7 +671,9 @@ void DolphinViewActionHandler::slotHiddenFilesShownChanged(bool shown) void DolphinViewActionHandler::slotWriteStateChanged(bool isFolderWritable) { - m_actionCollection->action(QStringLiteral("create_dir"))->setEnabled(isFolderWritable && KProtocolManager::supportsMakeDir(currentView()->url())); + const bool supportsMakeDir = KProtocolManager::supportsMakeDir(currentView()->url()); + m_actionCollection->action(QStringLiteral("create_dir"))->setEnabled(isFolderWritable && supportsMakeDir); + m_actionCollection->action(QStringLiteral("create_file"))->setEnabled(isFolderWritable); } KToggleAction *DolphinViewActionHandler::iconsModeAction()