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;