X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/2c8adb10ec303a890bfef55b7316efc9b30c9361..1826f905d706925456763394de17294bcb6d1c35:/src/settings/contextmenu/contextmenusettingspage.cpp diff --git a/src/settings/contextmenu/contextmenusettingspage.cpp b/src/settings/contextmenu/contextmenusettingspage.cpp index 548e3e049..a1fada2ad 100644 --- a/src/settings/contextmenu/contextmenusettingspage.cpp +++ b/src/settings/contextmenu/contextmenusettingspage.cpp @@ -6,78 +6,69 @@ #include "contextmenusettingspage.h" -#include "dolphin_generalsettings.h" -#include "dolphin_versioncontrolsettings.h" #include "dolphin_contextmenusettings.h" -#include "settings/serviceitemdelegate.h" -#include "settings/servicemodel.h" +#include "dolphin_versioncontrolsettings.h" #include "global.h" +#include "settings/servicemodel.h" #include -#include #include #include #include #include #include -#include -#include +#include +#include +#include -#include -#include -#if KNEWSTUFF_VERSION >= QT_VERSION_CHECK(5, 91, 0) #include -#else -#include -#endif +#include +#include #include #include +#include #include #include #include #include -#include -#include namespace { - const bool ShowDeleteDefault = false; - const char VersionControlServicePrefix[] = "_version_control_"; - const char DeleteService[] = "_delete"; - const char CopyToMoveToService[] ="_copy_to_move_to"; +const bool ShowDeleteDefault = false; +const char VersionControlServicePrefix[] = "_version_control_"; +const char DeleteService[] = "_delete"; +const char CopyToMoveToService[] = "_copy_to_move_to"; - bool laterSelected = false; +bool laterSelected = false; } -ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent, - const KActionCollection* actions, - const QStringList& actionIds) : - SettingsPageBase(parent), - m_initialized(false), - m_serviceModel(nullptr), - m_sortModel(nullptr), - m_listView(nullptr), - m_enabledVcsPlugins(), - m_actions(actions), - m_actionIds(actionIds) +ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget *parent, const KActionCollection *actions, const QStringList &actionIds) + : SettingsPageBase(parent) + , m_initialized(false) + , m_serviceModel(nullptr) + , m_sortModel(nullptr) + , m_listView(nullptr) + , m_enabledVcsPlugins() + , m_actions(actions) + , m_actionIds(actionIds) { - QVBoxLayout* topLayout = new QVBoxLayout(this); + QVBoxLayout *topLayout = new QVBoxLayout(this); - QLabel* label = new QLabel(i18nc("@label:textbox", + QLabel *label = new QLabel(i18nc("@label:textbox", "Select which services should " - "be shown in the context menu:"), this); + "be shown in the context menu:"), + this); label->setWordWrap(true); m_searchLineEdit = new QLineEdit(this); - m_searchLineEdit->setPlaceholderText(i18nc("@label:textbox", "Search...")); - connect(m_searchLineEdit, &QLineEdit::textChanged, this, [this](const QString &filter){ + m_searchLineEdit->setPlaceholderText(i18nc("@label:textbox", "Search…")); + connect(m_searchLineEdit, &QLineEdit::textChanged, this, [this](const QString &filter) { m_sortModel->setFilterFixedString(filter); }); m_listView = new QListView(this); QScroller::grabGesture(m_listView->viewport(), QScroller::TouchGesture); - auto *delegate = new ServiceItemDelegate(m_listView, m_listView); m_serviceModel = new ServiceModel(this); m_sortModel = new QSortFilterProxyModel(this); m_sortModel->setSourceModel(m_serviceModel); @@ -86,7 +77,6 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent, m_sortModel->setFilterRole(Qt::DisplayRole); m_sortModel->setFilterCaseSensitivity(Qt::CaseInsensitive); m_listView->setModel(m_sortModel); - m_listView->setItemDelegate(delegate); m_listView->setVerticalScrollMode(QListView::ScrollPerPixel); connect(m_listView, &QListView::clicked, this, &ContextMenuSettingsPage::changed); @@ -95,19 +85,13 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent, topLayout->addWidget(m_listView); #ifndef Q_OS_WIN -#if KNEWSTUFF_VERSION >= QT_VERSION_CHECK(5, 91, 0) using NewStuffButton = KNSWidgets::Button; -#else - using NewStuffButton = KNS3::Button; -#endif // KNEWSTUFF_VERSION - auto *downloadButton = new NewStuffButton(i18nc("@action:button", "Download New Services..."), - QStringLiteral("servicemenu.knsrc"), - this); + auto *downloadButton = new NewStuffButton(i18nc("@action:button", "Download New Services…"), QStringLiteral("servicemenu.knsrc"), this); connect(downloadButton, &NewStuffButton::dialogFinished, this, [this](const auto &changedEntries) { - if (!changedEntries.isEmpty()) { - m_serviceModel->clear(); - loadServices(); - } + if (!changedEntries.isEmpty()) { + m_serviceModel->clear(); + loadServices(); + } }); topLayout->addWidget(downloadButton); #endif // Q_OS_WIN @@ -116,10 +100,11 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent, std::sort(m_enabledVcsPlugins.begin(), m_enabledVcsPlugins.end()); } -ContextMenuSettingsPage::~ContextMenuSettingsPage() { +ContextMenuSettingsPage::~ContextMenuSettingsPage() +{ } -bool ContextMenuSettingsPage::entryVisible(const QString& id) +bool ContextMenuSettingsPage::entryVisible(const QString &id) { if (id == "add_to_places") { return ContextMenuSettings::showAddToPlaces(); @@ -131,17 +116,23 @@ bool ContextMenuSettingsPage::entryVisible(const QString& id) return ContextMenuSettings::showOpenInNewTab(); } else if (id == "open_in_new_window") { return ContextMenuSettings::showOpenInNewWindow(); + } else if (id == "open_in_split_view") { + return ContextMenuSettings::showOpenInSplitView(); } else if (id == "copy_location") { return ContextMenuSettings::showCopyLocation(); } else if (id == "duplicate") { return ContextMenuSettings::showDuplicateHere(); } else if (id == "open_terminal_here") { return ContextMenuSettings::showOpenTerminal(); + } else if (id == "copy_to_inactive_split_view") { + return ContextMenuSettings::showCopyToOtherSplitView(); + } else if (id == "move_to_inactive_split_view") { + return ContextMenuSettings::showMoveToOtherSplitView(); } return false; } -void ContextMenuSettingsPage::setEntryVisible(const QString& id, bool visible) +void ContextMenuSettingsPage::setEntryVisible(const QString &id, bool visible) { if (id == "add_to_places") { ContextMenuSettings::setShowAddToPlaces(visible); @@ -153,12 +144,18 @@ void ContextMenuSettingsPage::setEntryVisible(const QString& id, bool visible) ContextMenuSettings::setShowOpenInNewTab(visible); } else if (id == "open_in_new_window") { ContextMenuSettings::setShowOpenInNewWindow(visible); + } else if (id == "open_in_split_view") { + return ContextMenuSettings::setShowOpenInSplitView(visible); } else if (id == "copy_location") { ContextMenuSettings::setShowCopyLocation(visible); } else if (id == "duplicate") { ContextMenuSettings::setShowDuplicateHere(visible); } else if (id == "open_terminal_here") { ContextMenuSettings::setShowOpenTerminal(visible); + } else if (id == "copy_to_inactive_split_view") { + ContextMenuSettings::setShowCopyToOtherSplitView(visible); + } else if (id == "move_to_inactive_split_view") { + ContextMenuSettings::setShowMoveToOtherSplitView(visible); } } @@ -173,15 +170,14 @@ void ContextMenuSettingsPage::applySettings() QStringList enabledPlugins; - const QAbstractItemModel *model = m_listView->model(); - for (int i = 0; i < model->rowCount(); ++i) { - const QModelIndex index = model->index(i, 0); - const QString service = model->data(index, ServiceModel::DesktopEntryNameRole).toString(); - const bool checked = model->data(index, Qt::CheckStateRole).toBool(); + for (int i = 0; i < m_serviceModel->rowCount(); ++i) { + const QModelIndex index = m_serviceModel->index(i, 0); + const QString service = m_serviceModel->data(index, ServiceModel::DesktopEntryNameRole).toString(); + const bool checked = m_serviceModel->data(index, Qt::CheckStateRole).value() == Qt::Checked; if (service.startsWith(VersionControlServicePrefix)) { if (checked) { - enabledPlugins.append(model->data(index, Qt::DisplayRole).toString()); + enabledPlugins.append(m_serviceModel->data(index, Qt::DisplayRole).toString()); } } else if (service == QLatin1String(DeleteService)) { KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig(QStringLiteral("kdeglobals"), KConfig::NoGlobals); @@ -206,14 +202,15 @@ void ContextMenuSettingsPage::applySettings() VersionControlSettings::self()->save(); if (!laterSelected) { - KMessageBox::ButtonCode promptRestart = KMessageBox::questionYesNo(window(), - i18nc("@info", "Dolphin must be restarted to apply the " - "updated version control system settings."), - i18nc("@info", "Restart now?"), - KGuiItem(QApplication::translate("KStandardGuiItem", "&Restart"), QStringLiteral("dialog-restart")), - KGuiItem(QApplication::translate("KStandardGuiItem", "&Later"), QStringLiteral("dialog-later")) - ); - if (promptRestart == KMessageBox::ButtonCode::Yes) { + KMessageBox::ButtonCode promptRestart = + KMessageBox::questionTwoActions(window(), + i18nc("@info", + "Dolphin must be restarted to apply the " + "updated version control system settings."), + i18nc("@info", "Restart now?"), + KGuiItem(QApplication::translate("KStandardGuiItem", "&Restart"), QStringLiteral("dialog-restart")), + KGuiItem(QApplication::translate("KStandardGuiItem", "&Later"), QStringLiteral("dialog-later"))); + if (promptRestart == KMessageBox::ButtonCode::PrimaryAction) { Dolphin::openNewWindow(); qApp->quit(); } else { @@ -225,19 +222,17 @@ void ContextMenuSettingsPage::applySettings() void ContextMenuSettingsPage::restoreDefaults() { - QAbstractItemModel* model = m_listView->model(); - for (int i = 0; i < model->rowCount(); ++i) { - const QModelIndex index = model->index(i, 0); - const QString service = model->data(index, ServiceModel::DesktopEntryNameRole).toString(); - - const bool checked = !service.startsWith(VersionControlServicePrefix) - && service != QLatin1String(DeleteService) - && service != QLatin1String(CopyToMoveToService); - model->setData(index, checked, Qt::CheckStateRole); + for (int i = 0; i < m_serviceModel->rowCount(); ++i) { + const QModelIndex index = m_serviceModel->index(i, 0); + const QString service = m_serviceModel->data(index, ServiceModel::DesktopEntryNameRole).toString(); + + const bool checked = + !service.startsWith(VersionControlServicePrefix) && service != QLatin1String(DeleteService) && service != QLatin1String(CopyToMoveToService); + m_serviceModel->setData(index, checked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); } } -void ContextMenuSettingsPage::showEvent(QShowEvent* event) +void ContextMenuSettingsPage::showEvent(QShowEvent *event) { if (!event->spontaneous() && !m_initialized) { loadServices(); @@ -247,10 +242,7 @@ void ContextMenuSettingsPage::showEvent(QShowEvent* event) // Add "Show 'Delete' command" as service KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig(QStringLiteral("kdeglobals"), KConfig::IncludeGlobals); KConfigGroup configGroup(globalConfig, "KDE"); - addRow(QStringLiteral("edit-delete"), - i18nc("@option:check", "Delete"), - DeleteService, - configGroup.readEntry("ShowDeleteCommand", ShowDeleteDefault)); + addRow(QStringLiteral("edit-delete"), i18nc("@option:check", "Delete"), DeleteService, configGroup.readEntry("ShowDeleteCommand", ShowDeleteDefault)); // Add "Show 'Copy To' and 'Move To' commands" as service addRow(QStringLiteral("edit-copy"), @@ -258,12 +250,12 @@ void ContextMenuSettingsPage::showEvent(QShowEvent* event) CopyToMoveToService, ContextMenuSettings::showCopyMoveMenu()); - if (m_actions){ + if (m_actions) { // Add other built-in actions - for (const QString& id : m_actionIds) { - const QAction* action = m_actions->action(id); + for (const QString &id : m_actionIds) { + const QAction *action = m_actions->action(id); if (action) { - addRow(action->icon().name(), action->text(), id, entryVisible(id)); + addRow(action->icon().name(), KLocalizedString::removeAcceleratorMarker(action->text()), id, entryVisible(id)); } } } @@ -283,12 +275,9 @@ void ContextMenuSettingsPage::loadServices() // Load generic services const auto locations = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kio/servicemenus"), QStandardPaths::LocateDirectory); QStringList files = KFileUtils::findAllUniqueFiles(locations); - const KService::List services = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin")); - for (const KService::Ptr &service : services) { - files << QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath()); - } - for (const auto &file : qAsConst(files)) { - const QList serviceActions = KDesktopFileActions::userDefinedServices(KService(file), true); + + for (const auto &file : std::as_const(files)) { + const QList serviceActions = KService(file).actions(); const KDesktopFile desktopFile(file); const QString subMenuName = desktopFile.desktopGroup().readEntry("X-KDE-Submenu"); @@ -298,29 +287,15 @@ void ContextMenuSettingsPage::loadServices() const bool addService = !action.noDisplay() && !action.isSeparator() && !isInServicesList(serviceName); if (addService) { - const QString itemName = subMenuName.isEmpty() - ? action.text() - : i18nc("@item:inmenu", "%1: %2", subMenuName, action.text()); + const QString itemName = subMenuName.isEmpty() ? action.text() : i18nc("@item:inmenu", "%1: %2", subMenuName, action.text()); const bool checked = showGroup.readEntry(serviceName, true); addRow(action.icon(), itemName, serviceName, checked); } } } - // Load service plugins, this is deprecated in KIO 5.82 -#if KIO_VERSION < QT_VERSION_CHECK(6, 0, 0) - const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("KFileItemAction/Plugin")); - for (const KService::Ptr &service : pluginServices) { - const QString desktopEntryName = service->desktopEntryName(); - if (!isInServicesList(desktopEntryName)) { - const bool checked = showGroup.readEntry(desktopEntryName, true); - addRow(service->icon(), service->name(), desktopEntryName, checked); - } - } -#endif - // Load JSON-based plugins that implement the KFileItemActionPlugin interface - const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf5/kfileitemaction")); + const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf6/kfileitemaction")); for (const auto &jsonMetadata : jsonPlugins) { const QString desktopEntryName = jsonMetadata.pluginId(); @@ -344,10 +319,7 @@ void ContextMenuSettingsPage::loadVersionControlSystems() const QVector plugins = KPluginMetaData::findPlugins(QStringLiteral("dolphin/vcs")); for (const auto &plugin : plugins) { const QString pluginName = plugin.name(); - addRow(QStringLiteral("code-class"), - pluginName, - VersionControlServicePrefix + pluginName, - enabledPlugins.contains(pluginName)); + addRow(QStringLiteral("code-class"), pluginName, VersionControlServicePrefix + pluginName, enabledPlugins.contains(pluginName)); loadedPlugins += pluginName; } @@ -365,10 +337,7 @@ bool ContextMenuSettingsPage::isInServicesList(const QString &service) const return false; } -void ContextMenuSettingsPage::addRow(const QString &icon, - const QString &text, - const QString &value, - bool checked) +void ContextMenuSettingsPage::addRow(const QString &icon, const QString &text, const QString &value, bool checked) { m_serviceModel->insertRow(0); @@ -376,5 +345,7 @@ void ContextMenuSettingsPage::addRow(const QString &icon, m_serviceModel->setData(index, icon, Qt::DecorationRole); m_serviceModel->setData(index, text, Qt::DisplayRole); m_serviceModel->setData(index, value, ServiceModel::DesktopEntryNameRole); - m_serviceModel->setData(index, checked, Qt::CheckStateRole); + m_serviceModel->setData(index, checked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); } + +#include "moc_contextmenusettingspage.cpp"