From 26acdb7c77d0a54ae14f139652fe87d5a92d8589 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Wed, 25 Feb 2009 20:53:17 +0000 Subject: Provide a basic UI for the "Services" settings dialog. It's open yet whether installing services by the internet will make it into Dolphin/Konqueror for KDE 4.3, but at least turning off services (without deinstalling applications...) will be supported. svn path=/trunk/KDE/kdebase/apps/; revision=931854 --- src/settings/servicessettingspage.cpp | 68 ++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 13 deletions(-) (limited to 'src/settings/servicessettingspage.cpp') diff --git a/src/settings/servicessettingspage.cpp b/src/settings/servicessettingspage.cpp index 09a1999d9..1fd66b645 100644 --- a/src/settings/servicessettingspage.cpp +++ b/src/settings/servicessettingspage.cpp @@ -19,18 +19,35 @@ #include "servicessettingspage.h" -#include "dolphinsettings.h" - -#include "dolphin_generalsettings.h" - -#include +#include +#include #include -#include +#include +#include +#include + +#include +#include +#include +#include ServicesSettingsPage::ServicesSettingsPage(QWidget* parent) : - SettingsPageBase(parent) + SettingsPageBase(parent), + m_initialized(false), + m_servicesList(0) { - loadSettings(); + QVBoxLayout* topLayout = new QVBoxLayout(this); + + QLabel* label = new QLabel(i18nc("@label:textbox", + "Configure which services should " + "be shown in the context menu."), this); + + m_servicesList = new QListWidget(this); + m_servicesList->setSortingEnabled(true); + m_servicesList->setSelectionMode(QAbstractItemView::NoSelection); + + topLayout->addWidget(label); + topLayout->addWidget(m_servicesList); } ServicesSettingsPage::~ServicesSettingsPage() @@ -43,14 +60,39 @@ void ServicesSettingsPage::applySettings() void ServicesSettingsPage::restoreDefaults() { - GeneralSettings* settings = DolphinSettings::instance().generalSettings(); - settings->useDefaults(true); - loadSettings(); - settings->useDefaults(false); + const int count = m_servicesList->count(); + for (int i = 0; i < count; ++i) { + QListWidgetItem* item = m_servicesList->item(i); + item->setCheckState(Qt::Checked); + } } -void ServicesSettingsPage::loadSettings() +bool ServicesSettingsPage::event(QEvent* event) { + if ((event->type() == QEvent::Polish) && !m_initialized) { + QMetaObject::invokeMethod(this, "loadServices", Qt::QueuedConnection); + m_initialized = true; + } + return SettingsPageBase::event(event); +} + +void ServicesSettingsPage::loadServices() +{ + const KService::List entries = KServiceTypeTrader::self()->query("KonqPopupMenu/Plugin"); + foreach (const KSharedPtr& service, entries) { + const QString file = KStandardDirs::locate("services", service->entryPath()); + const QList serviceActions = + KDesktopFileActions::userDefinedServices(file, true); + + foreach (const KServiceAction& action, serviceActions) { + if (!action.noDisplay() && !action.isSeparator()) { + QListWidgetItem* item = new QListWidgetItem(KIcon(action.icon()), + action.text(), + m_servicesList); + item->setCheckState(Qt::Checked); + } + } + } } #include "servicessettingspage.moc" -- cgit v1.3