]> Creatis software - cpPlugins.git/blobdiff - lib/cpBaseQtApplication/Plugins/Navigator.cxx
yet another refactoring
[cpPlugins.git] / lib / cpBaseQtApplication / Plugins / Navigator.cxx
diff --git a/lib/cpBaseQtApplication/Plugins/Navigator.cxx b/lib/cpBaseQtApplication/Plugins/Navigator.cxx
new file mode 100644 (file)
index 0000000..8fa3048
--- /dev/null
@@ -0,0 +1,92 @@
+#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$