8#include "configmodel.h" 
    9#include "Plasma/Applet" 
   10#include "Plasma/Containment" 
   11#include "configcategory_p.h" 
   12#include "configview.h" 
   14#include "sharedqmlengine.h" 
   18#include <QQmlComponent> 
   23#include <KLocalizedString> 
   24#include <KQuickConfigModule> 
   25#include <KQuickConfigModuleLoader> 
   27#include <Plasma/Corona> 
   28#include <Plasma/PluginLoader> 
   29#include <kquickconfigmoduleloader.h> 
   35class ConfigModelPrivate
 
   38    ConfigModelPrivate(ConfigModel *model);
 
   39    ~ConfigModelPrivate();
 
   42    QList<ConfigCategory *> categories;
 
   43    QPointer<Plasma::Applet> appletInterface;
 
   44    QHash<QString, KQuickConfigModule *> kcms;
 
   46    void appendCategory(ConfigCategory *c);
 
   47    void removeCategory(ConfigCategory *c);
 
   48    void removeCategoryAt(
int index);
 
   50    QVariant get(
int row) 
const;
 
   52    static ConfigCategory *categories_at(QQmlListProperty<ConfigCategory> *prop, qsizetype index);
 
   53    static qsizetype categories_count(QQmlListProperty<ConfigCategory> *prop);
 
   54    static void categories_append(QQmlListProperty<ConfigCategory> *prop, ConfigCategory *o);
 
   55    static void categories_clear(QQmlListProperty<ConfigCategory> *prop);
 
   58ConfigModelPrivate::ConfigModelPrivate(
ConfigModel *model)
 
   63ConfigModelPrivate::~ConfigModelPrivate()
 
   69    ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
 
   70    if (!model || index >= model->d->categories.count() || index < 0) {
 
   73        return model->d->categories.at(index);
 
   79    ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
 
   84    if (o->parent() == prop->object) {
 
   85        o->setParent(
nullptr);
 
   88    o->setParent(prop->object);
 
   89    model->d->appendCategory(o);
 
   94    ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
 
   96        return model->d->categories.count();
 
  104    ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
 
  112void ConfigModelPrivate::clear()
 
  114    q->beginResetModel();
 
  115    while (!categories.isEmpty()) {
 
  116        categories.first()->setParent(
nullptr);
 
  117        categories.pop_front();
 
  120    Q_EMIT q->countChanged();
 
  123void ConfigModelPrivate::appendCategory(ConfigCategory *c)
 
  129    q->beginInsertRows(
QModelIndex(), categories.size(), categories.size());
 
  130    categories.append(c);
 
  132    auto emitChange = [
this, c] {
 
  133        const int row = categories.indexOf(c);
 
  136            Q_EMIT q->dataChanged(modelIndex, modelIndex);
 
  147    Q_EMIT q->countChanged();
 
  150void ConfigModelPrivate::removeCategory(ConfigCategory *c)
 
  152    const int index = categories.indexOf(c);
 
  154        removeCategoryAt(index);
 
  158void ConfigModelPrivate::removeCategoryAt(
int index)
 
  160    if (index < 0 || index >= categories.count()) {
 
  166    ConfigCategory *c = categories.takeAt(index);
 
  167    if (c->parent() == q) {
 
  172    Q_EMIT q->countChanged();
 
  175QVariant ConfigModelPrivate::get(
int row)
 const 
  178    if (row < 0 || row >= categories.count()) {
 
  182    value[QStringLiteral(
"name")] = categories.at(row)->name();
 
  183    value[QStringLiteral(
"icon")] = categories.at(row)->icon();
 
  184    value[QStringLiteral(
"pluginName")] = categories.at(row)->pluginName();
 
  185    value[QStringLiteral(
"source")] = q->
data(q->index(row, 0), ConfigModel::SourceRole);
 
  186    value[QStringLiteral(
"visible")] = categories.at(row)->visible();
 
  191ConfigModel::ConfigModel(
QObject *parent)
 
  193    , d(new ConfigModelPrivate(this))
 
  197ConfigModel::~ConfigModel()
 
  202int ConfigModel::rowCount(
const QModelIndex &index)
 const 
  207    return d->categories.count();
 
  212    if (index.
row() < 0 || index.
row() >= d->categories.count()) {
 
  217        return d->categories.at(index.
row())->name();
 
  219        return d->categories.at(index.
row())->icon();
 
  221        const QString source = d->categories.
at(index.
row())->source();
 
  224            return d->appletInterface.data()->fileUrl(
"ui", source);
 
  230        return d->categories.at(index.
row())->pluginName();
 
  232        return d->categories.at(index.
row())->visible();
 
  243        {SourceRole, 
"source"},
 
  244        {PluginNameRole, 
"pluginName"},
 
  245        {VisibleRole, 
"visible"},
 
  256    ConfigCategory *cat = 
new ConfigCategory(
this);
 
  257    cat->setIcon(iconName);
 
  259    cat->setSource(path);
 
  260    cat->setPluginName(pluginName);
 
  261    d->appendCategory(cat);
 
 
  266    ConfigCategory *cat = 
new ConfigCategory(
this);
 
  267    cat->setIcon(iconName);
 
  269    cat->setSource(path);
 
  270    cat->setPluginName(pluginName);
 
  271    cat->setVisible(visible);
 
  272    d->appendCategory(cat);
 
  275void ConfigModel::appendCategory(ConfigCategory *category)
 
  277    d->appendCategory(category);
 
  280void ConfigModel::removeCategory(ConfigCategory *category)
 
  282    d->removeCategory(category);
 
  285void ConfigModel::removeCategoryAt(
int index)
 
  287    d->removeCategoryAt(index);
 
  297    d->appletInterface = interface;
 
  302    return d->appletInterface.data();
 
  309                                            ConfigModelPrivate::categories_append,
 
  310                                            ConfigModelPrivate::categories_count,
 
  311                                            ConfigModelPrivate::categories_at,
 
  312                                            ConfigModelPrivate::categories_clear);
 
  317#include "moc_configmodel.cpp" 
This model contains all the possible config categories for a dialog, such as categories of the config...
 
void clear()
clears the model
 
void appendCategory(const QString &iconName, const QString &name, const QString &path, const QString &pluginName)
add a new category in the model
 
Q_INVOKABLE QVariant get(int row) const
 
The EdgeEventForwarder class This class forwards edge events to be replayed within the given margin T...
 
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
const QChar at(qsizetype position) const const
 
bool endsWith(QChar c, Qt::CaseSensitivity cs) const const
 
bool isEmpty() const const
 
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const