]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/WorkspaceIO.cxx
Kind of bored: graph editor debugged
[cpPlugins.git] / lib / cpPlugins / Interface / WorkspaceIO.cxx
index b623ad9a025e44118c0ab0b56de645f151169025..d1578ba12818ddb9a3070f113587fcffc473ae98 100644 (file)
@@ -59,6 +59,8 @@ LoadWorkspace( const std::string& fname )
       {
         // Read parameters
         TParameters* parameters = this->GetParameters( name_value );
+        parameters->Clear( );
+
         TiXmlElement* param = filter->FirstChildElement( "parameter" );
         while( param != NULL )
         {
@@ -70,121 +72,42 @@ LoadWorkspace( const std::string& fname )
             const char* value = param->Attribute( "value" );
             if( value != NULL )
             {
-              std::istringstream value_str( value );
               if( param_type_str == "String" )
-                parameters->SetString( param_name, value );
+                parameters->ConfigureAsString( param_name );
               else if( param_type_str == "Bool" )
-                parameters->SetBool( param_name, value[ 0 ] != '0' );
+                parameters->ConfigureAsBool( param_name );
               else if( param_type_str == "Int" )
-              {
-                TParameters::TInt v;
-                value_str >> v;
-                parameters->SetInt( param_name, v );
-              }
+                parameters->ConfigureAsInt( param_name );
               else if( param_type_str == "Uint" )
-              {
-                TParameters::TUint v;
-                value_str >> v;
-                parameters->SetUint( param_name, v );
-              }
+                parameters->ConfigureAsUint( param_name );
               else if( param_type_str == "Real" )
-              {
-                TParameters::TReal v;
-                value_str >> v;
-                parameters->SetReal( param_name, v );
-              }
-              /* TODO
-                 else if( param_type_str == "Index" )
-                 else if( param_type_str == "Point" )
-                 else if( param_type_str == "Vector" )
-              */
-            }
-            else
-            {
-              if( param_type_str == "StringList" )
-              {
-                TiXmlElement* item = param->FirstChildElement( "item" );
-                while( item != NULL )
-                {
-                  value = item->Attribute( "value" );
-                  if( value != NULL )
-                    parameters->AddToStringList( param_name, value );
-                  item = item->NextSiblingElement( "item" );
-
-                } // elihw
-              }
+                parameters->ConfigureAsReal( param_name );
+              else if( param_type_str == "Index" )
+                parameters->ConfigureAsIndex( param_name );
+              else if( param_type_str == "Point" )
+                parameters->ConfigureAsPoint( param_name );
+              else if( param_type_str == "Vector" )
+                parameters->ConfigureAsVector( param_name );
+              else if( param_type_str == "StringList" )
+                parameters->ConfigureAsStringList( param_name );
               else if( param_type_str == "BoolList" )
-              {
-                TiXmlElement* item = param->FirstChildElement( "item" );
-                while( item != NULL )
-                {
-                  value = item->Attribute( "value" );
-                  if( value != NULL )
-                    parameters->AddToBoolList( param_name, value[ 0 ] != '0' );
-                  item = item->NextSiblingElement( "item" );
-
-                } // elihw
-              }
+                parameters->ConfigureAsBoolList( param_name );
               else if( param_type_str == "IntList" )
-              {
-                TiXmlElement* item = param->FirstChildElement( "item" );
-                while( item != NULL )
-                {
-                  value = item->Attribute( "value" );
-                  if( value != NULL )
-                  {
-                    std::istringstream value_str( value );
-                    TParameters::TInt v;
-                    value_str >> v;
-                    parameters->AddToIntList( param_name, v );
-
-                  } // fi
-                  item = item->NextSiblingElement( "item" );
-
-                } // elihw
-              }
+                parameters->ConfigureAsIntList( param_name );
               else if( param_type_str == "UintList" )
-              {
-                TiXmlElement* item = param->FirstChildElement( "item" );
-                while( item != NULL )
-                {
-                  value = item->Attribute( "value" );
-                  if( value != NULL )
-                  {
-                    std::istringstream value_str( value );
-                    TParameters::TUint v;
-                    value_str >> v;
-                    parameters->AddToUintList( param_name, v );
-
-                  } // fi
-                  item = item->NextSiblingElement( "item" );
-
-                } // elihw
-              }
+                parameters->ConfigureAsUintList( param_name );
               else if( param_type_str == "RealList" )
-              {
-                TiXmlElement* item = param->FirstChildElement( "item" );
-                while( item != NULL )
-                {
-                  value = item->Attribute( "value" );
-                  if( value != NULL )
-                  {
-                    std::istringstream value_str( value );
-                    TParameters::TReal v;
-                    value_str >> v;
-                    parameters->AddToRealList( param_name, v );
+                parameters->ConfigureAsRealList( param_name );
+              else if( param_type_str == "IndexList" )
+                parameters->ConfigureAsIndexList( param_name );
+              else if( param_type_str == "PointList" )
+                parameters->ConfigureAsPointList( param_name );
+              else if( param_type_str == "VectorList" )
+                parameters->ConfigureAsVectorList( param_name );
+              else if( param_type_str == "Choices" )
+                parameters->ConfigureAsChoices( param_name );
+              parameters->SetString( param_name, value, false );
 
-                  } // fi
-                  item = item->NextSiblingElement( "item" );
-
-                } // elihw
-              }
-              /* TODO
-                 else if( param_type_str == "IndexList" )
-                 else if( param_type_str == "PointList" )
-                 else if( param_type_str == "VectorList" )
-                 else if( param_type_str == "Choices" );
-              */
             } // fi
 
           } // fi
@@ -203,7 +126,7 @@ LoadWorkspace( const std::string& fname )
 
   } // elihw
 
-  // Read filters
+  // Read connections
   TiXmlElement* connection = root->FirstChildElement( "connection" );
   while( connection != NULL )
   {
@@ -271,7 +194,6 @@ SaveWorkspace( const std::string& fname ) const
       {
         TiXmlElement* p = new TiXmlElement( "parameter" );
         p->SetAttribute( "name", nIt->c_str( ) );
-        //const char* param_type = param->Attribute( "type" );
         if( params->HasString( *nIt ) )
           p->SetAttribute( "type", "String" );
         else if( params->HasBool( *nIt ) ) 
@@ -306,7 +228,9 @@ SaveWorkspace( const std::string& fname ) const
           p->SetAttribute( "type", "VectorList" );
         else if( params->HasChoices( *nIt ) )
           p->SetAttribute( "type", "Choices" );
-        p->SetAttribute( "value", params->GetString( *nIt, false ).c_str( ) );
+        p->SetAttribute(
+          "value", params->GetString( *nIt, false ).c_str( )
+          );
         e->LinkEndChild( p );
 
       } // rof
@@ -314,10 +238,39 @@ SaveWorkspace( const std::string& fname ) const
     }
     else if( data != NULL )
     {
+      // TODO
     } // fi
 
   } // rof
 
+  // Save connections
+  auto mIt = this->m_Graph->BeginEdgesRows( );
+  for( ; mIt != this->m_Graph->EndEdgesRows( ); ++mIt )
+  {
+    auto rIt = mIt->second.begin( );
+    for( ; rIt != mIt->second.end( ); ++rIt )
+    {
+      auto eIt = rIt->second.begin( );
+      for( ; eIt != rIt->second.end( ); ++eIt )
+      {
+        TiXmlElement* conn = new TiXmlElement( "connection" );
+        TiXmlElement* orig = new TiXmlElement( "origin" );
+        TiXmlElement* dest = new TiXmlElement( "destination" );
+        orig->SetAttribute( "filter", mIt->first.c_str( ) );
+        orig->SetAttribute( "name", eIt->first.c_str( ) );
+        dest->SetAttribute( "filter", rIt->first.c_str( ) );
+        dest->SetAttribute( "name", eIt->second.c_str( ) );
+
+        conn->LinkEndChild( orig );
+        conn->LinkEndChild( dest );
+        root->LinkEndChild( conn );
+
+      } // rof
+
+    } // rof
+
+  } // rof
+
   // Physical write and return
   doc->LinkEndChild( root );
   doc->SaveFile( fname.c_str( ) );