]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/Workspace.h
...
[cpPlugins.git] / lib / cpPlugins / Interface / Workspace.h
index 863d84e7d9c597ebf224efe761a6c854ff27bd76..919233f40fb0e4a60630bef7c23c7cba559ec8c3 100644 (file)
@@ -1,14 +1,17 @@
 #ifndef __CPPLUGINS__INTERFACE__WORKSPACE__H__
 #define __CPPLUGINS__INTERFACE__WORKSPACE__H__
 
+#include <cpExtensions/DataStructures/Graph.h>
 #include <cpPlugins/Interface/Interface.h>
 #include <cpPlugins/Interface/DataObject.h>
 #include <cpPlugins/Interface/ProcessObject.h>
 
-#include <map>
 #include <set>
 #include <string>
 
+// Some forward declarations
+class QWidget;
+
 namespace cpPlugins
 {
   namespace Interface
@@ -25,63 +28,72 @@ namespace cpPlugins
       typedef TFilter::TParameters                TParameters;
 
       // Various types
-      typedef std::set< std::string > TStringContainer;
+      typedef std::set< std::string >               TStringContainer;
+      typedef std::pair< std::string, std::string > TGlobalPort;
+      typedef std::map< std::string, TGlobalPort >  TGlobalPorts;
 
-      // Graph types
-      typedef std::map< std::string, TObject::Pointer > TVertices;
-      typedef std::pair< std::string, std::string >     TConnection;
-      typedef std::vector< TConnection >                TConnections;
-      typedef std::map< std::string, TConnections >     TAdjMatrixRow;
-      typedef std::map< std::string, TAdjMatrixRow >    TAdjMatrix;
+      // Graph type
+      typedef std::pair< std::string, std::string > TConnection;
+      typedef
+        cpExtensions::DataStructures::
+        Graph< TObject::Pointer, TConnection, std::string > TGraph;
 
     public:
       Workspace( );
       virtual ~Workspace( );
 
       // Plugins management
-      bool LoadPluginsPath( const std::string& path, bool r = false );
-      bool LoadPlugins( const std::string& fname );
-      const TStringContainer& GetLoadedPlugins( ) const;
-      void GetLoadedPluginCategories( TStringContainer& categories ) const;
-      void GetLoadedPluginFilters( TStringContainer& filters ) const;
-      const TStringContainer& GetLoadedPluginFilters(
-        const std::string& category
-        ) const;
+      TInterface* GetInterface( );
+      void SetInterface( TInterface* i );
 
       // Workspace IO
       std::string LoadWorkspace( const std::string& fname );
       std::string SaveWorkspace( const std::string& fname ) const;
 
       // Graph management
+      void Clear( );
+      TGraph* GetGraph( );
+      const TGraph* GetGraph( ) const;
       bool CreateFilter( const std::string& filter, const std::string& name );
       bool Connect(
         const std::string& orig_filter, const std::string& dest_filter,
         const std::string& output_name,
         const std::string& input_name
         );
+      bool Connect( TData* input_object, const std::string& input_name );
       TParameters* GetParameters( const std::string& name );
       const TParameters* GetParameters( const std::string& name ) const;
+      TFilter* GetFilter( const std::string& name );
+      const TFilter* GetFilter( const std::string& name ) const;
+      bool HasFilter( const std::string& name ) const;
 
       // Graph reduction
       bool Reduce( const std::string& name );
+      void AddInputPort(
+        const std::string& name,
+        const std::string& filter, const std::string& filter_input
+        );
+      void AddOutputPort(
+        const std::string& name,
+        const std::string& filter, const std::string& filter_output
+        );
+      TData* GetOutput( const std::string& name );
+      const TData* GetOutput( const std::string& name ) const;
+      void ClearInputPorts( );
+      void ClearOutputPorts( );
 
       // Pipeline execution
       std::string Execute( );
-      std::string Execute( const std::string& name );
-
-    protected:
-      void _UpdateLoadedPluginsInformation( );
+      std::string Execute( const std::string& name, QWidget* p = NULL );
 
     protected:
       // Plugins interface
-      TInterface       m_Interface;
-      std::string      m_LastLoadedPlugin;
-      TStringContainer m_LoadedPlugins;
-      std::map< std::string, TStringContainer > m_LoadedFilters;
+      TInterface* m_Interface;
 
       // Processing graph
-      TVertices  m_Vertices;
-      TAdjMatrix m_AdjMatrix;
+      typename TGraph::Pointer m_Graph;
+      TGlobalPorts m_InputPorts;
+      TGlobalPorts m_OutputPorts;
     };
 
   } // ecapseman