27
27
#include <KCategorizedSortFilterProxyModel>
29
Q_GLOBAL_STATIC_WITH_ARGS(QList<Category*>, s_categories, (CategoriesReader().populateCategories()))
29
31
CategoryModel::CategoryModel(QObject* parent)
30
32
: QStandardItemModel(parent)
41
43
void CategoryModel::setCategories(const QList<Category *> &categoryList, const QString &rootName)
43
47
invisibleRootItem()->removeRows(0, invisibleRootItem()->rowCount());
44
qDeleteAll(m_categoryList);
45
m_categoryList = categoryList;
46
foreach (Category *category, m_categoryList) {
48
foreach (Category *category, categoryList) {
47
49
QStandardItem *categoryItem = new QStandardItem;
48
50
categoryItem->setText(category->name());
49
51
categoryItem->setIcon(QIcon::fromTheme(category->icon()));
50
52
categoryItem->setEditable(false);
51
53
categoryItem->setData(rootName, KCategorizedSortFilterProxyModel::CategoryDisplayRole);
52
54
categoryItem->setData(qVariantFromValue<QObject*>(category), CategoryRole);
55
connect(category, &QObject::destroyed, this, &CategoryModel::categoryDeleted);
54
57
appendRow(categoryItem);
61
void CategoryModel::categoryDeleted(QObject* cat)
63
for(int i=0; i<rowCount(); ++i) {
64
if (cat == item(i)->data(CategoryRole).value<QObject*>()) {
58
70
Category* CategoryModel::categoryForRow(int row)
60
return m_categoryList.at(row);
63
QList<Category*> CategoryModel::populateCategories()
65
static QList<Category*> cats;
67
CategoriesReader reader;
68
cats = reader.populateCategories();
72
return qobject_cast<Category*>(item(row)->data(CategoryRole).value<QObject*>());
73
75
void CategoryModel::setDisplayedCategory(Category* c)
77
79
setCategories(c->subCategories(), c->name());
79
setCategories(populateCategories(), QString());
81
setCategories(*s_categories, QString());
82
84
Category* CategoryModel::displayedCategory() const
89
91
if(root->name()==name)
91
93
else if(root->hasSubCategories()) {
92
QList<Category*> subs = root->subCategories();
94
const QList<Category*> subs = root->subCategories();
93
95
for(Category* c : subs) {
94
96
Category* ret = recFindCategory(c, name);
102
104
Category* CategoryModel::findCategoryByName(const QString& name)
104
QList<Category*> cats = populateCategories();
106
const QList<Category*> cats = *s_categories;
105
107
for(Category* cat : cats) {
106
108
Category* ret = recFindCategory(cat, name);
115
void CategoryModel::blacklistPlugin(const QString& name)
117
const QSet<QString> plugins = {name};
118
for(QList<Category*>::iterator it = s_categories->begin(), itEnd = s_categories->end(); it!=itEnd; ) {
119
if ((*it)->blacklistPlugins(plugins)) {
121
it = s_categories->erase(it);