bool SearchLine::checkItemParentsVisible( Q3ListViewItem *item ) { //BEGIN code from KSearchLine::checkItemParentsVisible bool visible = false; for( ; item; item = item->nextSibling() ) { if( ( item->firstChild() && checkItemParentsVisible( item->firstChild() ) ) || itemMatches( item, search ) ) { setItemVisible( item, true ); // OUCH! this operation just became exponential-time. // however, setting an item visible sets all its descendents // visible too, which we definitely don't want. // plus, in Kopete the nesting is never more than 2 deep, // so this really just doubles the runtime, if that. // this still can be done in O(n) time by a mark-set process, // but that's overkill in our case. checkItemParentsVisible( item->firstChild() ); visible = true; } else setItemVisible( item, false ); } return visible; //END code from KSearchLine::checkItemParentsVisible }
void KTreeWidgetSearchLine::checkItemParentsNotVisible(QTreeWidget *treeWidget) { QTreeWidgetItemIterator it(treeWidget); for (; *it; ++it) { QTreeWidgetItem *item = *it; item->treeWidget()->setItemHidden(item, !itemMatches(item, k->search)); } }
/****************************************************************************** * Public Slots * *****************************************************************************/ void K3IconViewSearchLine::updateSearch( const QString &s ) { Q3IconView *iv = d->iconView; if( ! iv ) return; // disabled QString search = d->search = s.isNull() ? text() : s; QIconViewItemList *hi = &(d->hiddenItems); Q3IconViewItem *currentItem = iv->currentItem(); Q3IconViewItem *item = NULL; // Remove Non-Matching items, add them them to hidden list Q3IconViewItem *i = iv->firstItem(); while ( i != NULL ) { item = i; i = i->nextItem(); // Point to next, otherwise will loose it. if ( ! itemMatches( item, search ) ) { hideItem( item ); if ( item == currentItem ) currentItem = NULL; // It's not in iconView anymore. } } // Add Matching items, remove from hidden list QIconViewItemList::iterator it = hi->begin(); while ( it != hi->end() ) { item = *it; ++it; if ( itemMatches( item, search ) ) showItem( item ); } iv->sort(); if ( currentItem != NULL ) iv->ensureItemVisible( currentItem ); }
void SearchLine::checkItemParentsNotVisible() { //BEGIN code from KSearchLine::checkItemParentsNotVisible Q3ListViewItemIterator it( listView() ); for( ; it.current(); ++it ) { Q3ListViewItem *item = it.current(); if( itemMatches( item, search ) ) setItemVisible( item, true ); else setItemVisible( item, false ); } //END code from KSearchLine::checkItemParentsNotVisible }
bool KTreeWidgetSearchLine::checkItemParentsVisible(QTreeWidgetItem* item) { QTreeWidget* treeWidget = item->treeWidget(); bool childMatch = false; for (int i = 0; i < item->childCount(); ++i) childMatch |= checkItemParentsVisible(item->child(i)); // Should this item be shown? It should if any children should be, or if it matches. if (childMatch || itemMatches(item, k->search)) { treeWidget->setItemHidden(item, false); return true; } treeWidget->setItemHidden(item, true); return false; }
void KTreeWidgetSearchLine::rowsInserted(const QModelIndex & parent, int start, int end) const { QAbstractItemModel* model = qobject_cast<QAbstractItemModel*>(sender()); if (!model) return; QTreeWidget* widget = 0L; foreach (QTreeWidget* tree, k->treeWidgets) if (tree->model() == model) { widget = tree; break; } if (!widget) return; QTreeWidgetWorkaround* widgetWorkaround = static_cast<QTreeWidgetWorkaround *>( widget ); for (int i = start; i <= end; ++i) { if (QTreeWidgetItem* item = widgetWorkaround->itemFromIndex(model->index(i, 0, parent))) item->treeWidget()->setItemHidden(item, !itemMatches(item, text())); } }