From: Peter Penz Date: Wed, 25 Feb 2009 20:53:17 +0000 (+0000) Subject: Provide a basic UI for the "Services" settings dialog. It's open yet whether installi... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/26acdb7c77d0a54ae14f139652fe87d5a92d8589 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 --- 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" diff --git a/src/settings/servicessettingspage.h b/src/settings/servicessettingspage.h index a64602f13..ee1b16264 100644 --- a/src/settings/servicessettingspage.h +++ b/src/settings/servicessettingspage.h @@ -21,8 +21,7 @@ #include -class QLineEdit; -class QCheckBox; +class QListWidget; /** * @brief Page for the 'Services' settings of the Dolphin settings dialog. @@ -41,10 +40,15 @@ public: /** @see SettingsPageBase::restoreDefaults() */ virtual void restoreDefaults(); -private: - void loadSettings(); +protected: + virtual bool event(QEvent* event); + +private slots: + void loadServices(); private: + bool m_initialized; + QListWidget* m_servicesList; }; #endif