Make a branch to make krunner Good Enough For Aaron™.
[kdebase/uwolfer.git] / workspace / libs / plasma / appletbrowser / kcategorizeditemsviewmodels.cpp
blob709fee4d731ff1612d9ce5f57d0df4ed187194f6
1 /*
2 * Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde@gmail.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Library/Lesser General Public License
6 * version 2, or (at your option) any later version, as published by the
7 * Free Software Foundation
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details
14 * You should have received a copy of the GNU Library/Lesser General Public
15 * License along with this program; if not, write to the
16 * Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #include "kcategorizeditemsviewmodels_p.h"
22 namespace KCategorizedItemsViewModels {
24 // AbstractItem
26 QString AbstractItem::name() const
28 return text();
31 QString AbstractItem::description() const
33 return "";
36 bool AbstractItem::isFavorite() const
38 return passesFiltering(Filter("favorite", true));
41 int AbstractItem::running() const
43 return 0;
46 bool AbstractItem::matches(const QString & pattern) const
48 return name().contains(pattern, Qt::CaseInsensitive) || description().contains(pattern, Qt::CaseInsensitive);
51 // DefaultFilterModel
53 DefaultFilterModel::DefaultFilterModel(QObject * parent) :
54 QStandardItemModel(0, 1, parent)
56 setHeaderData(1, Qt::Horizontal, tr("Filters"));
59 void DefaultFilterModel::addFilter(const QString & caption,
60 const Filter & filter, const KIcon * icon)
62 QList<QStandardItem *> newRow;
63 QStandardItem * item = new QStandardItem(caption);
64 item->setData(qVariantFromValue<Filter>(filter));
65 if (icon) item->setIcon(*icon);
67 newRow << item;
68 appendRow(newRow);
71 void DefaultFilterModel::addSeparator(const QString & caption)
73 QList<QStandardItem *> newRow;
74 QStandardItem * item = new QStandardItem(caption);
75 item->setEnabled(false);
77 newRow << item;
78 appendRow(newRow);
81 // DefaultItemFilterProxyModel
83 DefaultItemFilterProxyModel::DefaultItemFilterProxyModel(QObject * parent) :
84 QSortFilterProxyModel(parent), m_innerModel(parent)
88 void DefaultItemFilterProxyModel::setSourceModel(QAbstractItemModel * sourceModel)
90 QStandardItemModel *model = qobject_cast<QStandardItemModel*>(sourceModel);
92 if (!model) {
93 kWarning() << "DefaultItemFilterProxyModel::setSourceModel expects a QStandardItemModel!";
94 return;
97 m_innerModel.setSourceModel(model);
98 QSortFilterProxyModel::setSourceModel(&m_innerModel);
101 QStandardItemModel * DefaultItemFilterProxyModel::sourceModel() const
103 return m_innerModel.sourceModel();
106 int DefaultItemFilterProxyModel::columnCount(const QModelIndex& index) const
108 Q_UNUSED(index);
109 return 3;
112 QVariant DefaultItemFilterProxyModel::data(const QModelIndex & index, int role) const
114 return m_innerModel.data(index, (index.column() == 1), role);
117 bool DefaultItemFilterProxyModel::filterAcceptsRow(int sourceRow,
118 const QModelIndex &sourceParent) const
120 QStandardItemModel * model = (QStandardItemModel *) sourceModel();
122 QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
124 AbstractItem * item = (AbstractItem *) model->itemFromIndex(index);
125 //kDebug() << "ITEM " << (item ? "IS NOT " : "IS") << " NULL\n";
127 return (m_filter.first.isEmpty() || item->passesFiltering(m_filter))
128 &&(m_searchPattern.isEmpty() || item->matches(m_searchPattern));
131 bool DefaultItemFilterProxyModel::lessThan(const QModelIndex &left,
132 const QModelIndex &right) const
134 return sourceModel()->data(left).toString().compare(sourceModel()->data(right).toString(), sortCaseSensitivity()) < 0;
137 void DefaultItemFilterProxyModel::setSearch(const QString & pattern)
139 m_searchPattern = pattern;
140 invalidateFilter();
143 void DefaultItemFilterProxyModel::setFilter(const Filter & filter)
145 m_filter = filter;
146 invalidateFilter();
149 // DefaultItemFilterProxyModel::InnerProxyModel
151 DefaultItemFilterProxyModel::InnerProxyModel::InnerProxyModel(QObject * parent) :
152 QAbstractItemModel(parent), m_sourceModel(NULL)
156 Qt::ItemFlags DefaultItemFilterProxyModel::InnerProxyModel::flags(
157 const QModelIndex & index) const
159 if (!m_sourceModel)
160 return 0;
161 return m_sourceModel->flags(index);
164 QVariant DefaultItemFilterProxyModel::InnerProxyModel::data(
165 const QModelIndex & index, bool favoriteColumn, int role) const
167 Q_UNUSED(favoriteColumn);
168 return data(index, role);
171 QVariant DefaultItemFilterProxyModel::InnerProxyModel::data(
172 const QModelIndex & index, int role) const
174 if (!m_sourceModel)
175 return QVariant();
176 return m_sourceModel->data(index, role);
179 QVariant DefaultItemFilterProxyModel::InnerProxyModel::headerData(int section,
180 Qt::Orientation orientation, int role) const
182 Q_UNUSED(orientation);
183 Q_UNUSED(role);
184 return QVariant(section);
187 int DefaultItemFilterProxyModel::InnerProxyModel::rowCount(
188 const QModelIndex & parent) const
190 if (!m_sourceModel)
191 return 0;
192 return m_sourceModel->rowCount(parent);
195 bool DefaultItemFilterProxyModel::InnerProxyModel::setData(
196 const QModelIndex & index, const QVariant & value, int role)
198 if (!m_sourceModel)
199 return false;
200 return m_sourceModel->setData(index, value, role);
203 bool DefaultItemFilterProxyModel::InnerProxyModel::setHeaderData(int section,
204 Qt::Orientation orientation, const QVariant & value, int role)
206 Q_UNUSED(section);
207 Q_UNUSED(value);
208 Q_UNUSED(orientation);
209 Q_UNUSED(role);
210 return false;
213 QModelIndex DefaultItemFilterProxyModel::InnerProxyModel::index(int row,
214 int column, const QModelIndex & parent) const
216 Q_UNUSED(column);
217 if (!m_sourceModel)
218 return QModelIndex();
219 return m_sourceModel->index(row, 0, parent);
222 QModelIndex DefaultItemFilterProxyModel::InnerProxyModel::parent(
223 const QModelIndex & index) const
225 if (!m_sourceModel)
226 return QModelIndex();
227 return m_sourceModel->parent(index);
230 QMimeData * DefaultItemFilterProxyModel::InnerProxyModel::mimeData(
231 const QModelIndexList & indexes) const
233 if (!m_sourceModel)
234 return NULL;
235 return m_sourceModel->mimeData(indexes);
238 int DefaultItemFilterProxyModel::InnerProxyModel::columnCount(
239 const QModelIndex& index) const
241 Q_UNUSED(index);
242 return 3; //FIXME: a hardcoded magic number that appears in two places CANNOT be good
245 void DefaultItemFilterProxyModel::InnerProxyModel::setSourceModel(
246 QStandardItemModel * sourceModel)
248 m_sourceModel = sourceModel;
251 QStandardItemModel * DefaultItemFilterProxyModel::InnerProxyModel::sourceModel() const
253 return m_sourceModel;
256 // DefaultItemModel
258 DefaultItemModel::DefaultItemModel(QObject * parent) :
259 QStandardItemModel(parent) {}