• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

libplasma

plasmaappletitemmodel.cpp

Go to the documentation of this file.
00001 /*
00002  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde@gmail.com>
00003  *
00004  *   This program is free software; you can redistribute it and/or modify
00005  *   it under the terms of the GNU Library/Lesser General Public License
00006  *   version 2, or (at your option) any later version, as published by the
00007  *   Free Software Foundation
00008  *
00009  *   This program is distributed in the hope that it will be useful,
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *   GNU General Public License for more details
00013  *
00014  *   You should have received a copy of the GNU Library/Lesser General Public
00015  *   License along with this program; if not, write to the
00016  *   Free Software Foundation, Inc.,
00017  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
00018  */
00019 
00020 #include "plasmaappletitemmodel_p.h"
00021 
00022 #include <KSycoca>
00023 
00024 PlasmaAppletItem::PlasmaAppletItem(PlasmaAppletItemModel * model, const QMap<QString, QVariant>& info,
00025                                    FilterFlags flags, QMap<QString, QVariant> * extraAttrs)
00026     : QObject(model), m_model(model)
00027 {
00028     QMap<QString, QVariant> attrs(info);
00029 
00030     attrs.insert("favorite", flags & Favorite ? true : false);
00031     attrs.insert("used", flags & Used ? true : false);
00032     //attrs.insert("recommended", flags & Recommended ? true : false);
00033     if (extraAttrs) attrs.unite(* extraAttrs);
00034     setText(info["name"].toString() + " - "+ info["category"].toString());
00035     setData(attrs);
00036     setIcon(qvariant_cast<QIcon>(info["icon"]));
00037 }
00038 
00039 QString PlasmaAppletItem::name() const
00040 {
00041     return data().toMap()["name"].toString();
00042 }
00043 
00044 QString PlasmaAppletItem::pluginName() const
00045 {
00046     return data().toMap()["pluginName"].toString();
00047 }
00048 
00049 QString PlasmaAppletItem::description() const
00050 {
00051     return data().toMap()["description"].toString();
00052 }
00053 
00054 int PlasmaAppletItem::running() const
00055 {
00056     return data().toMap()["runningCount"].toInt();
00057 }
00058 
00059 void PlasmaAppletItem::setFavorite(bool favorite)
00060 {
00061     QMap<QString, QVariant> attrs = data().toMap();
00062     attrs.insert("favorite", favorite ? true : false);
00063     setData(QVariant(attrs));
00064 
00065     QString pluginName = attrs["pluginName"].toString();
00066     m_model->setFavorite(pluginName, favorite);
00067 }
00068 
00069 void PlasmaAppletItem::setRunning(int count)
00070 {
00071     QMap<QString, QVariant> attrs = data().toMap();
00072     attrs.insert("running", count > 0); //bool for the filter
00073     attrs.insert("runningCount", count);
00074     setData(QVariant(attrs));
00075 }
00076 
00077 bool PlasmaAppletItem::passesFiltering(
00078         const KCategorizedItemsViewModels::Filter & filter) const
00079 {
00080     return data().toMap()[filter.first] == filter.second;
00081 }
00082 
00083 QVariantList PlasmaAppletItem::arguments() const
00084 {
00085     return qvariant_cast<QVariantList>(data().toMap()["arguments"]);
00086 }
00087 
00088 PlasmaAppletItemModel::PlasmaAppletItemModel(KConfigGroup configGroup, QObject * parent) :
00089     KCategorizedItemsViewModels::DefaultItemModel(parent),
00090     m_configGroup(configGroup)
00091 {
00092     m_used = m_configGroup.readEntry("used").split(",");
00093     m_favorites = m_configGroup.readEntry("favorites").split(",");
00094     connect(KSycoca::self(), SIGNAL(databaseChanged()), this, SLOT(populateModel()));
00095 }
00096 
00097 void PlasmaAppletItemModel::populateModel()
00098 {
00099     clear();
00100     //kDebug() << "populating model, our application is" << m_application;
00101 
00102     // Recommended emblems and filters
00103     QRegExp rx("recommended[.]([0-9A-Za-z]+)[.]plugins");
00104     QMapIterator<QString, QString> i(m_configGroup.entryMap());
00105     QMap < QString, QMap < QString, QVariant > > extraPluginAttrs;
00106     while (i.hasNext()) {
00107         i.next();
00108         if (!rx.exactMatch(i.key())) continue;
00109         QString id = rx.cap(1);
00110 
00111         foreach (const QString &plugin, i.value().split(",")) {
00112             extraPluginAttrs[plugin]["recommended." + id] = true;
00113         }
00114     }
00115 
00116     //TODO: get recommended, favorite, used, etc out of listAppletInfo()
00117     //kDebug() << "number of applets is" <<  Plasma::Applet::listAppletInfo(QString(), m_application).count();
00118     foreach (const KPluginInfo& info, Plasma::Applet::listAppletInfo(QString(), m_application)) {
00119         //kDebug() << info.pluginName() << "NoDisplay" << info.property("NoDisplay").toBool();
00120         if (info.property("NoDisplay").toBool()) {
00121             // we don't want to show the hidden category
00122             continue;
00123         }
00124         //kDebug() << info.pluginName() << " is the name of the plugin\n";
00125 
00126         QMap<QString, QVariant> attrs;
00127         attrs.insert("name", info.name());
00128         attrs.insert("pluginName", info.pluginName());
00129         attrs.insert("description", info.comment());
00130         attrs.insert("category", info.category());
00131         attrs.insert("icon", static_cast<QIcon>(KIcon(info.icon().isEmpty()?"application-x-plasma":info.icon())));
00132 
00133         appendRow(new PlasmaAppletItem(this, attrs,
00134                     ((m_favorites.contains(info.pluginName())) ? PlasmaAppletItem::Favorite : PlasmaAppletItem::NoFilter) |
00135                     ((m_used.contains(info.pluginName())) ? PlasmaAppletItem::Used : PlasmaAppletItem::NoFilter)
00136                     , &(extraPluginAttrs[info.pluginName()])));
00137     }
00138 }
00139 
00140 void PlasmaAppletItemModel::setRunningApplets(const QHash<QString, int> &apps)
00141 {
00142     //foreach item, find that string and set the count
00143     for (int r=0; r<rowCount(); ++r) {
00144         QStandardItem *i = item(r);
00145         PlasmaAppletItem *p = dynamic_cast<PlasmaAppletItem *>(i);
00146         if (p) {
00147             p->setRunning(apps.value(p->name()));
00148         }
00149     }
00150 }
00151 
00152 void PlasmaAppletItemModel::setRunningApplets(const QString &name, int count)
00153 {
00154     for (int r=0; r<rowCount(); ++r) {
00155         QStandardItem *i = item(r);
00156         PlasmaAppletItem *p = dynamic_cast<PlasmaAppletItem *>(i);
00157         if (p && p->name() == name) {
00158             p->setRunning(count);
00159         }
00160     }
00161 }
00162 
00163 QStringList PlasmaAppletItemModel::mimeTypes() const
00164 {
00165     QStringList types;
00166     types << QLatin1String("text/x-plasmoidservicename");
00167     return types;
00168 }
00169 
00170 QMimeData* PlasmaAppletItemModel::mimeData(const QModelIndexList & indexes) const
00171 {
00172     kDebug() << "GETTING MIME DATA\n";
00173     if (indexes.count() <= 0) {
00174         return 0;
00175     }
00176 
00177     QStringList types = mimeTypes();
00178 
00179     if (types.isEmpty()) {
00180         return 0;
00181     }
00182 
00183     QMimeData * data = new QMimeData();
00184 
00185     QString format = types.at(0);
00186 
00187     QByteArray appletNames;
00188     int lastRow = -1;
00189     foreach (const QModelIndex &index, indexes) {
00190         if (index.row() == lastRow) {
00191             continue;
00192         }
00193 
00194         lastRow = index.row();
00195         PlasmaAppletItem *selectedItem = (PlasmaAppletItem *) itemFromIndex(index);
00196         appletNames += '\n' + selectedItem->pluginName().toUtf8();
00197         //kDebug() << selectedItem->pluginName() << index.column() << index.row();
00198     }
00199 
00200     data->setData(format, appletNames);
00201     return data;
00202 }
00203 
00204 void PlasmaAppletItemModel::setFavorite(const QString &plugin, bool favorite)
00205 {
00206     if (favorite) {
00207         if (!m_favorites.contains(plugin)) {
00208             m_favorites.append(plugin);
00209         }
00210     } else {
00211         if (m_favorites.contains(plugin)) {
00212             m_favorites.removeAll(plugin);
00213         }
00214     }
00215     m_configGroup.writeEntry("favorites", m_favorites.join(","));
00216     m_configGroup.sync();
00217 
00218 }
00219 
00220 void PlasmaAppletItemModel::setApplication(const QString& app)
00221 {
00222     m_application = app;
00223     populateModel();
00224 }
00225 
00226 QString& PlasmaAppletItemModel::Application()
00227 {
00228     return m_application;
00229 }
00230 
00231 #include <plasmaappletitemmodel_p.moc>
00232 

libplasma

Skip menu "libplasma"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libplasma
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal