]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/Plugins.h
...
[cpPlugins.git] / lib / cpPlugins / Interface / Plugins.h
index 57ffe3f14a16f00acd30d1cb74e1661c9150ae3f..6ce634424f25231679ab3885f7e1db244b9de91a 100644 (file)
-#ifndef __CPPLUGINS__INTERFACE__PLUGINS__H__
-#define __CPPLUGINS__INTERFACE__PLUGINS__H__
-
-#include <cpPlugins/Interface/Interface.h>
-#include <cpPlugins/Interface/DataObject.h>
-#include <cpPlugins/Interface/ProcessObject.h>
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-// Some forward declarations
-class vtkRenderWindowInteractor;
-#ifdef cpPlugins_Interface_QT4
-class QWidget;
-#else
-typedef char QWidget;
-#endif // cpPlugins_Interface_QT4
+#ifndef __cpPlugins__Interface__Plugins__h__
+#define __cpPlugins__Interface__Plugins__h__
+
+#include <cpPlugins/Config.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+#include <itkObject.h>
 
 namespace cpPlugins
 {
   namespace Interface
   {
-    // Some forward declarations
-    class BaseApplication;
-
     /**
      */
-    class cpPlugins_Interface_EXPORT Plugins
+    class cpPlugins_EXPORT Plugins
+      : public itk::Object
     {
     public:
-      typedef cpPlugins::Interface::Interface     TInterface;
-      typedef cpPlugins::Interface::ProcessObject TProcessObject;
-      typedef cpPlugins::Interface::DataObject    TDataObject;
-      typedef TProcessObject::TParameters         TParameters;
-
-      typedef std::set< std::string > TStringContainer;
+      typedef Plugins                         Self;
+      typedef itk::Object                     Superclass;
+      typedef itk::SmartPointer< Self >       Pointer;
+      typedef itk::SmartPointer< const Self > ConstPointer;
+
+      typedef void* ( *TCreator )( );
+      typedef std::map< std::string, void* > TLibraries;
+      struct TCreatorData
+      {
+        std::string PluginName;
+        void*       LibraryHandle;
+        TCreator    Creator;
+      };
+      typedef std::map< std::string, TCreatorData > TFilterData;
+      typedef std::map< std::string, TFilterData >  TFilters;
+      typedef std::set< std::string >               TStrings;
+
+      typedef cpPlugins::BaseObjects::ProcessObject TProcess;
 
     public:
-      Plugins( );
-      virtual ~Plugins( );
-
-      // Qt oriented methods
-      QWidget* GetWidget( );
-      const QWidget* GetWidget( ) const;
-      void SetWidget( QWidget* widget );
-      void BlockWidget( );
-      void UnblockWidget( );
-      void DialogLoadPlugins( );
-
-      // Connection to main application
-      BaseApplication* GetApplication( );
-      const BaseApplication* GetApplication( ) const;
-      void SetApplication( BaseApplication* a );
-
-      // Plugins management
-      bool LoadPlugins( );
-      bool LoadPlugins( const std::string& fname );
-      bool LoadPluginsConfigurationFile( const std::string& fname );
-      const TStringContainer& GetLoadedPlugins( ) const;
-      void GetLoadedFilters( TStringContainer& filters ) const;
-      const TStringContainer& GetLoadedFilters(
-        const std::string& plugin
-        ) const;
-
-      // Interactors
-      void AddInteractor( vtkRenderWindowInteractor* interactor );
-      void RemoveInteractor( vtkRenderWindowInteractor* interactor );
-      void ClearInteractors( );
-
-      // Data IO
-      bool HasImageReader( ) const;
-      bool HasDicomSeriesReader( ) const;
-      bool HasMeshReader( ) const;
-      bool HasImageWriter( ) const;
-      bool HasMeshWriter( ) const;
-
-      std::string ReadImage(
-        const std::string& fname, const std::string& parent
-        );
-      std::string ReadImage(
-        const std::vector< std::string >& fnames, const std::string& parent
-        );
-      std::string ReadImage( const std::string& parent );
-      std::string ReadDicomSeries( const std::string& parent );
-      std::string ReadMesh(
-        const std::string& fname, const std::string& parent
-        );
-      std::string ReadMesh( const std::string& parent );
+      itkTypeMacro( Plugins, itk::Object );
+      itkGetConstMacro( Paths, TStrings );
 
-      std::string WriteDataObject(
-        const std::string& fname, const std::string& name
-        );
-      std::string WriteDataObject( const std::string& name );
-
-      // Data objects
-      void ClearDataObjects( );
-      void DeleteDataObject( const std::string& name );
-      void GetDataObjects( TStringContainer& names );
-      std::string GetParent( const std::string& name ) const;
-      void GetChildren(
-        TStringContainer& names, const std::string& name
-        ) const;
-      void GetRoots( TStringContainer& names ) const;
-
-      template< class T >
-        inline T* GetData( const std::string& name );
-
-      template< class T >
-        inline const T* GetData( const std::string& name ) const;
-
-      // Filter acces
-      bool ActivateFilter( const std::string& name );
-      void DeactivateFilter( );
-      bool HasActiveFilter( ) const;
-      bool IsActiveFilterInteractive( ) const;
-      void GetActiveFilterInputsNames( TStringContainer& names ) const;
-      void GetActiveFilterOutputsNames( TStringContainer& names ) const;
-      bool ConnectInputInActiveFilter(
-        const std::string& object_name, const std::string& input_name
-        );
-      bool SetOutputNameInActiveFilter(
-        const std::string& new_object_name, const std::string& output_name
+    public:
+      static Pointer New( );
+      virtual itk::LightObject::Pointer CreateAnother( ) const cpPlugins_OVERRIDE;
+      Pointer Clone( ) const;
+
+      TStrings GetLibraries( ) const;
+      TStrings GetPlugins( ) const;
+      TStrings GetCategories( ) const;
+      TStrings GetFilters( const std::string& category ) const;
+
+      void AddEnvironments( const std::string& env );
+      void LoadEnvironments( );
+      void LoadPaths( const std::string& dir );
+      void SavePaths( const std::string& dir ) const;
+
+      void LoadFile( const std::string& fname );
+      void LoadPlugin( const std::string& pname );
+      void LoadDirectory( const std::string& dirname );
+      void GuessPlugins( );
+
+      TProcess::Pointer CreateProcessObject(
+        const std::string& category, const std::string& name
         );
-      TParameters* GetActiveFilterParameters( );
-      const TParameters* GetActiveFilterParameters( ) const;
-      TProcessObject::DialogResult ConfigureActiveFilter( );
-      std::string UpdateActiveFilter( );
 
     protected:
-      void _UpdateLoadedPluginsInformation( );
-      bool _InsertNewData( TDataObject* dobj, const std::string& parent );
+      Plugins( );
+      virtual ~Plugins( );
+      virtual void PrintSelf(
+        std::ostream& os, itk::Indent indent
+        ) const cpPlugins_OVERRIDE;
+
+    private:
+      // Purposely not implemented
+      Plugins( const Self& other );
+      Self& operator=( const Self& other );
 
     protected:
-      // MVC objects
-      QWidget*         m_Widget;
-      BaseApplication* m_Application;
-
-      // Plugins interface
-      TInterface*                               m_Interface;
-      TStringContainer                          m_LoadedPlugins;
-      std::string                               m_LastLoadedPlugin;
-      std::map< std::string, TStringContainer > m_LoadedFilters;
-
-      // Loaded filters
-      std::map< std::string, TProcessObject::Pointer > m_IOFilters;
-      TProcessObject::Pointer                       m_ActiveFilter;
-      std::map< std::string, std::string >   m_ActiveFilterOutputs;
-
-      // Loaded data objects
-      typedef std::pair< std::string, TDataObject::Pointer >  _TTreeNode;
-      std::map< std::string, _TTreeNode > m_DataObjects;
-
-      // Associated interactors
-      std::set< vtkRenderWindowInteractor* > m_Interactors;
+      TStrings   m_Paths;
+      TLibraries m_Libraries;
+      TLibraries m_Plugins;
+      TFilters   m_Filters;
     };
 
   } // ecapseman
 
 } // ecapseman
 
-#include <cpPlugins/Interface/Plugins.hxx>
-
-#endif // __CPPLUGINS__INTERFACE__PLUGINS__H__
+#endif // __cpPlugins__Interface__Plugins__h__
 
 // eof - $RCSfile$