X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/2701ec1c25dfaa25852fffeaf79eef1185cd5c42..d64bbc333c5014fad116efc98b77cf3268fc07e0:/src/settings/servicessettingspage.cpp diff --git a/src/settings/servicessettingspage.cpp b/src/settings/servicessettingspage.cpp index a58df2096..98b26e358 100644 --- a/src/settings/servicessettingspage.cpp +++ b/src/settings/servicessettingspage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Peter Penz * + * Copyright (C) 2009-2010 by Peter Penz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -19,30 +19,42 @@ #include "servicessettingspage.h" +#include "dolphin_versioncontrolsettings.h" + #include #include +#include #include #include #include +#include +#include #include #include #include -#include +#include +#include +#include #include #include -#include +#include +#include ServicesSettingsPage::ServicesSettingsPage(QWidget* parent) : SettingsPageBase(parent), m_initialized(false), - m_servicesList(0) + m_servicesList(0), + m_vcsGroupBox(0), + m_vcsPluginsMap(), + m_enabledVcsPlugins() { QVBoxLayout* topLayout = new QVBoxLayout(this); QLabel* label = new QLabel(i18nc("@label:textbox", "Configure which services should " "be shown in the context menu."), this); + label->setWordWrap(true); m_servicesList = new QListWidget(this); m_servicesList->setSortingEnabled(true); @@ -50,8 +62,22 @@ ServicesSettingsPage::ServicesSettingsPage(QWidget* parent) : connect(m_servicesList, SIGNAL(itemClicked(QListWidgetItem*)), this, SIGNAL(changed())); + KNS3::Button* downloadButton = new KNS3::Button(i18nc("@action:button", "Download New Services..."), + "servicemenu.knsrc", + this); + connect(downloadButton, SIGNAL(dialogFinished(KNS3::Entry::List)), this, SLOT(loadServices())); + + m_vcsGroupBox = new QGroupBox(i18nc("@title:group", "Version Control Systems"), this); + // Only show the version control group box, if a version + // control system could be found (see loadVersionControlSystems()) + m_vcsGroupBox->hide(); + topLayout->addWidget(label); topLayout->addWidget(m_servicesList); + topLayout->addWidget(downloadButton); + topLayout->addWidget(m_vcsGroupBox); + + m_enabledVcsPlugins = VersionControlSettings::enabledPlugins(); } ServicesSettingsPage::~ServicesSettingsPage() @@ -60,6 +86,7 @@ ServicesSettingsPage::~ServicesSettingsPage() void ServicesSettingsPage::applySettings() { + // Apply service menu settings KConfig config("kservicemenurc", KConfig::NoGlobals); KConfigGroup showGroup = config.group("Show"); @@ -72,6 +99,27 @@ void ServicesSettingsPage::applySettings() } showGroup.sync(); + + // Apply version control settings + QStringList enabledPlugins; + QMap::const_iterator it = m_vcsPluginsMap.constBegin(); + while (it != m_vcsPluginsMap.constEnd()) { + if (it.value()->isChecked()) { + enabledPlugins.append(it.key()); + } + ++it; + } + + if (m_enabledVcsPlugins != enabledPlugins) { + VersionControlSettings::setEnabledPlugins(enabledPlugins); + VersionControlSettings::self()->writeConfig(); + + KMessageBox::information(window(), + i18nc("@info", "Dolphin must be restarted to apply the " + "updated version control systems settings."), + QString(), // default title + QLatin1String("ShowVcsRestartInformation")); + } } void ServicesSettingsPage::restoreDefaults() @@ -83,13 +131,14 @@ void ServicesSettingsPage::restoreDefaults() } } -bool ServicesSettingsPage::event(QEvent* event) +void ServicesSettingsPage::showEvent(QShowEvent* event) { - if ((event->type() == QEvent::Polish) && !m_initialized) { + if (!event->spontaneous() && !m_initialized) { QMetaObject::invokeMethod(this, "loadServices", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, "loadVersionControlSystems", Qt::QueuedConnection); m_initialized = true; } - return SettingsPageBase::event(event); + SettingsPageBase::showEvent(event); } void ServicesSettingsPage::loadServices() @@ -103,6 +152,9 @@ void ServicesSettingsPage::loadServices() const QList serviceActions = KDesktopFileActions::userDefinedServices(file, true); + KDesktopFile desktopFile(file); + const QString subMenuName = desktopFile.desktopGroup().readEntry("X-KDE-Submenu"); + foreach (const KServiceAction& action, serviceActions) { const QString service = action.name(); const bool addService = !action.noDisplay() @@ -110,8 +162,11 @@ void ServicesSettingsPage::loadServices() && !isInServicesList(service); if (addService) { + const QString itemName = subMenuName.isEmpty() + ? action.text() + : i18nc("@item:inmenu", "%1: %2", subMenuName, action.text()); QListWidgetItem* item = new QListWidgetItem(KIcon(action.icon()), - action.text(), + itemName, m_servicesList); item->setData(Qt::UserRole, service); const bool show = showGroup.readEntry(service, true); @@ -121,6 +176,37 @@ void ServicesSettingsPage::loadServices() } } +void ServicesSettingsPage::loadVersionControlSystems() +{ + const QStringList enabledPlugins = VersionControlSettings::enabledPlugins(); + + // Create a checkbox for each available version control plugin + const KService::List pluginServices = KServiceTypeTrader::self()->query("FileViewVersionControlPlugin"); + for (KService::List::ConstIterator it = pluginServices.constBegin(); it != pluginServices.constEnd(); ++it) { + const QString pluginName = (*it)->name(); + QCheckBox* checkBox = new QCheckBox(pluginName, m_vcsGroupBox); + checkBox->setChecked(enabledPlugins.contains(pluginName)); + connect(checkBox, SIGNAL(clicked()), this, SIGNAL(changed())); + m_vcsPluginsMap.insert(pluginName, checkBox); + } + + // Add the checkboxes into a grid layout of 2 columns + QGridLayout* layout = new QGridLayout(m_vcsGroupBox); + const int maxRows = (m_vcsPluginsMap.count() + 1) / 2; + + int index = 0; + QMap::const_iterator it = m_vcsPluginsMap.constBegin(); + while (it != m_vcsPluginsMap.constEnd()) { + const int column = index / maxRows; + const int row = index % maxRows; + layout->addWidget(it.value(), row, column); + ++it; + ++index; + } + + m_vcsGroupBox->setVisible(!m_vcsPluginsMap.isEmpty()); +} + bool ServicesSettingsPage::isInServicesList(const QString& service) const { const int count = m_servicesList->count();