#ifndef __CPPLUGINS__INTERFACE__PLUGINS__H__ #define __CPPLUGINS__INTERFACE__PLUGINS__H__ #include #include #include #include #include #include #include #include class QObject; class QMenu; class QWidget; class vtkRenderWindowInteractor; namespace cpPlugins { namespace Interface { class BasePluginsApplication; /** */ class cpPlugins_Interface_EXPORT Plugins { public: typedef cpPlugins::Interface::Interface TInterface; typedef cpPlugins::Interface::ProcessObject TProcessObject; typedef cpPlugins::Interface::DataObject TDataObject; typedef cpPlugins::Interface::Image TImage; typedef cpPlugins::Interface::Mesh TMesh; typedef TProcessObject::TParameters TParameters; typedef std::set< std::string > TOrderedStringContainer; typedef std::map< std::string, std::set< std::string > > TFilters; typedef std::pair< std::string, TDataObject::Pointer > TTreeNode; typedef std::map< std::string, TTreeNode > TTree; public: Plugins( QWidget* widget = NULL ); virtual ~Plugins( ); QWidget* GetWidget( ); const QWidget* GetWidget( ) const; void SetWidget( QWidget* widget ); void BlockWidget( ); void UnblockWidget( ); void DialogLoadPlugins( ); void AssociatePluginsToMenu( QMenu* menu, QObject* obj, const char* slot ); BasePluginsApplication* GetApplication( ); const BasePluginsApplication* GetApplication( ) const; void SetApplication( BasePluginsApplication* a ); bool LoadPlugins( ); bool LoadPlugins( const std::string& fname ); bool LoadPluginsConfigurationFile( const std::string& fname ); // 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 WriteImage( const std::string& fname, const std::string& name ); bool WriteImage( const std::string& name ); bool WriteMesh( const std::string& fname, const std::string& name ); bool WriteMesh( const std::string& name ); // Data objects void ClearDataObjects( ); void DeleteDataObject( const std::string& name ); std::string GetParent( const std::string& name ) const; const TTree& GetDataObjects( ) const; TDataObject* GetDataObject( const std::string& name ); const TDataObject* GetDataObject( const std::string& name ) const; TImage* GetImage( const std::string& name ); const TImage* GetImage( const std::string& name ) const; TMesh* GetMesh( const std::string& name ); const TMesh* GetMesh( const std::string& name ) const; // Filter acces bool ActivateFilter( const std::string& name ); void DeactivateFilter( ); bool HasActiveFilter( ) const; bool IsActiveFilterInteractive( ) const; unsigned int GetNumberOfInputsInActiveFilter( ) const; unsigned int GetNumberOfOutputsInActiveFilter( ) const; std::vector< std::string > GetActiveFilterInputsNames( ) const; std::vector< std::string > GetActiveFilterOutputsNames( ) const; void ConnectInputInActiveFilter( const std::string& object_name, const std::string& input ); void SetOutputNameInActiveFilter( const std::string& new_name, const std::string& output ); TParameters* GetActiveFilterParameters( ); const TParameters* GetActiveFilterParameters( ) const; TProcessObject::DialogResult ConfigureActiveFilter( ); std::string UpdateActiveFilter( std::vector< std::string >& outputs ); protected: void _UpdateLoadedPluginsInformation( ); bool _InsertNewData( TDataObject* dobj, const std::string& parent ); protected: QWidget* m_Widget; BasePluginsApplication* m_Application; TInterface m_Interface; TOrderedStringContainer m_LoadedPlugins; std::string m_LastLoadedPlugin; TProcessObject::Pointer m_ImageReader; TProcessObject::Pointer m_ImageWriter; TProcessObject::Pointer m_MeshReader; TProcessObject::Pointer m_MeshWriter; TProcessObject::Pointer m_DicomSeriesReader; TProcessObject::Pointer m_ActiveFilter; std::map< std::string, std::string > m_ActiveFilterOutputs; TFilters m_Filters; // Loaded objects TTree m_Objects; // Associated interactors std::set< vtkRenderWindowInteractor* > m_Interactors; }; } // ecapseman } // ecapseman #endif // __CPPLUGINS__INTERFACE__PLUGINS__H__ // eof - $RCSfile$