+}
+
+void DolphinPart::createActions()
+{
+ // Edit menu
+
+ m_newFileMenu = new DolphinNewFileMenu(actionCollection(), this);
+ m_newFileMenu->setParentWidget(widget());
+ connect(m_newFileMenu->menu(), &QMenu::aboutToShow,
+ this, &DolphinPart::updateNewMenu);
+
+ QAction *editMimeTypeAction = actionCollection()->addAction( QStringLiteral("editMimeType") );
+ editMimeTypeAction->setText( i18nc("@action:inmenu Edit", "&Edit File Type..." ) );
+ connect(editMimeTypeAction, &QAction::triggered, this, &DolphinPart::slotEditMimeType);
+
+ QAction* selectItemsMatching = actionCollection()->addAction(QStringLiteral("select_items_matching"));
+ selectItemsMatching->setText(i18nc("@action:inmenu Edit", "Select Items Matching..."));
+ actionCollection()->setDefaultShortcut(selectItemsMatching, Qt::CTRL | Qt::Key_S);
+ connect(selectItemsMatching, &QAction::triggered, this, &DolphinPart::slotSelectItemsMatchingPattern);
+
+ QAction* unselectItemsMatching = actionCollection()->addAction(QStringLiteral("unselect_items_matching"));
+ unselectItemsMatching->setText(i18nc("@action:inmenu Edit", "Unselect Items Matching..."));
+ connect(unselectItemsMatching, &QAction::triggered, this, &DolphinPart::slotUnselectItemsMatchingPattern);
+
+ actionCollection()->addAction(KStandardAction::SelectAll, QStringLiteral("select_all"), m_view, SLOT(selectAll()));
+
+ QAction* unselectAll = actionCollection()->addAction(QStringLiteral("unselect_all"));
+ unselectAll->setText(i18nc("@action:inmenu Edit", "Unselect All"));
+ connect(unselectAll, &QAction::triggered, m_view, &DolphinView::clearSelection);
+
+ QAction* invertSelection = actionCollection()->addAction(QStringLiteral("invert_selection"));
+ invertSelection->setText(i18nc("@action:inmenu Edit", "Invert Selection"));
+ actionCollection()->setDefaultShortcut(invertSelection, Qt::CTRL | Qt::SHIFT | Qt::Key_A);
+ connect(invertSelection, &QAction::triggered, m_view, &DolphinView::invertSelection);
+
+ // View menu: all done by DolphinViewActionHandler
+
+ // Go menu
+
+ QActionGroup* goActionGroup = new QActionGroup(this);
+ connect(goActionGroup, &QActionGroup::triggered,
+ this, &DolphinPart::slotGoTriggered);
+
+ createGoAction("go_applications", "start-here-kde",
+ i18nc("@action:inmenu Go", "App&lications"), QStringLiteral("programs:/"),
+ goActionGroup);
+ createGoAction("go_network_folders", "folder-remote",
+ i18nc("@action:inmenu Go", "&Network Folders"), QStringLiteral("remote:/"),
+ goActionGroup);
+ createGoAction("go_settings", "preferences-system",
+ i18nc("@action:inmenu Go", "Sett&ings"), QStringLiteral("settings:/"),
+ goActionGroup);
+ createGoAction("go_trash", "user-trash",
+ i18nc("@action:inmenu Go", "Trash"), QStringLiteral("trash:/"),
+ goActionGroup);
+ createGoAction("go_autostart", "",
+ i18nc("@action:inmenu Go", "Autostart"), QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/autostart",
+ goActionGroup);
+
+ // Tools menu
+ m_findFileAction = actionCollection()->addAction(QStringLiteral("find_file"));
+ m_findFileAction->setText(i18nc("@action:inmenu Tools", "Find File..."));
+ actionCollection()->setDefaultShortcut(m_findFileAction, Qt::CTRL | Qt::Key_F);
+ m_findFileAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-find")));
+ connect(m_findFileAction, &QAction::triggered, this, &DolphinPart::slotFindFile);
+
+ if (KAuthorized::authorize(QStringLiteral("shell_access"))) {
+ m_openTerminalAction = actionCollection()->addAction(QStringLiteral("open_terminal"));
+ m_openTerminalAction->setIcon(QIcon::fromTheme(QStringLiteral("utilities-terminal")));
+ m_openTerminalAction->setText(i18nc("@action:inmenu Tools", "Open &Terminal"));
+ connect(m_openTerminalAction, &QAction::triggered, this, &DolphinPart::slotOpenTerminal);
+ actionCollection()->setDefaultShortcut(m_openTerminalAction, Qt::Key_F4);
+ }
+}
+
+void DolphinPart::createGoAction(const char* name, const char* iconName,
+ const QString& text, const QString& url,
+ QActionGroup* actionGroup)
+{
+ QAction* action = actionCollection()->addAction(name);
+ action->setIcon(QIcon::fromTheme(iconName));
+ action->setText(text);
+ action->setData(url);
+ action->setActionGroup(actionGroup);
+}
+
+void DolphinPart::slotGoTriggered(QAction* action)
+{
+ const QString url = action->data().toString();
+ emit m_extension->openUrlRequest(QUrl(url));
+}
+
+void DolphinPart::slotSelectionChanged(const KFileItemList& selection)
+{
+ const bool hasSelection = !selection.isEmpty();
+
+ QAction* renameAction = actionCollection()->action(KStandardAction::name(KStandardAction::RenameFile));
+ QAction* moveToTrashAction = actionCollection()->action(KStandardAction::name(KStandardAction::MoveToTrash));
+ QAction* deleteAction = actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile));
+ QAction* editMimeTypeAction = actionCollection()->action(QStringLiteral("editMimeType"));
+ QAction* propertiesAction = actionCollection()->action(QStringLiteral("properties"));
+ QAction* deleteWithTrashShortcut = actionCollection()->action(QStringLiteral("delete_shortcut")); // see DolphinViewActionHandler
+
+ if (!hasSelection) {
+ stateChanged(QStringLiteral("has_no_selection"));
+
+ emit m_extension->enableAction("cut", false);
+ emit m_extension->enableAction("copy", false);
+ deleteWithTrashShortcut->setEnabled(false);
+ editMimeTypeAction->setEnabled(false);
+ } else {
+ stateChanged(QStringLiteral("has_selection"));
+
+ // TODO share this code with DolphinMainWindow::updateEditActions (and the desktop code)
+ // in libkonq
+ KFileItemListProperties capabilities(selection);
+ const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving();
+
+ renameAction->setEnabled(capabilities.supportsMoving());
+ moveToTrashAction->setEnabled(enableMoveToTrash);
+ deleteAction->setEnabled(capabilities.supportsDeleting());
+ deleteWithTrashShortcut->setEnabled(capabilities.supportsDeleting() && !enableMoveToTrash);
+ editMimeTypeAction->setEnabled(true);
+ propertiesAction->setEnabled(true);
+ emit m_extension->enableAction("cut", capabilities.supportsMoving());
+ emit m_extension->enableAction("copy", true);
+ }
+}
+
+void DolphinPart::updatePasteAction()
+{
+ QPair<bool, QString> pasteInfo = m_view->pasteInfo();
+ emit m_extension->enableAction( "paste", pasteInfo.first );
+ emit m_extension->setActionText( "paste", pasteInfo.second );