]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/Plugins/Navigator.cxx
...
[cpPlugins.git] / lib / cpBaseQtApplication / Plugins / Navigator.cxx
1 #include <cpBaseQtApplication/Plugins/Navigator.h>
2 #include <cpPlugins/Interface/Loader.h>
3
4 // -------------------------------------------------------------------------
5 cpBaseQtApplication::Plugins::Navigator::
6 Navigator( 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::Plugins::Navigator::
17 ~Navigator( )
18 {
19 }
20
21 // -------------------------------------------------------------------------
22 void cpBaseQtApplication::Plugins::Navigator::
23 Update( )
24 {
25   this->_Clear( );
26   this->_Update( );
27 }
28
29 // -------------------------------------------------------------------------
30 void cpBaseQtApplication::Plugins::Navigator::
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::Plugins::Navigator::
44 _Update( )
45 {
46   typedef cpPlugins::Interface::Loader _TLoader;
47   _TLoader loader;
48
49   // Iterate over categories and filters
50   auto filters = loader.GetFilters( );
51   for( auto catIt : filters )
52   {
53     const char* c_cat = catIt.first.c_str( );
54
55     // Create or get category
56     QList< QTreeWidgetItem* > cat_items =
57       this->findItems( c_cat, Qt::MatchExactly | Qt::MatchRecursive );
58     QTreeWidgetItem* cat = NULL;
59     if( cat_items.size( ) == 0 )
60     {
61       cat = new QTreeWidgetItem(
62         ( QTreeWidgetItem* )( NULL ), QStringList( c_cat )
63         );
64       this->addTopLevelItem( cat );
65     }
66     else
67       cat = cat_items[ 0 ];
68
69     for( auto filIt : catIt.second )
70     {
71       const char* c_fil = filIt.c_str( );
72       QList< QTreeWidgetItem* > filter_items =
73         this->findItems( c_fil, Qt::MatchExactly | Qt::MatchRecursive );
74       auto i = filter_items.begin( );
75       auto found_i = filter_items.end( );
76       for( ; i != filter_items.end( ); ++i )
77         if( ( *i )->parent( ) == cat )
78           found_i = i;
79
80       // Add filter
81       if( found_i == filter_items.end( ) )
82         QTreeWidgetItem* filter = new QTreeWidgetItem(
83           cat, QStringList( c_fil )
84           );
85
86     } // rof
87
88   } // rof
89   this->expandAll( );
90 }
91
92 // eof - $RCSfile$