#ifndef __CPPLUGINS__INTERFACE__PLUGINS__H__ #define __CPPLUGINS__INTERFACE__PLUGINS__H__ #include #include #include #include #include #include #include // 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 { 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; 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 LoadPluginsPath( const std::string& path ); 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 ); 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 ); 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; }; } // ecapseman } // ecapseman #include #endif // __CPPLUGINS__INTERFACE__PLUGINS__H__ // eof - $RCSfile$