Use new Qt hidden items for iconview searches

pull/16/head
Timothy Pearson 14 years ago
parent ea099d33ea
commit 5c8a387bfe

@ -42,7 +42,6 @@ public:
iconView( 0 ), iconView( 0 ),
caseSensitive( DEFAULT_CASESENSITIVE ), caseSensitive( DEFAULT_CASESENSITIVE ),
activeSearch( false ), activeSearch( false ),
hiddenListChanged( 0 ),
queuedSearches( 0 ) {} queuedSearches( 0 ) {}
TQIconView *iconView; TQIconView *iconView;
@ -50,8 +49,6 @@ public:
bool activeSearch; bool activeSearch;
TQString search; TQString search;
int queuedSearches; int queuedSearches;
int hiddenListChanged;
QIconViewItemList hiddenItems;
}; };
/****************************************************************************** /******************************************************************************
@ -116,26 +113,13 @@ void KIconViewSearchLine::updateSearch( const TQString &s )
if ( item == currentItem ) if ( item == currentItem )
currentItem = NULL; // It's not in iconView anymore. currentItem = NULL; // It's not in iconView anymore.
} }
}
// Add Matching items, remove from hidden list
original_count = d->hiddenItems.count();
original_hiddenListChanged = d->hiddenListChanged;
for (QIconViewItemList::iterator it=d->hiddenItems.begin();it!=d->hiddenItems.end();++it) {
item = *it;
if ((original_count != d->hiddenItems.count()) || (original_hiddenListChanged != d->hiddenListChanged)) {
// The list has changed; pointers are now most likely invalid
// ABORT, but restart the search at the beginning
original_count = d->hiddenItems.count();
original_hiddenListChanged = d->hiddenListChanged;
it=d->hiddenItems.begin();
}
else { else {
if ( itemMatches( item, search ) ) showItem( item );
showItem( item );
} }
} }
d->iconView->sort(); d->iconView->sort();
d->iconView->arrangeItemsInGrid(true);
if ( currentItem != NULL ) if ( currentItem != NULL )
d->iconView->ensureItemVisible( currentItem ); d->iconView->ensureItemVisible( currentItem );
@ -143,49 +127,23 @@ void KIconViewSearchLine::updateSearch( const TQString &s )
void KIconViewSearchLine::clear() void KIconViewSearchLine::clear()
{ {
// Clear hidden list, give items back to TQIconView, if it still exists // Clear hidden list, give items back to TQIconView, if it still exists
TQIconViewItem *item = NULL; TQIconViewItem *item = NULL;
QIconViewItemList::iterator it = d->hiddenItems.begin();
while ( it != d->hiddenItems.end() ) TQIconViewItem *i = d->iconView->firstItem();
{ while ( i != NULL ) {
item = *it; item = i;
++it; i = i->nextItem(); // Point to next, otherwise will loose it.
if ( item != NULL ) showItem( item );
{
if ( d->iconView != NULL )
showItem( item );
else
delete item;
} }
}
if ( ! d->hiddenItems.isEmpty() ) d->search = "";
kdDebug() << __FILE__ << ":" << __LINE__ << d->queuedSearches = 0;
"hiddenItems is not empty as it should be. " << KLineEdit::clear();
d->hiddenItems.count() << " items are still there.\n" << endl;
d->search = "";
d->queuedSearches = 0;
KLineEdit::clear();
} }
void KIconViewSearchLine::iconDeleted(const TQString &filename) { void KIconViewSearchLine::iconDeleted(const TQString &filename) {
// Clear hidden list, give items back to TQIconView, if it still exists // Do nothing...
TQIconViewItem *item = NULL;
QIconViewItemList::iterator it = d->hiddenItems.begin();
while ( it != d->hiddenItems.end() )
{
item = *it;
++it;
if ( item != NULL )
{
if (item->text() == filename) {
if (d->iconView != NULL)
showItem( item );
else
delete item;
}
}
}
} }
void KIconViewSearchLine::setCaseSensitive( bool cs ) void KIconViewSearchLine::setCaseSensitive( bool cs )
@ -252,9 +210,7 @@ void KIconViewSearchLine::hideItem( TQIconViewItem *item )
if ( ( item == NULL ) || ( d->iconView == NULL ) ) if ( ( item == NULL ) || ( d->iconView == NULL ) )
return; return;
d->hiddenListChanged++; item->setVisible(false);
d->hiddenItems.append( item );
d->iconView->takeItem( item );
} }
void KIconViewSearchLine::showItem( TQIconViewItem *item ) void KIconViewSearchLine::showItem( TQIconViewItem *item )
@ -266,10 +222,8 @@ void KIconViewSearchLine::showItem( TQIconViewItem *item )
endl; endl;
return; return;
} }
d->hiddenListChanged++;
d->iconView->insertItem( item ); item->setVisible(true);
d->hiddenItems.remove( item );
item->setText(item->text());
} }
/****************************************************************************** /******************************************************************************

@ -107,11 +107,10 @@ public slots:
void clear(); void clear();
/** /**
* Must be called before updateSearch() whenever an icon is deleted. * Should be called before updateSearch() whenever an icon is deleted.
*/ */
void iconDeleted(const TQString &filename); void iconDeleted(const TQString &filename);
protected: protected:
/** /**
* Returns true if \a item matches the search \a s. This will be evaluated * Returns true if \a item matches the search \a s. This will be evaluated

Loading…
Cancel
Save