From b7d009d2ba676c136ef7163b74341da9e18985df Mon Sep 17 00:00:00 2001
From: Stephane Albert <stephane.albert@c-s.fr>
Date: Tue, 8 Apr 2014 10:18:36 +0200
Subject: [PATCH] ENH: Database-browser search filter.

---
 Code/Common/Gui/mvdDatabaseBrowserWidget.cxx | 37 +++++++++++++-------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/Code/Common/Gui/mvdDatabaseBrowserWidget.cxx b/Code/Common/Gui/mvdDatabaseBrowserWidget.cxx
index 828f70266b..163a65da1d 100644
--- a/Code/Common/Gui/mvdDatabaseBrowserWidget.cxx
+++ b/Code/Common/Gui/mvdDatabaseBrowserWidget.cxx
@@ -324,27 +324,40 @@ void
 DatabaseBrowserWidget
 ::on_m_SearchLine_textChanged( const QString& search )
 {
-  // 
+  // qDebug() << this << "on_m_SearchLine_textChanged(" << search << ")";
+
+  //
   // get the search text
   m_SearchText = search;
 
-  /*
-  //
-  // Obsolete code: it is kept to help re-implement this method.
-  //
-  for( int i=0; i<m_DatasetRootItem->childCount();  ++i )
+  typedef QList< QTreeWidgetItem* > QTreeWidgetItemList;
+
+  QTreeWidgetItemList items(
+    m_UI->databaseTreeWidget->findItems(
+      "*",
+      Qt::MatchWildcard | Qt::MatchRecursive,
+      0
+    )
+  );
+
+  // qDebug() << items;
+
+  for( QTreeWidgetItemList::iterator it( items.begin() );
+       it!=items.end();
+       ++it )
     {
-    QTreeWidgetItem* item = m_DatasetRootItem->child( i );
+    assert( *it==dynamic_cast< TreeWidgetItem* >( *it ) );
+    TreeWidgetItem* item = dynamic_cast< TreeWidgetItem* >( *it );
     assert( item!=NULL );
 
-    // Item is visible if search is empty or if alias contains
-    // search-text.
     item->setHidden(
-      !search.isEmpty() &&
-      !item->text( 0 ).contains( search, Qt::CaseInsensitive )
+      item->GetType()==TreeWidgetItem::ITEM_TYPE_LEAF &&
+      !item->GetText().contains( search, Qt::CaseInsensitive )
     );
+
+    // qDebug()
+    //   << item->text( 0 ) << ":" << ( item->isHidden() ? "HIDDEN" : "VISIBLE" );
     }
-  */
 }
 
 } // end namespace 'mvd'
-- 
GitLab