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
{
26 QString
AbstractItem::name() const
31 QString
AbstractItem::description() const
36 bool AbstractItem::isFavorite() const
38 return passesFiltering(Filter("favorite", true));
41 int AbstractItem::running() const
46 bool AbstractItem::matches(const QString
& pattern
) const
48 return name().contains(pattern
, Qt::CaseInsensitive
) || description().contains(pattern
, Qt::CaseInsensitive
);
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
);
71 void DefaultFilterModel::addSeparator(const QString
& caption
)
73 QList
<QStandardItem
*> newRow
;
74 QStandardItem
* item
= new QStandardItem(caption
);
75 item
->setEnabled(false);
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
);
93 kWarning() << "DefaultItemFilterProxyModel::setSourceModel expects a QStandardItemModel!";
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
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
;
143 void DefaultItemFilterProxyModel::setFilter(const Filter
& filter
)
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
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
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
);
184 return QVariant(section
);
187 int DefaultItemFilterProxyModel::InnerProxyModel::rowCount(
188 const QModelIndex
& parent
) const
192 return m_sourceModel
->rowCount(parent
);
195 bool DefaultItemFilterProxyModel::InnerProxyModel::setData(
196 const QModelIndex
& index
, const QVariant
& value
, int role
)
200 return m_sourceModel
->setData(index
, value
, role
);
203 bool DefaultItemFilterProxyModel::InnerProxyModel::setHeaderData(int section
,
204 Qt::Orientation orientation
, const QVariant
& value
, int role
)
208 Q_UNUSED(orientation
);
213 QModelIndex
DefaultItemFilterProxyModel::InnerProxyModel::index(int row
,
214 int column
, const QModelIndex
& parent
) const
218 return QModelIndex();
219 return m_sourceModel
->index(row
, 0, parent
);
222 QModelIndex
DefaultItemFilterProxyModel::InnerProxyModel::parent(
223 const QModelIndex
& index
) const
226 return QModelIndex();
227 return m_sourceModel
->parent(index
);
230 QMimeData
* DefaultItemFilterProxyModel::InnerProxyModel::mimeData(
231 const QModelIndexList
& indexes
) const
235 return m_sourceModel
->mimeData(indexes
);
238 int DefaultItemFilterProxyModel::InnerProxyModel::columnCount(
239 const QModelIndex
& index
) const
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
;
258 DefaultItemModel::DefaultItemModel(QObject
* parent
) :
259 QStandardItemModel(parent
) {}