From 9ef8749a7f24dad3349a022340d12128e288a8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=C4=8Cuki=C4=87?= Date: Mon, 8 Oct 2007 21:50:38 +0000 Subject: [PATCH] Made recommended plugins configurable. The default 'Recommended by KDE' is removed and should be added to the default plasmarc file. Example plasmarc section: [Applet Browser] recommended.kde.icon=help-about-kde recommended.kde.caption=KDE recommended.kde.plugins=digital-clock recommended.debian.icon=debian-logo recommended.debian.caption=Debian recommended.debian.plugins=groupphoto svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=723162 --- appletbrowser.cpp | 45 +++++++++++++++---- appletbrowser/plasmaappletitemmodel.cpp | 59 +++++++++---------------- appletbrowser/plasmaappletitemmodel_p.h | 11 ++--- 3 files changed, 59 insertions(+), 56 deletions(-) diff --git a/appletbrowser.cpp b/appletbrowser.cpp index b2f6f85a0..8dc2c6932 100644 --- a/appletbrowser.cpp +++ b/appletbrowser.cpp @@ -21,6 +21,8 @@ #include #include +#include +#include #include "plasma/corona.h" @@ -38,17 +40,24 @@ public: : corona(co), containment(cont), appletList(0), - itemModel(q), + config("plasmarc"), + configGroup(&config, "Applet Browser"), + itemModel(q, &configGroup), filterModel(q) { - } Plasma::Corona *corona; Plasma::Containment *containment; KCategorizedItemsView *appletList; + + KConfig config; + KConfigGroup configGroup; + PlasmaAppletItemModel itemModel; KCategorizedItemsViewModels::DefaultFilterModel filterModel; + + }; AppletBrowser::AppletBrowser(Plasma::Corona * corona, QWidget * parent, Qt::WindowFlags f) @@ -81,17 +90,35 @@ void AppletBrowser::init() QAction* quit = KStandardAction::quit(qApp, SLOT(quit()), this); addAction(quit); - // Emblems - d->appletList->addEmblem(i18n("Recommended by KDE"), new KIcon("about-kde"), - KCategorizedItemsViewModels::Filter("recommended", true)); + d->filterModel.addFilter(i18n("All applets"), + KCategorizedItemsViewModels::Filter(), new KIcon("application-x-plasma")); + + // Recommended emblems and filters + QRegExp rx("recommended[.]([0-9A-Za-z]+)[.]caption"); + QMapIterator i(d->configGroup.entryMap()); + while (i.hasNext()) { + i.next(); + if (!rx.exactMatch(i.key())) continue; + kDebug() << "These are the key/vals in rc file " << rx.cap(1) << "\n"; + + QString id = rx.cap(1); + QString caption = d->configGroup.readEntry("recommended." + id + ".caption"); + QString icon = d->configGroup.readEntry("recommended." + id + ".icon"); + QString plugins = d->configGroup.readEntry("recommended." + id + ".plugins"); + + d->appletList->addEmblem(i18n("Recommended by %1", caption), new KIcon(icon), + KCategorizedItemsViewModels::Filter("recommended." + id, true)); + d->filterModel.addFilter(i18n("Recommended by %1", caption), + KCategorizedItemsViewModels::Filter("recommended." + id, true), new KIcon(icon)); + + //foreach (QString plugin, plugins.split(",")) {} + } + + // Other Emblems d->appletList->addEmblem(i18n("Used in past"), new KIcon("history"), KCategorizedItemsViewModels::Filter("used", true)); // Filters: Special - d->filterModel.addFilter(i18n("All applets"), - KCategorizedItemsViewModels::Filter(), new KIcon("application-x-plasma")); - d->filterModel.addFilter(i18n("Recommended by KDE"), - KCategorizedItemsViewModels::Filter("recommended", true), new KIcon("about-kde")); d->filterModel.addFilter(i18n("Favorites"), KCategorizedItemsViewModels::Filter("favorite", true), new KIcon("bookmark")); d->filterModel.addFilter(i18n("Used in past"), diff --git a/appletbrowser/plasmaappletitemmodel.cpp b/appletbrowser/plasmaappletitemmodel.cpp index 580611f89..f3bd795d2 100644 --- a/appletbrowser/plasmaappletitemmodel.cpp +++ b/appletbrowser/plasmaappletitemmodel.cpp @@ -19,26 +19,8 @@ #include "plasmaappletitemmodel_p.h" -PlasmaAppletItem::PlasmaAppletItem(QObject * parent, QString name, - QString pluginName, QString description, QString category, QIcon icon, - FilterFlags flags) : - QObject(parent) -{ - QMap attrs; - attrs.insert("name", QVariant(name)); - attrs.insert("pluginName", QVariant(pluginName)); - attrs.insert("description", QVariant(description)); - attrs.insert("category", QVariant(category)); - attrs.insert("favorite", flags & Favorite ? true : false); - attrs.insert("used", flags & Used ? true : false); - attrs.insert("recommended", flags & Recommended ? true : false); - setText(name + " - "+ description); - setData(QVariant(attrs)); - setIcon(icon); -} - PlasmaAppletItem::PlasmaAppletItem(QObject *parent, const KPluginInfo& info, - FilterFlags flags) : + FilterFlags flags, QMap * extraAttrs) : QObject(parent) { QMap attrs; @@ -48,7 +30,8 @@ PlasmaAppletItem::PlasmaAppletItem(QObject *parent, const KPluginInfo& info, attrs.insert("category", info.category()); attrs.insert("favorite", flags & Favorite ? true : false); attrs.insert("used", flags & Used ? true : false); - attrs.insert("recommended", flags & Recommended ? true : false); + //attrs.insert("recommended", flags & Recommended ? true : false); + if (extraAttrs) attrs.unite(* extraAttrs); setText(info.name() + " - "+ info.category()); setData(attrs); setIcon(KIcon(info.icon().isEmpty()?"application-x-plasma":info.icon())); @@ -82,30 +65,28 @@ bool PlasmaAppletItem::passesFiltering( return data().toMap()[filter.first] == filter.second; } -PlasmaAppletItemModel::PlasmaAppletItemModel(QObject * parent) : +PlasmaAppletItemModel::PlasmaAppletItemModel(QObject * parent, KConfigGroup * configGroup) : KCategorizedItemsViewModels::DefaultItemModel(parent) { - /* some test items that do have FilterFlags as well as overly long text - appendRow(new PlasmaAppletItem(this, - i18n("This is a very long name for an applet, isn't it?"), "null", - i18n("This is a Graphics applet whose description is even longer than it's title. And it was hard to achieve!"), - QString("graph"), - QIcon("/usr/share/icons/oxygen/64x64/apps/k3b.png"), PlasmaAppletItem::Used)); - appendRow(new PlasmaAppletItem(this, - i18n("This is a very long name for another applet, isn't it?"), "null", - i18n("This is a Graphics applet whose description is even longer than it's title. And it was hard to achieve!"), - QString("graph"), - QIcon("/usr/share/icons/oxygen/64x64/apps/kfind.png"), PlasmaAppletItem::Used | PlasmaAppletItem::Recommended)); - appendRow(new PlasmaAppletItem(this, - i18n("This is my favorite item!"), "null", - i18n("This is a Graphics applet whose description is even longer than it's title. And it was hard to achieve!"), - QString("graph"), - QIcon("/usr/share/icons/oxygen/64x64/apps/okular.png"), PlasmaAppletItem::Favorite | PlasmaAppletItem::Recommended)); - */ + + // Recommended emblems and filters + QRegExp rx("recommended[.]([0-9A-Za-z]+)[.]plugins"); + QMapIterator i(configGroup->entryMap()); + QMap < QString, QMap < QString, QVariant > > extraPluginAttrs; + while (i.hasNext()) { + i.next(); + if (!rx.exactMatch(i.key())) continue; + QString id = rx.cap(1); + + foreach (QString plugin, i.value().split(",")) { + extraPluginAttrs[plugin]["recommended." + id] = true; + } + } //TODO: get recommended, favorit, used, etc out of knownApplets() foreach (const KPluginInfo& info, Plasma::Applet::knownApplets()) { - appendRow(new PlasmaAppletItem(this, info)); + kDebug() << info.pluginName() << " is the name of the plugin\n"; + appendRow(new PlasmaAppletItem(this, info, PlasmaAppletItem::NoFilter, &(extraPluginAttrs[info.pluginName()]))); } } diff --git a/appletbrowser/plasmaappletitemmodel_p.h b/appletbrowser/plasmaappletitemmodel_p.h index 041063934..6b5192cb6 100644 --- a/appletbrowser/plasmaappletitemmodel_p.h +++ b/appletbrowser/plasmaappletitemmodel_p.h @@ -35,17 +35,12 @@ class PlasmaAppletItem : public KCategorizedItemsViewModels::AbstractItem, public: enum FilterFlag {NoFilter = 0, Favorite = 1, - Used = 2, - Recommended = 4}; + Used = 2}; Q_DECLARE_FLAGS(FilterFlags, FilterFlag) - PlasmaAppletItem(QObject * parent, QString name, QString pluginName, - QString description, QString category, QIcon icon, - FilterFlags flags = NoFilter); - PlasmaAppletItem(QObject *parent, const KPluginInfo& info, - FilterFlags flags = NoFilter); + FilterFlags flags = NoFilter, QMap * extraAttrs = NULL); virtual QString name() const; QString pluginName() const; @@ -59,7 +54,7 @@ class PlasmaAppletItemModel : public KCategorizedItemsViewModels::DefaultItemModel { public: - PlasmaAppletItemModel(QObject * parent = 0); + PlasmaAppletItemModel(QObject * parent = 0, KConfigGroup * configGroup = NULL); QStringList mimeTypes() const;