]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/PluginsNavigator.cxx
...
[cpPlugins.git] / lib / cpBaseQtApplication / PluginsNavigator.cxx
1 #include <cpBaseQtApplication/PluginsNavigator.h>
2 #include <cpPlugins/Interface/Plugins.h>
3
4 // -------------------------------------------------------------------------
5 cpBaseQtApplication::PluginsNavigator::
6 PluginsNavigator( QWidget* parent )
7   : Superclass( parent )
8 {
9   this->setDragEnabled( true );
10   this->setDragDropMode( QAbstractItemView::DragOnly );
11   this->setAlternatingRowColors( true );
12   this->_Clear( );
13 }
14  
15 // -------------------------------------------------------------------------
16 cpBaseQtApplication::PluginsNavigator::
17 ~PluginsNavigator( )
18 {
19 }
20
21 // -------------------------------------------------------------------------
22 void cpBaseQtApplication::PluginsNavigator::
23 Update( )
24 {
25   this->_Clear( );
26   this->_Update( );
27 }
28
29 // -------------------------------------------------------------------------
30 void cpBaseQtApplication::PluginsNavigator::
31 _Clear( )
32 {
33   this->clear( );
34   this->setColumnCount( 1 );
35   QString header_txt = "Loaded plugins";
36   if( QTreeWidgetItem* header = this->headerItem( ) )
37     header->setText( 0, header_txt );
38   else
39     this->setHeaderLabel( header_txt );
40 }
41
42 // -------------------------------------------------------------------------
43 void cpBaseQtApplication::PluginsNavigator::
44 _Update( )
45 {
46   cpPlugins::Interface::Plugins::Pointer interface =
47     cpPlugins::Interface::Plugins::New( );
48
49   // Iterate over categories and filters
50   auto categories = interface->GetCategories( );
51   unsigned int filter_count = 0;
52   for( auto c = categories.begin( ); c != categories.end( ); ++c )
53   {
54     // Create or get category
55     QList< QTreeWidgetItem* > cat_items =
56       this->findItems( c->c_str( ), Qt::MatchExactly | Qt::MatchRecursive );
57     QTreeWidgetItem* cat = NULL;
58     if( cat_items.size( ) == 0 )
59     {
60       cat = new QTreeWidgetItem(
61         ( QTreeWidgetItem* )( NULL ), QStringList( c->c_str( ) )
62         );
63       this->addTopLevelItem( cat );
64     }
65     else
66       cat = cat_items[ 0 ];
67
68     // Create filters
69     auto filters = interface->GetFilters( *c );
70     filter_count += filters.size( );
71     for( auto f = filters.begin( ); f != filters.end( ); ++f )
72     {
73       QList< QTreeWidgetItem* > filter_items =
74         this->findItems( f->c_str( ), Qt::MatchExactly | Qt::MatchRecursive );
75       auto i = filter_items.begin( );
76       auto found_i = filter_items.end( );
77       for( ; i != filter_items.end( ); ++i )
78         if( ( *i )->parent( ) == cat )
79           found_i = i;
80
81       // Add filter
82       if( found_i == filter_items.end( ) )
83         QTreeWidgetItem* filter = new QTreeWidgetItem(
84           cat, QStringList( f->c_str( ) )
85           );
86
87     } // rof
88
89   } // rof
90   this->expandAll( );
91 }
92
93 // eof - $RCSfile$