26 #include <QAbstractItemView> 27 #include <QAbstractItemModel> 30 #include "klfitemviewsearchtarget_p.h" 33 struct KLFItemViewSearchTargetPrivate {
38 klfdelegate =
new KLFSearchItemDelegate(K);
41 QAbstractItemView * view;
43 QAbstractItemDelegate * olddelegate;
44 KLFSearchItemDelegate * klfdelegate;
52 int next_valid_column(
int c,
bool forward =
true)
57 while (c >= 0 && c < columnlist.
last() && !columnlist.
contains(c))
58 c = c + (forward ? +1 : -1);
59 if (c >= columnlist.
last())
73 if (explorechildren && model->hasChildren(pos)) {
75 return model->index(0, columnlist[0], pos);
78 int nextcol = nextcolumn.
value(next_valid_column(pos.
column()), -1);
81 return model->index(pos.
row(), nextcol, pos.
parent());
84 if (pos.
row() < model->rowCount(pos.
parent())) {
85 return pos.
sibling(pos.
row()+1, columnlist[0]);
90 return advance_iter_helper(pos.
parent(),
false);
102 if (!model->hasChildren(pos))
106 return last_child_index(model->index(model->rowCount(pos)-1, columnlist.
last(), pos));
116 int prevcol = prevcolumn.
value(next_valid_column(pos.
column(),
false), -1);
118 return last_child_index(pos.
sibling(pos.
row(), prevcol));
120 if (pos.
row() >= 1) {
122 return last_child_index(pos.
sibling(pos.
row()-1, columnlist.
last()));
148 return d->columnlist;
157 return d->advance_iter_helper(pos);
159 return d->advance_iter_back_helper(pos);
174 = KLFSearchItemDelegate::matches(pos.
data().
toString(), queryString,
false);
182 Q_UNUSED(resultMatchPosition);
192 QAbstractItemDelegate *delegate = d->view->itemDelegate();
194 if (delegate != d->klfdelegate) {
195 d->olddelegate = delegate;
196 d->view->setItemDelegate(d->klfdelegate);
199 d->klfdelegate->setSearchString(queryString);
202 void KLFItemViewSearchTargetPrivate::resetDelegate()
205 QAbstractItemDelegate *delegate = view->itemDelegate();
207 if (delegate == klfdelegate && olddelegate != NULL) {
208 view->setItemDelegate(olddelegate);
232 d->view->setCurrentIndex(pos);
233 d->view->selectionModel()->select(pos, QItemSelectionModel::ClearAndSelect);
242 if (d->columnlist.isEmpty()) {
257 d->columnlist = columnList.
toSet().toList();
258 qSort(d->columnlist);
259 d->nextcolumn.clear();
260 d->prevcolumn.clear();
261 if (d->columnlist.isEmpty()) {
265 if (d->columnlist.isEmpty())
269 for (k = 0; k < (d->columnlist.size()-1); ++k) {
270 d->nextcolumn[d->columnlist[k]] = d->columnlist[k+1];
271 d->prevcolumn[d->columnlist[k+1]] = d->columnlist[k];
273 d->nextcolumn[d->columnlist[k]] = -1;
274 d->prevcolumn[d->columnlist[0]] = -1;
virtual QModelIndex searchIterEnd()
virtual void searchReinitialized()
#define KLF_PRIVATE_HEAD(ClassName)
virtual QModelIndex searchIterBegin()
A Searchable object interface based on iterative searching.
#define KLF_DEBUG_BLOCK(msg)
Utility to debug the execution of a block.
virtual void searchMoveToIterPos(const QModelIndex &pos)
#define KLF_ASSERT_NOT_NULL(ptr, msg, failaction)
Asserting Non-NULL pointers (NON-FATAL)
virtual QModelIndex searchIterAdvance(const QModelIndex &pos, bool forward)
#define KLF_DELETE_PRIVATE
KLFItemViewSearchTarget(QAbstractItemView *view, QObject *parent=NULL)
QModelIndex parent() const
virtual void searchReinitialized()
virtual bool searchIterMatches(const QModelIndex &pos, const QString &queryString)
bool contains(const T &value) const
void setSearchColumns(const QList< int > &columnList)
virtual void searchPerformed(const QModelIndex &resultMatchPosition, bool found, const QString &queryString)
virtual void searchAborted()
QVariant data(int role) const
QModelIndex sibling(int row, int column) const
A search target (for KLFSearchBar) for standard item views.
virtual int columnCount(const QModelIndex &parent) const=0
QAbstractItemView * view()
#define KLF_INIT_PRIVATE(ClassName)
QList< int > searchColumns()
virtual ~KLFItemViewSearchTarget()
void setSearchView(QAbstractItemView *view)
const T value(const Key &key, const T &defaultValue) const
virtual void searchAborted()