-#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>
+#ifndef __cpPlugins__Interface__Plugins__h__
+#define __cpPlugins__Interface__Plugins__h__
+#include <cpPlugins/Config.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+#include <itkObject.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
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 Plugins Self;
+ typedef itk::Object Superclass;
+ typedef itk::SmartPointer< Self > Pointer;
+ typedef itk::SmartPointer< const Self > ConstPointer;
- typedef std::set< std::string > TStringContainer;
+ typedef std::pair< void*, void* > THandlers;
+ typedef std::pair< std::string, THandlers > TLibData;
+ typedef std::map< std::string, TLibData > TLibraries;
+ typedef std::map< std::string, TLibraries > TFilters;
public:
+ itkTypeMacro( Plugins, itk::Object );
+
+ public:
+ static Pointer New( );
+ virtual itk::LightObject::Pointer CreateAnother( ) const cpPlugins_OVERRIDE;
+ Pointer Clone( ) const;
+
+ const TFilters& GetFilters( ) const;
+
+ void LoadPluginsFile( const std::string& libname );
+ void LoadPluginsDirectory( const std::string& dir );
+ void GuessPlugins( );
+ void GuessEnvironment( const std::string& dir );
+ bool SaveEnvironment( const std::string& dir );
+
+ cpPlugins::BaseObjects::ProcessObject::Pointer
+ CreateFilter( const std::string& category, const std::string& name );
+
+ protected:
Plugins( );
virtual ~Plugins( );
+ virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const cpPlugins_OVERRIDE;
- // 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 LoadPluginsPath( const std::string& path, bool r = false );
- bool LoadPlugins( const std::string& fname );
- bool LoadPluginsConfigurationFile( const std::string& fname );
- const TStringContainer& GetLoadedPlugins( ) const;
- void GetLoadedCategories( TStringContainer& categories ) const;
- void GetLoadedFilters( TStringContainer& filters ) const;
- const TStringContainer& GetLoadedFilters(
- const std::string& category
- ) 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 );
-
- bool WriteDataObject(
- const std::string& fname, const std::string& name
- );
- bool 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
- );
- TParameters* GetActiveFilterParameters( );
- const TParameters* GetActiveFilterParameters( ) const;
- TProcessObject::DialogResult ConfigureActiveFilter( );
- bool UpdateActiveFilter(
- TStringContainer& outputs,
- const std::string& parent
- );
+ void _ReadPluginsPathsVariable( );
- protected:
- void _UpdateLoadedPluginsInformation( );
- bool _ActivateIOFilter( const std::string& filter );
- std::string _ReadData( const std::string& parent );
- bool _WriteData( const std::string& name );
- bool _InsertNewData( TDataObject* dobj, const std::string& parent );
+ 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;
-
- // 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;
+ static Pointer m_Singleton;
+ std::set< std::string > m_PluginsPaths;
+ TFilters m_Filters;
};
} // ecapseman
} // ecapseman
-#include <cpPlugins/Interface/Plugins.hxx>
-
-#endif // __CPPLUGINS__INTERFACE__PLUGINS__H__
+#endif // __cpPlugins__Interface__Plugins__h__
// eof - $RCSfile$