]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/Parameters.hxx
Widget integration (step 5/6): Interactive plugins now supported, widgets updates...
[cpPlugins.git] / lib / cpPlugins / Interface / Parameters.hxx
index e47b799c7616e2c85ea7148bb4eb4fe2956e22a4..791d526263ad5584ab0b0bfe73010e7403d7ba6a 100644 (file)
 #ifndef __CPPLUGINS__INTERFACE__PARAMETERS__HXX__
 #define __CPPLUGINS__INTERFACE__PARAMETERS__HXX__
 
-#include <cstdlib>
-#include <iostream>
-#include <sstream>
+// -------------------------------------------------------------------------
+template< class I >
+void cpPlugins::Interface::Parameters::
+ConfigureAsIndex( const TString& name, const TUint& dim, const I& v )
+{
+  std::stringstream str;
+  str << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  std::string s = str.str( );
+  this->m_Parameters[ name ] = TParameter( Self::Index, TValues( s, s ) );
+  this->Modified( );
+}
 
 // -------------------------------------------------------------------------
-#define cpPlugins_Interface_Parameters_SetIndexOrPointMacro( NAME, TYPE ) \
-  template< class T >                                                   \
-  T cpPlugins::Interface::Parameters::                                  \
-  GetValueAs##NAME( const TString& name ) const                         \
-  {                                                                     \
-    T val;                                                              \
-    TParameters::const_iterator pIt = this->m_Parameters.find( name );  \
-    if( pIt != this->m_Parameters.end( ) )                              \
-    {                                                                   \
-      if( pIt->second.first == Self::NAME )                             \
-      {                                                                 \
-        std::istringstream ss( pIt->second.second );                    \
-        std::string token;                                              \
-        unsigned int i = 0;                                             \
-        while( std::getline( ss, token, ',' ) )                         \
-        {                                                               \
-          if( token != "" )                                             \
-            val[ i++ ] = TYPE( std::atof( token.c_str( ) ) );           \
-        }                                                               \
-      }                                                                 \
-    }                                                                   \
-    return( val );                                                      \
-  }
-
-cpPlugins_Interface_Parameters_SetIndexOrPointMacro( Index, long );
-cpPlugins_Interface_Parameters_SetIndexOrPointMacro( Point, double );
+template< class P >
+void cpPlugins::Interface::Parameters::
+ConfigureAsPoint( const TString& name, const TUint& dim, const P& v )
+{
+  std::stringstream str;
+  str << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  std::string s = str.str( );
+  this->m_Parameters[ name ] = TParameter( Self::Point, TValues( s, s ) );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class I >
+I cpPlugins::Interface::Parameters::
+GetIndex( const TString& name, const TUint& dim ) const
+{
+  I v;
+  TParameters::const_iterator i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
+  {
+    if( i->second.first == Self::Index )
+    {
+      std::istringstream str( i->second.second.second );
+      std::string token;
+      unsigned int d = 0;
+      while( std::getline( str, token, ';' ) && d < dim )
+      {
+        v[ d ] = std::atoi( token.c_str( ) );
+        d++;
+
+      } // elihw
+      return( v );
+
+    } // fi
+
+  } // fi
+
+  // If parameter not found
+  for( unsigned int d = 0; d < dim; ++d )
+    v[ d ] = 0;
+  return( v );
+}
+
+// -------------------------------------------------------------------------
+template< class P >
+P cpPlugins::Interface::Parameters::
+GetPoint( const TString& name, const TUint& dim ) const
+{
+  P v;
+  TParameters::const_iterator i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
+  {
+    if( i->second.first == Self::Point )
+    {
+      std::istringstream str( i->second.second.second );
+      std::string token;
+      unsigned int d = 0;
+      while( std::getline( str, token, ';' ) && d < dim )
+      {
+        v[ d ] = std::atof( token.c_str( ) );
+        d++;
+
+      } // elihw
+      return( v );
+
+    } // fi
+
+  } // fi
+
+  // If parameter not found
+  for( unsigned int d = 0; d < dim; ++d )
+    v[ d ] = float( 0 );
+  return( v );
+}
 
 // -------------------------------------------------------------------------
 template< class I >
 void cpPlugins::Interface::Parameters::
-GetValueAsIndexList( std::vector< I >& lst, const TString& name ) const
+GetIndexList(
+  std::vector< I >& lst, const TString& name, const TUint& dim
+  ) const
 {
   lst.clear( );
-  TParameters::const_iterator pIt = this->m_Parameters.find( name );
-  if( pIt == this->m_Parameters.end( ) )
+
+  TParameters::const_iterator i = this->m_Parameters.find( name );
+  if( i == this->m_Parameters.end( ) )
     return;
-  if( pIt->second.first != Self::IndexList )
+  if( i->second.first == Self::IndexList )
     return;
 
-  std::istringstream ss( pIt->second.second );
+  std::istringstream str( i->second.second.second );
   std::string token;
-  while( std::getline( ss, token, ':' ) )
+  unsigned int d = 0;
+  while( std::getline( str, token, '#' ) )
   {
-    if( token != "" )
+    std::istringstream str2( token );
+    std::string token2;
+    unsigned int d = 0;
+    I v;
+    while( std::getline( str2, token2, ';' ) && d < dim )
     {
-      std::istringstream ts( token );
-      std::string text;
-      unsigned int i = 0;
-      I idx;
-      while( std::getline( ts, text, ',' ) )
-        if( text != "" )
-          idx[ i++ ] = std::atoi( text.c_str( ) );
-      lst.push_back( idx );
+      v[ d ] = std::atoi( token.c_str( ) );
+      d++;
 
-    } // fi
+    } // elihw
+    lst.push_back( v );
 
   } // elihw
 }
@@ -68,35 +131,120 @@ GetValueAsIndexList( std::vector< I >& lst, const TString& name ) const
 // -------------------------------------------------------------------------
 template< class P >
 void cpPlugins::Interface::Parameters::
-GetValueAsPointList( std::vector< P >& lst, const TString& name ) const
+GetPointList(
+  std::vector< P >& lst, const TString& name, const TUint& dim
+  ) const
 {
   lst.clear( );
-  TParameters::const_iterator pIt = this->m_Parameters.find( name );
-  if( pIt == this->m_Parameters.end( ) )
+
+  TParameters::const_iterator i = this->m_Parameters.find( name );
+  if( i == this->m_Parameters.end( ) )
     return;
-  if( pIt->second.first != Self::PointList )
+  if( i->second.first == Self::PointList )
     return;
 
-  std::istringstream ss( pIt->second.second );
+  std::istringstream str( i->second.second.second );
   std::string token;
-  while( std::getline( ss, token, ':' ) )
+  unsigned int d = 0;
+  while( std::getline( str, token, '#' ) )
   {
-    if( token != "" )
+    std::istringstream str2( token );
+    std::string token2;
+    unsigned int d = 0;
+    P v;
+    while( std::getline( str2, token2, ';' ) && d < dim )
     {
-      std::istringstream ts( token );
-      std::string text;
-      unsigned int i = 0;
-      P pnt;
-      while( std::getline( ts, text, ',' ) )
-        if( text != "" )
-          pnt[ i++ ] = std::atof( text.c_str( ) );
-      lst.push_back( pnt );
+      v[ d ] = std::atof( token.c_str( ) );
+      d++;
 
-    } // fi
+    } // elihw
+    lst.push_back( v );
 
   } // elihw
 }
 
+// -------------------------------------------------------------------------
+template< class I >
+void cpPlugins::Interface::Parameters::
+SetIndex( const TString& name, const TUint& dim, const I& v )
+{
+  TParameters::iterator i = this->m_Parameters.find( name );
+  if( i == this->m_Parameters.end( ) )
+    return;
+  if( i->second.first != Self::Index )
+    return;
+
+  std::stringstream str;
+  str << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  i->second.second.second = str.str( );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class P >
+void cpPlugins::Interface::Parameters::
+SetPoint( const TString& name, const TUint& dim, const P& v )
+{
+  TParameters::iterator i = this->m_Parameters.find( name );
+  if( i == this->m_Parameters.end( ) )
+    return;
+  if( i->second.first != Self::Point )
+    return;
+
+  std::stringstream str;
+  str << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  i->second.second.second = str.str( );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class I >
+void cpPlugins::Interface::Parameters::
+AddToIndexList( const TString& name, const TUint& dim, const I& v )
+{
+  TParameters::iterator i = this->m_Parameters.find( name );
+  if( i == this->m_Parameters.end( ) )
+    return;
+  if( i->second.first != Self::IndexList )
+    return;
+
+  std::stringstream str;
+  if( i->second.second.second == "" )
+    str << v[ 0 ];
+  else
+    str << "#" << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  i->second.second.second += str.str( );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class P >
+void cpPlugins::Interface::Parameters::
+AddToPointList( const TString& name, const TUint& dim, const P& v )
+{
+  TParameters::iterator i = this->m_Parameters.find( name );
+  if( i == this->m_Parameters.end( ) )
+    return;
+  if( i->second.first != Self::PointList )
+    return;
+
+  std::stringstream str;
+  if( i->second.second.second == "" )
+    str << v[ 0 ];
+  else
+    str << "#" << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  i->second.second.second += str.str( );
+  this->Modified( );
+}
+
 #endif // __CPPLUGINS__INTERFACE__PARAMETERS__HXX__
 
 // eof - $RCSfile$