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

Plasma

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,
00025                                    const QMap<QString, QVariant>& info,
00026                                    FilterFlags flags,
00027                                    QMap<QString, QVariant> *extraAttrs)
00028     : QObject(model), m_model(model)
00029 {
00030     QMap<QString, QVariant> attrs(info);
00031 
00032     attrs.insert("favorite", flags & Favorite ? true : false);
00033     attrs.insert("used", flags & Used ? true : false);
00034     //attrs.insert("recommended", flags & Recommended ? true : false);
00035     if (extraAttrs) {
00036         attrs.unite(* extraAttrs);
00037     }
00038     setText(info["name"].toString() + " - "+ info["category"].toString());
00039     setData(attrs);
00040     setIcon(qvariant_cast<QIcon>(info["icon"]));
00041 }
00042 
00043 QString PlasmaAppletItem::name() const
00044 {
00045     return data().toMap()["name"].toString();
00046 }
00047 
00048 QString PlasmaAppletItem::pluginName() const
00049 {
00050     return data().toMap()["pluginName"].toString();
00051 }
00052 
00053 QString PlasmaAppletItem::description() const
00054 {
00055     return data().toMap()["description"].toString();
00056 }
00057 
00058 int PlasmaAppletItem::running() const
00059 {
00060     return data().toMap()["runningCount"].toInt();
00061 }
00062 
00063 bool PlasmaAppletItem::used() const
00064 {
00065     return data().toMap()["used"].toBool();
00066 }
00067 
00068 void PlasmaAppletItem::setFavorite(bool favorite)
00069 {
00070     QMap<QString, QVariant> attrs = data().toMap();
00071     attrs.insert("favorite", favorite ? true : false);
00072     setData(QVariant(attrs));
00073 
00074     QString pluginName = attrs["pluginName"].toString();
00075     m_model->setFavorite(pluginName, favorite);
00076 }
00077 
00078 void PlasmaAppletItem::setRunning(int count)
00079 {
00080     QMap<QString, QVariant> attrs = data().toMap();
00081     attrs.insert("running", count > 0); //bool for the filter
00082     attrs.insert("runningCount", count);
00083     setData(QVariant(attrs));
00084 }
00085 
00086 void PlasmaAppletItem::setUsed(bool used)
00087 {
00088     QMap<QString, QVariant> attrs = data().toMap();
00089     attrs.insert("used", used);
00090     setData(QVariant(attrs));
00091 }
00092 
00093 bool PlasmaAppletItem::passesFiltering(
00094         const KCategorizedItemsViewModels::Filter & filter) const
00095 {
00096     return data().toMap()[filter.first] == filter.second;
00097 }
00098 
00099 QVariantList PlasmaAppletItem::arguments() const
00100 {
00101     return qvariant_cast<QVariantList>(data().toMap()["arguments"]);
00102 }
00103 
00104 PlasmaAppletItemModel::PlasmaAppletItemModel(KConfigGroup configGroup, QObject * parent) :
00105     KCategorizedItemsViewModels::DefaultItemModel(parent),
00106     m_configGroup(configGroup)
00107 {
00108     m_used = m_configGroup.readEntry("used").split(',');
00109     m_favorites = m_configGroup.readEntry("favorites").split(',');
00110     connect(KSycoca::self(), SIGNAL(databaseChanged()), this, SLOT(populateModel()));
00111 }
00112 
00113 void PlasmaAppletItemModel::populateModel()
00114 {
00115     clear();
00116     //kDebug() << "populating model, our application is" << m_application;
00117 
00118     // Recommended emblems and filters
00119     QRegExp rx("recommended[.]([0-9A-Za-z]+)[.]plugins");
00120     QMapIterator<QString, QString> i(m_configGroup.entryMap());
00121     QMap < QString, QMap < QString, QVariant > > extraPluginAttrs;
00122     while (i.hasNext()) {
00123         i.next();
00124         if (!rx.exactMatch(i.key())) {
00125             continue;
00126         }
00127         QString id = rx.cap(1);
00128 
00129         foreach (const QString &plugin, i.value().split(',')) {
00130             extraPluginAttrs[plugin]["recommended." + id] = true;
00131         }
00132     }
00133 
00134     //TODO: get recommended, favorite, used, etc out of listAppletInfo()
00135     //kDebug() << "number of applets is"
00136     //         <<  Plasma::Applet::listAppletInfo(QString(), m_application).count();
00137     foreach (const KPluginInfo &info, Plasma::Applet::listAppletInfo(QString(), m_application)) {
00138         //kDebug() << info.pluginName() << "NoDisplay" << info.property("NoDisplay").toBool();
00139         if (info.property("NoDisplay").toBool() || info.category() == i18n("Containments")) {
00140             // we don't want to show the hidden category
00141             continue;
00142         }
00143         //kDebug() << info.pluginName() << " is the name of the plugin\n";
00144 
00145         QMap<QString, QVariant> attrs;
00146         attrs.insert("name", info.name());
00147         attrs.insert("pluginName", info.pluginName());
00148         attrs.insert("description", info.comment());
00149         attrs.insert("category", info.category());
00150         attrs.insert("icon",
00151                      static_cast<QIcon>(KIcon(info.icon().isEmpty() ?
00152                                               "application-x-plasma" : info.icon())));
00153 
00154         appendRow(new PlasmaAppletItem(this, attrs,((m_favorites.contains(info.pluginName())) ? PlasmaAppletItem::Favorite : PlasmaAppletItem::NoFilter) | ((m_used.contains(info.pluginName())) ? PlasmaAppletItem::Used : PlasmaAppletItem::NoFilter), &(extraPluginAttrs[info.pluginName()])));
00155     }
00156 }
00157 
00158 void PlasmaAppletItemModel::setRunningApplets(const QHash<QString, int> &apps)
00159 {
00160     //foreach item, find that string and set the count
00161     for (int r=0; r<rowCount(); ++r) {
00162         QStandardItem *i = item(r);
00163         PlasmaAppletItem *p = dynamic_cast<PlasmaAppletItem *>(i);
00164 
00165         if (p) {
00166             const bool running = apps.value(p->name());
00167             const bool used = m_used.contains(p->pluginName());
00168 
00169             p->setRunning(running);
00170             //mark just used applets that arent't running
00171             p->setUsed(!running && used);
00172 
00173             if (running && !used) {
00174                 m_used.append(p->pluginName());
00175             }
00176         }
00177     }
00178 
00179     m_configGroup.writeEntry("used", m_used.join(","));
00180 }
00181 
00182 void PlasmaAppletItemModel::setRunningApplets(const QString &name, int count)
00183 {
00184     for (int r=0; r<rowCount(); ++r) {
00185         QStandardItem *i = item(r);
00186         PlasmaAppletItem *p = dynamic_cast<PlasmaAppletItem *>(i);
00187         if (p && p->name() == name) {
00188             const bool used = m_used.contains(p->pluginName());
00189 
00190             p->setRunning(count);
00191             p->setUsed(used && count == 0);
00192 
00193             if (count > 0 && !used) {
00194                 m_used.append(p->pluginName());
00195             }
00196         }
00197     }
00198 
00199     m_configGroup.writeEntry("used", m_used.join(","));
00200 }
00201 
00202 QStringList PlasmaAppletItemModel::mimeTypes() const
00203 {
00204     QStringList types;
00205     types << QLatin1String("text/x-plasmoidservicename");
00206     return types;
00207 }
00208 
00209 QMimeData *PlasmaAppletItemModel::mimeData(const QModelIndexList &indexes) const
00210 {
00211     kDebug() << "GETTING MIME DATA\n";
00212     if (indexes.count() <= 0) {
00213         return 0;
00214     }
00215 
00216     QStringList types = mimeTypes();
00217 
00218     if (types.isEmpty()) {
00219         return 0;
00220     }
00221 
00222     QMimeData *data = new QMimeData();
00223 
00224     QString format = types.at(0);
00225 
00226     QByteArray appletNames;
00227     int lastRow = -1;
00228     foreach (const QModelIndex &index, indexes) {
00229         if (index.row() == lastRow) {
00230             continue;
00231         }
00232 
00233         lastRow = index.row();
00234         PlasmaAppletItem *selectedItem = (PlasmaAppletItem *) itemFromIndex(index);
00235         appletNames += '\n' + selectedItem->pluginName().toUtf8();
00236         //kDebug() << selectedItem->pluginName() << index.column() << index.row();
00237     }
00238 
00239     data->setData(format, appletNames);
00240     return data;
00241 }
00242 
00243 void PlasmaAppletItemModel::setFavorite(const QString &plugin, bool favorite)
00244 {
00245     if (favorite) {
00246         if (!m_favorites.contains(plugin)) {
00247             m_favorites.append(plugin);
00248         }
00249     } else if (m_favorites.contains(plugin)) {
00250         m_favorites.removeAll(plugin);
00251     }
00252 
00253     m_configGroup.writeEntry("favorites", m_favorites.join(","));
00254     m_configGroup.sync();
00255 }
00256 
00257 void PlasmaAppletItemModel::setApplication(const QString &app)
00258 {
00259     m_application = app;
00260     populateModel();
00261 }
00262 
00263 QString &PlasmaAppletItemModel::Application()
00264 {
00265     return m_application;
00266 }
00267 
00268 #include <plasmaappletitemmodel_p.moc>
00269 

Plasma

Skip menu "Plasma"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.7
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