--- /dev/null
+#include <cpBaseQtApplication/Plugins/Navigator.h>
+#include <cpPlugins/Interface/Loader.h>
+
+// -------------------------------------------------------------------------
+cpBaseQtApplication::Plugins::Navigator::
+Navigator( QWidget* parent )
+ : Superclass( parent )
+{
+ this->setDragEnabled( true );
+ this->setDragDropMode( QAbstractItemView::DragOnly );
+ this->setAlternatingRowColors( true );
+ this->_Clear( );
+}
+
+// -------------------------------------------------------------------------
+cpBaseQtApplication::Plugins::Navigator::
+~Navigator( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpBaseQtApplication::Plugins::Navigator::
+Update( )
+{
+ this->_Clear( );
+ this->_Update( );
+}
+
+// -------------------------------------------------------------------------
+void cpBaseQtApplication::Plugins::Navigator::
+_Clear( )
+{
+ this->clear( );
+ this->setColumnCount( 1 );
+ QString header_txt = "Loaded plugins";
+ if( QTreeWidgetItem* header = this->headerItem( ) )
+ header->setText( 0, header_txt );
+ else
+ this->setHeaderLabel( header_txt );
+}
+
+// -------------------------------------------------------------------------
+void cpBaseQtApplication::Plugins::Navigator::
+_Update( )
+{
+ typedef cpPlugins::Interface::Loader _TLoader;
+ _TLoader loader;
+
+ // Iterate over categories and filters
+ auto filters = loader.GetFilters( );
+ for( auto catIt : filters )
+ {
+ const char* c_cat = catIt.first.c_str( );
+
+ // Create or get category
+ QList< QTreeWidgetItem* > cat_items =
+ this->findItems( c_cat, Qt::MatchExactly | Qt::MatchRecursive );
+ QTreeWidgetItem* cat = NULL;
+ if( cat_items.size( ) == 0 )
+ {
+ cat = new QTreeWidgetItem(
+ ( QTreeWidgetItem* )( NULL ), QStringList( c_cat )
+ );
+ this->addTopLevelItem( cat );
+ }
+ else
+ cat = cat_items[ 0 ];
+
+ for( auto filIt : catIt.second )
+ {
+ const char* c_fil = filIt.c_str( );
+ QList< QTreeWidgetItem* > filter_items =
+ this->findItems( c_fil, Qt::MatchExactly | Qt::MatchRecursive );
+ auto i = filter_items.begin( );
+ auto found_i = filter_items.end( );
+ for( ; i != filter_items.end( ); ++i )
+ if( ( *i )->parent( ) == cat )
+ found_i = i;
+
+ // Add filter
+ if( found_i == filter_items.end( ) )
+ QTreeWidgetItem* filter = new QTreeWidgetItem(
+ cat, QStringList( c_fil )
+ );
+
+ } // rof
+
+ } // rof
+ this->expandAll( );
+}
+
+// eof - $RCSfile$