--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_Base.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_Base.hxx"
+
+char *SuperVision_Version = "1.04" ;
+
+char *NULLSTRING = "" ;
+
+char *FACTORYSERVER = "localhost/FactoryServer" ;
+
+GraphBase::Base::Base() {
+ _prof_debug = NULL ;
+ _fdebug = NULL ;
+}
+
+void GraphBase::Base::SetDebug( CORBA::ORB_ptr ORB ,
+ int * theprof_debug , ostream * thefdebug ) {
+ _Orb = CORBA::ORB::_duplicate( ORB ) ;
+ _prof_debug = theprof_debug ;
+ _fdebug = thefdebug ;
+}
+
+char * GraphBase::Base::ObjectToString( CORBA::Object_ptr obj ) const {
+ return _Orb->object_to_string( obj );
+}
+
+CORBA::Object_ptr GraphBase::Base::StringToObject( char * obj ) const {
+ return _Orb->string_to_object( obj );
+}
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_Base.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOW_BASE_HXX
+#define _DATAFLOW_BASE_HXX
+
+#include <iostream>
+#include <fstream>
+#include <strstream>
+#include <iomanip>
+#include <string>
+#include <map>
+#include <vector>
+#include <list>
+
+#include <qdom.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(SUPERV)
+
+#include "utilities.h"
+#include "OpUtil.hxx"
+
+#include "SALOME_NamingService.hxx"
+
+extern char *SuperVision_Version ;
+
+extern char *NULLSTRING ;
+
+extern char *FACTORYSERVER ;
+
+inline char * my_strdup( const char * s ) {
+ if (s == NULL) return NULL;
+
+ size_t l = strlen(s) + 1;
+ char * t = new char[l];
+ strcpy(t, s);
+ return t;
+}
+
+enum StatusOfPort { NotConnected , PortConnected , PortAndDataConnected ,
+ DataConnected } ;
+
+namespace GraphBase {
+
+ struct SCoord {
+ long theX ;
+ long theY ;
+ };
+
+ typedef vector<SCoord> ListOfCoords;
+
+ typedef string FuncName ;
+
+ typedef vector< FuncName > ListOfFuncName ;
+
+ typedef vector<const SUPERV::ListOfStrings *> ListOfPythonFunctions ;
+
+ struct NodeParameter {
+ SALOME_ModuleCatalog::ServicesParameter theInParameter ;
+ SALOME_ModuleCatalog::ServicesParameter theOutParameter ;
+ };
+
+ typedef vector<NodeParameter> ListOfParameters;
+
+ struct SNode {
+ string theComponentName ;
+ string theInterfaceName ;
+ string theName ;
+ SUPERV::KindOfNode theKind ;
+ string theCoupledNode ;
+ SALOME_ModuleCatalog::Service theService ;
+ ListOfParameters theListOfParameters ;
+ ListOfFuncName theListOfFuncName ;
+ ListOfPythonFunctions theListOfPythonFunctions ;
+ SUPERV::SDate theFirstCreation ;
+ SUPERV::SDate theLastModification ;
+ string theEditorRelease ;
+ string theAuthor ;
+ string theContainer;
+ string theComment;
+ SCoord theCoords ;
+ };
+
+ typedef vector<SNode> ListOfNodes;
+
+ struct ServicesData {
+ SALOME_ModuleCatalog::ServicesParameter aDataParameter ;
+ CORBA::Any aDataValue;
+ };
+
+ typedef vector<ServicesData> ListOfServicesData;
+
+ struct SLink {
+ string FromNodeName ;
+ string FromServiceParameterName ;
+ string ToNodeName ;
+ string ToServiceParameterName ;
+ CORBA::Any aLinkValue;
+ ListOfCoords aListOfCoords ;
+ };
+
+ typedef vector<SLink> ListOfLinks;
+
+ struct SGraph {
+ SNode Info ;
+ ListOfNodes Nodes ;
+ ListOfLinks Links ;
+ ListOfLinks Datas ;
+ };
+
+ typedef vector<SGraph> ListOfGraphs;
+
+ class Base {
+
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+
+ public:
+
+ int * _prof_debug;
+ ostream * _fdebug;
+
+ Base() ;
+ virtual ~Base() {} ;
+
+ void SetDebug( CORBA::ORB_ptr ORB ,
+ int * prof_debug , ostream * fdebug ) ;
+
+ char * ObjectToString( CORBA::Object_ptr obj ) const ;
+ CORBA::Object_ptr StringToObject(char * obj ) const ;
+
+ } ;
+# ifdef _DEBUG_
+
+# define cdebug \
+ if ( GraphBase::Base::_prof_debug ) \
+ *GraphBase::Base::_fdebug << " " /*<< setw(3*(*GraphBase::Base::_prof_debug)) */<< " "
+
+# define cdebug_in \
+ if ( GraphBase::Base::_prof_debug ) \
+ *GraphBase::Base::_fdebug << endl << "-->" /*<< setw(3*((*GraphBase::Base::_prof_debug)++)) */<< " "
+
+# define cdebug_out \
+ if ( GraphBase::Base::_prof_debug ) \
+ *GraphBase::Base::_fdebug << endl << "<--" /*<< setw(3*(--(*GraphBase::Base::_prof_debug)))*/ << " "
+# else
+
+# define cdebug while (false) std::cerr
+# define cdebug_in cdebug
+# define cdebug_out cdebug
+# define debugFile(x)
+
+# endif
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_Node.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_InLineNode.hxx"
+#include "DataFlowBase_LoopNode.hxx"
+
+static void InitFields( SUPERV::KindOfNode &_Kind ,
+ SUPERV::SDate &_FirstCreation ,
+ SUPERV::SDate &_LastModification ,
+ char * &_EditorRelease ,
+ char * &_Author ,
+ char * &_Comment ,
+ bool &_HeadNode ,
+ bool &_GeneratedName ,
+ int &_ConnectedInPortsNumber ,
+ int &_DecrConnectedInPortsNumber,
+ int &_LinkedNodesSize ,
+ int &_SubGraphNumber ) {
+ time_t T = time(NULL);
+ struct tm * Tm = localtime(&T);
+
+ _Kind = SUPERV::DataFlowNode ;
+
+ _FirstCreation.Second = _LastModification.Second = Tm->tm_sec;
+ _FirstCreation.Minute = _LastModification.Minute = Tm->tm_min;
+ _FirstCreation.Hour = _LastModification.Hour = Tm->tm_hour;
+ _FirstCreation.Day = _LastModification.Day = Tm->tm_mday;
+ _FirstCreation.Month = _LastModification.Month = Tm->tm_mon + 1;
+ _FirstCreation.Year = _LastModification.Year = Tm->tm_year + 1900;
+
+ _EditorRelease = new char[ strlen( SuperVision_Version ) + 1 ] ;
+ strcpy( _EditorRelease , SuperVision_Version ) ;
+ _Author = NULLSTRING ;
+// _Computer = new char[ strlen( FACTORYSERVER ) + 1 ] ;
+// strcpy( _Computer , FACTORYSERVER ) ;
+ _Comment = NULLSTRING ;
+
+ _SubGraphNumber = 0 ;
+ _HeadNode = false ;
+ _GeneratedName = false ;
+
+ _ConnectedInPortsNumber = 0 ;
+ _DecrConnectedInPortsNumber = 0 ;
+ _LinkedNodesSize = 0 ;
+ _SubGraphNumber = 0 ;
+}
+
+GraphBase::ComputingNode::ComputingNode() :
+ GraphBase::PortsOfNode::PortsOfNode() {
+
+ InitFields( _Kind ,
+ _FirstCreation ,
+ _LastModification ,
+ _EditorRelease ,
+ _Author ,
+ _Comment ,
+ _HeadNode ,
+ _GeneratedName ,
+ _ConnectedInPortsNumber ,
+ _DecrConnectedInPortsNumber ,
+ _LinkedNodesSize ,
+ _SubGraphNumber ) ;
+ _NamingService = NULL ;
+ _Node = SUPERV::CNode::_nil() ;
+ _InNode = NULL ;
+ _ThreadNo = pthread_self() ;
+ _Name = NULL ;
+ cdebug << "GraphBase::Node::Node " << this
+ << " _Name "
+ << (void *) _Name << " " << _Name << " _Comment "
+ << (void *) _Comment << " " << _Comment << " " << endl ;
+
+}
+
+GraphBase::ComputingNode::ComputingNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * aDataFlowName ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::PortsOfNode::PortsOfNode( aDataFlowName ) {
+
+ InitFields( _Kind ,
+ _FirstCreation ,
+ _LastModification ,
+ _EditorRelease ,
+ _Author ,
+ _Comment ,
+ _HeadNode ,
+ _GeneratedName ,
+ _ConnectedInPortsNumber ,
+ _DecrConnectedInPortsNumber ,
+ _LinkedNodesSize ,
+ _SubGraphNumber ) ;
+
+ _ORB = CORBA::ORB::_duplicate( ORB ) ;
+ _NamingService = ptrNamingService ;
+ _Graph_prof_debug = Graph_prof_debug ;
+ _Graph_fdebug = Graph_fdebug ;
+ _Node = SUPERV::CNode::_nil() ;
+ _InNode = NULL ;
+ _ThreadNo = pthread_self() ;
+
+ if ( aDataFlowName && strlen( aDataFlowName ) ) {
+ _Name = new char[ strlen( aDataFlowName )+1 ] ;
+ strcpy( _Name , aDataFlowName ) ;
+ }
+ else
+ _Name = NULL ;
+ if ( Graph_prof_debug ) {
+ SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+// MESSAGE( "Invalid DataFlow Name." );
+ }
+ cdebug << "GraphBase::ComputingNode::ComputingNode " << this
+ << "' _Name "
+ << (void *) _Name << " '" << _Name << " _Comment "
+ << (void *) _Comment << " " << _Comment << " " << _FirstCreation
+ << " " << _LastModification << endl ;
+}
+
+GraphBase::ComputingNode::ComputingNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& aService ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::PortsOfNode::PortsOfNode() {
+
+ _ORB = CORBA::ORB::_duplicate( ORB ) ;
+ _NamingService = ptrNamingService ;
+ _Graph_prof_debug = Graph_prof_debug ;
+ _Graph_fdebug = Graph_fdebug ;
+ _Node = SUPERV::CNode::_nil() ;
+ _InNode = NULL ;
+ _ThreadNo = pthread_self() ;
+
+ _Kind = akind ;
+
+ time_t T = time(NULL);
+ struct tm * Tm = localtime(&T);
+
+ _FirstCreation.Second = _LastModification.Second = Tm->tm_sec;
+ _FirstCreation.Minute = _LastModification.Minute = Tm->tm_min;
+ _FirstCreation.Hour = _LastModification.Hour = Tm->tm_hour;
+ _FirstCreation.Day = _LastModification.Day = Tm->tm_mday;
+ _FirstCreation.Month = _LastModification.Month = Tm->tm_mon + 1;
+ _FirstCreation.Year = _LastModification.Year = Tm->tm_year + 1900;
+
+ if ( NodeEditorRelease ) {
+ _EditorRelease = new char[ strlen( NodeEditorRelease ) + 1 ] ;
+ strcpy( _EditorRelease , NodeEditorRelease ) ;
+ }
+ else {
+ _EditorRelease = new char[ strlen( SuperVision_Version ) + 1 ] ;
+ strcpy( _EditorRelease , SuperVision_Version ) ;
+ }
+
+ if ( NodeAuthor ) {
+ _Author = new char[ strlen( NodeAuthor ) + 1 ] ;
+ strcpy( _Author , NodeAuthor ) ;
+ }
+ else
+ _Author = NULLSTRING ;
+
+ if ( NodeComment ) {
+ _Comment = new char[ strlen( NodeComment ) + 1 ] ;
+ strcpy( _Comment , NodeComment ) ;
+ }
+ else
+ _Comment = NULLSTRING ;
+
+ _SubGraphNumber = 0 ;
+ _HeadNode = false ;
+ _GeneratedName = GeneratedName ;
+
+ const char *aNodeName = NodeName ;
+ _Name = new char[strlen(aNodeName)+1];
+ strcpy(_Name , aNodeName);
+
+ _ConnectedInPortsNumber = 0 ;
+ _DecrConnectedInPortsNumber = 0 ;
+ _LinkedNodesSize = 0 ;
+
+ _X = X ;
+ _Y = Y ;
+
+ if ( Graph_prof_debug )
+ SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+
+// if ( !IsOneOfInLineNodes() ) {
+ DefPortsOfNode( ORB , aService , NamePtr() , Kind() ,
+ IsDataFlowNode() || IsComputingNode() ||
+ IsFactoryNode() , // DataFlowOrComputing
+ IsLoopNode() || IsEndLoopNode() , // WithInLoop
+ IsComputingNode() || IsFactoryNode() ||// WithInGate
+ IsInLineNode() || IsLoopNode() || IsSwitchNode() ||
+ IsEndSwitchNode() ,
+// IsGOTONode() || IsEndLoopNode() || IsEndSwitchNode() ,
+ IsComputingNode() || IsFactoryNode() || // WithOutGate
+ IsInLineNode() || IsSwitchNode() || IsGOTONode() ,
+// IsEndLoopNode() || IsEndSwitchNode() ,
+ Graph_prof_debug , Graph_fdebug ) ;
+// }
+
+ cdebug_in << "GraphBase::ComputingNode::ComputingNode(" << aService.ServiceName << ","
+ << aNodeName << "," << akind
+ << "," << NodeComment << ")" << endl;
+
+ cdebug << "GraphBase::ComputingNode::ComputingNode " << this
+ << " _Name "
+ << (void *) _Name << " '" << _Name << "' _Comment "
+ << (void *) _Comment << " " << _Comment << " "
+ << " KindOfNode " << _Kind
+ << " ServiceName " << ServiceName() << " In(" << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug_out << "GraphBase::ComputingNode::ComputingNode" << endl;
+}
+
+GraphBase::ComputingNode::~ComputingNode() {
+ cdebug << "GraphBase::ComputingNode::~ComputingNode " << this
+ << " _Name "
+ << (void *) _Name << " " << _Name << " _Comment "
+ << (void *) _Comment << " " << _Comment << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( _Comment != NULLSTRING )
+// delete [] _Comment;
+}
+
+bool GraphBase::ComputingNode::Name( const char * aName) {
+ if ( _Name ) {
+ cdebug << "GraphBase::ComputingNode::ReName " << _Name << " --> " << aName << endl ;
+ delete [] _Name ;
+ }
+ _Name = new char[strlen(aName)+1] ;
+ strcpy( _Name , aName ) ;
+ return true ;
+}
+
+SUPERV::SDate GraphBase::ComputingNode::FirstCreation () const {
+ cdebug << "GraphBase::ComputingNode::FirstCreation "
+ << "' _Name " << _Name << " " << _FirstCreation << " "
+ << _LastModification << endl ;
+ return _FirstCreation;
+}
+
+SUPERV::SDate GraphBase::ComputingNode::LastModification () const {
+ return _LastModification ;
+}
+
+bool GraphBase::ComputingNode::Kind(const SUPERV::KindOfNode aKind) {
+ _Kind = aKind ;
+ return true ;
+}
+
+void GraphBase::ComputingNode::FirstCreation(const SUPERV::SDate aDate ) {
+ _FirstCreation = aDate ;
+}
+
+void GraphBase::ComputingNode::LastModification(const SUPERV::SDate aDate ) {
+ _LastModification = aDate ;
+}
+
+bool GraphBase::ComputingNode::EditorRelease(const char * c){
+ if ( _EditorRelease && _EditorRelease != NULLSTRING )
+ delete _EditorRelease;
+ _EditorRelease = my_strdup(c);
+ return true ;
+}
+
+bool GraphBase::ComputingNode::Author(const char * a) {
+ if ( _Author && _Author != NULLSTRING )
+ delete _Author;
+ _Author = my_strdup(a);
+ return true ;
+}
+
+bool GraphBase::ComputingNode::Comment(const char *c) {
+ cdebug_in << "GraphBase::ComputingNode::Comment" << endl;
+ if ( _Comment != NULLSTRING )
+ delete [] _Comment;
+ _Comment = my_strdup(c);
+ cdebug_out << "GraphBase::ComputingNode::Comment" << endl;
+ return true ;
+}
+
+void GraphBase::ComputingNode::NodePort( const char * NodeName ,
+ const char * ServiceParameterName ,
+ char ** aNode , char ** aPort ) {
+ if ( strcmp( NodeName , Name() ) ) {
+ *aNode = my_strdup( NodeName ) ;
+ *aPort = my_strdup( ServiceParameterName ) ;
+ }
+ else {
+ char * BPort = strchr( ServiceParameterName , '\\' ) ;
+ if ( BPort ) {
+ int len = BPort - ServiceParameterName ;
+ *aNode = new char [ len + 1 ] ;
+ strncpy( *aNode , ServiceParameterName , len ) ;
+ (*aNode)[ len ] = '\0' ;
+ *aPort = my_strdup( &BPort[ 1 ] ) ;
+ }
+ else {
+ *aNode = my_strdup( NULLSTRING ) ;
+ *aPort = my_strdup( NULLSTRING ) ;
+ }
+ }
+}
+
+bool GraphBase::ComputingNode::IsLinked(const char * ToServiceParameterName ) {
+ bool RetVal = false ;
+ const GraphBase::InPort * thePort = GetInPort( ToServiceParameterName ) ;
+ if ( thePort ) {
+ RetVal = thePort->IsConnected() ;
+ }
+ else {
+ const GraphBase::OutPort * thePort = GetOutPort( ToServiceParameterName ) ;
+ if ( thePort ) {
+ RetVal = thePort->IsConnected() ;
+ }
+ }
+ return RetVal ;
+}
+
+bool GraphBase::ComputingNode::HasInput(const char * ToServiceParameterName ) {
+ bool RetVal = false ;
+ const GraphBase::InPort * thePort = GetInPort( ToServiceParameterName ) ;
+ if ( IsDataFlowNode() && thePort ) {
+ RetVal = true ;
+ }
+ else if ( thePort ) {
+ RetVal = thePort->IsDataConnected() ;
+ }
+ else {
+ const GraphBase::OutPort * thePort = GetOutPort( ToServiceParameterName ) ;
+ if ( thePort ) {
+ RetVal = thePort->IsDataConnected() ;
+ }
+ }
+ return RetVal ;
+}
+
+GraphBase::SNode * GraphBase::ComputingNode::GetInfo() {
+ cdebug_in << "GraphBase::ComputingNode::GetInfo" << endl;
+ GraphBase::SNode * Info = new GraphBase::SNode ;
+// Info->theComponentName = ComponentName() ;
+// Info->theInterfaceName = InterfaceName() ;
+ Info->theName = Name() ;
+ Info->theKind = Kind() ;
+ Info->theService = *GetService() ;
+// Info->theListOfParameters = *GetListOfParameters() ;
+ Info->theFirstCreation = FirstCreation() ;
+ Info->theLastModification = LastModification() ;
+ Info->theEditorRelease = EditorRelease() ;
+ Info->theAuthor = Author() ;
+// Info->theContainer = Computer() ;
+ Info->theComment = Comment() ;
+ Info->theCoords.theX = GraphBase::ComputingNode::XCoordinate() ;
+ Info->theCoords.theY = GraphBase::ComputingNode::YCoordinate() ;
+ cdebug_out << "GraphBase::ComputingNode::GetInfo" << endl;
+ return Info ;
+}
+
+GraphBase::InPort * GraphBase::ComputingNode::AddInPort( const char * InputParameterName ,
+ const char * InputParameterType ) {
+ return GraphBase::PortsOfNode::AddInPort( _ORB , NamePtr() ,
+ Kind() ,
+ InputParameterName ,
+ InputParameterType ,
+ _Graph_prof_debug , _Graph_fdebug ) ;
+}
+GraphBase::OutPort * GraphBase::ComputingNode::AddOutPort( const char * OutputParameterName ,
+ const char * OutputParameterType ) {
+ return GraphBase::PortsOfNode::AddOutPort( _ORB , NamePtr() ,
+ Kind() ,
+ OutputParameterName ,
+ OutputParameterType ,
+ _Graph_prof_debug , _Graph_fdebug ) ;
+}
+
+void GraphBase::ComputingNode::AddLink( GraphBase::ComputingNode * ToNode ) {
+ int index = GetLinkedNodeIndex( ToNode->Name() ) ;
+ if ( index < 0 ) {
+ cdebug << Name() << "->GraphBase::ComputingNode::AddLinkedNode( " << ToNode->Name()
+ << " ) new LinkedNode " << endl ;
+ _LinkedNodes.resize( _LinkedNodesSize+1 ) ;
+ _LinkedInPortsNumber.resize( _LinkedNodesSize+1 ) ;
+ _LinkedNodes[ _LinkedNodesSize ] = ToNode ;
+ _LinkedInPortsNumber[ _LinkedNodesSize ] = 1 ;
+ SetLinkedNodeIndex( ToNode->Name() , _LinkedNodesSize ) ;
+ index = _LinkedNodesSize ;
+ _LinkedNodesSize++ ;
+ }
+ else {
+ cdebug << Name() << "->GraphBase::ComputingNode::AddLinkedNode( " << ToNode->Name()
+ << " ) old LinkedNode " << _LinkedNodes[index ]->Name() << endl ;
+ _LinkedInPortsNumber[ index ] += 1 ;
+ }
+ cdebug << Name() << "->GraphBase::ComputingNode::AddLinkedNode( " << ToNode->Name()
+ << " ) LinkedNodesSize " << _LinkedNodesSize << " [ " << index
+ << " ] _LinkedInPortsNumber " << _LinkedInPortsNumber[ index ]
+ << " ConnectedInPortsNumber " << ToNode->ConnectedInPortsNumber()
+ << " + 1 Service " << ServiceName() << endl ;
+ ToNode->IncrConnectedInPortsNumber() ;
+}
+
+void GraphBase::ComputingNode::RemoveLink( GraphBase::ComputingNode * ToNode ) {
+ int index = GetLinkedNodeIndex( ToNode->Name() ) ;
+ if ( index >= 0 ) {
+ cdebug << "GraphBase::ComputingNode::RemoveLink( to " << ToNode->Name() << " from "
+ << Name() << " index : " << index << " ConnectedInPortsNumber "
+ << ToNode->ConnectedInPortsNumber() - 1 << " LinkedInPortsNumber "
+ << _LinkedInPortsNumber[ index ] << " - 1" << endl ;
+ ToNode->DecrConnectedInPortsNumber() ;
+ _LinkedInPortsNumber[ index ] -= 1 ;
+ if ( _LinkedInPortsNumber[ index ] == 0 ) {
+ _LinkedNodesSize-- ;
+ cdebug << "GraphBase::ComputingNode::RemoveLink new LinkedNodesSize "
+ << _LinkedNodesSize << " " << ToNode->Name() << " removed from "
+ << " linkednodes of " << Name() << endl ;
+ int i ;
+ for ( i = index ; i < _LinkedNodesSize ; i++ ) {
+ _LinkedNodes[ i ] = _LinkedNodes[ i+1 ] ;
+ _LinkedInPortsNumber[ i ] = _LinkedInPortsNumber[ i+1 ] ;
+ SetLinkedNodeIndex( _LinkedNodes[ i ]->Name() , i ) ;
+ }
+ DelLinkedNodeIndex( ToNode->Name() ) ;
+ _LinkedNodes.resize( _LinkedNodesSize+1 ) ;
+ _LinkedInPortsNumber.resize( _LinkedNodesSize+1 ) ;
+ }
+ }
+ else {
+ cdebug << " Error index " << index << endl ;
+ }
+}
+
+void GraphBase::ComputingNode::ReNameLink( const char* OldNodeName ,
+ const char* NewNodeName ) {
+ cdebug_in << "GraphBase::ComputingNode::ReNameLink (" << OldNodeName << " , "
+ << NewNodeName << ")" << endl;
+ int index = GetLinkedNodeIndex( OldNodeName ) ;
+ if ( index >= 0 ) {
+ _MapOfLinkedNodes.erase( OldNodeName ) ;
+ SetLinkedNodeIndex( NewNodeName , index ) ;
+ }
+ cdebug_out << "GraphBase::ComputingNode::ReNameLink" << endl ;
+}
+
+#if 0
+const GraphBase::ListOfParameters * GraphBase::ComputingNode::GetListOfParameters() const {
+ GraphBase::ListOfParameters * aListOfParameters = new GraphBase::ListOfParameters ;
+ if ( IsInLineNode() || IsGOTONode() ) {
+ unsigned int i;
+ for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
+ const InPort * anInPort = GetNodeInPort( i ) ;
+ if ( anInPort->IsBus() ) {
+ int size = aListOfParameters->size() ;
+ aListOfParameters->resize( size + 1 ) ;
+ (*aListOfParameters)[size].theInParameter.Parametername = anInPort->PortName() ;
+ (*aListOfParameters)[size].theInParameter.Parametertype = anInPort->PortType() ;
+ const OutPort * anOutPort = GetNodeOutPort( anInPort->PortIndex() ) ;
+ (*aListOfParameters)[size].theOutParameter.Parametername = anOutPort->PortName() ;
+ (*aListOfParameters)[size].theOutParameter.Parametertype = anOutPort->PortType() ;
+ }
+ }
+ }
+ return aListOfParameters ;
+}
+#endif
+
+bool GraphBase::ComputingNode::SaveXML( QDomDocument & Graph , QDomElement & info ,
+ const char * ComponentName ,
+ const char * InterfaceName ,
+ const char * Computer ,
+ const char * CoupledNode ,
+ const ListOfFuncName FuncNames ,
+ const ListOfPythonFunctions PythonFunctions ,
+ int XCoordinate , int YCoordinate ) const {
+ QDomElement node = Graph.createElement( "node" ) ;
+ info.appendChild( node ) ;
+ QDomElement componentname = Graph.createElement( "component-name" ) ;
+ QDomText aField ;
+ if ( strlen( ComponentName ) ) {
+// f << Tabs << "<component-name>" << ComponentName << "</component-name>"
+// << endl ;
+// componentname.setNodeValue( ComponentName ) ;
+ aField = Graph.createTextNode( ComponentName ) ;
+ }
+ else {
+// f << Tabs << "<component-name>?</component-name>" << endl ;
+// componentname.setNodeValue( "?" ) ;
+ aField = Graph.createTextNode( "?" ) ;
+ }
+ node.appendChild( componentname ) ;
+ componentname.appendChild( aField ) ;
+
+ QDomElement interfacename = Graph.createElement("interface-name") ;
+ if ( strlen( InterfaceName ) ) {
+// f << Tabs << "<interface-name>" << InterfaceName << "</interface-name>"
+// << endl ;
+// interfacename.setAttribute("name" , InterfaceName ) ;
+ aField = Graph.createTextNode( InterfaceName ) ;
+ }
+ else {
+// f << Tabs << "<interface-name>?</interface-name>" << endl ;
+// interfacename.setAttribute("name" , "?" ) ;
+ aField = Graph.createTextNode( "?" ) ;
+ }
+ node.appendChild(interfacename) ;
+ interfacename.appendChild( aField ) ;
+
+// f << Tabs << "<node-name>" << Name() << "</node-name>" << endl ;
+ QDomElement nodename = Graph.createElement("node-name") ;
+ aField = Graph.createTextNode( Name() ) ;
+ node.appendChild( nodename ) ;
+ nodename.appendChild( aField ) ;
+
+// f << Tabs << "<kind>" << (int ) Kind() << "</kind>" << endl ;
+ QDomElement kind = Graph.createElement( "kind" ) ;
+ QString aKind ;
+ aKind = aKind.setNum( Kind() ) ;
+ aField = Graph.createTextNode( aKind ) ;
+ node.appendChild( kind ) ;
+ kind.appendChild( aField ) ;
+
+ QDomElement couplednode = Graph.createElement("coupled-node") ;
+ if ( IsGOTONode() || IsLoopNode() || IsEndLoopNode() ||
+ IsSwitchNode() || IsEndSwitchNode() ) {
+// f << Tabs << "<coupled-node>" << CoupledNode << "</coupled-node>"
+// << endl ;
+ aField = Graph.createTextNode( CoupledNode ) ;
+ }
+ else {
+// f << Tabs << "<coupled-node>?</coupled-node>" << endl ;
+ aField = Graph.createTextNode( "?" ) ;
+ }
+ node.appendChild(couplednode) ;
+ couplednode.appendChild( aField ) ;
+
+// f << Tabs << "<service>" << endl ;
+ QDomElement service = Graph.createElement("service") ;
+ node.appendChild(service) ;
+ QDomElement servicename = Graph.createElement("service-name") ;
+ if ( strlen( ServiceName() ) ) {
+// f << Tabs << " <service-name>" << ServiceName() << "</service-name>" << endl ;
+ aField = Graph.createTextNode( ServiceName() ) ;
+ }
+ else {
+// f << Tabs << " <service-name>?</service-name>" << endl ;
+ aField = Graph.createTextNode( "?" ) ;
+ }
+ service.appendChild(servicename) ;
+ servicename.appendChild( aField ) ;
+
+// f << Tabs << " <inParameter-list>" << endl ;
+ QDomElement inParameterlist = Graph.createElement("inParameter-list") ;
+ service.appendChild(inParameterlist) ;
+ unsigned int i;
+ for ( i = 0 ; i < ServiceInParameter().length() ; i++ ) {
+// f << Tabs << " <inParameter>" << endl ;
+ QDomElement inParameter = Graph.createElement("inParameter") ;
+ inParameterlist.appendChild(inParameter) ;
+// f << Tabs << " <inParameter-type>"
+// << ServiceInParameter()[i].Parametertype << "</inParameter-type>"
+// << endl ;
+ QDomElement inParametertype = Graph.createElement("inParameter-type") ;
+ // mpv: Linux 8.0 compiler compatibility
+// aField = Graph.createTextNode( (char *)ServiceInParameter()[i].Parametertype ) ;
+ aField = Graph.createTextNode( strdup(ServiceInParameter()[i].Parametertype) ) ;
+ inParameter.appendChild(inParametertype) ;
+ inParametertype.appendChild( aField ) ;
+// f << Tabs << " <inParameter-name>"
+// << ServiceInParameter()[i].Parametername << "</inParameter-name>"
+// << endl ;
+ QDomElement inParametername = Graph.createElement("inParameter-name") ;
+ // mpv: Linux 8.0 compiler compatibility
+// aField = Graph.createTextNode( (char *) ServiceInParameter()[i].Parametername ) ;
+ aField = Graph.createTextNode( strdup(ServiceInParameter()[i].Parametername) ) ;
+ inParameter.appendChild(inParametername) ;
+ inParametername.appendChild( aField ) ;
+// f << Tabs << " </inParameter>" << endl ;
+ }
+// f << Tabs << " </inParameter-list>" << endl ;
+// f << Tabs << " <outParameter-list>" << endl ;
+ QDomElement outParameterlist = Graph.createElement("outParameter-list") ;
+ service.appendChild(outParameterlist) ;
+ for ( i = 0 ; i < ServiceOutParameter().length() ; i++ ) {
+// f << Tabs << " <outParameter>" << endl ;
+ QDomElement outParameter = Graph.createElement("outParameter") ;
+ outParameterlist.appendChild(outParameter) ;
+// f << Tabs << " <outParameter-type>"
+// << ServiceOutParameter()[i].Parametertype << "</outParameter-type>"
+// << endl ;
+ QDomElement outParametertype = Graph.createElement("outParameter-type") ;
+ // mpv: Linux 8.0 compiler compatibility
+// aField = Graph.createTextNode( (char *) ServiceOutParameter()[i].Parametertype ) ;
+ aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametertype) ) ;
+ outParameter.appendChild(outParametertype) ;
+ outParametertype.appendChild( aField ) ;
+// f << Tabs << " <outParameter-name>"
+// << ServiceOutParameter()[i].Parametername << "</outParameter-name>"
+// << endl ;
+ QDomElement outParametername = Graph.createElement("outParameter-name") ;
+ // mpv: Linux 8.0 compiler compatibility
+// aField = Graph.createTextNode( (char *) ServiceOutParameter()[i].Parametername ) ;
+ aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametername) ) ;
+ outParameter.appendChild(outParametername) ;
+ outParametername.appendChild( aField ) ;
+// f << Tabs << " </outParameter>" << endl ;
+ }
+// f << Tabs << " </outParameter-list>" << endl ;
+// f << Tabs << "</service>" << endl ;
+
+// f << Tabs << "<Parameter-list>" << endl ;
+ QDomElement Parameterlist = Graph.createElement("Parameter-list") ;
+ node.appendChild( Parameterlist ) ;
+#if 0
+ if ( IsInLineNode() || IsGOTONode() ||
+ IsLoopNode() || IsEndLoopNode() ||
+ IsSwitchNode() || IsEndSwitchNode() ) {
+ unsigned int i;
+ for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
+ const InPort * anInPort = GetNodeInPort( i ) ;
+ if ( anInPort->IsBus() ) {
+ f << Tabs << " <inParameter>" << endl ;
+ f << Tabs << " <inParameter-type>"
+ << anInPort->PortType() << "</inParameter-type>"
+ << endl ;
+ f << Tabs << " <inParameter-name>"
+ << anInPort->PortName() << "</inParameter-name>"
+ << endl ;
+ f << Tabs << " </inParameter>" << endl ;
+ const OutPort * anOutPort = GetNodeOutPort( anInPort->PortIndex() ) ;
+ f << Tabs << " <outParameter>" << endl ;
+ f << Tabs << " <outParameter-type>"
+ << anOutPort->PortType() << "</outParameter-type>"
+ << endl ;
+ f << Tabs << " <outParameter-name>"
+ << anOutPort->PortName() << "</outParameter-name>"
+ << endl ;
+ f << Tabs << " </outParameter>" << endl ;
+ }
+ }
+ }
+#endif
+// f << Tabs << "</Parameter-list>" << endl ;
+
+// f << Tabs << "<PyFunction-list>" << endl ;
+ QDomElement PyFunctionlist = Graph.createElement("PyFunction-list") ;
+ node.appendChild( PyFunctionlist ) ;
+ for ( i = 0 ; i < PythonFunctions.size() ; i++ ) {
+// f << Tabs << " <PyFunction>" << endl ;
+ QDomElement PyFunction = Graph.createElement("PyFunction") ;
+ PyFunctionlist.appendChild( PyFunction ) ;
+ int j ;
+ for ( j = 0 ; j < (*PythonFunctions[i]).length() ; j++ ) {
+ if ( j == 0 ) {
+// if ( i == 0 ) {
+// f << Tabs << " <FuncName>" << FuncNames[i].c_str()
+// << "</FuncName>" << endl ;
+ QDomElement FuncName = Graph.createElement("FuncName") ;
+ aField = Graph.createTextNode( FuncNames[i].c_str() ) ;
+ PyFunction.appendChild( FuncName ) ;
+ FuncName.appendChild( aField ) ;
+// }
+// else if ( i == 1 ) {
+// f << Tabs << " <FuncName>" << FuncNames[i].c_str()
+// << "</FuncName>" << endl ;
+// }
+// else if ( i == 2 ) {
+// f << Tabs << " <FuncName>" << FuncNames[i].c_str()
+// << "</FuncName>" << endl ;
+// }
+ }
+// f << Tabs << " <PyFunc>" << (*PythonFunctions[i])[j]
+// << "</PyFunc>" << endl ;
+ QDomElement PyFunc = Graph.createElement("PyFunc") ;
+ QDomCDATASection aCDATA ;
+ // mpv: Linux 8.0 compiler compatibility
+// char * aCDATAChar = (char *) (*PythonFunctions[i])[j] ;
+ char * aCDATAChar = strdup ((*PythonFunctions[i])[j]) ;
+ int i ;
+ for ( i = 0 ; i < strlen( aCDATAChar ) ; i++ ) {
+ if ( aCDATAChar[ i ] != ' ' ) {
+ break ;
+ }
+ }
+ if ( i == strlen( aCDATAChar ) ) {
+ aCDATA = Graph.createCDATASection( "?" ) ;
+ }
+ else {
+ aCDATA = Graph.createCDATASection( aCDATAChar ) ;
+ }
+ PyFunction.appendChild( PyFunc ) ;
+ PyFunc.appendChild( aCDATA ) ;
+ }
+// f << Tabs << " </PyFunction>" << endl ;
+ }
+// f << Tabs << "</PyFunction-list>" << endl ;
+
+// f << Tabs << "<creation-date>" << FirstCreation() << "</creation-date>"
+// << endl ;
+ QDomElement creationdate = Graph.createElement("creation-date") ;
+ char fdate[30] ;
+ sprintf( fdate , "%d/%d/%d - %d:%d:%d" , FirstCreation().Day , FirstCreation().Month , FirstCreation().Year , FirstCreation().Hour , FirstCreation().Minute , FirstCreation().Second ) ;
+ aField = Graph.createTextNode( fdate ) ;
+ node.appendChild( creationdate ) ;
+ creationdate.appendChild( aField ) ;
+// f << Tabs << "<lastmodification-date>" << LastModification()
+// << "</lastmodification-date>" << endl ;
+ QDomElement lastmodificationdate = Graph.createElement("lastmodification-date") ;
+ char ldate[30] ;
+ sprintf( ldate , "%d/%d/%d - %d:%d:%d" , LastModification().Day , LastModification().Month , LastModification().Year , LastModification().Hour , LastModification().Minute , LastModification().Second ) ;
+ aField = Graph.createTextNode( ldate ) ;
+ node.appendChild( lastmodificationdate ) ;
+ lastmodificationdate.appendChild( aField ) ;
+// f << Tabs << "<editor-release>" << EditorRelease() << "</editor-release>"
+// << endl ;
+ QDomElement editorrelease = Graph.createElement("editor-release") ;
+ aField = Graph.createTextNode( EditorRelease() ) ;
+ node.appendChild( editorrelease ) ;
+ editorrelease.appendChild( aField ) ;
+ QDomElement author = Graph.createElement("author") ;
+ if ( strlen( Author() ) ) {
+// f << Tabs << "<author>" << Author() << "</author>" << endl ;
+ aField = Graph.createTextNode( Author() ) ;
+ }
+ else {
+// f << Tabs << "<author>?</author>" << endl ;
+ aField = Graph.createTextNode( "?" ) ;
+ }
+ node.appendChild( author ) ;
+ author.appendChild( aField ) ;
+ QDomElement container = Graph.createElement("container") ;
+ if ( IsFactoryNode() && strlen( Computer) ) {
+// f << Tabs << "<container>" << Computer << "</container>" << endl ;
+ aField = Graph.createTextNode( Computer ) ;
+ }
+ else {
+// f << Tabs << "<container>?</container>" << endl ;
+ aField = Graph.createTextNode( "?" ) ;
+ }
+ node.appendChild( container ) ;
+ container.appendChild( aField ) ;
+ QDomElement comment = Graph.createElement("comment") ;
+ if ( strlen( Comment() ) ) {
+// f << Tabs << "<comment>" << Comment() << "</comment>" << endl ;
+ aField = Graph.createTextNode( Comment() ) ;
+ }
+ else {
+// f << Tabs << "<comment>?</comment>" << endl ;
+ aField = Graph.createTextNode( "?" ) ;
+ }
+ node.appendChild( comment ) ;
+ comment.appendChild( aField ) ;
+// f << Tabs << "<x-position>" << XCoordinate << "</x-position>" << endl ;
+ QDomElement xposition = Graph.createElement("x-position") ;
+ QString aXCoordinate ;
+ aXCoordinate = aKind.setNum( XCoordinate ) ;
+ aField = Graph.createTextNode( aXCoordinate ) ;
+ node.appendChild( xposition ) ;
+ xposition.appendChild( aField ) ;
+// f << Tabs << "<y-position>" << YCoordinate << "</y-position>" << endl ;
+ QDomElement yposition = Graph.createElement("y-position") ;
+ QString aYCoordinate ;
+ aYCoordinate = aKind.setNum( YCoordinate ) ;
+ aField = Graph.createTextNode( aYCoordinate ) ;
+ node.appendChild( yposition ) ;
+ yposition.appendChild( aField ) ;
+ return true ;
+}
+
+bool GraphBase::ComputingNode::SavePY( ostream &f , const char * aGraphName ,
+ const char * ComponentName ,
+ const char * InterfaceName ,
+ const char * Computer ,
+ const GraphBase::InLineNode * aCoupledNode ,
+ const ListOfFuncName FuncNames ,
+ const ListOfPythonFunctions PythonFunctions ,
+ int XCoordinate , int YCoordinate ) const {
+ if ( IsDataFlowNode() ) {
+ f << Name() << " = Graph( '" << Name() << "' )" << endl ;
+ }
+ else if ( IsComputingNode() ) {
+ int i ;
+ f << Name() << "_ServiceinParameter = []" << endl ;
+ for ( i = 0 ; i < ServiceInParameter().length() ; i++ ) {
+ f << Name() << "_ServiceinParameter.append( SALOME_ModuleCatalog.ServicesParameter( '"
+ << ServiceInParameter()[i].Parametertype << "' , '"
+ << ServiceInParameter()[i].Parametername << "' ) )" << endl ;
+ }
+ f << Name() << "_ServiceoutParameter = []" << endl ;
+ for ( i = 0 ; i < ServiceOutParameter().length() ; i++ ) {
+ f << Name() << "_ServiceoutParameter.append( SALOME_ModuleCatalog.ServicesParameter( '"
+ << ServiceOutParameter()[i].Parametertype << "' , '"
+ << ServiceOutParameter()[i].Parametername << "' ) )" << endl ;
+ }
+ f << Name() << "_Service = SALOME_ModuleCatalog.Service( '" << ServiceName()
+ << "' , " << Name() << "_ServiceinParameter" << " , "
+ << Name() << "_ServiceoutParameter" << " , 0 )" << endl ;
+ f << Name() << " = " << aGraphName << ".CNode( " << Name() << "_Service" << " )"
+ << endl ;
+ }
+ else if ( IsFactoryNode() ) {
+ f << Name() << " = " << aGraphName << ".FNode( '" << ComponentName
+ << "' , '" << InterfaceName << "' , '" << ServiceName() << "' )"
+ << endl ;
+ }
+ else {
+ f << "Py" << Name() << " = []" << endl ;
+ int i ;
+ SUPERV::ListOfStrings aPyFunc ;
+ if ( PythonFunctions.size() ) {
+ aPyFunc = *PythonFunctions[0] ;
+ for ( i = 0 ; i < aPyFunc.length() ; i++ ) {
+ f << "Py" << Name() << ".append( '" << aPyFunc[i] << "' )" << endl ;
+ }
+ }
+ if ( IsInLineNode() ) {
+ f << Name() << " = " << aGraphName << ".INode( '" << FuncNames[0].c_str() << "' , Py"
+ << Name() << " )" << endl ;
+ }
+ else if ( IsGOTONode() ) {
+ if ( aCoupledNode ) {
+ f << Name() << " = " << aGraphName << ".GNode( '" << FuncNames[0].c_str() << "' , Py"
+ << Name() << " , '" << aCoupledNode->Name() << "' )" << endl ;
+ }
+ else {
+ f << Name() << " = " << aGraphName << ".GNode( '" << FuncNames[0].c_str() << "' , Py"
+ << Name() << " , '' )" << endl ;
+ }
+ }
+ else {
+// char * EndName = NULL ;
+// EndName = new char[ 3 + strlen( Name() ) + 1 ] ;
+// strcpy( EndName , "End" ) ;
+// strcat( EndName , Name() ) ;
+ char * EndName = aCoupledNode->Name() ;
+ if ( IsLoopNode() ) {
+ SUPERV::ListOfStrings aPyMore = *PythonFunctions[1] ;
+ SUPERV::ListOfStrings aPyNext = *PythonFunctions[2] ;
+ f << "PyMore" << Name() << " = []" << endl ;
+ for ( i = 0 ; i < aPyMore.length() ; i++ ) {
+ f << "PyMore" << Name() << ".append( '" << aPyMore[i] << "' )" << endl ;
+ }
+ f << "PyNext" << Name() << " = []" << endl ;
+ for ( i = 0 ; i < aPyNext.length() ; i++ ) {
+ f << "PyNext" << Name() << ".append( '" << aPyNext[i] << "' )" << endl ;
+ }
+ f << Name() << "," << EndName << " = " << aGraphName << ".LNode( '"
+ << FuncNames[0].c_str() << "' , Py" << Name() << " , '"
+ << FuncNames[1].c_str() << "' , PyMore" << Name()
+ << " , '" << FuncNames[2].c_str() << "' , PyNext"
+ << Name() << " )" << endl ;
+ f << EndName << ".SetName( '" << aCoupledNode->Name() << "' )" << endl ;
+ f << EndName << ".SetAuthor( '" << aCoupledNode->Author() << "' )" << endl ;
+ f << EndName << ".SetComment( '" << aCoupledNode->Comment() << "' )" << endl ;
+ f << EndName << ".Coords( " << aCoupledNode->XCoordinate() << " , "
+ << aCoupledNode->YCoordinate() << " )" << endl ;
+ }
+ else if ( IsSwitchNode() ) {
+ f << Name() << "," << EndName << " = " << aGraphName << ".SNode( '"
+ << FuncNames[0].c_str() << "' , Py" << Name() << " )" << endl ;
+ f << EndName << ".SetName( '" << aCoupledNode->Name() << "' )" << endl ;
+ f << EndName << ".SetAuthor( '" << aCoupledNode->Author() << "' )" << endl ;
+ f << EndName << ".SetComment( '" << aCoupledNode->Comment() << "' )" << endl ;
+ f << EndName << ".Coords( " << aCoupledNode->XCoordinate() << " , "
+ << aCoupledNode->YCoordinate() << " )" << endl ;
+ SUPERV::ListOfStrings aPyFunc = *aCoupledNode->PythonFunction() ;
+ f << "Py" << aCoupledNode->Name() << " = []" << endl ;
+ for ( i = 0 ; i < aPyFunc.length() ; i++ ) {
+ f << "Py" << aCoupledNode->Name() << ".append( '" << aPyFunc[i] << "' )"
+ << endl ;
+ }
+ f << EndName << ".SetPyFunction( 'End" << FuncNames[0].c_str() << "' , Py" << aCoupledNode->Name() << " )" << endl ;
+ for ( i = 0 ; i < aCoupledNode->GetNodeInPortsSize() ; i++ ) {
+ const GraphBase::InPort * anInPort = aCoupledNode->GetNodeInPort(i) ;
+ if ( anInPort->IsInLine() || anInPort->IsEndSwitch() ) {
+ f << EndName << ".InPort( '" << anInPort->PortName()
+ << "' , '" << anInPort->PortType() << "' )" << endl ;
+ }
+ }
+ for ( i = 0 ; i < aCoupledNode->GetNodeOutPortsSize() ; i++ ) {
+ const GraphBase::OutPort * anOutPort = aCoupledNode->GetNodeOutPort(i) ;
+ if ( anOutPort->IsInLine() ) {
+ f << EndName << ".OutPort( '" << anOutPort->PortName()
+ << "' , '" << anOutPort->PortType() << "' )" << endl ;
+ }
+ }
+ }
+ delete [] EndName ;
+ }
+ for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
+ const GraphBase::InPort * anInPort = GetNodeInPort(i) ;
+ if ( anInPort->IsInLine() ) {
+ f << Name() << ".InPort( '" << anInPort->PortName() << "' , '"
+ << anInPort->PortType() << "' )" << endl ;
+ }
+ }
+ for ( i = 0 ; i < GetNodeOutPortsSize() ; i++ ) {
+ const GraphBase::OutPort * anOutPort = GetNodeOutPort(i) ;
+ if ( anOutPort->IsInLine() || anOutPort->IsSwitch() ) {
+ f << Name() << ".OutPort( '" << anOutPort->PortName()
+ << "' , '" << anOutPort->PortType() << "' )" << endl ;
+ }
+ }
+ }
+
+ f << Name() << ".SetName( '" << Name() << "' )" << endl ;
+ f << Name() << ".SetAuthor( '" << Author() << "' )" << endl ;
+ if ( IsFactoryNode() ) {
+ f << Name() << ".SetContainer( '" << Computer << "' )" << endl ;
+ }
+ f << Name() << ".SetComment( '" << Comment() << "' )" << endl ;
+ f << Name() << ".Coords( " << XCoordinate << " , " << YCoordinate << " )" << endl ;
+
+#if 0
+ if ( IsLoopNode() || IsSwitchNode() ) {
+ f << EndName << ".SetName( '" << CoupledNode
+ << "' )" << endl ;
+ f << EndName << ".SetAuthor( '" << CoupledNode->Author()
+ << "' )" << endl ;
+ f << EndName << ".SetComment( '" << CoupledNode->Comment()
+ << "' )" << endl ;
+ f << EndName << ".Coords( " << CoupledNode->XCoordinate() << " , "
+ << CoupledNode->YCoordinate() << " )" << endl ;
+ unsigned int i;
+ for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
+ const InPort * anInPort = GetNodeInPort( i ) ;
+ if ( anInPort->IsBus() ) {
+ const OutPort * anOutPort = GetNodeOutPort( anInPort->PortIndex() ) ;
+ f << Name() << ".BusPorts( '" << anInPort->PortName() << "' , '"
+ << anInPort->PortType() << "' , '" << anOutPort->PortName()
+ << "' , '" << anOutPort->PortType() << "' )" << endl ;
+ }
+ }
+ }
+#endif
+ return true ;
+}
+
+void GraphBase::ComputingNode::NodeInfo(ostrstream & s) const {
+ int i ;
+ s << *this ;
+ ListPorts( s , true ) ;
+ s << ends ;
+}
+
+ostream & operator<< (ostream & f,const GraphBase::ComputingNode & G) {
+// f << "ComponentName " << G.ComponentName() << endl ;
+ if ( G.IsComputingNode() )
+ f << "NodeName " << G.Name() << endl ;
+ else
+ f << "DataFlowName " << G.Name() << endl ;
+ f << "Kind " << G.Kind() << endl ;
+ f << "Service " << *G.GetService() ;
+ f << "FirstCreation " << G.FirstCreation () << endl ;
+ f << "LastModification " << G.LastModification() << endl ;
+ f << "EditorRelease " << G.EditorRelease() << endl ;
+ f << "Author " << G.Author() << endl ;
+// f << "Computer " << G.Computer() << endl ;
+ f << "Comment " << G.Comment() << endl ;
+ f << endl ;
+
+ return f;
+}
+
+void GraphBase::ComputingNode::ListLinks(ostream &f ) const {
+ int i ;
+ for ( i = 0 ; i < GetNodeOutPortsSize() ; i++ ) {
+ const GraphBase::OutPort* fromPort = GetNodeOutPort( i ) ;
+ if ( fromPort->IsPortConnected() ) {
+ int j ;
+ for ( j = 0 ; j < fromPort->InPortsSize() ; j++ ) {
+ if ( j == 0 )
+ f << "FromNode " << Name() << endl ;
+ f << " FromServiceParameterName "
+ << fromPort->GetServicesParameter().Parametername ;
+ const GraphBase::InPort* toPort = fromPort->InPorts( j ) ;
+ f << " ToNode " << toPort->NodeName() ;
+ f << " ToServiceParameterName "
+ << toPort->GetServicesParameter().Parametername;
+ f << " Value " ;
+ fromPort->StringValue( f ) ;
+ f << endl ;
+ }
+ }
+ }
+}
+
+ostream & operator<< (ostream &fOut,const SUPERV::SDate &D) {
+// cdebug_in << "operator<< GraphEditor::Date" << endl;
+
+ fOut << D.Day << "/"
+ << D.Month << "/"
+ << D.Year << " - "
+ << D.Hour << ":"
+ << D.Minute << ":"
+ << D.Second;
+
+// cdebug_out << "operator<< GraphEditor::Date" << endl;
+ return fOut;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_ComputingNode.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_NODE_HXX
+#define _DATAFLOWBASE_NODE_HXX
+
+#include "DataFlowBase_PortsOfNode.hxx"
+
+namespace GraphBase {
+
+ class InLineNode ;
+
+ class ComputingNode : public PortsOfNode {
+
+ private:
+
+ CORBA::ORB_ptr _ORB ;
+ SALOME_NamingService * _NamingService ;
+ int * _Graph_prof_debug ;
+ ostream * _Graph_fdebug ;
+ SUPERV::CNode_var _Node ;
+ void * _InNode ; // From GraphExecutor:: or GraphEditor::
+ bool _ObjInterface ;
+
+ pthread_t _ThreadNo ;
+
+ char * _Name ;
+ SUPERV::KindOfNode _Kind ;
+ SUPERV::SDate _FirstCreation ;
+ SUPERV::SDate _LastModification ;
+ char * _EditorRelease ;
+ char * _Author ;
+ char * _Comment ;
+
+ bool _HeadNode ;
+ int _LevelNumber ;
+ int _SubGraphNumber ;
+ bool _GeneratedName ;
+
+ int _ConnectedInPortsNumber ;
+ int _DecrConnectedInPortsNumber ;
+
+// For generated NodeNames with ServiceName : number of Nodes using
+// the same ServiceName. It is not the same Service if it belongs to
+// a different Interface and/or a different Component ...
+ map< string , int > _MapOfServiceNames ;
+
+// Nodes with LinkedInPortsNumber InPort(s) linked to Outport(s) of this node :
+ map< string , int > _MapOfLinkedNodes ;
+ int _LinkedNodesSize ;
+ vector<ComputingNode * > _LinkedNodes ;
+ vector<int > _LinkedInPortsNumber ;
+
+ protected:
+
+ long _X ;
+ long _Y ;
+
+ public:
+
+ ComputingNode() ;
+ ComputingNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * DataFlowName ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ ComputingNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& NodeService ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~ComputingNode() ;
+
+ SALOME_NamingService * NamingService() const {
+ return _NamingService ; } ;
+
+ SUPERV::CNode_var ObjRef() const { return _Node ; } ;
+ void SetObjRef(SUPERV::CNode_var aNode) {
+ _Node = aNode ; } ;
+ void InNode( void * anInNode ) {
+// cdebug << "GraphBase::ComputingNode::InNode " << Name() << endl ;
+ _InNode = anInNode ; } ;
+ void * GetInNode() const {
+ return _InNode ; } ;
+
+ void ObjInterface( bool k_interface ) { _ObjInterface = k_interface ; } ;
+ bool ObjInterface() { return _ObjInterface ; } ;
+
+ pthread_t ThreadNo() { return _ThreadNo ; } ;
+ void ThreadNo( pthread_t aThread ) { _ThreadNo = aThread ; } ;
+
+ char * Name() const { return my_strdup( _Name ) ; } ;
+ const char *const * NamePtr() const { return &_Name ; } ;
+ SUPERV::KindOfNode Kind() const {
+ return _Kind; } ;
+// const SALOME_ModuleCatalog::Service * Service() const ;
+ SUPERV::SDate FirstCreation() const ;
+ SUPERV::SDate LastModification() const ;
+ char* Author() const { return my_strdup( _Author ) ; } ;
+ char* EditorRelease() const { return my_strdup( _EditorRelease ) ; } ;
+ char * Comment() const { return my_strdup( _Comment ) ; } ;
+ int XCoordinate() const { return _X ; } ;
+ int YCoordinate() const { return _Y ; } ;
+
+ bool Name( const char * aName ) ;
+ bool Kind( SUPERV::KindOfNode aKind) ;
+// void Service( const SALOME_ModuleCatalog::Service aService ) ;
+ void FirstCreation( const SUPERV::SDate aFirstCreation ) ;
+ void LastModification( const SUPERV::SDate aLastModification ) ;
+ bool Author( const char * anAuthor ) ;
+ bool EditorRelease( const char* anEditorRelease ) ;
+ bool Comment( const char *c ) ;
+ void Coordinates( const int X , const int Y ) {
+ _X = X ; _Y = Y ; } ;
+
+ void NodePort( const char * NodeName ,
+ const char * ServiceParameterName ,
+ char ** aNode , char ** aPort ) ;
+
+ bool IsLinked(const char * ToServiceParameterName ) ;
+ bool HasInput(const char * ToServiceParameterName ) ;
+
+ GraphBase::SNode * GetInfo() ;
+
+ const bool IsComputingNode() const {
+ return (_Kind == SUPERV::ComputingNode ) ; } ;
+ const bool IsFactoryNode() const {
+ return (_Kind == SUPERV::FactoryNode ) ; } ;
+ const bool IsOneOfGOTONodes() const {
+ return (_Kind == SUPERV::LoopNode ||
+ _Kind == SUPERV::EndLoopNode ||
+ _Kind == SUPERV::SwitchNode ||
+ _Kind == SUPERV::EndSwitchNode ||
+ _Kind == SUPERV::GOTONode ) ; } ;
+ const bool IsOneOfInLineNodes() const {
+ return (_Kind == SUPERV::InLineNode || IsOneOfGOTONodes() ) ; } ;
+ const bool IsInLineNode() const {
+ return (_Kind == SUPERV::InLineNode ) ; } ;
+ const bool IsDataFlowNode() const {
+ return (_Kind == SUPERV::DataFlowNode ) ; } ;
+ const bool IsLoopNode() const {
+ return (_Kind == SUPERV::LoopNode ) ; } ;
+ const bool IsEndLoopNode() const {
+ return (_Kind == SUPERV::EndLoopNode ) ; } ;
+ const bool IsSwitchNode() const {
+ return (_Kind == SUPERV::SwitchNode ) ; } ;
+ const bool IsEndSwitchNode() const {
+ return (_Kind == SUPERV::EndSwitchNode ) ; } ;
+ const bool IsGOTONode() const {
+ return (_Kind == SUPERV::GOTONode ) ; } ;
+ void HeadNode( bool aHeadNode ) { _HeadNode = aHeadNode ; } ;
+ const bool IsHeadNode() const { return _HeadNode ; } ;
+
+ bool RemovePorts( const char* aNodeName ) ;
+
+ InPort * AddInPort( const char * InputParameterName ,
+ const char * InputParameterType ) ;
+ OutPort * AddOutPort( const char * OutputParameterName ,
+ const char * OutputParameterType ) ;
+
+ void AddLink( ComputingNode * aNode ) ;
+ void RemoveLink( ComputingNode * aNode ) ;
+ void ReNameLink( const char* OldNodeName ,
+ const char* NewNodeName ) ;
+
+ int GetServiceNameNumber( const char * name ) {
+ int num = _MapOfServiceNames[ name ] ;
+ if ( num == 0 ) {
+ _MapOfServiceNames[ name ] = 1 ;
+ }
+ else {
+ _MapOfServiceNames[ name ] = num + 1 ;
+ }
+ return _MapOfServiceNames[ name ] ; } ;
+
+ void IncrConnectedInPortsNumber() {
+ cdebug << "IncrConnectedInPortsNumber " << Name() << " -> "
+ << _ConnectedInPortsNumber+1 << endl ;
+ _ConnectedInPortsNumber++ ; } ;
+ void DecrConnectedInPortsNumber() {
+ _ConnectedInPortsNumber-- ; } ;
+ int ConnectedInPortsNumber() const {
+ return _ConnectedInPortsNumber ; } ;
+ void ConnectedInPortsNumber( int c ) {
+ cdebug << "ConnectedInPortsNumber " << Name() << " -> " << c << endl ;
+ _ConnectedInPortsNumber = c ; } ;
+
+ void IncrDecrConnectedInPortsNumber(const int cnt ) {
+ _DecrConnectedInPortsNumber += cnt ; } ;
+ bool DecrIncrDecrConnectedInPortsNumber() {
+ if ( _DecrConnectedInPortsNumber ) {
+ _ConnectedInPortsNumber = _ConnectedInPortsNumber -
+ _DecrConnectedInPortsNumber ;
+ _DecrConnectedInPortsNumber = 0 ;
+ return true ;
+ }
+ return false ; } ;
+
+ int GetLinkedNodeIndex( const char * name ) {
+ int index = _MapOfLinkedNodes[ name ] -1 ;
+ if ( index >= 0 ) {
+ cdebug << "GetLinkedNodeIndex of " << name
+ << " in _MapOfLinkedNodes : "
+ << index << " Node " << hex << (void *) _LinkedNodes[ index ]
+ << dec << " '" << _LinkedNodes[ index ]->Name() << "'"
+ << endl ;
+ }
+ return index ; } ;
+ void SetLinkedNodeIndex( const char * name , const int index ) {
+ _MapOfLinkedNodes[ name ] = index +1 ;
+ cdebug << "SetLinkedNodeIndex of " << name << " in _MapOfLinkedNodes : "
+ << index << " Node " << hex << (void *) _LinkedNodes[ index ]
+ << dec << " '" << _LinkedNodes[ index ]->Name() << "'"
+ << " _MapOfLinkedNodes " << _MapOfLinkedNodes[ name ] - 1
+ << endl ;
+ } ;
+ void DelLinkedNodeIndex( const char * name ) {
+ _MapOfLinkedNodes.erase( name ) ; } ;
+ int LinkedNodesSize() const { return _LinkedNodesSize ; } ;
+ ComputingNode * LinkedNodes( int i ) const { return _LinkedNodes[ i ] ; } ;
+ const int LinkedInPortsNumber( int i ) const { return _LinkedInPortsNumber[ i ] ; } ;
+
+ int Level() { return _LevelNumber ; } ;
+ void Level( int LevelNumber ) {
+ _LevelNumber = LevelNumber ; } ;
+ int SubGraph() { return _SubGraphNumber ; } ;
+ void SubGraph( int SubGraphNumber ) {
+ _SubGraphNumber = SubGraphNumber ; } ;
+
+// const GraphBase::ListOfParameters * GetListOfParameters() const ;
+
+ bool SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int X , int Y ) const {
+ ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aVoidList ;
+ return SaveXML( Graph , info , "" , "" , "" , "" , aFuncNames , aVoidList ,
+ X , Y ) ; } ;
+
+ bool SavePY( ostream &f , const char * aGraphName ,
+ int X , int Y ) const {
+ ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aVoidList ;
+ return SavePY( f , aGraphName , "" , "" , "" , NULL , aFuncNames , aVoidList ,
+ X , Y ) ; } ;
+// bool SaveXML(ostream &f , char *Tabs ,
+ bool SaveXML(QDomDocument & Graph , QDomElement & info ,
+ const char * ComponentName ,
+ const char * InterfaceName ,
+ const char * Computer ,
+ const char * CoupledNode ,
+ const ListOfFuncName FuncNames ,
+ const GraphBase::ListOfPythonFunctions PythonFunctions ,
+ int X , int Y ) const ;
+
+ bool SavePY(ostream &f , const char * aGraphName ,
+ const char * ComponentName ,
+ const char * InterfaceName ,
+ const char * Computer ,
+ const GraphBase::InLineNode * aCoupledNode ,
+ const ListOfFuncName FuncNames ,
+ const GraphBase::ListOfPythonFunctions PythonFunctions ,
+ int X , int Y ) const ;
+
+ void NodeInfo(ostrstream & s) const ;
+
+ void ListLinks(ostream &f ) const ;
+
+ };
+
+};
+
+ostream & operator<< (ostream &,const GraphBase::ComputingNode & N );
+
+ostream & operator<< (ostream &,const SUPERV::SDate & D );
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_DataNode.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_DataNode.hxx"
+
+GraphBase::DataNode::DataNode() :
+ InLineNode() {
+ MESSAGE( "GraphBase::DataNode::DataNode" );
+ _Created = false ;
+}
+
+GraphBase::DataNode::DataNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char *DataFlowName ) :
+ InLineNode( ORB , ptrNamingService , DataFlowName ) {
+ MESSAGE( "GraphBase::DataNode::DataNode" );
+ _Created = false ;
+}
+
+GraphBase::DataNode::DataNode(
+ CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& DataFlowService ,
+ const char *DataFlowName ,
+ const SUPERV::KindOfNode DataFlowkind ,
+ const SUPERV::SDate DataFlowFirstCreation ,
+ const SUPERV::SDate DataFlowLastModification ,
+ const char * DataFlowEditorRelease ,
+ const char * DataFlowAuthor ,
+ const char * DataFlowComment ) :
+ InLineNode( ORB , ptrNamingService , DataFlowService ,
+ DataFlowName , DataFlowkind ,
+ DataFlowFirstCreation , DataFlowLastModification ,
+ DataFlowEditorRelease , DataFlowAuthor ,
+ DataFlowComment , false , 0 , 0) {
+// MESSAGE( "GraphBase::DataNode::DataNode" );
+}
+
+GraphBase::DataNode::~DataNode() {
+// MESSAGE( "GraphBase::DataNode::~DataNode" );
+}
+
+void GraphBase::DataNode::DataService(
+ CORBA::ORB_ptr ORB ,
+ SALOME_ModuleCatalog::Service aService ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) {
+// cout << "GraphBase::DataNode::DataService : DataFlowPortsOfNode of "
+// << aService.ServiceName << endl ;
+// DefPortsOfNode( aService , aService.ServiceName ) ;
+ DefPortsOfNode( ORB , aService , NamePtr() , Kind() , true , false , false , false ,
+ Graph_prof_debug , Graph_fdebug ) ;
+
+ if ( _Created )
+ delete _DataFlowDataPorts ;
+ SALOME_ModuleCatalog::Service aReversedService ;
+ aReversedService.ServiceName = aService.ServiceName ;
+ aReversedService.ServiceinParameter = aService.ServiceoutParameter ;
+ aReversedService.ServiceoutParameter = aService.ServiceinParameter ;
+ _DataFlowDataPorts = new PortsOfNode() ;
+// cout << "GraphBase::DataNode::DataService : Mirrored DataFlowPortsOfNode of "
+// << aReversedService.ServiceName << endl ;
+ _DataFlowDataPorts->DefPortsOfNode( ORB , aReversedService , NamePtr() ,
+ Kind() , true , false , false , false ,
+ Graph_prof_debug , Graph_fdebug ) ;
+// aReversedService.ServiceName ) ;
+ _Created = true ;
+}
+
+int GraphBase::DataNode::CheckDataServerNodes() const {
+
+ cdebug << "GraphBase::Graph::DataServerNodes ()" << endl;
+
+ int i , ierr = 0 ;
+
+ for ( i = 0 ; i < _DataFlowDataPorts->GetNodeOutPortsSize() ; i++ ) {
+ if ( !_DataFlowDataPorts->GetNodeOutPort(i)->IsDataConnected() ) {
+ cdebug << "InPort " << _DataFlowDataPorts->GetNodeOutPort(i)->PortName()
+ << " of DataFlow " << Name() << " has NO Data." << endl ;
+ ierr++ ;
+ }
+ else {
+ cdebug << "InPort " << _DataFlowDataPorts->GetNodeOutPort(i)->PortName()
+ << " of DataFlow " << Name() << " has Data : "
+// << _DataFlowDataPorts->GetNodeOutPort(i)->Value() << " kind "
+// << _DataFlowDataPorts->GetNodeOutPort(i)->Kind()
+ << endl ;
+ }
+ }
+
+ for ( i = 0 ; i < _DataFlowDataPorts->GetNodeInPortsSize() ; i++ ) {
+ if ( !_DataFlowDataPorts->GetNodeInPort(i)->IsConnected() ) {
+ cdebug << "OutPort " << _DataFlowDataPorts->GetNodeInPort(i)->PortName()
+ << " of DataFlow " << Name() << " has Data " << endl ;
+// ierr++ ;
+ }
+ else {
+ cdebug << "OutPort " << _DataFlowDataPorts->GetNodeInPort(i)->PortName()
+ << " of DataFlow " << Name() << " has NO Data : "
+// << _DataFlowDataPorts->GetChangeNodeInPort(i)->GetLink()->Value()
+// << " kind "
+// << _DataFlowDataPorts->GetChangeNodeInPort(i)->GetLink()->Kind()
+ << endl ;
+ ierr++ ;
+ }
+ }
+
+ if ( ierr ) {
+ cdebug << "Some Input Data missing in the DataFlow " << Name() << endl ;
+ }
+
+ return ierr ;
+}
+
+void GraphBase::DataNode::ListDatas(ostrstream & f ) const {
+ _DataFlowDataPorts->ListPorts( f , false ) ;
+}
+
+void GraphBase::DataNode::DataNodeInfo(ostrstream & s ) const {
+ int i ;
+ s << *this ;
+ s << "Ports :" << endl ;
+ ListPorts( s , true ) ;
+ s << "Datas :" << endl ;
+ _DataFlowDataPorts->ListPorts( s , false ) ;
+ s << ends ;
+}
+
+// inlined :
+//GraphBase::OutPort * GraphBase::DataNode::GetChangeInDataNodePort( const char * DataFlowInPortName ) {
+// return _DataFlowDataPorts->GetChangeOutPort( DataFlowInPortName ) ;
+//}
+
+//GraphBase::InPort * GraphBase::DataNode::GetChangeOutDataNodePort( const char * DataFlowOutPortName ) {
+// return _DataFlowDataPorts->GetChangeInPort( DataFlowOutPortName ) ;
+//}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_DataNode.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_DATANODE_HXX
+#define _DATAFLOWBASE_DATANODE_HXX
+
+#include "DataFlowBase_InLineNode.hxx"
+
+namespace GraphBase {
+
+ class DataNode : public InLineNode {
+
+ private:
+
+ GraphBase::PortsOfNode * _DataFlowDataPorts ;
+ bool _Created ;
+
+ public:
+
+ DataNode() ;
+ DataNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char *DataFlowName ) ;
+ DataNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& DataFlowService ,
+ const char *DataFlowName ,
+ const SUPERV::KindOfNode DataFlowkind ,
+ const SUPERV::SDate DataFlowFirstCreation ,
+ const SUPERV::SDate DataFlowLastModification ,
+ const char * DataFlowEditorRelease ,
+ const char * DataFlowAuthor ,
+ const char * DataFlowComment ) ;
+ virtual ~DataNode() ;
+
+ void DataService( CORBA::ORB_ptr ORB ,
+ const SALOME_ModuleCatalog::Service aService ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) ;
+
+ int CheckDataServerNodes() const ;
+
+// Mirrored methods of _DataFlowDataPorts of DataNode :
+// GetIn... gives the Out which is the input of InPort of the DataFlow
+// GetOut... gives the In which gets the output of OutPort of the DataFlow
+ const int GetNodeInDataNodePortsSize() const {
+ return _DataFlowDataPorts->GetNodeOutPortsSize() ; } ;
+ const OutPort *GetNodeInDataNodePort(int i) const {
+ return _DataFlowDataPorts->GetNodeOutPort( i ) ; } ;
+ OutPort *GetChangeNodeInDataNodePort(int i) const {
+ return _DataFlowDataPorts->GetChangeNodeOutPort( i ) ; } ;
+ const int GetNodeOutDataNodePortsSize() const {
+ return _DataFlowDataPorts->GetNodeInPortsSize() ; } ;
+ const InPort *GetNodeOutDataNodePort(int i) const {
+ return _DataFlowDataPorts->GetNodeInPort( i ) ; } ;
+ InPort *GetChangeNodeOutDataNodePort(int i) const {
+ return _DataFlowDataPorts->GetChangeNodeInPort( i ) ; } ;
+
+ OutPort * GetChangeInDataNodePort( const char * DataFlowInPortName ) {
+ return _DataFlowDataPorts->GetChangeOutPort( DataFlowInPortName ) ; } ;
+ InPort * GetChangeOutDataNodePort( const char * DataFlowOutPortName ) {
+ return _DataFlowDataPorts->GetChangeInPort( DataFlowOutPortName ) ; } ;
+
+ void DataNodeInfo(ostrstream & s ) const ;
+
+ void ListDatas(ostrstream & f) const ;
+
+// bool SaveXML( ostream &f , char *Tabs ,
+ bool SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int X , int Y ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ aFuncNames.resize( 0 ) ;
+ GraphBase::ListOfPythonFunctions aVoidList ;
+// return GraphBase::ComputingNode::SaveXML( f , Tabs , "" , "" , "" , "" ,
+ return GraphBase::ComputingNode::SaveXML( Graph , info , "" , "" , "" , "" ,
+ aFuncNames , aVoidList , X , Y ) ; } ;
+
+ bool SavePY( ostream &f , const char * aGraphName ,
+ int X , int Y ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ aFuncNames.resize( 0 ) ;
+ GraphBase::ListOfPythonFunctions aVoidList ;
+ return GraphBase::ComputingNode::SavePY( f , aGraphName , "" , "" , "" , NULL ,
+ aFuncNames , aVoidList , X , Y ) ; } ;
+ } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_DataPort.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_DataPort.hxx"
+
+GraphBase::DataPort::DataPort(
+ const char *const * NodeName ,
+ const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ) :
+ Port( NodeName , aserviceParameter ) {
+ InitialValues( CORBA::Any() ) ;
+}
+
+GraphBase::DataPort::~DataPort() {
+}
+
+void GraphBase::DataPort::InitialValues(CORBA::Any aValue ) {
+ _theValue = new CORBA::Any( aValue ) ;
+ string _Type = CORBA::string_dup(GetServicesParameter().Parametertype) ;
+ const char * Type = _Type.c_str();
+ CORBA::Any InitialValue ;
+ cdebug << "InitialValues " << NodeName() << " " << PortName() << " " << PortType()
+ << " : " ;
+ if ( !strcmp( Type , "string" ) ) {
+ cdebug << "string" << endl ;
+ InitialValue <<= (char *) NULL ;
+ }
+ else if ( !strcmp( Type , "double" ) ) {
+ cdebug << "double" << endl ;
+ InitialValue <<= 0. ;
+ }
+ else if ( !strcmp( Type , "long" ) ) {
+ cdebug << "long" << endl ;
+ InitialValue <<= (long ) 0 ;
+ }
+ else if ( !strcmp( Type , "objref" ) ) {
+ cdebug << "objref" << endl ;
+ InitialValue.replace(CORBA::_tc_Object, NULL);
+ }
+ else {
+ cdebug << "InitialValues ERROR (other) " << Type << endl ;
+ InitialValue <<= (long ) 0 ;
+ }
+ _InitialValue = new CORBA::Any( InitialValue ) ;
+ _Value = &_InitialValue ;
+}
+
+void GraphBase::DataPort::Value( const CORBA::Any & aDataValue ) {
+ Value( new CORBA::Any( aDataValue ) ) ;
+}
+
+void GraphBase::DataPort::Value( const CORBA::Any * aDataValue ) {
+ delete _theValue ;
+ _theValue = aDataValue ;
+ *_Value = aDataValue ;
+// Done( true ) ;
+
+//#if 0
+ cdebug << "NewValue " << NodeName() << " " << PortName() << " " << PortType()
+ << " : " << _Value << " *_Value " << *_Value << " " ;
+ switch (_theValue->type()->kind()) {
+ case CORBA::tk_string: {
+ char * t;
+ *_theValue >>= t;
+ cdebug << "Value( " << t << ") (string)";
+ break;
+ }
+ case CORBA::tk_double: {
+ double d;
+ *_theValue >>= d;
+ cdebug << "Value( " << d << ") (double)";
+ break;
+ }
+ case CORBA::tk_long: {
+ long l;
+ *_theValue >>= l;
+ cdebug << "Value( " << l << ") (long)";
+ break;
+ }
+ case CORBA::tk_objref: {
+ cdebug << "Value( " << ") (object reference)";
+ break;
+ }
+ default: {
+ cdebug << "Value" << " (other(tk_string,tk_double,tk_long,tk_objref)) ERROR";
+ break;
+ }
+ }
+ cdebug << endl;
+//#endif
+
+}
+
+void GraphBase::DataPort::Value( const CORBA::Any ** aDataSharedValue ) {
+ delete _theValue ;
+ _theValue = *aDataSharedValue ;
+ _Value = aDataSharedValue ;
+// Done( true ) ;
+
+#if 0
+ MESSAGE( NodePortName() << " : " << hex << _Value << " " );
+ switch (_theValue->type()->kind()) {
+ case CORBA::tk_string:
+ char * t;
+ *_theValue >>= t;
+ MESSAGE( "Value( " << t << ") (string)");
+ break;
+ case CORBA::tk_double:
+ double d;
+ *_theValue >>= d;
+ MESSAGE( "Value( " << d << ") (double)");
+ break;
+ case CORBA::tk_long:
+ long l;
+ *_theValue >>= l;
+ MESSAGE( "Value( " << l << ") (long)");
+ break;
+ case CORBA::tk_objref:
+ MESSAGE( "Value( " << ") (object reference)");
+ break;
+ default:
+ MESSAGE( "Value" << " (other(tk_string,tk_double,tk_long,tk_objref)) ERROR");
+ break;
+ }
+ MESSAGE();
+#endif
+}
+
+CORBA::Any const * GraphBase::DataPort::Value() const {
+ const CORBA::Any *const Value = *_Value ;
+ CORBA::Any * theValue ;
+ cdebug << "Value " << NodeName() << " " << PortName() << " " << PortType()
+ << " _Value " << _Value << " *_Value " << *_Value << " " ;
+ if ( Done() ) {
+ theValue = new CORBA::Any( *Value ) ;
+ switch (theValue->type()->kind()) {
+ case CORBA::tk_string: {
+ char * t;
+ *theValue >>= t;
+ cdebug << "GraphBase::DataPort::Value() : " << t << " (string) " << endl;
+ break;
+ }
+ case CORBA::tk_double: {
+ double d;
+ *theValue >>= d;
+ cdebug << "GraphBase::DataPort::Value() : " << d << " (double) " << endl;
+ break;
+ }
+ case CORBA::tk_long: {
+ long l;
+ *theValue >>= l;
+ cdebug << "GraphBase::DataPort::Value() : " << l << " (long) " << endl;
+ break;
+ }
+ case CORBA::tk_objref: {
+ CORBA::Object_ptr obj ;
+ char * retstr ;
+ try {
+ *theValue >>= obj ;
+ retstr = ObjectToString( obj );
+ cdebug << "GraphBase::DataPort::Value() : " << retstr
+ << "(object reference) " << endl;
+ }
+ catch( ... ) {
+ cdebug << "ToString( object ) Catched ERROR" << endl ;
+ }
+ break;
+ }
+ default: {
+ cdebug << "GraphBase::DataPort::Value() : "
+ << "(other(tk_string,tk_double,tk_long,tk_objref)) ERROR" << endl;
+ break;
+ }
+ }
+ }
+ else {
+ cdebug << "GraphBase::DataPort::InitialValue() " << endl;
+ theValue = new CORBA::Any( *Value ) ;
+ }
+
+ return theValue ;
+}
+
+bool GraphBase::DataPort::BoolValue() const {
+ bool RetVal = false ;
+ long val ;
+ if ( (*_Value)->type()->kind() == CORBA::tk_long ) {
+ **_Value >>= val ;
+ if ( val ) {
+ RetVal = true ;
+ }
+ }
+ return RetVal ;
+}
+
+const CORBA::Any ** GraphBase::DataPort::ValuePtr() const {
+ return _Value ;
+}
+
+void GraphBase::DataPort::StringValue(ostream & f ) const {
+ if ( Done() ) {
+ cdebug << "StringValue " << NodeName() << " " << PortName() << " " << PortType()
+ << " _Value " << _Value << " *_Value "
+ << *_Value << " " << endl ;
+ const CORBA::Any * theValue = *_Value ;
+ switch (theValue->type()->kind()) {
+ case CORBA::tk_string:
+ char * t;
+ *theValue >>= t;
+ f << t << " (string)" ;
+ break;
+ case CORBA::tk_double:
+ double d;
+ *theValue >>= d;
+ f << d << " (double)" ;
+ break;
+ case CORBA::tk_long:
+ long l;
+ *theValue >>= l;
+ f << l << " (long)" ;
+ break;
+ case CORBA::tk_objref:
+ f << "(object reference)" ;
+ break;
+ default:
+ f << "(other ERROR)" ;
+ break;
+ }
+ }
+ else {
+ f << "Default(undefined)" ;
+ }
+
+}
+
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_DataPort.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_DATAPORT_HXX
+#define _DATAFLOWBASE_DATAPORT_HXX
+
+#include "DataFlowBase_Port.hxx"
+
+namespace GraphBase {
+
+ class DataPort : public Port {
+
+ CORBA::Any const * _InitialValue ;
+ CORBA::Any const * _theValue ;
+ CORBA::Any const * * _Value ;
+ SUPERV::GraphState _State ;
+ bool _Done ;
+
+ public :
+
+ DataPort( const char *const * NodeName ,
+ const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ) ;
+ virtual ~DataPort() ;
+
+ void InitialValues(CORBA::Any aValue ) ;
+ void Value (const CORBA::Any & aValue ) ;
+ void Value( const CORBA::Any * aValue ) ;
+ void Value( const CORBA::Any ** aValue ) ;
+ CORBA::Any const * Value() const ;
+ bool BoolValue() const ;
+ const CORBA::Any ** ValuePtr() const ;
+
+ void State( SUPERV::GraphState aState ) {
+ _State = aState ; } ;
+ SUPERV::GraphState State() { return _State ; } ;
+
+ void Done( bool aDone ) {
+// cdebug << "ChgDone(.) " << NodeName() << " " << PortName() << " "
+// << _Done << " -> " << aDone << endl ;
+ _Done = aDone ; } ;
+ const bool Done() const { return ( _Done ) ; } ;
+
+ void StringValue(ostream & f) const ;
+
+ } ;
+
+} ;
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_EndOfLoopNode.cxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_EndOfLoopNode.hxx"
+
+GraphBase::EndOfLoopNode::EndOfLoopNode() :
+ GraphBase::GOTONode::GOTONode() {
+
+ cdebug << "GraphBase::EndOfLoopNode::EndOfLoopNode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+
+}
+
+GraphBase::EndOfLoopNode::EndOfLoopNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & anInitPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::GOTONode::GOTONode( ORB , ptrNamingService , FuncName ,
+ anInitPythonFunction ,
+ NodeName , akind , NodeFirstCreation ,
+ NodeLastModification , NodeEditorRelease ,
+ NodeAuthor , NodeComment , GeneratedName ,
+ X , Y , Graph_prof_debug , Graph_fdebug ) {
+
+ cdebug_in << "GraphBase::EndOfLoopNode::EndOfLoopNode " << this
+ << "' _Name " << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind() << " FuncName " << FuncName
+ << " ServiceName " << ServiceName() << " In("
+ << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug_out << "GraphBase::EndOfLoopNode::EndOfLoopNode" << endl;
+}
+
+GraphBase::EndOfLoopNode::~EndOfLoopNode() {
+ cdebug << "GraphBase::Node::~Node " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( Comment() != NULLSTRING )
+// delete [] Comment();
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_EndOfLoopNode.hxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_ENDOFLOOPNODE_HXX
+#define _DATAFLOWBASE_ENDOFLOOPNODE_HXX
+
+#include "DataFlowBase_GOTONode.hxx"
+
+namespace GraphBase {
+
+ class EndOfLoopNode : public GOTONode {
+
+ private:
+
+ public:
+
+ EndOfLoopNode() ;
+ EndOfLoopNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~EndOfLoopNode() ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_EndOfSwitchNode.cxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_EndOfSwitchNode.hxx"
+
+GraphBase::EndOfSwitchNode::EndOfSwitchNode() :
+ GraphBase::GOTONode::GOTONode() {
+
+ cdebug << "GraphBase::EndOfSwitchNode::EndOfSwitchNode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+
+}
+
+GraphBase::EndOfSwitchNode::EndOfSwitchNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::GOTONode::GOTONode( ORB , ptrNamingService , FuncName ,
+ aPythonFunction ,
+ NodeName , akind , NodeFirstCreation ,
+ NodeLastModification , NodeEditorRelease ,
+ NodeAuthor , NodeComment , GeneratedName ,
+ X , Y , Graph_prof_debug , Graph_fdebug ) {
+
+ cdebug_in << "GraphBase::EndOfSwitchNode::EndOfSwitchNode " << this
+ << "' _Name " << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind() << " FuncName " << FuncName
+ << " ServiceName " << ServiceName() << " In("
+ << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug_out << "GraphBase::EndOfSwitchNode::EndOfSwitchNode" << endl;
+}
+
+GraphBase::EndOfSwitchNode::~EndOfSwitchNode() {
+ cdebug << "GraphBase::EndOfSwitchNode::~EndOfSwitchNode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( _Comment != NULLSTRING )
+// delete [] _Comment;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_EndOfSwitchNode.hxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_ENDOFSWITCHNODE_HXX
+#define _DATAFLOWBASE_ENDOFSWITCHNODE_HXX
+
+#include "DataFlowBase_GOTONode.hxx"
+
+namespace GraphBase {
+
+ class EndOfSwitchNode : public GOTONode {
+
+ private:
+
+ public:
+
+ EndOfSwitchNode() ;
+ EndOfSwitchNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~EndOfSwitchNode() ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_FactoryNode.cxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_FactoryNode.hxx"
+
+static void InitFields( char * &_ComponentName ,
+ char * &_InterfaceName ,
+ char * &_Computer ) {
+ time_t T = time(NULL);
+ struct tm * Tm = localtime(&T);
+
+ _ComponentName = NULLSTRING ;
+ _InterfaceName = NULLSTRING ;
+
+ _Computer = FACTORYSERVER ;
+}
+
+GraphBase::FactoryNode::FactoryNode() :
+ GraphBase::ComputingNode::ComputingNode() {
+
+ InitFields( _ComponentName ,
+ _InterfaceName ,
+ _Computer ) ;
+ _Container = Engines::Container::_nil() ;
+ _ObjComponent = Engines::Component::_nil() ;
+ cdebug << "GraphBase::FactoryNode::FactoryNode " << this
+ << " _ComponentName "
+ << (void *) _ComponentName << " " << _ComponentName << " _Name "
+ << (void *) Name() << " " << Name() << " _Computer "
+ << (void *) _Computer << " " << _Computer << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+
+}
+
+GraphBase::FactoryNode::FactoryNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * aDataFlowName ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::ComputingNode::ComputingNode( ORB , ptrNamingService , aDataFlowName ,
+ Graph_prof_debug , Graph_fdebug ) {
+
+ InitFields( _ComponentName ,
+ _InterfaceName ,
+ _Computer ) ;
+
+ _Container = Engines::Container::_nil() ;
+ _ObjComponent = Engines::Component::_nil() ;
+
+ cdebug << "GraphBase::FactoryNode::FactoryNode " << this
+ << " _ComponentName "
+ << (void *) _ComponentName << " '" << _ComponentName
+ << "' _InterfaceName "
+ << (void *) _InterfaceName << " '" << _InterfaceName << "' _Name "
+ << (void *) Name() << " '" << Name() << "' _Computer "
+ << (void *) _Computer << " " << _Computer << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+}
+
+GraphBase::FactoryNode::FactoryNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& aService ,
+ const char *ComponentName ,
+ const char* InterfaceName ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComputer ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::ComputingNode::ComputingNode( ORB , ptrNamingService , aService ,
+ NodeName , akind ,
+ NodeFirstCreation , NodeLastModification ,
+ NodeEditorRelease , NodeAuthor , NodeComment ,
+ GeneratedName , X , Y ,
+ Graph_prof_debug , Graph_fdebug ) {
+
+ _Container = Engines::Container::_nil() ;
+ _ObjComponent = Engines::Component::_nil() ;
+
+ _ComponentName = new char[strlen(ComponentName)+1];
+ strcpy(_ComponentName , ComponentName ) ;
+
+ _InterfaceName = new char[strlen(InterfaceName)+1];
+ strcpy(_InterfaceName , InterfaceName ) ;
+
+ if ( NodeComputer ) {
+ _Computer = new char[ strlen( NodeComputer ) + 1 ] ;
+ strcpy( _Computer , NodeComputer ) ;
+ }
+ else
+ _Computer = FACTORYSERVER ;
+
+ cdebug_in << "GraphBase::FactoryNode::FactoryNode(" << aService.ServiceName << ","
+ << ComponentName << "," << Name() << "," << akind
+ << "," << NodeComputer << "," << Comment() << ")" << endl;
+
+ cdebug << "GraphBase::FactoryNode::FactoryNode " << this
+ << " _ComponentName "
+ << (void *) _ComponentName << " '" << _ComponentName
+ << "' _InterfaceName "
+ << (void *) _InterfaceName << " '" << _InterfaceName << "' _Name "
+ << (void *) Name() << " '" << Name() << "' _Computer "
+ << (void *) _Computer << " " << _Computer << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind()
+ << " ServiceName " << ServiceName() << " In(" << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug_out << "GraphBase::FactoryNode::FactoryNode" << endl;
+}
+
+GraphBase::FactoryNode::~FactoryNode() {
+ cdebug << "GraphBase::Node::~Node " << this
+ << "_ComponentName "
+ << (void *) _ComponentName << " " << _ComponentName << " _Name "
+ << (void *) Name() << " " << Name() << " _Computer "
+ << (void *) _Computer << " " << _Computer << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( _Comment != NULLSTRING )
+// delete [] _Comment;
+}
+
+bool GraphBase::FactoryNode::ComponentName(const char * aComponentName) {
+ if ( _ComponentName && _ComponentName != NULLSTRING )
+ delete [] _ComponentName ;
+ _ComponentName = new char[strlen(aComponentName)+1] ;
+ strcpy( _ComponentName , aComponentName ) ;
+ return true ;
+}
+
+bool GraphBase::FactoryNode::InterfaceName(const char * anInterfaceName) {
+ if ( _InterfaceName && _InterfaceName != NULLSTRING )
+ delete [] _InterfaceName ;
+ _InterfaceName = new char[strlen(anInterfaceName)+1] ;
+ strcpy( _InterfaceName , anInterfaceName ) ;
+ return true ;
+}
+
+bool GraphBase::FactoryNode::Computer(const char *c) {
+ cdebug_in << "GraphBase::FactoryNode::Computer" << endl;
+ if ( _Computer != FACTORYSERVER )
+ delete [] _Computer ;
+ _Computer = my_strdup(c);
+ cdebug_out << "GraphBase::FactoryNode::Computer" << endl;
+ return true ;
+}
+
+//bool GraphBase::FactoryNode::SaveXML( ostream &f , char *Tabs ,
+bool GraphBase::FactoryNode::SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int XCoordinate , int YCoordinate ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aVoidList ;
+// return GraphBase::ComputingNode::SaveXML( f , Tabs , ComponentName() ,
+ return GraphBase::ComputingNode::SaveXML( Graph , info , ComponentName() ,
+ InterfaceName() , Computer() , "" ,
+ aFuncNames , aVoidList ,
+ XCoordinate , YCoordinate ) ;
+}
+
+bool GraphBase::FactoryNode::SavePY(ostream &f , const char * aGraphName ,
+ int XCoordinate , int YCoordinate ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aVoidList ;
+ return GraphBase::ComputingNode::SavePY( f , aGraphName , ComponentName() ,
+ InterfaceName() , Computer() , NULL ,
+ aFuncNames , aVoidList ,
+ XCoordinate , YCoordinate ) ;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_FactoryNode.hxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_FACTORYNODE_HXX
+#define _DATAFLOWBASE_FACTORYNODE_HXX
+
+#include "DataFlowBase_ComputingNode.hxx"
+
+namespace GraphBase {
+
+ class FactoryNode : public ComputingNode {
+
+ private:
+
+ Engines::Container_var _Container ;
+ Engines::Component_var _ObjComponent ;
+
+ char * _ComponentName ;
+ char * _InterfaceName ;
+
+ char * _Computer ;
+
+ public:
+
+ FactoryNode() ;
+ FactoryNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * DataFlowName ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ FactoryNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& NodeService ,
+ const char *NodeComponentName ,
+ const char* NodeInterfaceName ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComputer ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~FactoryNode() ;
+
+ Engines::Container_var Container() const { return _Container ; } ;
+ void SetContainer(Engines::Container_var aContainer) {
+ _Container = aContainer ; } ;
+ Engines::Component_var Component() const { return _ObjComponent ; } ;
+ void SetComponent(Engines::Component_var anObjComponent) {
+ _ObjComponent = anObjComponent ; } ;
+ char * ComponentName() const { return my_strdup( _ComponentName ) ; } ;
+ char * InterfaceName() const { return my_strdup( _InterfaceName ) ; } ;
+ char * Computer() const { return my_strdup( _Computer ) ; } ;
+
+ bool ComponentName( const char * aComponentName ) ;
+ bool InterfaceName( const char * anInterfaceName ) ;
+ bool Computer( const char *c ) ;
+
+// bool SaveXML( ostream &f , char *Tabs ,
+ bool SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int XCoordinate , int YCoordinate ) const ;
+ bool SavePY( ostream &f , const char * aGraphName ,
+ int XCoordinate , int YCoordinate ) const ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_GOTONode.cxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_GOTONode.hxx"
+
+GraphBase::GOTONode::GOTONode() :
+ GraphBase::InLineNode::InLineNode() {
+
+ CoupledNode( NULL ) ;
+ cdebug << "GraphBase::GOTONode::GOTONode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+
+}
+
+GraphBase::GOTONode::GOTONode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char *FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::InLineNode::InLineNode( ORB , ptrNamingService , FuncName , aPythonFunction ,
+ NodeName , akind , NodeFirstCreation ,
+ NodeLastModification , NodeEditorRelease ,
+ NodeAuthor , NodeComment , GeneratedName ,
+ X , Y , Graph_prof_debug , Graph_fdebug ) {
+
+ CoupledNode( NULL ) ;
+ cdebug_in << "GraphBase::GOTONode::GOTONode " << this
+ << "' _Name " << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind() << " FuncName " << FuncName
+ << " ServiceName " << ServiceName() << " In("
+ << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug_out << "GraphBase::GOTONode::GOTONode" << endl;
+}
+
+GraphBase::GOTONode::~GOTONode() {
+ cdebug << "GraphBase::GOTONode::~GOTONode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( _Comment != NULLSTRING )
+// delete [] _Comment;
+}
+
+//bool GraphBase::GOTONode::SaveXML( ostream &f , char *Tabs ,
+bool GraphBase::GOTONode::SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int XCoordinate , int YCoordinate ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aPythonFunction ;
+ if ( PyFuncName() ) {
+ aFuncNames.resize( 1 ) ;
+ aFuncNames[0] = CORBA::string_dup( PyFuncName() ) ;
+ aPythonFunction.resize( 1 ) ;
+ aPythonFunction[0] = PythonFunction() ;
+ }
+ char * CoupledName = "" ;
+ if ( CoupledNode() ) {
+ CoupledName = CoupledNode()->Name() ;
+ }
+// return GraphBase::ComputingNode::SaveXML( f , Tabs , "" , "" , "" ,
+ return GraphBase::ComputingNode::SaveXML( Graph , info , "" , "" , "" ,
+ CoupledName ,
+ aFuncNames , aPythonFunction ,
+ XCoordinate , YCoordinate ) ;
+}
+
+bool GraphBase::GOTONode::SavePY( ostream &f , const char * aGraphName ,
+ int XCoordinate , int YCoordinate ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aPythonFunction ;
+ if ( PyFuncName() ) {
+ aFuncNames.resize( 1 ) ;
+ aFuncNames[0] = CORBA::string_dup( PyFuncName() ) ;
+ aPythonFunction.resize( 1 ) ;
+ aPythonFunction[0] = PythonFunction() ;
+ }
+ return GraphBase::ComputingNode::SavePY( f , aGraphName , "" , "" , "" ,
+ CoupledNode() ,
+ aFuncNames , aPythonFunction ,
+ XCoordinate , YCoordinate ) ;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_GOTONode.hxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_GOTONODE_HXX
+#define _DATAFLOWBASE_GOTONODE_HXX
+
+#include "DataFlowBase_InLineNode.hxx"
+
+namespace GraphBase {
+
+ class GOTONode : public InLineNode {
+
+ private:
+
+ InLineNode * _CoupledNode ;
+
+ public:
+
+ GOTONode() ;
+ GOTONode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~GOTONode() ;
+
+ void CoupledNode( InLineNode * aCoupledNode ) {
+ cdebug << Name() << ".GraphBase::GOTONode::CoupledNode( " ;
+ if ( aCoupledNode ) {
+ cdebug << aCoupledNode->Name() ;
+ }
+ else {
+ cdebug << "NULL" ;
+ }
+ cdebug << " )" << endl ;
+ _CoupledNode = aCoupledNode ; } ;
+ const InLineNode * CoupledNode() const {
+ cdebug << Name() << ".GraphBase::GOTONode::CoupledNode() --> " ;
+ if ( _CoupledNode ) {
+ cdebug << _CoupledNode->Name() ;
+ }
+ else {
+ cdebug << "NULL" ;
+ }
+ cdebug << endl ;
+ return _CoupledNode ; } ;
+ InLineNode * CoupledNode() {
+ cdebug << Name() << ".GraphBase::GOTONode::CoupledNode() --> " ;
+ if ( _CoupledNode ) {
+ cdebug << _CoupledNode->Name() ;
+ }
+ else {
+ cdebug << "NULL" ;
+ }
+ cdebug << endl ;
+ return _CoupledNode ; } ;
+
+// bool SaveXML(ostream &f , char *Tabs , int X , int Y ) const ;
+ bool SaveXML(QDomDocument & Graph , QDomElement & info , int X , int Y ) const ;
+
+ bool SavePY(ostream &f , const char * aGraphName , int X , int Y ) const ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_Graph.cxx
+// Created : 2001
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_Graph.hxx"
+
+#include "SALOME_LifeCycleCORBA.hxx"
+
+GraphBase::Graph::Graph() :
+ DataNode() {
+ cdebug << "GraphBase::Graph::Graph" << endl ;
+ _GraphNodesSize = 0 ;
+}
+
+GraphBase::Graph::Graph( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char *DataFlowName ,
+ const char * DebugFileName ) :
+ DataNode( ORB ,ptrNamingService , DataFlowName ) {
+ cdebug << "GraphBase::Graph::Graph" << endl ;
+ _Orb = CORBA::ORB::_duplicate( ORB ) ;
+ _GraphNodesSize = 0 ;
+ Set_prof_debug( ORB , DebugFileName ) ;
+}
+
+GraphBase::Graph::Graph( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& DataFlowService ,
+ const char *DataFlowComponentName ,
+ const char *DataFlowInterfaceName ,
+ const char *DataFlowName ,
+ const SUPERV::KindOfNode DataFlowkind ,
+ const SUPERV::SDate DataFlowFirstCreation ,
+ const SUPERV::SDate DataFlowLastModification ,
+ const char * DataFlowEditorRelease ,
+ const char * DataFlowAuthor ,
+ const char * DataFlowComputer ,
+ const char * DataFlowComment ,
+ const char * DebugFileName ) :
+ DataNode( ORB , ptrNamingService , DataFlowService ,
+ DataFlowName , DataFlowkind ,
+ DataFlowFirstCreation , DataFlowLastModification ,
+ DataFlowEditorRelease , DataFlowAuthor , DataFlowComment ) {
+ _Orb = CORBA::ORB::_duplicate( ORB ) ;
+ _GraphNodesSize = 0 ;
+ Set_prof_debug( ORB , DebugFileName ) ;
+ cdebug_in << "GraphBase::Graph::Graph" << endl ;
+ DataService( ORB , DataFlowService , Graph_prof_debug() , Graph_fdebug() ) ;
+ cdebug_out << "GraphBase::Graph::Graph" << endl ;
+}
+
+GraphBase::Graph::~Graph() {
+ cdebug << "GraphBase::Graph::~Graph" << endl ;
+}
+
+void GraphBase::Graph::Set_prof_debug( CORBA::ORB_ptr ORB ,
+ const char * DebugFileName ) {
+ _Graph_prof_debug = 0 ;
+ if ( DebugFileName ) {
+ _Graph_fdebug = new ofstream( DebugFileName );
+ MESSAGE( endl << "Trace redirected to file " << DebugFileName << endl)
+ }
+ else
+ _Graph_fdebug = &(std::cerr);
+ SetDebug( ORB , &_Graph_prof_debug , _Graph_fdebug ) ;
+}
+
+GraphBase::SNode * GraphBase::Graph::GetInfo() const {
+ GraphBase::SNode * Info = new GraphBase::SNode ;
+ Info->theComponentName = "" ;
+ Info->theInterfaceName = "" ;
+ Info->theName = Name() ;
+ Info->theKind = Kind() ;
+ Info->theService = *GetService() ;
+ Info->theFirstCreation = FirstCreation() ;
+ Info->theLastModification = LastModification() ;
+ Info->theEditorRelease = EditorRelease() ;
+ Info->theAuthor = Author() ;
+ Info->theContainer = "" ;
+ Info->theComment = Comment() ;
+ Info->theCoords.theX = GraphBase::ComputingNode::XCoordinate() ;
+ Info->theCoords.theY = GraphBase::ComputingNode::YCoordinate() ;
+ return Info ;
+}
+
+//----------------------------------------------------------------------
+// Function : GetNodes
+// Purpose : get a nodes list
+//----------------------------------------------------------------------
+GraphBase::ListOfNodes * GraphBase::Graph::GetNodes() const {
+ GraphBase::ListOfNodes * _list_nodes =
+ new GraphBase::ListOfNodes;
+
+ // All the nodes from _InNodes are taken
+// vector< InNode *> Nodes = InNodes() ;
+
+ _list_nodes->resize( GraphNodesSize() );
+
+ int igoto ;
+ int ind ;
+ GraphBase::ComputingNode * aCNode = NULL ;
+ for ( igoto = 0 ; igoto < 2 ; igoto++ ) {
+ for ( ind = 0 ; ind < GraphNodesSize() ; ind++ ) {
+ aCNode = GraphNodes( ind ) ;
+ if ( ( igoto == 0 && !aCNode->IsGOTONode() ) ||
+ ( igoto == 1 && aCNode->IsGOTONode() ) ) {
+ if ( aCNode->IsFactoryNode() ) {
+ GraphBase::FactoryNode * aFNode = (GraphBase::FactoryNode * ) aCNode ;
+ (*_list_nodes)[ind].theComponentName = CORBA::string_dup( aFNode->ComponentName());
+ (*_list_nodes)[ind].theInterfaceName = CORBA::string_dup( aFNode->InterfaceName());
+ }
+ else {
+ (*_list_nodes)[ind].theComponentName = CORBA::string_dup( "" );
+ (*_list_nodes)[ind].theInterfaceName = CORBA::string_dup( "" );
+ }
+ (*_list_nodes)[ind].theName = CORBA::string_dup( aCNode->Name() );
+ (*_list_nodes)[ind].theKind = aCNode->Kind();
+ if ( aCNode->IsInLineNode() ) {
+ GraphBase::InLineNode * aINode = (GraphBase::InLineNode * ) aCNode ;
+ (*_list_nodes)[ind].theListOfFuncName.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfFuncName[0] = CORBA::string_dup( aINode->PyFuncName() ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[0] = aINode->PythonFunction() ;
+ }
+ if ( aCNode->IsGOTONode() ) {
+ GraphBase::GOTONode * aGNode = (GraphBase::GOTONode * ) aCNode ;
+ (*_list_nodes)[ind].theListOfFuncName.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfFuncName[0] = CORBA::string_dup( aGNode->PyFuncName() ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[0] = aGNode->PythonFunction() ;
+ }
+ if ( aCNode->IsLoopNode() ) {
+ GraphBase::LoopNode * aLNode = (GraphBase::LoopNode * ) aCNode ;
+ (*_list_nodes)[ind].theCoupledNode = CORBA::string_dup( aLNode->CoupledNode()->Name() ) ;
+ (*_list_nodes)[ind].theListOfFuncName.resize( 3 ) ;
+ (*_list_nodes)[ind].theListOfFuncName[0] = CORBA::string_dup( aLNode->PyFuncName() ) ;
+ (*_list_nodes)[ind].theListOfFuncName[1] = CORBA::string_dup( aLNode->PyMoreName() ) ;
+ (*_list_nodes)[ind].theListOfFuncName[2] = CORBA::string_dup( aLNode->PyNextName() ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 3 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[0] = aLNode->PythonFunction() ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[1] = aLNode->MorePythonFunction() ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[2] = aLNode->NextPythonFunction() ;
+ }
+ else if ( aCNode->IsSwitchNode() ) {
+ GraphBase::SwitchNode * aSNode = (GraphBase::SwitchNode * ) aCNode ;
+ (*_list_nodes)[ind].theCoupledNode = CORBA::string_dup( aSNode->CoupledNode()->Name() ) ;
+ (*_list_nodes)[ind].theListOfFuncName.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfFuncName[0] = CORBA::string_dup( aSNode->PyFuncName() ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[0] = aSNode->PythonFunction() ;
+ }
+ else if ( aCNode->IsEndLoopNode() ) {
+ GraphBase::EndOfLoopNode * aELNode = (GraphBase::EndOfLoopNode * ) aCNode ;
+ (*_list_nodes)[ind].theCoupledNode = CORBA::string_dup( aELNode->CoupledNode()->Name() ) ;
+ (*_list_nodes)[ind].theListOfFuncName.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfFuncName[0] = CORBA::string_dup( aELNode->PyFuncName() ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[0] = aELNode->PythonFunction() ;
+ }
+ else if ( aCNode->IsEndSwitchNode() ) {
+ GraphBase::EndOfSwitchNode * aESNode = (GraphBase::EndOfSwitchNode * ) aCNode ;
+ (*_list_nodes)[ind].theCoupledNode = CORBA::string_dup( aESNode->CoupledNode()->Name() ) ;
+ (*_list_nodes)[ind].theListOfFuncName.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfFuncName[0] = CORBA::string_dup( aESNode->PyFuncName() ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[0] = aESNode->PythonFunction() ;
+ }
+ else {
+ (*_list_nodes)[ind].theCoupledNode = CORBA::string_dup( "" ) ;
+ }
+ (*_list_nodes)[ind].theService = *aCNode->GetService();
+// (*_list_nodes)[ind].theListOfParameters = *aCNode->GetListOfParameters() ;
+ if ( aCNode->IsOneOfInLineNodes() ) {
+ GraphBase::InLineNode * aINode = (GraphBase::InLineNode * ) aCNode ;
+ GraphBase::LoopNode * aLNode = NULL ;
+ if ( aCNode->IsLoopNode() ) {
+ aLNode = (GraphBase::LoopNode * ) aCNode ;
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 3 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[ 0 ] = aINode->PythonFunction() ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[ 1 ] = aLNode->MorePythonFunction() ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[ 2 ] = aLNode->NextPythonFunction() ;
+ }
+ else if ( aCNode->IsInLineNode() || aCNode->IsGOTONode() ||
+ aCNode->IsSwitchNode() || aCNode->IsEndSwitchNode() ) {
+ (*_list_nodes)[ind].theListOfPythonFunctions.resize( 1 ) ;
+ (*_list_nodes)[ind].theListOfPythonFunctions[ 0 ] = aINode->PythonFunction() ;
+ }
+ }
+ (*_list_nodes)[ind].theFirstCreation = aCNode->FirstCreation();
+ (*_list_nodes)[ind].theLastModification = aCNode->LastModification();
+ (*_list_nodes)[ind].theEditorRelease = CORBA::string_dup( aCNode->EditorRelease());
+ (*_list_nodes)[ind].theAuthor = CORBA::string_dup( aCNode->Author());
+ if ( aCNode->IsFactoryNode() ) {
+ GraphBase::FactoryNode * aFNode = (GraphBase::FactoryNode * ) aCNode ;
+ (*_list_nodes)[ind].theContainer = CORBA::string_dup( aFNode->Computer());
+ }
+ else {
+ (*_list_nodes)[ind].theContainer = CORBA::string_dup( "" );
+ }
+ (*_list_nodes)[ind].theComment = CORBA::string_dup( aCNode->Comment());
+ (*_list_nodes)[ind].theCoords.theX = aCNode->XCoordinate();
+ (*_list_nodes)[ind].theCoords.theY = aCNode->YCoordinate();
+#if 0
+ int nports = 0 ;
+ int i ;
+ for ( i = 0 ; i < aCNode->GetNodeInPortsSize() ; i++ ) {
+ const GraphBase::InPort * anInPort = aCNode->GetNodeInPort( i ) ;
+ if ( anInPort->IsBus() ) {
+ nports += 1 ;
+ (*_list_nodes)[ind].theListOfParameters.resize( nports ) ;
+ (*_list_nodes)[ind].theListOfParameters[ nports-1 ].theInParameter.Parametertype = CORBA::string_dup( anInPort->PortType() ) ;
+ (*_list_nodes)[ind].theListOfParameters[ nports-1 ].theInParameter.Parametername = CORBA::string_dup( anInPort->PortName() ) ;
+ (*_list_nodes)[ind].theListOfParameters[ nports-1 ].theOutParameter.Parametertype = CORBA::string_dup( aCNode->GetNodeOutPort( anInPort->PortIndex() )->PortType() ) ;
+ (*_list_nodes)[ind].theListOfParameters[ nports-1 ].theOutParameter.Parametername = CORBA::string_dup( aCNode->GetNodeOutPort( anInPort->PortIndex() )->PortName() ) ;
+ }
+ }
+#endif
+ }
+ }
+ }
+ return _list_nodes ;
+}
+
+
+//----------------------------------------------------------------------
+// Function : GetLinks
+// Purpose : get a links list
+//----------------------------------------------------------------------
+GraphBase::ListOfLinks * GraphBase::Graph::GetLinks() const {
+ GraphBase::ListOfLinks * _list_links =
+ new GraphBase::ListOfLinks;
+
+// All the links from _LinksList are taken
+// vector< InNode *> Nodes = InNodes() ;
+
+ int ind = 0 ;
+ int k ;
+ for ( k = 0 ; k < GraphNodesSize() ; k++ ) {
+ GraphBase::ComputingNode * aNode = GraphNodes( k ) ;
+ int i ;
+ for ( i = 0 ; i < aNode->GetNodeOutPortsSize() ; i++ ) {
+ const GraphBase::OutPort* fromPort = aNode->GetNodeOutPort( i ) ;
+// cout << "GraphBase::Graph::GetLinks " << aNode->Name() << " "
+// << fromPort->PortName() << " " << fromPort->IsPortConnected()
+// << " " << fromPort->InPortsSize() << endl ;
+ if ( fromPort->IsPortConnected() ) {
+ int j ;
+ for ( j = 0 ; j < fromPort->InPortsSize() ; j++ ) {
+ _list_links->resize( ind+1 );
+ (*_list_links)[ind].FromNodeName = CORBA::string_dup( aNode->Name() );
+ (*_list_links)[ind].FromServiceParameterName = fromPort->GetServicesParameter().Parametername;
+ const GraphBase::InPort* toPort = fromPort->InPorts( j ) ;
+ (*_list_links)[ind].ToNodeName = CORBA::string_dup( toPort->NodeName() );
+ (*_list_links)[ind].ToServiceParameterName = toPort->GetServicesParameter().Parametername;
+ (*_list_links)[ind].aLinkValue = *fromPort->Value() ;
+ if ( toPort->IsEndSwitch() ) {
+ (*_list_links)[ind++].aListOfCoords = *(fromPort->Coords()) ;
+ }
+ else {
+ (*_list_links)[ind++].aListOfCoords = *(toPort->Coords()) ;
+ }
+ }
+ }
+ }
+ }
+
+ return _list_links;
+}
+
+GraphBase::ListOfGraphs * GraphBase::Graph::GetGraphs() const {
+ GraphBase::ListOfGraphs * _list_graphs =
+ new GraphBase::ListOfGraphs;
+
+ return _list_graphs;
+}
+
+GraphBase::SLink * GraphBase::Graph::GetLink( GraphBase::ComputingNode * aNode ,
+ GraphBase::InPort* toPort ) {
+ GraphBase::SLink * _link = new GraphBase::SLink ;
+ GraphBase::OutPort* fromPort = toPort->GetOutPort() ;
+ _link->FromNodeName = CORBA::string_dup( fromPort->NodeName() );
+ _link->FromServiceParameterName = fromPort->GetServicesParameter().Parametername;
+ _link->ToNodeName = CORBA::string_dup( toPort->NodeName() );
+ _link->ToServiceParameterName = toPort->GetServicesParameter().Parametername;
+ CORBA::Any aSPValue = *fromPort->Value() ;
+ _link->aLinkValue = aSPValue;
+ _link->aListOfCoords = *(toPort->Coords()) ;
+ return _link;
+}
+//----------------------------------------------------------------------
+// Function : GetDatas
+// Purpose : get the datas list
+//----------------------------------------------------------------------
+GraphBase::ListOfLinks * GraphBase::Graph::GetDatas() const {
+ GraphBase::ListOfLinks * _list_datalinks =
+ new GraphBase::ListOfLinks;
+
+ int ind = 0 ;
+ const GraphBase::DataNode * aDataNode = this ;
+ int i ;
+ for ( i = 0 ; i < aDataNode->GetNodeInDataNodePortsSize() ; i++ ) {
+ const GraphBase::OutPort* fromDataPort = aDataNode->GetNodeInDataNodePort( i ) ;
+ if ( fromDataPort->IsDataConnected() ) {
+ int j ;
+//We may have SharedData as input of a DataFlow : same input for one or several
+// input ports. Input(s) of a DataFlow match one or several output-virtual-dataport
+ for ( j = 0 ; j < fromDataPort->InPortsSize() ; j++ ) {
+ _list_datalinks->resize( ind+1 );
+ (*_list_datalinks)[ind].FromNodeName = CORBA::string_dup( aDataNode->Name() );
+ (*_list_datalinks)[ind].FromServiceParameterName = fromDataPort->GetServicesParameter().Parametername;
+ const GraphBase::InPort* toPort = fromDataPort->InPorts( j ) ;
+ (*_list_datalinks)[ind].ToNodeName = CORBA::string_dup( toPort->NodeName() );
+ (*_list_datalinks)[ind].ToServiceParameterName = toPort->GetServicesParameter().Parametername;
+ CORBA::Any aSPValue = *fromDataPort->Value() ;
+ (*_list_datalinks)[ind].aLinkValue = aSPValue;
+ (*_list_datalinks)[ind++].aListOfCoords = *(toPort->Coords()) ;
+ }
+ }
+ }
+
+#if 0
+// Output(s) of a DataFlow match only one input-virtual-dataport
+ for ( i = 0 ; i < aDataNode->GetNodeOutDataNodePortsSize() ; i++ ) {
+ GraphBase::InPort* toDataPort = aDataNode->GetChangeNodeOutDataNodePort( i ) ;
+ const GraphBase::OutPort* fromPort = toDataPort->GetLink() ;
+ if ( fromPort->IsDataConnected() ) {
+ _list_datalinks->length( ind+1 );
+ _list_datalinks[ind].FromNodeName = CORBA::string_dup( fromPort->NodeName() );
+ _list_datalinks[ind].FromServiceParameterName = fromPort->GetServicesParameter().Parametername;
+ _list_datalinks[ind].ToNodeName = CORBA::string_dup( aDataNode->Name() );
+ _list_datalinks[ind].ToServiceParameterName = toDataPort->GetServicesParameter().Parametername;
+// SALOME_SuperVisionBase::ServicesParameterValue aSPValue;
+ CORBA::Any aSPValue = *fromPort->Value() ;
+// aSPValue.Value = CORBA::string_dup( fromPort->Value() );
+// aSPValue.Kind = fromPort->Kind();
+ _list_datalinks[ind].aLinkValue = aSPValue;
+ _list_datalinks[ind++].aListOfCoords = toDataPort->Coords() ;
+ }
+ }
+#endif
+
+ return _list_datalinks ;
+}
+
+bool GraphBase::Graph::AddNode( GraphBase::ComputingNode * aNode ) {
+ cdebug_in << "GraphBase::Graph::AddNode " << (void *) aNode << " "
+ << aNode->Name() << " " << aNode->ServiceName() << endl;
+ bool RetVal = false ;
+ int index = GetGraphNodeIndex( aNode->Name() ) ;
+ if ( index < 0 ) {
+ _GraphNodes.resize( _GraphNodesSize+1 ) ;
+ _GraphNodes[ _GraphNodesSize ] = aNode ;
+ SetGraphNodeIndex( aNode->Name() , _GraphNodesSize ) ;
+ _GraphNodesSize += 1 ;
+ RetVal = true ;
+ }
+// cout << "GraphBase::Graph::AddNode(" << aNode->ComponentName() << " , "
+// << aNode->Name() << ")" << endl;
+ int i ;
+ cdebug << "GraphBase::Graph::AddNode Known nodes :" << endl ;
+ for ( i = 0 ; i < _GraphNodesSize ; i++ ) {
+ cdebug << i << ". " << GetGraphNode( i )->Name() << " "
+ << _MapOfGraphNodes[ GetGraphNode( i )->Name() ] - 1 << endl ;
+ }
+ cdebug_out << "GraphBase::Graph::AddNode " << _GraphNodesSize << " Nodes. "
+ << aNode->ServiceName() << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::ReNameNode( const char* OldNodeName ,
+ const char* NewNodeName ) {
+ cdebug_in << "GraphBase::Graph::ReNameNode (" << OldNodeName << " , "
+ << NewNodeName << ")" << endl;
+ int i ;
+ bool RetVal = false ;
+ if ( !strcmp( OldNodeName , NewNodeName ) ) {
+ RetVal = true ;
+ }
+ else if ( strcmp( Name() , OldNodeName ) ) {
+ int index = GetGraphNodeIndex( OldNodeName ) ;
+ int newindex = GetGraphNodeIndex( NewNodeName ) ;
+ if ( index >= 0 && index < _GraphNodesSize &&
+ ( newindex < 0 || newindex > _GraphNodesSize ) ) {
+ _GraphNodes[ index ]->Name( NewNodeName ) ;
+ _MapOfGraphNodes.erase( OldNodeName ) ;
+ SetGraphNodeIndex( NewNodeName , index ) ;
+
+ GraphBase::ComputingNode * aNode = GetChangeGraphNode( index ) ;
+ for ( i = aNode->GetNodeInPortsSize()-1 ; i >= 0 ; i-- ) {
+ cdebug << i << ". GraphBase::Graph::ReNameNode of LinkedNode : from " ;
+ GraphBase::InPort * anInPort = aNode->GetChangeNodeInPort( i ) ;
+ GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
+ if ( anOutPort ) {
+ cdebug << anOutPort->NodeName() ;
+ }
+ else {
+ cdebug << "without link" ;
+ }
+ cdebug << " to " << i << ". " << anInPort->PortName()
+ << " of " << NewNodeName ;
+ if ( anInPort->IsConnected() ) {
+ if ( anOutPort->IsDataConnected() ) {
+ cdebug << " fromDataConnected "
+ << anOutPort->NodeName()
+ << endl ;
+ }
+ else {
+ GraphBase::ComputingNode * FromNode = GetChangeGraphNode( anOutPort->NodeName() ) ;
+ cdebug << " fromConnected " << FromNode->Name() << endl ;
+ FromNode->ReNameLink( OldNodeName , NewNodeName ) ;
+ }
+ char* OldNodePortName = new char[ strlen( OldNodeName ) +
+ strlen( aNode->GetChangeNodeInPort( i )->PortName() ) + 2 ] ;
+ char* NewNodePortName = new char[ strlen( NewNodeName ) +
+ strlen( aNode->GetChangeNodeInPort( i )->PortName() ) + 2 ] ;
+ strcpy( OldNodePortName , OldNodeName ) ;
+ strcat( OldNodePortName , "\\" ) ;
+ strcat( OldNodePortName , aNode->GetChangeNodeInPort( i )->PortName() ) ;
+ strcpy( NewNodePortName , NewNodeName ) ;
+ strcat( NewNodePortName , "\\" ) ;
+ strcat( NewNodePortName , aNode->GetChangeNodeInPort( i )->PortName() ) ;
+ RetVal = anOutPort->ReNameInPort( OldNodePortName , NewNodePortName ) ;
+ delete [] OldNodePortName ;
+ delete [] NewNodePortName ;
+ if ( !RetVal )
+ break ;
+ }
+ else {
+ cdebug << " not connected" << endl ;
+ RetVal = true ;
+ }
+ }
+ RetVal = true ;
+ }
+ else {
+ cdebug << "Node not found" << endl ;
+ }
+ }
+ else {
+ RetVal = Name( NewNodeName ) ;
+ }
+
+ cdebug_out << "GraphBase::Graph::ReNameNode" << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::RemoveNode( const char* aNodeName ) {
+ cdebug_in << "GraphBase::Graph::RemoveNode (" << aNodeName << ")" << endl;
+ int i ;
+ bool RetVal = false ;
+ int index = GetGraphNodeIndex( aNodeName ) ;
+ GraphBase::ComputingNode * aNode = GetChangeGraphNode( index ) ;
+ if ( aNode ) {
+ if ( aNode->GetNodeInPortsSize() ) {
+ for ( i = aNode->GetNodeInPortsSize()-1 ; i >= 0 ; i-- ) {
+ cdebug << i << ". GraphBase::Graph::RemoveNode of LinkedNode : from " ;
+ GraphBase::InPort * anInPort = aNode->GetChangeNodeInPort( i ) ;
+ GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
+ if ( anOutPort ) {
+ cdebug << anOutPort->NodeName() ;
+ }
+ else {
+ cdebug << "without link" ;
+ }
+ cdebug << " to " << i << ". " << anInPort->PortName()
+ << " of " << aNodeName ;
+ if ( anInPort->IsConnected() ) {
+ if ( anOutPort->IsDataConnected() ) {
+ cdebug << " fromDataConnected " << anOutPort->NodeName() << endl ;
+ }
+ else {
+ GraphBase::ComputingNode * FromNode = GetChangeGraphNode( anOutPort->NodeName() ) ;
+ cdebug << " fromConnected " << FromNode->Name() << endl ;
+ FromNode->RemoveLink( aNode ) ;
+ }
+ RetVal = anOutPort->RemoveInPort( anInPort ) ;
+ if ( !RetVal )
+ break ;
+ }
+ else {
+ cdebug << " not connected" << endl ;
+ RetVal = true ;
+ }
+ }
+ }
+ else {
+ RetVal = true ;
+ }
+ if ( RetVal ) {
+ for ( i = aNode->GetNodeOutPortsSize() - 1 ; i >= 0 ; i-- ) {
+ GraphBase::OutPort * anOutPort = aNode->GetChangeNodeOutPort( i ) ;
+ cdebug << "GraphBase::Graph::Remove " <<anOutPort->InPortsSize()
+ << " Links of OutPort : " << i << ". "
+ << *aNode->GetChangeNodeOutPort( i ) ;
+ int j ;
+ for ( j = anOutPort->InPortsSize() - 1 ; j >= 0 ; j-- ) {
+ cdebug << " to " << j << ". " << *anOutPort->InPorts( j )
+ << endl ;
+ RetVal = anOutPort->ChangeInPorts( j )->RemoveOutPort() ;
+ if ( !RetVal )
+ break ;
+ GraphBase::ComputingNode * ToNode = GetChangeGraphNode( anOutPort->InPorts( j )->NodeName() ) ;
+ aNode->RemoveLink( ToNode ) ;
+ RetVal = anOutPort->RemoveInPort( anOutPort->ChangeInPorts( j ) ) ;
+ if ( !RetVal )
+ break ;
+ }
+// RetVal = aNode->GetChangeNodeOutPort( j )->RemoveLinks() ;
+ if ( !RetVal )
+ break ;
+ }
+ }
+// RetVal = aNode->RemoveLinks() ; // In PortsOfNode
+ if ( RetVal ) {
+ delete aNode ;
+ _GraphNodesSize -= 1 ;
+ for ( i = index ; i < _GraphNodesSize ; i++ ) {
+ SetGraphNodeIndex( _GraphNodes[ i+1 ]->Name() , i ) ;
+ _GraphNodes[ i ] = _GraphNodes[ i+1 ] ;
+ }
+ _GraphNodes.resize( _GraphNodesSize+1 ) ;
+ _MapOfGraphNodes.erase( aNodeName ) ;
+ RetVal = true ;
+ }
+ }
+ else
+ cdebug << "Node not found" << endl ;
+
+ cdebug_out << "GraphBase::Graph::RemoveNode" << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::AddLink(
+ const char* FromNodeName ,
+ const char* FromServiceParameterName ,
+ const char* ToNodeName ,
+ const char* ToServiceParameterName ,
+ const CORBA::Any aValue ) {
+ bool RetVal ;
+ int index ;
+ cdebug_in << "GraphBase::Graph::AddLink(" << FromNodeName << "("
+ << FromServiceParameterName << ") ---> " << ToNodeName << "("
+ << ToServiceParameterName << ") )" << endl;
+
+ GraphBase::ComputingNode *fromNode = GetChangeGraphNode( FromNodeName ) ;
+ GraphBase::ComputingNode *toNode = GetChangeGraphNode( ToNodeName ) ;
+
+ GraphBase::OutPort *fromPort = NULL ;
+ GraphBase::InPort *toPort = NULL ;
+
+ if ( fromNode ) {
+ fromPort = fromNode->GetChangeOutPort( FromServiceParameterName ) ;
+ if ( !fromPort ) {
+ cdebug << "AddLink fromPort " << FromServiceParameterName << " FromNode("
+ << FromNodeName << ") not found." << endl ;
+ }
+ }
+ else {
+ cdebug << "AddLink FromNode " << FromNodeName << " not found." << endl ;
+ }
+ if ( toNode ) {
+ toPort = toNode->GetChangeInPort( ToServiceParameterName ) ;
+ if ( !toPort ) {
+ cdebug << "AddLink toPort " << ToServiceParameterName << " ToNode("
+ << ToNodeName << ") not found." << endl ;
+ }
+ }
+ else {
+ cdebug << "AddLink toNode " << ToNodeName << " not found." << endl ;
+ }
+
+ RetVal = AddLink( fromNode , fromPort , toNode , toPort ) ;
+
+ if ( RetVal ) {
+ if ( fromPort->IsGate() && toPort->IsGate() ) {
+ CORBA::Any aValue ;
+ aValue <<= (long ) 1 ;
+ fromPort->Value( aValue ) ;
+ }
+ else {
+ const CORBA::Any * aDataValue = new CORBA::Any( aValue ) ;
+ fromPort->Value( aDataValue ) ;
+ }
+ }
+
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::AddLink(
+ GraphBase::ComputingNode *fromNode ,
+ GraphBase::OutPort *fromPort ,
+ GraphBase::ComputingNode *toNode ,
+ GraphBase::InPort *toPort ) {
+ bool RetVal ;
+
+ if ( !fromNode ) {
+ cdebug << "AddLink fromNode not found." << endl ;
+ return false ;
+ }
+ if ( !fromPort ) {
+ cdebug << "AddLink fromPort not found." << endl ;
+ return false ;
+ }
+
+ if ( !toNode ) {
+ cdebug << "AddLink toNode not found." << endl ;
+ return false ;
+ }
+ if ( !toPort ) {
+ cdebug << "AddLink toPort not found." << endl ;
+ return false ;
+ }
+
+ cdebug_in << "GraphBase::Graph::AddLink(" << fromNode->Name() << "("
+ << fromPort->PortName() << ") ---> " << toNode->Name() << "("
+ << toPort->PortName() << ") )" << endl;
+ if ( !fromNode->IsDataFlowNode() && !toNode->IsDataFlowNode() &&
+ toPort->GetOutPort() ) {
+ if ( !strcmp( toPort->GetOutPort()->NodePortName() ,
+ fromPort->NodePortName() ) ) {
+ cdebug << "Link already exists" << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return true ;
+ }
+ else if ( toPort->IsDataConnected() ) {
+ toPort->RemoveOutPort() ;
+ }
+ else if ( fromNode->IsGOTONode() ) {
+ if ( !RemoveLink( toPort->GetOutPort()->NodeName() ,
+ toPort->GetOutPort()->PortName() ,
+ toNode->Name() , toPort->PortName() ) ) {
+ cdebug << "RemoveLink(AddLink) toPort->GetOutPort()->NodeName() Error."
+ << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ if ( fromPort->InPortsSize() ) {
+ if ( !RemoveLink( fromNode->Name() , fromPort->PortName() ,
+ fromPort->ChangeInPorts(0)->NodeName() ,
+ fromPort->ChangeInPorts(0)->PortName() ) ) {
+ cdebug << "RemoveLink(AddLink) fromNode->IsGOTONode Error." << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ }
+ }
+ else if ( !toNode->IsEndSwitchNode() ) {
+ if ( !RemoveLink( fromNode->Name() , fromPort->PortName() ,
+ toNode->Name() , toPort->PortName() ) ) {
+ cdebug << "RemoveLink(AddLink) toNode->IsEndSwitchNode Error." << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ }
+ }
+ else if ( fromNode->IsGOTONode() && fromPort->InPortsSize() ) {
+ if ( !RemoveLink( fromNode->Name() , fromPort->PortName() ,
+ fromPort->ChangeInPorts(0)->NodeName() ,
+ fromPort->ChangeInPorts(0)->PortName() ) ) {
+ cdebug << "RemoveLink(AddLink) fromNode->IsGOTONode Error." << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ }
+
+ if ( toNode->IsEndSwitchNode() && !toPort->IsGate() ) {
+// if ( !toPort->IsEndSwitch() || !fromPort->AddInPort( toPort ) ) {
+ if ( !fromPort->AddInPort( toPort ) ) {
+ cdebug << "toNode->IsEndSwitchNode() : !fromPort->AddInPort( toPort ) AddLink Error."
+ << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ toPort->Kind( SUPERV::EndSwitchParameter ) ;
+ }
+ else if ( !fromPort->AddInPort( toPort ) ) { // --> MapOfInports in the OutPort
+ cdebug << "!fromPort->AddLink Error." << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+
+ if ( fromNode->IsDataFlowNode() && toPort->IsDataConnected() ) {
+ toPort->RemoveOutPort() ;
+ }
+
+ if ( fromNode->IsGOTONode() && ( !fromPort->IsGate() || !toPort->IsGate() ||
+ toNode->IsEndLoopNode() || toNode->IsEndSwitchNode() ) ) {
+ cdebug << "toPort->AddLink Error( fromNode->IsGOTONode() && toNode->IsEndInLineNode() )." << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ else if ( !fromNode->IsSwitchNode() && fromPort->IsParam() && toPort->IsGate() ) {
+ cdebug << "toPort->AddLink Error( fromPort->IsParam() && toPort->IsGate())." << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ else if ( !toNode->IsEndSwitchNode() && !toNode->IsEndLoopNode() ) {
+ if ( !toPort->AddOutPort( fromPort ) ) { // --> Unique OutPort of the InPort
+ cdebug << "toPort->AddLink Error." << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ }
+ else {
+ toPort->AddOutPort( fromPort ) ;
+ }
+
+ if ( ( fromNode->IsGOTONode() && toNode->IsOneOfInLineNodes() ) ||
+ ( fromNode->IsEndLoopNode() && toNode->IsLoopNode() ) ) {
+ cdebug << "AddLink fromPort->PortStatus( PortConnected ) "
+ << "GOTONode/EndLoopNode-->InLineNode/LoopNode/SwitchNode "
+ << fromNode->Name() << " " << fromPort->PortName()
+ << " InLineNode/LoopNode_ConnectedInPortsNumber "
+ << toNode->ConnectedInPortsNumber() << endl;
+ if ( fromNode->IsGOTONode() ) {
+ fromPort->Kind( SUPERV::GOTOParameter ) ;
+ }
+ fromPort->PortStatus( PortConnected ); // GOTO - Loop
+ }
+ else if ( fromNode->IsDataFlowNode() || toNode->IsDataFlowNode() ) {
+ cdebug << "AddLink IsDataFlowNode fromPort->PortStatus( DataConnected ) "
+ << fromNode->Name() << " " << fromPort->PortName() << endl ;
+ fromPort->PortStatus( DataConnected );
+ }
+ else {
+ cdebug << "AddLink fromPort->PortStatus( PortConnected ) & fromNode->toNode "
+ << fromNode->Name() << " " << fromPort->PortName() << endl;
+ fromPort->PortStatus( PortConnected );
+ fromNode->AddLink( toNode ) ;
+ }
+ if ( fromNode->IsSwitchNode() ) {
+ if ( fromPort->IsInLine() && toPort->IsGate() ) {
+ fromPort->Kind( SUPERV::SwitchParameter ) ;
+ }
+ else if ( !fromPort->IsGate() && !toPort->IsGate() ){
+ fromPort->Kind( SUPERV::InLineParameter ) ;
+ }
+ if ( fromPort->IsGate() && !toNode->IsEndSwitchNode() ) {
+ GraphBase::InLineNode * anEndSwitchNode ;
+ anEndSwitchNode = ((GraphBase::SwitchNode * ) fromNode)->CoupledNode() ;
+ GraphBase::InPort * anInPort = anEndSwitchNode->GetChangeNodeInPort(0) ;
+ GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
+ if ( anOutPort && !strcmp( fromNode->Name() , anOutPort->NodeName() ) &&
+ !strcmp( fromPort->PortName() , anOutPort->PortName() ) &&
+ anOutPort->IsGate() ) {
+ if ( !RemoveLink( fromNode->Name() , anOutPort->PortName() ,
+ anEndSwitchNode->Name() ,
+ anEndSwitchNode->GetChangeNodeInPort(0)->PortName() ) ) {
+ cdebug << "AddLink Error Removelink ( Switch , Default , EndSwitch , Default )"
+ << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return false ;
+ }
+ }
+ }
+ }
+// cdebug << fromNode->ServiceName() << " " << toNode->ServiceName() << endl ;
+ cdebug_out << "GraphBase::Graph::AddLink" << endl;
+ return true ;
+}
+
+bool GraphBase::Graph::RemoveLink( const char* FromNodeName ,
+ const char* FromServiceParameterName ,
+ const char* ToNodeName ,
+ const char* ToServiceParameterName ) {
+ cdebug_in << "GraphBase::Graph::RemoveLink to " << ToNodeName << "("
+ << ToServiceParameterName << ")" << endl;
+ bool RetVal = false ;
+ GraphBase::ComputingNode * toNode = GetChangeGraphNode( ToNodeName ) ;
+ if ( toNode ) {
+ GraphBase::InPort * anInPort = toNode->GetChangeInPort( ToServiceParameterName ) ;
+ if ( anInPort && ( anInPort->IsConnected() ||
+ anInPort->IsDataConnected() ) ) {
+ GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
+ RetVal = anOutPort->RemoveInPort( anInPort ) ;
+ anInPort->RemoveOutPort() ;
+ const char * FromNodeName = anOutPort->NodeName() ;
+ GraphBase::ComputingNode * fromNode = GetChangeGraphNode( FromNodeName ) ;
+ if ( fromNode ) {
+ fromNode->RemoveLink( toNode ) ;
+ }
+ if ( fromNode->IsSwitchNode() ) {
+ anOutPort->Kind( SUPERV::InLineParameter ) ;
+ }
+ }
+ }
+ cdebug_out << "GraphBase::Graph::RemoveLink " << RetVal << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::GetLink(const char* ToNodeName ,
+ const char* ToServiceParameterName ,
+ char** FromNodeName ,
+ char** FromServiceParameterName ) {
+ cdebug_in << "GraphBase::Graph::GetLink " << ToNodeName << "("
+ << ToServiceParameterName << ")" << endl;
+ bool RetVal = false ;
+ GraphBase::ComputingNode * toNode = GetChangeGraphNode( ToNodeName ) ;
+ if ( toNode ) {
+ GraphBase::InPort * anInPort = toNode->GetChangeInPort( ToServiceParameterName ) ;
+ if ( anInPort && anInPort->IsConnected() ) {
+ GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
+ *FromNodeName = my_strdup( anOutPort->NodeName() ) ;
+ *FromServiceParameterName = my_strdup( anOutPort->PortName() ) ;
+ RetVal = true ;
+ }
+ }
+ cdebug_out << "GraphEditor::OutNode::GetLink " << RetVal << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::AddInputData( const char* ToNodeName ,
+ const char* ToServiceParameterName ,
+ const CORBA::Any aValue ) {
+ bool RetVal = false ;
+ cdebug_in << "GraphBase::Graph::AddInputData(" << ToNodeName << ","
+ << ToServiceParameterName << " , Any " ;
+ switch (aValue.type()->kind()) {
+ case CORBA::tk_string:
+ char * t;
+ aValue >>= t;
+ cdebug << t << " (string) " ;
+ break;
+ case CORBA::tk_double:
+ double d;
+ aValue >>= d;
+ cdebug << d << " (double) " ;
+ break;
+ case CORBA::tk_long:
+ long l;
+ aValue >>= l;
+ cdebug << l << " (long) " ;
+ break;
+ case CORBA::tk_objref:
+ cdebug << "(object reference) " ;
+ break;
+ default:
+ cdebug << "(other(tk_string,tk_double,tk_long,tk_objref)) ERROR";
+ break;
+ }
+ cdebug << ")" << endl;
+
+ GraphBase::OutPort *fromDataNodePort = NULL ;
+
+ GraphBase::ComputingNode *toNode ;
+ GraphBase::InPort *toPort ;
+ char *aNode ;
+ char *aPort ;
+ NodePort( ToNodeName , ToServiceParameterName , &aNode , &aPort ) ;
+ toNode = GetChangeGraphNode( aNode ) ;
+ if ( toNode ) {
+ toPort = toNode->GetChangeInPort( aPort ) ;
+ if ( toPort && !toPort->IsDataConnected() ) {
+ toPort->RemoveOutPort() ;
+ }
+ }
+ else {
+ toPort = NULL ;
+ }
+ delete aNode ;
+ delete aPort ;
+
+#if 0
+ int i ;
+ for ( i = 0 ; i < GetNodeOutDataNodePortsSize() ; i++ ) {
+ cdebug "GraphBase::Graph::AddInputData " << GetNodeOutDataNodePort(i) << endl ;
+ }
+ for ( i = 0 ; i < GetNodeInDataNodePortsSize() ; i++ ) {
+ cdebug "GraphBase::Graph::AddInputData " << GetNodeInDataNodePort(i) << endl ;
+ }
+#endif
+
+ if ( toNode && toPort ) {
+ fromDataNodePort = GraphBase::DataNode::GetChangeInDataNodePort( toPort->NodePortName() ) ;
+ if ( fromDataNodePort && fromDataNodePort->GetInPort( toPort ) ) {
+ fromDataNodePort->RemoveInPort( toPort ) ;
+ }
+ cdebug << "Try AddLink " << toPort->NodePortName() << " : " << Name() << "( "
+ << fromDataNodePort->PortName() << " ) -->" << toNode->Name() << "( "
+ << toPort->PortName() << " )" << endl ;
+ RetVal = AddLink( (GraphBase::ComputingNode * ) this , fromDataNodePort ,
+ toNode , toPort ) ;
+ if ( RetVal ) {
+ fromDataNodePort->Value( aValue ) ;
+ }
+ }
+ else {
+ cdebug << "Node not found" << endl ;
+ }
+
+ cdebug_out << "GraphBase::Graph::AddInputData " << RetVal << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::ChangeInputData( const char* ToNodeName ,
+ const char* ToServiceParameterName ,
+ const CORBA::Any aValue ) {
+ bool RetVal = false ;
+ cdebug_in << "GraphBase::Graph::ChangeInputData(" << ToNodeName << ","
+ << ToServiceParameterName << " Any " ;
+ switch (aValue.type()->kind()) {
+ case CORBA::tk_string:
+ char * t;
+ aValue >>= t;
+ cdebug << t << " (string) " ;
+ break;
+ case CORBA::tk_double:
+ double d;
+ aValue >>= d;
+ cdebug << d << " (double) " ;
+ break;
+ case CORBA::tk_long:
+ long l;
+ aValue >>= l;
+ cdebug << l << " (long) " ;
+ break;
+ case CORBA::tk_objref:
+ cdebug << "(object reference) " ;
+ break;
+ default:
+ cdebug << "(other(tk_string,tk_double,tk_long,tk_objref)) ERROR";
+ break;
+ }
+ cdebug << ")" << endl;
+
+ GraphBase::ComputingNode *toNode = GetChangeGraphNode( ToNodeName ) ;
+
+ GraphBase::OutPort *fromPort = NULL ;
+ GraphBase::InPort *toPort = NULL ;
+
+ if ( toNode ) {
+ toPort = toNode->GetChangeInPort( ToServiceParameterName ) ;
+ if ( toPort ) {
+ fromPort = toPort->GetOutPort();
+ if ( fromPort ) {
+ RetVal = true ;
+ fromPort->Value( aValue ) ;
+ toPort->State( SUPERV::ReadyState ) ;
+ }
+ else {
+ cdebug << "ChangeInputData fromPort not found" << endl ;
+ }
+ }
+ else {
+ cdebug << "ChangeInputData toPort not found" << endl ;
+ }
+ }
+ else {
+ cdebug << "ChangeInputData Node not found" << endl ;
+ }
+
+ cdebug_out << "GraphBase::Graph::ChangeInputData" << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::AddInputData(
+ const char* ToNodeName1 ,
+ const char* ToServiceParameterName1 ,
+ const char* ToNodeName2 ,
+ const char* ToServiceParameterName2 ) {
+ bool RetVal = false ;
+ cdebug_in << "GraphBase::Graph::AddInputSharedData(" << ToNodeName1 << ","
+ << ToServiceParameterName1 << ", " << ToNodeName2 << ","
+ << ToServiceParameterName2 << " )" << endl;
+
+ GraphBase::ComputingNode *toNode1 = GetChangeGraphNode( ToNodeName1 ) ;
+ GraphBase::ComputingNode *toNode2 = GetChangeGraphNode( ToNodeName2 ) ;
+
+ GraphBase::OutPort *fromDataNodePort1 = NULL ;
+ GraphBase::OutPort *fromDataNodePort2 = NULL ;
+ GraphBase::InPort *toPort1 = NULL ;
+ GraphBase::InPort *toPort2 = NULL ;
+
+ if ( toNode1 && toNode2 ) {
+ toPort1 = toNode1->GetChangeInPort( ToServiceParameterName1 ) ;
+ toPort2 = toNode2->GetChangeInPort( ToServiceParameterName2 ) ;
+ fromDataNodePort1 = GraphBase::DataNode::GetChangeInDataNodePort( toPort1->NodePortName() ) ;
+// const char* aDataValue = fromDataNodePort->Value() ;
+ const CORBA::Any ** aDataValue1 = fromDataNodePort1->ValuePtr() ;
+ fromDataNodePort2 = GraphBase::DataNode::GetChangeInDataNodePort( toPort2->NodePortName() ) ;
+ RetVal = AddLink( (GraphBase::ComputingNode * ) this , fromDataNodePort1 ,
+ toNode2 , toPort2 ) ;
+// aDataValue ) ;
+ fromDataNodePort2->Value( aDataValue1 ) ;
+ }
+ else {
+ cdebug << "Node not found" << endl ;
+ }
+
+ cdebug_out << "GraphBase::Graph::AddInputSharedData" << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::AddInputData( const char* ToNodeName ,
+ const char* ToServiceParameterName ,
+ const CORBA::Any ** aValue ) {
+ bool RetVal = false ;
+ cdebug_in << "GraphBase::Graph::AddInputData(" << ToNodeName << ","
+ << ToServiceParameterName << " **Any " ;
+ const CORBA::Any theValue = **aValue ;
+ switch (theValue.type()->kind()) {
+ case CORBA::tk_string:
+ char * t;
+ theValue >>= t;
+ cdebug << t << " (string) " ;
+ break;
+ case CORBA::tk_double:
+ double d;
+ theValue >>= d;
+ cdebug << d << " (double) " ;
+ break;
+ case CORBA::tk_long:
+ long l;
+ theValue >>= l;
+ cdebug << l << " (long) " ;
+ break;
+ case CORBA::tk_objref:
+ cdebug << "(object reference) " ;
+ break;
+ default:
+ cdebug << "(other(tk_string,tk_double,tk_long,tk_objref)) ERROR";
+ break;
+ }
+ cdebug << ")" << endl;
+
+ GraphBase::ComputingNode *toNode = GetChangeGraphNode( ToNodeName ) ;
+
+ GraphBase::OutPort *fromDataNodePort = NULL ;
+ GraphBase::InPort *toPort = NULL ;
+
+ if ( toNode ) {
+ toPort = toNode->GetChangeInPort( ToServiceParameterName ) ;
+ fromDataNodePort = GraphBase::DataNode::GetChangeInDataNodePort( toPort->NodePortName() ) ;
+ cdebug << "Try AddLink " << Name() << "( " << fromDataNodePort << " ) -->"
+ << toNode->Name() << "( " << toPort->PortName() << " )" << endl ;
+ RetVal = AddLink( (GraphBase::ComputingNode * ) this , fromDataNodePort ,
+ toNode , toPort ) ;
+ if ( RetVal ) {
+ fromDataNodePort->Value( aValue ) ;
+ }
+ }
+ else {
+ cdebug << "Node not found" << endl ;
+ }
+
+ cdebug_out << "GraphBase::Graph::AddInputData" << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::AddOutputData(
+ const char* FromNodeName ,
+ const char* FromServiceParameterName ,
+ const CORBA::Any aValue ) {
+// const char* DataValue ,
+// const SUPERV::KindOfPortValue aKindOfPortValue ) {
+ bool RetVal = false ;
+ cdebug_in << "GraphBase::Graph::AddOutputData(" << FromNodeName << ","
+ << FromServiceParameterName
+// << FromServiceParameterName << ", " << DataValue << ","
+// << aKindOfPortValue
+ << ")" << endl;
+#if 0
+ GraphBase::ComputingNode *fromNode = GetChangeGraphNode( FromNodeName ) ;
+
+ GraphBase::OutPort *fromPort = NULL ;
+ GraphBase::InPort *toDataNodePort = NULL ;
+
+ if ( fromNode ) {
+ fromPort = fromNode->GetChangeOutPort( FromServiceParameterName ) ;
+ toDataNodePort = GraphBase::DataNode::GetChangeOutDataNodePort( fromPort->NodePortName() ) ;
+ RetVal = AddLink( fromNode , fromPort ,
+ (GraphBase::ComputingNode * ) this , toDataNodePort ,
+ aValue ) ;
+// DataValue , aKindOfPortValue ) ;
+ }
+ else {
+ cdebug << "Node not found" << endl ;
+ }
+#endif
+ cdebug_out << "GraphBase::Graph::AddOutputData" << endl;
+ return RetVal ;
+}
+
+bool GraphBase::Graph::CreateService() {
+ cdebug_in << "GraphBase::Graph::CreateService" << endl;
+
+ SALOME_ModuleCatalog::Service aService ;
+ int i , j ;
+ GraphBase::ComputingNode * iN ;
+ int dostore ;
+ int innbr ;
+ int outnbr ;
+ for ( dostore = 0 ; dostore <= 1 ; dostore++ ) {
+ if ( dostore == 1 ) {
+ aService.ServiceName = Name() ;
+ aService.ServiceinParameter.length( 0 ) ;
+ aService.ServiceinParameter.length( innbr ) ;
+ aService.ServiceoutParameter.length( 0 ) ;
+ aService.ServiceoutParameter.length( outnbr ) ;
+ }
+ innbr = 0 ;
+ outnbr = 0 ;
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+ iN = GraphNodes( i ) ;
+ for ( j = 0 ; j < iN->GetNodeInPortsSize() ; j++ ) {
+ GraphBase::InPort *anInPort = iN->GetChangeNodeInPort(j) ;
+ if ( !anInPort->IsConnected() && !anInPort->IsGate() ) {
+// !anInPort->IsLoop() ) {
+// if ( !anInPort->IsGate() && !anInPort->IsConnected() &&
+// !( iN->IsLoopNode() && anInPort->IsBus() && anInPort->IsParam() )) {
+ if ( dostore == 0 ) {
+ cdebug << "CreateService " << iN->Name() << " Input port "
+ << anInPort->PortName() << " is NOT connected " ;
+ if ( anInPort->GetOutPort() ) {
+ cdebug << *(anInPort->GetOutPort()) ;
+ }
+ cdebug << endl ;
+ innbr += 1 ;
+ }
+ else {
+ aService.ServiceinParameter[innbr].Parametertype = CORBA::string_dup( anInPort->PortType() ) ;
+ aService.ServiceinParameter[innbr++].Parametername = CORBA::string_dup( anInPort->NodePortName() ) ;
+ }
+ }
+ }
+ if ( !iN->IsGOTONode() ) {
+ for ( j = 0 ; j < iN->GetNodeOutPortsSize() ; j++ ) {
+ GraphBase::OutPort *anOutPort = iN->GetChangeNodeOutPort(j) ;
+ if ( !anOutPort->IsGate() &&
+//!anOutPort->IsLoop() &&
+// !( iN->IsEndLoopNode() && anOutPort->IsBus() ) &&
+ ( anOutPort->IsNotConnected() || anOutPort->IsDataConnected() ) ) {
+ if ( dostore == 0 ) {
+ outnbr += 1 ;
+ }
+ else {
+ aService.ServiceoutParameter[outnbr].Parametertype = CORBA::string_dup( anOutPort->PortType() ) ;
+ aService.ServiceoutParameter[outnbr++].Parametername = CORBA::string_dup( anOutPort->NodePortName() ) ;
+ }
+ }
+ }
+ }
+ }
+ }
+
+// MESSAGE( "DataFlowNode ServiceName " << aService.ServiceName );
+// for ( i = 0 ; i < innbr ; i++ ) {
+// cout << "aService.ServiceinParameter[" << i << "].Parametertype "
+// << aService.ServiceinParameter[i].Parametertype << endl ;
+// cout << "aService.ServiceinParameter[" << i << "].Parametername "
+// << aService.ServiceinParameter[i].Parametername << endl ;
+// }
+// for ( i = 0 ; i < outnbr ; i++ ) {
+// cout << "aService.ServiceoutParameter[" << i << "].Parametertype "
+// << aService.ServiceoutParameter[i].Parametertype << endl ;
+// cout << "aService.ServiceoutParameter[" << i << "].Parametername "
+// << aService.ServiceoutParameter[i].Parametername << endl ;
+// }
+
+ DataService( _Orb , aService , Graph_prof_debug() , Graph_fdebug() ) ;
+
+// Restore input datas :
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+// iN = (GraphEditor::InNode * ) GraphNodes( i ) ;
+ iN = GraphNodes( i ) ;
+ for ( j = 1 ; j < iN->GetNodeInPortsSize() ; j++ ) {
+ GraphBase::InPort *anInPort = iN->GetChangeNodeInPort(j) ;
+ if ( anInPort->IsDataConnected() ) {
+// GraphBase::Graph::AddInputData( anInPort->NodeName() ,
+ AddInputData( anInPort->NodeName() ,
+ anInPort->PortName() ,
+ anInPort->GetOutPort()->ValuePtr() ) ;
+ }
+ }
+ }
+
+ cdebug_out << "GraphBase::Graph::CreateService" << endl;
+ return true ;
+}
+
+bool GraphBase::Graph::InLineServices() {
+ cdebug_in << "GraphBase::Graph::InLineServices" << endl;
+
+ int i , j ;
+ GraphBase::InLineNode * aINode ;
+ SALOME_ModuleCatalog::Service aService ;
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+ aINode = (GraphBase::InLineNode * ) GraphNodes( i ) ;
+ if ( aINode->IsOneOfInLineNodes() ) {
+ cdebug << "GraphBase::Graph::InLineServices " << aINode->Name() << endl;
+ aService.ServiceName = aINode->ServiceName() ;
+ aService.ServiceinParameter.length( 0 ) ;
+ aService.ServiceoutParameter.length( 0 ) ;
+ int InService = 0 ;
+ for ( j = 0 ; j < aINode->GetNodeInPortsSize() ; j++ ) {
+ if ( aINode->GetChangeNodeInPort(j)->IsGate() ||
+ aINode->GetChangeNodeInPort(j)->IsLoop() ) {
+ cdebug << "GraphBase::Graph::InLineServices In" << j << " "
+ << aINode->GetChangeNodeInPort(j)->Kind() << " "
+ << aINode->GetChangeNodeInPort(j)->PortType() << " "
+ << aINode->GetChangeNodeInPort(j)->PortName() << " ignored "
+ << aINode->GetChangeNodeInPort(j)->IsGate() << " "
+ << aINode->GetChangeNodeInPort(j)->IsLoop() << endl;
+ }
+ else {
+ aService.ServiceinParameter.length( InService+1 ) ;
+ aService.ServiceinParameter[InService].Parametertype = CORBA::string_dup( aINode->GetChangeNodeInPort(j)->PortType() ) ;
+ aService.ServiceinParameter[InService++].Parametername = CORBA::string_dup( aINode->GetChangeNodeInPort(j)->PortName() ) ;
+ cdebug << "GraphBase::Graph::InLineServices In" << j << " "
+ << aINode->GetChangeNodeInPort(j)->Kind() << " "
+ << aINode->GetChangeNodeInPort(j)->PortType() << " "
+ << aINode->GetChangeNodeInPort(j)->PortName() << " "
+ << aINode->GetChangeNodeInPort(j)->IsGate() << " "
+ << aINode->GetChangeNodeInPort(j)->IsLoop() << endl;
+ }
+ }
+ int OutService = 0 ;
+ for ( j = 0 ; j < aINode->GetNodeOutPortsSize() ; j++ ) {
+ if ( aINode->GetChangeNodeOutPort(j)->IsGate() ||
+ aINode->GetChangeNodeOutPort(j)->IsLoop() ) {
+ cdebug << "GraphBase::Graph::InLineServices Out" << j << " "
+ << aINode->GetChangeNodeOutPort(j)->Kind() << " "
+ << aINode->GetChangeNodeOutPort(j)->PortType() << " "
+ << aINode->GetChangeNodeOutPort(j)->PortName() << " ignored "
+ << aINode->GetChangeNodeOutPort(j)->IsGate() << " "
+ << aINode->GetChangeNodeOutPort(j)->IsLoop() << endl;
+ }
+ else {
+ aService.ServiceoutParameter.length( OutService+1 ) ;
+ aService.ServiceoutParameter[OutService].Parametertype = CORBA::string_dup( aINode->GetChangeNodeOutPort(j)->PortType() ) ;
+ aService.ServiceoutParameter[OutService++].Parametername = CORBA::string_dup( aINode->GetChangeNodeOutPort(j)->PortName() ) ;
+ cdebug << "GraphBase::Graph::InLineServices Out" << j << " "
+ << aINode->GetChangeNodeOutPort(j)->Kind() << " "
+ << aINode->GetChangeNodeOutPort(j)->PortType() << " "
+ << aINode->GetChangeNodeOutPort(j)->PortName() << " "
+ << aINode->GetChangeNodeOutPort(j)->IsGate() << " "
+ << aINode->GetChangeNodeOutPort(j)->IsLoop() << endl;
+ }
+ }
+ aINode->SetService( aService ) ;
+ cdebug << "GraphBase::Graph::InLineServices" << *aINode->GetService() << endl;
+ }
+ }
+
+ cdebug_out << "GraphBase::Graph::InLineServices" << endl;
+ return true ;
+}
+
+bool GraphBase::Graph::Sort() {
+ int i ;
+ int j ;
+ int NotSortedNumber = GraphNodesSize() ;
+ bool NewSorted ;
+ if ( NotSortedNumber ) {
+ _LevelsNumber = 0 ;
+ _ParallelExecutionNodes = false ;
+ _Sorted.resize( GraphNodesSize() ) ;
+ _CnxInPortsNumber.resize( GraphNodesSize() ) ;
+ _DecrInPortsNumber.resize( GraphNodesSize() ) ;
+ if ( _NodesNumber.size() )
+ _NodesNumber.resize( 0 ) ;
+ _SortedNodes.resize( 0 ) ;
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+ _Sorted[ i ] = false ;
+ _CnxInPortsNumber[ i ] = GraphNodes( i )->ConnectedInPortsNumber() ;
+ _DecrInPortsNumber[ i ] = 0 ;
+ }
+ while ( NotSortedNumber ) {
+ NewSorted = false ;
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+ cdebug << "Sort level " << _LevelsNumber << ". [" << i << "] "
+ << GraphNodes( i )->Name() << " count "
+ << _CnxInPortsNumber[ i ] << endl ;
+ if ( !_Sorted[ i ] && _CnxInPortsNumber[ i ] == 0 ) {
+// All inputs of GraphNodes( i ) are available
+ if ( _NodesNumber.size() != _LevelsNumber+1 ) {
+ _NodesNumber.resize( _LevelsNumber+1 ) ;
+ _SortedNodes.resize( _LevelsNumber+1 ) ;
+ _NodesNumber[ _LevelsNumber ] = -1 ;
+ }
+ _NodesNumber[ _LevelsNumber ]++ ;
+ (_SortedNodes[ _LevelsNumber ]).resize( _NodesNumber[ _LevelsNumber ]+1 ) ;
+ (_SortedNodes[ _LevelsNumber ])[ _NodesNumber[ _LevelsNumber ] ] = GraphNodes( i ) ;
+ _Sorted[ i ] = true ;
+ NewSorted = true ;
+ cdebug << GraphNodes( i )->Name() << " belongs to level "
+ << _LevelsNumber << "." << endl ;
+ for ( j = 0 ; j < GraphNodes( i )->LinkedNodesSize() ; j++ ) {
+// Outputs of GraphNodes( i ) will satisfy
+// GraphNodes( i )->LinkedInPortsNumber( j ) InPorts of
+// GraphNodes( i )->LinkedNodes( j )
+ GraphBase::ComputingNode * aLinkedNode = GraphNodes( i )->LinkedNodes( j ) ;
+ int aLinkedInPortsNumber = GraphNodes( i )->LinkedInPortsNumber( j ) ;
+ cdebug << j << ". LinkedNode " << aLinkedNode->Name() ;
+ if ( !aLinkedNode->IsDataFlowNode() ) {
+ cdebug << " _DecrInPortsNumber[ "
+ << GetGraphNodeIndex( aLinkedNode->Name() )
+ << " ] = "
+ << _DecrInPortsNumber[ GetGraphNodeIndex( aLinkedNode->Name() ) ]
+ << " += " << aLinkedInPortsNumber ;
+ _DecrInPortsNumber[ GetGraphNodeIndex( aLinkedNode->Name() ) ] += aLinkedInPortsNumber ;
+ }
+ cdebug << endl ;
+// GraphNodes( i )->LinkedNodes( j )->IncrDecrConnectedInPortsNumber( GraphNodes( i )->LinkedInPortsNumber( j ) ) ;
+ }
+ }
+ }
+ if ( !NewSorted ) {
+ cdebug << "Loop detected level " << _LevelsNumber << endl ;
+ return false ; // Loop in the Graph
+ }
+ cdebug << "Bilan level " << _LevelsNumber << " : " << endl ;
+ bool ChangeCount = false ;
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+// if ( GraphNodes( i )->DecrIncrDecrConnectedInPortsNumber() ) {
+ if ( _DecrInPortsNumber[ i ] ) {
+ int prevcount = _CnxInPortsNumber[ i ] ;
+ _CnxInPortsNumber[ i ] -= _DecrInPortsNumber[ i ] ;
+ _DecrInPortsNumber[ i ] = 0 ;
+ ChangeCount = true ;
+ cdebug << " " << GraphNodes( i )->Name() << " count " << prevcount
+ << " --> new count " << _CnxInPortsNumber[ i ] << endl ;
+ }
+ }
+ if ( !ChangeCount )
+ break ;
+ _LevelsNumber += 1 ;
+ }
+ _ThreadsMax = 0 ;
+ int AllSortedNodes = 0 ;
+ _HeadNodes = _SortedNodes[ 0 ] ;
+ _HeadNodesSize = _SortedNodes[ 0 ].size() ;
+ _QueueNodes = _SortedNodes[ _LevelsNumber ] ;
+ _QueueNodesSize = _SortedNodes[ _LevelsNumber ].size() ;
+ for ( i = 0 ; i < _QueueNodesSize ; i++ ) {
+ if ( !_QueueNodes[ i ]->IsGOTONode() ) {
+ break ;
+ }
+ }
+ if ( i == _QueueNodesSize && _LevelsNumber ) {
+ _QueueNodes = _SortedNodes[ _LevelsNumber - 1 ] ;
+ _QueueNodesSize = _SortedNodes[ _LevelsNumber - 1 ].size() ;
+ }
+ for ( i = 0 ; i <= _LevelsNumber ; i++ ) {
+ AllSortedNodes += _NodesNumber[ i ]+1 ;
+ if ( _NodesNumber[ i ] + 1 > _ThreadsMax )
+ _ThreadsMax = _NodesNumber[ i ] + 1 ;
+ cdebug << _NodesNumber[ i ]+1 << " Nodes of level " << i << " : "
+ << (_SortedNodes[ i ])[ 0 ]->Name() << endl ;
+ for ( j = 1 ; j <= _NodesNumber[ i ] ; j++ ) {
+ _ParallelExecutionNodes = true ;
+ cdebug << " " << (_SortedNodes[ i ])[ j ]->Name()
+ << endl ;
+ }
+ }
+ if ( _ParallelExecutionNodes ) {
+ cdebug << "Parallel Execution Nodes detected." << endl ;
+ }
+ else {
+ cdebug << "No Parallel Execution Nodes detected." << endl ;
+ }
+ if ( AllSortedNodes != GraphNodesSize() ) {
+ cdebug << "Loop detected level " << _LevelsNumber << endl ;
+ return false ; // Loop in the Graph
+ }
+
+ for ( i= 0 ; i <= _NodesNumber[ 0 ] ; i++ ) {
+ (_SortedNodes[ 0 ])[ i ]->HeadNode( true ) ;
+ }
+
+ for ( i = 0 ; i <= _NodesNumber[ 0 ] ; i++ ) {
+ (_SortedNodes[ 0 ])[ i ]->Level( 0 ) ;
+ (_SortedNodes[ 0 ])[ i ]->SubGraph( i + 1 ) ;
+ }
+ for ( i = 1 ; i <= _LevelsNumber ; i++ ) {
+ for ( j = 0 ; j <= _NodesNumber[ i ] ; j++ ) {
+ (_SortedNodes[ i ])[ j ]->Level( i ) ;
+ (_SortedNodes[ i ])[ j ]->SubGraph( 0 ) ;
+ }
+ }
+ bool Graphs = true ;
+ while ( Graphs ) {
+ for ( i = 0 ; i <= _LevelsNumber ; i++ ) {
+ for ( j = 0 ; j <= _NodesNumber[ i ] ; j++ ) {
+ GraphBase::ComputingNode * aNode = (_SortedNodes[ i ])[ j ] ;
+ cdebug << "Graph " << aNode->SubGraph() << " " << aNode->Name()
+ << endl ;
+ int k ;
+ for ( k = 0 ; k < aNode->LinkedNodesSize() ; k++ ) {
+ if ( aNode->LinkedNodes( k )->SubGraph() ) {
+ if ( aNode->LinkedNodes( k )->SubGraph() != aNode->SubGraph() &&
+ aNode->LinkedNodes( k )->Level() == aNode->Level()+1 ) {
+ aNode->SubGraph( aNode->LinkedNodes( k )->SubGraph() ) ;
+ cdebug << " Linked " << aNode->LinkedNodes( k )->Name()
+ << " Graph(" << aNode->LinkedNodes( k )->SubGraph()
+ << ") ==>" << endl ;
+ cdebug << " Graph " << aNode->SubGraph() << " for "
+ << aNode->Name() << " ==> again" << endl ;
+ int l ;
+ for ( l = 0 ; l < aNode->LinkedNodesSize() ; l++ ) {
+ aNode->LinkedNodes( l )->SubGraph( aNode->SubGraph() ) ;
+ }
+ Graphs = false ;
+ break ;
+ }
+ else {
+ cdebug << " Linked " << aNode->LinkedNodes( k )->Name()
+ << " Graph(" << aNode->LinkedNodes( k )->SubGraph()
+ << ") distance > 1 ignored" << endl ;
+ }
+ }
+ else {
+ cdebug << " Linked " << aNode->LinkedNodes( k )->Name()
+ << " GraphInit to " << aNode->SubGraph() << " from "
+ << aNode->Name() << endl ;
+ aNode->LinkedNodes( k )->SubGraph( aNode->SubGraph() ) ;
+ }
+ }
+ }
+ if ( !Graphs )
+ break ;
+ }
+ if ( Graphs ) {
+ cdebug << endl << "Graphs result : " << endl ;
+ break ;
+ }
+ cdebug << endl << "One more time" << endl ;
+ Graphs = true ;
+ }
+ _GraphsNumber = 0 ;
+ int CurrGraphsNumber = 0;
+ int k ;
+ for ( k = 0 ; k <= _NodesNumber[ 0 ] ; k++ ) {
+ if ( (_SortedNodes[ 0 ])[ k ]->SubGraph() > CurrGraphsNumber ) {
+ CurrGraphsNumber = (_SortedNodes[ 0 ])[ k ]->SubGraph() ;
+ _GraphsNumber += 1 ;
+ for ( i = 0 ; i <= _LevelsNumber ; i++ ) {
+ for ( j = 0 ; j <= _NodesNumber[ i ] ; j++ ) {
+ if ( (_SortedNodes[ i ])[ j ]->SubGraph() == CurrGraphsNumber ) {
+ (_SortedNodes[ i ])[ j ]->SubGraph( _GraphsNumber ) ;
+ cdebug << "GraphsNumber " << _GraphsNumber << " " << " Level "
+ << i << " : " << (_SortedNodes[ i ])[ j ]->Name()
+ << endl ;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return true ;
+}
+
+// Controle de la coherence des noeuds de calcul
+// Enregistrement dans la liste des noeuds "tete" de graphe
+
+bool GraphBase::Graph::ComputingNodes() const {
+ bool RetVal = true ;
+ cdebug << "GraphExecutor::GraphControl::ComputingNodes ()" << endl;
+
+// list<GraphEditor::Node *> aComputingNodesList = _G->ComputingNodesList() ;
+// list<GraphEditor::Node *>::iterator iN = aComputingNodesList.begin();
+// GraphEditor::Port * iP;
+
+// for (iN = _G->ComputingNodesList().begin(); iN !=_G->ComputingNodesList().end(); iN++) {
+// while ( iN != aComputingNodesList.end() ) {
+ int i ;
+ GraphBase::ComputingNode * iN ;
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+ iN = GraphNodes( i ) ;
+ // Tous les ports d'entree de tous les noeuds de calcul sont bien connectes
+ // Enregistrement eventuel dans la liste des noeuds "tete" de graphe
+// if ((*iN)->GetNodeInPortsSize() == 0)
+// _headNodes.push_front(*iN);
+ int j ;
+ for ( j = 1; j < iN->GetNodeInPortsSize() ; j++ ) {
+ const GraphBase::InPort *iP = iN->GetNodeInPort(j);
+ if ( !iP->IsConnected() ){
+ cdebug << "Le port d'entree " << iP->PortName()
+ << " du noeud de calcul " << iN->Name() << " du graphe "
+ << Name() << " n'est pas connecte "<< endl;
+ RetVal = false ;
+ };
+
+ };
+
+ // Tous les noeuds de calcul ont au moins un port de sortie connecte
+ bool oneOutPortConnected = false;
+ for ( j = 1; j < iN->GetNodeOutPortsSize() ; j++) {
+ const GraphBase::OutPort *iP = iN->GetNodeOutPort(j);
+ if ( iP->IsPortConnected() || iP->IsDataConnected() ){
+ oneOutPortConnected = true ;
+// break;
+ }
+ else {
+ cdebug << "Le port de sortie " << iP->PortName()
+ << " du noeud de calcul " << iN->Name() << " du graphe "
+ << Name() << " n'est pas connecte "<< endl;
+ RetVal = false ;
+ }
+ };
+ if (!oneOutPortConnected) {
+ cdebug << "Le noeud de calcul " << iN->Name() << " du graphe "
+ << Name() << " n'a aucun port de sortie connecte "<< endl;
+// _computingError.push_front(2);
+ }
+ };
+// return _computingError.size () ;
+ return RetVal ;
+}
+
+// Controle de la coherence des noeuds de calcul
+// Enregistrement dans la liste des noeuds "tete" de graphe
+
+bool GraphBase::Graph::DataServerNodes() const {
+
+ cdebug << "GraphBase::Graph::DataServerNodes ()" << endl;
+
+// const GraphExecutor::InNode *DataFlowDatas = GetDataFlowDatas() ;
+ int i , j , ierr = 0 ;
+
+// if ( DataFlowDatas == NULL ) {
+// MESSAGE( "No input data available in the DataFlow " << _G->Name() );
+// return 0 ;
+// }
+
+// const GraphExecutor::InNode *DataFlowNode = _G->GetDataFlowNode() ;
+// MESSAGE( "DataServerNodes DataFlowNode : " << *DataFlowNode );
+
+// MESSAGE( "DataServerNodes DataFlowDatas : " << *DataFlowDatas );
+
+// cout are inversed because DataFlowDatas is a mirror node of the DataFlow
+
+ ierr = CheckDataServerNodes() ;
+
+// list<GraphExecutor::InNode *> aComputingNodesList = _G->ComputingNodesList() ;
+// list<GraphExecutor::InNode *>::iterator iN = aComputingNodesList.begin();
+ if ( GraphNodesSize() == 0 ) {
+ ierr++ ;
+ }
+ else {
+ GraphBase::ComputingNode * iN ;
+ for ( i = 0 ; i < GraphNodesSize() ; i++ ) {
+ iN = GraphNodes( i ) ;
+// while ( iN != aComputingNodesList.end() ) {
+ if ( iN->IsFactoryNode() ) {
+ GraphBase::FactoryNode * FiN = (GraphBase::FactoryNode * ) iN ;
+ if ( !strlen( FiN->Computer() ) ) {
+ cdebug << "ComputerName missing for node " << FiN->Name() ;
+ if ( !strlen( FiN->Computer() ) ) {
+ ierr++ ;
+ cdebug << endl ;
+ }
+ else {
+ cdebug << ". " << FiN->Computer() << " will be used." << endl ;
+ }
+ }
+ }
+// For Outputs of the DataFlow :
+ for ( j = 0 ; j < iN->GetNodeOutPortsSize() ; j++ ) {
+ if ( !iN->GetNodeOutPort(j)->IsConnected() ) {
+ iN->AddLink( (GraphBase::ComputingNode *) this ) ;
+ }
+ }
+ }
+ }
+
+// Chaque noeud dataserver ne possede qu'un seul port entree ou sortie et il est bien connecte
+
+// list<GraphExecutor::InNode *> aDataServerNodesList = _G->DataServerNodesList() ;
+// list<GraphExecutor::InNode *>::iterator it = aDataServerNodesList.begin() ;
+
+// for (it = _G->DataServerNodesList().begin(); it !=_G->DataServerNodesList().end(); it++){
+// while ( it != aDataServerNodesList.end() ) {
+// if ( (*it)->GetNodeOutPortsSize() && (*it)->GetNodeInPortsSize() ) {
+// cerr << "Erreur dans le noeud serveur de donnees "
+// << (*it)->Name() << " du graphe " << _G->Name() << endl;
+// cerr << "A la fois importation et exportation de donnees" << endl;
+// _dataServerError.push_front(1);
+// }
+
+// if ((*it)->GetNodeOutPortsSize()) {
+// if ((*it)->GetNodeOutPortsSize()==1){
+// if ( (*it)->GetNodeOutPort(0)->IsPortConnected() ){
+// _headNodes.push_front(*it);
+// }
+// else {
+// cerr << "Le port de sortie du noeud serveur de donnees "
+// << (*it)->Name() << " du graphe " << _G->Name()
+// << " n'est pas connecte "<< endl;
+// _dataServerError.push_front(4);
+// }
+// }
+// else {
+// cerr << "Plus d'une donnee importee du noeud serveur de donnees "
+// << (*it)->Name() << " du graphe " << _G->Name() << endl;
+// _dataServerError.push_front(2);
+// }
+// }
+
+// if ((*it)->GetNodeInPortsSize()) {
+// if ((*it)->GetNodeInPortsSize() > 1){
+// cerr << "Plus d'une donnee exportee vers le noeud serveur de donnees "
+// << (*it)->Name() << " du graphe " << _G->Name() << endl;
+// _dataServerError.push_front(3);
+// }
+// else
+// if ( !(*it)->GetNodeInPort(0)->IsPortConnected() ){
+// cerr << "Le port d'entree du noeud serveur de donnees "
+// << (*it)->Name() << " du graphe " << _G->Name()
+// << " n'est pas connecte "<< endl;
+// _dataServerError.push_front(5);
+// }
+// }
+// it++ ;
+// };
+
+// return _dataServerError.size ();
+ return ( ierr == 0 ) ;
+}
+
+SUPERV::GraphState GraphBase::Graph::PortState(
+ const char* NodeName ,
+ const char* ServiceParameterName ) {
+ SUPERV::GraphState aRet = SUPERV::UndefinedState ;
+// cdebug << "GraphBase::Graph::PortState( " << NodeName << " , "
+// << ServiceParameterName << " )" << endl ;
+
+ char *theNode ;
+ char *aPort ;
+ NodePort( NodeName , ServiceParameterName , &theNode , &aPort ) ;
+
+ GraphBase::ComputingNode * aNode = GetChangeGraphNode( theNode ) ;
+ if ( aNode ) {
+ GraphBase::OutPort *anOutPort ;
+ anOutPort = aNode->GetChangeOutPort( aPort );
+ if ( anOutPort == NULL ) {
+ GraphBase::InPort *anInPort = aNode->GetChangeInPort( aPort );
+ if ( anInPort )
+ anOutPort = anInPort->GetOutPort() ;
+ else {
+ cdebug << "GraphBase::Graph::PortState OutPort/InPort not found --> "
+ << aRet << endl ;
+ }
+ }
+ if ( anOutPort ) {
+ aRet = anOutPort->State() ;
+// cdebug << "GraphBase::Graph::PortState --> " << aRet << endl ;
+ }
+ }
+ else {
+ cdebug << "GraphBase::Graph::PortState Node not found --> " << aRet
+ << endl ;
+ }
+ delete theNode ;
+ delete aPort ;
+ return aRet ;
+}
+
+const CORBA::Any * GraphBase::Graph::PortInData( const char* ToNodeName ,
+ const char* ToServiceParameterName ) {
+ const CORBA::Any * aRet = new CORBA::Any() ;
+ char *theNode ;
+ char *aPort ;
+ cdebug_in << "GraphBase::Graph::PortData " << ToNodeName << " "
+ << ToServiceParameterName << endl ;
+ NodePort( ToNodeName , ToServiceParameterName , &theNode , &aPort ) ;
+
+ GraphBase::ComputingNode * aNode = GetChangeGraphNode( theNode ) ;
+
+ if ( aNode ) {
+ GraphBase::OutPort *anOutPort = NULL ;
+ GraphBase::InPort *anInPort = aNode->GetChangeInPort( aPort );
+ if ( anInPort ) {
+ anOutPort = anInPort->GetOutPort() ;
+ if ( anOutPort ) {
+ aRet = anOutPort->Value() ;
+ cdebug << "OutPort value " << anOutPort->NodeName() << "("
+ << anOutPort->PortName() << ") --> InPort " << anInPort->NodeName()
+ << "(" << anInPort->PortName() << ")" << endl ;
+ }
+ }
+ }
+ delete theNode ;
+ delete aPort ;
+ cdebug_out << "GraphBase::Graph::PortData " << endl ;
+ return aRet ;
+}
+
+const CORBA::Any * GraphBase::Graph::PortOutData( const char* FromNodeName ,
+ const char* FromServiceParameterName ) {
+ const CORBA::Any * aRet = new CORBA::Any() ;
+ char *theNode ;
+ char *aPort ;
+ cdebug_in << "GraphBase::Graph::PortOutData " << FromNodeName << " "
+ << FromServiceParameterName << endl ;
+ NodePort( FromNodeName , FromServiceParameterName , &theNode , &aPort ) ;
+
+ GraphBase::ComputingNode * aNode = GetChangeGraphNode( theNode ) ;
+
+ if ( aNode ) {
+ GraphBase::OutPort *anOutPort ;
+ anOutPort = aNode->GetChangeOutPort( aPort );
+ if ( anOutPort )
+ aRet = anOutPort->Value() ;
+ }
+ delete theNode ;
+ delete aPort ;
+ cdebug_out << "GraphBase::Graph::PortOutData " << endl ;
+ return aRet ;
+}
+
+SUPERV::ListOfStrings * GraphBase::Graph::LevelNodes(long aLevel ) {
+ SUPERV::ListOfStrings_var RetVal = new SUPERV::ListOfStrings;
+ if ( aLevel >= 0 && aLevel <= _LevelsNumber ) {
+ int i ;
+ RetVal->length( _NodesNumber[ aLevel ] + 1 );
+ for ( i= 0 ; i <= _NodesNumber[ aLevel ] ; i++ ) {
+ RetVal[i] = CORBA::string_dup( (_SortedNodes[ aLevel ])[ i ]->Name() ) ;
+ }
+ }
+ return ( RetVal._retn() ) ;
+}
+
+bool GraphBase::Graph::StartComponent(const int aThread ,
+ const char * aComputerContainer ,
+ const char * ComponentName ,
+ Engines::Container_var & myContainer ,
+ Engines::Component_var & objComponent ) {
+ cdebug_in << aThread
+ << " GraphBase::Graph::StartComponent " << aComputerContainer
+ << " " << ComponentName << endl;
+ bool RetVal = true ;
+
+ SALOME_LifeCycleCORBA LCC( NamingService() ) ;
+ objComponent = LCC.FindOrLoad_Component( aComputerContainer ,
+ ComponentName );
+ if ( CORBA::is_nil( objComponent ) ) {
+ cdebug_out << aThread
+ << " StartComponent cannot FindOrLoad " << aComputerContainer
+ << " " << ComponentName << endl;
+ return 0 ;
+ }
+ else {
+ myContainer = LCC.FindContainer( aComputerContainer );
+ if ( CORBA::is_nil( myContainer ) ) {
+ cdebug_out << aThread
+ << " GraphBase::Graph::StartComponent myContainer = LCC.FindContainer( '"
+ << aComputerContainer << "' ) Container does not exist"
+ << endl ;
+ return 0 ;
+ }
+ }
+ cdebug_out << aThread << " GraphBase::Graph::StartComponent" << endl;
+ return RetVal ;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_Graph.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_GRAPH_HXX
+#define _DATAFLOWBASE_GRAPH_HXX
+
+#include "DataFlowBase_FactoryNode.hxx"
+#include "DataFlowBase_LoopNode.hxx"
+#include "DataFlowBase_EndOfLoopNode.hxx"
+#include "DataFlowBase_SwitchNode.hxx"
+#include "DataFlowBase_EndOfSwitchNode.hxx"
+#include "DataFlowBase_DataNode.hxx"
+
+class Graph_Impl ;
+
+namespace GraphBase {
+
+ class Graph : public DataNode {
+
+ private:
+
+ int _Graph_prof_debug;
+ ostream * _Graph_fdebug;
+ CORBA::ORB_ptr _Orb ;
+ SUPERV::Graph_var _Graph ;
+ Graph_Impl * _GraphImpl ;
+
+// Map of InNodes of the OutNode
+ map< string , int > _MapOfGraphNodes ;
+ long _GraphNodesSize ;
+ vector<bool > _Sorted ;
+ vector<ComputingNode *> _GraphNodes ;
+
+// _SortedNodes[ _LevelsNumber ] : topological sort from 0 to _LevelsNumber
+// _SortedNodes[ _level ][ _NodesNumber[ _level ] ] : _NodesNumber[ _level ] Nodes
+ int _LevelsNumber ;
+ int _ThreadsMax ;
+ int _GraphsNumber ;
+ vector<int > _NodesNumber ;
+ vector<vector<ComputingNode *> > _SortedNodes ;
+
+ vector<int > _CnxInPortsNumber ;
+ vector<int > _DecrInPortsNumber ;
+
+ long _HeadNodesSize ;
+ vector<ComputingNode *> _HeadNodes ;
+ long _QueueNodesSize ;
+ vector<ComputingNode *> _QueueNodes ;
+ bool _ParallelExecutionNodes ;
+
+ bool AddLink( GraphBase::ComputingNode *fromNode ,
+ GraphBase::OutPort *fromPort ,
+ GraphBase::ComputingNode *toNode ,
+ GraphBase::InPort *toPort ) ;
+
+ public:
+
+ Graph() ;
+ Graph( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char *DataFlowName ,
+ const char * DebugFileName ) ;
+ Graph( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& DataFlowService ,
+ const char *DataFlowComponentName ,
+ const char *DataFlowInterfaceName ,
+ const char *DataFlowName ,
+ const SUPERV::KindOfNode DataFlowkind ,
+ const SUPERV::SDate DataFlowFirstCreation ,
+ const SUPERV::SDate DataFlowLastModification ,
+ const char * DataFlowEditorRelease ,
+ const char * DataFlowAuthor ,
+ const char * DataFlowComputer ,
+ const char * DataFlowComment ,
+ const char * DebugFileName ) ;
+ virtual ~Graph() ;
+
+ void Set_prof_debug( CORBA::ORB_ptr ORB ,
+ const char * DebugFileName ) ;
+ int * Graph_prof_debug() { return &_Graph_prof_debug ; } ;
+ ostream * Graph_fdebug() { return _Graph_fdebug ; } ;
+
+ SUPERV::Graph_var ObjRef() const { return _Graph ; } ;
+ void SetObjRef( SUPERV::Graph_var aGraph ) {
+ _Graph = aGraph ; } ;
+ Graph_Impl * ObjImpl() const { return _GraphImpl ; } ;
+ void SetObjImpl( Graph_Impl * aGraphImpl ) {
+ _GraphImpl = aGraphImpl ; } ;
+
+ void AddLink( const char* FromNodeName , GraphBase::ComputingNode * anOutNode ) {
+ GetChangeGraphNode( FromNodeName )->AddLink( anOutNode ) ; } ;
+
+ const int GetGraphNodeIndex( const char *name ) {
+ const int index = _MapOfGraphNodes[ name ] - 1 ;
+// if ( index >= 0 )
+// cdebug << "GetGraphNodeIndex of " << name << " in _MapOfGraphNodes : "
+// << index << " Node " << hex << (void *) _GraphNodes[ index ]
+// << dec << " '" << _GraphNodes[ index ]->Name() << "'" << endl ;
+ return index ; } ;
+ void SetGraphNodeIndex( const char *name , const int index ) {
+ _MapOfGraphNodes[ name ] = index + 1 ;
+ cdebug << "SetGraphNodeIndex of " << name << " in _MapOfGraphNodes : "
+ << index << " Node " << hex << (void *) _GraphNodes[ index ]
+ << " '" << _GraphNodes[ index ]->Name() << "'" << endl ;
+ } ;
+ void DelGraphNodeIndex( const char *name ) {
+ _MapOfGraphNodes.erase( name ) ; } ;
+ const GraphBase::ComputingNode * GetGraphNode( const int index ) const {
+ const ComputingNode * aNode = GetChangeGraphNode( index ) ;
+ return aNode ; } ;
+ ComputingNode * GetChangeGraphNode( const int index ) const {
+ if ( index >= 0 && index < _GraphNodesSize ) {
+ ComputingNode * aNode = _GraphNodes[ index ] ;
+ return aNode ;
+ }
+ else
+ return NULL ; } ;
+ const ComputingNode * GetGraphNode( const char *name ) {
+ const ComputingNode * aNode = GetChangeGraphNode( name ) ;
+ return aNode ; } ;
+ ComputingNode * GetChangeGraphNode( const char *name ) {
+ int index = GetGraphNodeIndex( name ) ;
+ if ( index >= 0 && index < _GraphNodesSize ) {
+ ComputingNode * aNode = GetChangeGraphNode( index ) ;
+ return aNode ;
+ }
+ else
+ return NULL ; } ;
+
+ const int GraphNodesSize() const {
+ return _GraphNodesSize ; } ;
+ ComputingNode * GraphNodes( int i ) const {
+ return _GraphNodes[ i ] ; } ;
+
+ const int HeadNodesSize() const {
+ return _HeadNodesSize ; } ;
+ ComputingNode * HeadNodes( int i ) const {
+ return _HeadNodes[ i ] ; } ;
+
+ const int QueueNodesSize() const {
+ return _QueueNodesSize ; } ;
+ ComputingNode * QueueNodes( int i ) const {
+ return _QueueNodes[ i ] ; } ;
+
+ const GraphBase::InPort *GetInPort( const char* ToNodeName ,
+ const char* ToServiceParameterName ) {
+ ComputingNode * aNode = GetChangeGraphNode( ToNodeName ) ;
+ if ( aNode ) {
+ return aNode->GetInPort(ToServiceParameterName);
+ }
+ else
+ return NULL ; } ;
+ GraphBase::InPort *GetChangeInPort( const char* ToNodeName ,
+ const char* ToServiceParameterName ) {
+ ComputingNode * aNode = GetChangeGraphNode( ToNodeName ) ;
+ if ( aNode ) {
+ return aNode->GetChangeInPort(ToServiceParameterName);
+ }
+ else
+ return NULL ; } ;
+ GraphBase::OutPort *GetChangeOutPort(
+ const char* FromNodeName ,
+ const char* FromServiceParameterName ) {
+ ComputingNode * aNode = GetChangeGraphNode( FromNodeName ) ;
+ if ( aNode ) {
+ return aNode->GetChangeOutPort( FromServiceParameterName );
+ }
+ else
+ return NULL ; } ;
+
+ SUPERV::GraphState PortState( const char* NodeName ,
+ const char* ServiceParameterName ) ;
+ bool PortDone( const char* NodeName ,
+ const char* ServiceParameterName ) {
+ bool aRet = false ;
+ SUPERV::GraphState aState = PortState( NodeName ,
+ ServiceParameterName ) ;
+ if ( aState == SUPERV::DoneState )
+ aRet = true ;
+ return aRet ; } ;
+ const CORBA::Any * PortInData( const char* ToNodeName ,
+ const char* ToServiceParameterName ) ;
+ const CORBA::Any * PortOutData( const char* FromNodeName ,
+ const char* FromServiceParameterName ) ;
+
+ bool LoadXml( CORBA::ORB_ptr Orb , const char* anXmlFile ,
+ GraphBase::SGraph & aDataFlow ) ;
+
+ GraphBase::SNode * GetInfo() const ;
+ GraphBase::ListOfNodes * GetNodes() const ;
+ GraphBase::ListOfLinks * GetLinks() const ;
+ GraphBase::ListOfGraphs * GetGraphs() const ;
+ GraphBase::ListOfLinks * GetDatas() const ;
+// SALOME_ModuleCatalog::Service * GetService() const ;
+
+ bool AddNode( ComputingNode * aNode ) ;
+ bool RemoveNode( const char* NodeName ) ;
+ bool ReNameNode( const char* OldNodeName ,
+ const char* NewNodeName ) ;
+
+ bool AddLink( const char* FromNodeName ,
+ const char* FromServiceParameterName ,
+ const char* ToNodeName ,
+ const char* ToServiceParameterName ,
+ const CORBA::Any aValue ) ;
+ bool RemoveLink( const char* FromNodeName ,
+ const char* FromServiceParameterName ,
+ const char* ToNodeName ,
+ const char* ToServiceParameterName ) ;
+ bool GetLink( const char* ToNodeName ,
+ const char* ToServiceParameterName ,
+ char** FromNodeName ,
+ char** FromServiceParameterName ) ;
+ GraphBase::SLink * GetLink( GraphBase::ComputingNode * aNode ,
+ GraphBase::InPort* toPort ) ;
+
+ bool AddInputData( const char* ToNodeName ,
+ const char* ToParameterName ,
+ const CORBA::Any aValue ) ;
+ bool ChangeInputData( const char* ToNodeName ,
+ const char* ToParameterName ,
+ const CORBA::Any aValue ) ;
+ bool AddInputData( const char* ToNodeName1 ,
+ const char* ToParameterName1 ,
+ const char* ToNodeName2 ,
+ const char* ToParameterName2 ) ;
+
+ bool AddInputData( const char* ToNodeName ,
+ const char* ToParameterName ,
+ const CORBA::Any ** aValue ) ;
+
+ bool AddOutputData( const char* FromNodeName ,
+ const char* FromParameterName ,
+ const CORBA::Any aValue ) ;
+
+ bool CreateService() ;
+ bool InLineServices() ;
+
+ bool Sort() ;
+ bool ComputingNodes() const ;
+ bool DataServerNodes() const ;
+
+ long LevelMax() {
+ return _LevelsNumber + 1 ; } ;
+ SUPERV::ListOfStrings * LevelNodes(long aLevel ) ;
+ long ThreadsMax() {
+ return _ThreadsMax ; } ;
+ long GraphsNumber() {
+ return _GraphsNumber ; } ;
+
+ int NodesNumber(const int aLevel ) {
+ return _NodesNumber[ aLevel ] ; } ;
+ GraphBase::ComputingNode * SortedNodes( const int aLevel , const int index ) {
+ return (_SortedNodes[ aLevel ])[ index ] ; } ;
+
+ bool StartComponent( const int aThread ,
+ const char * ComputerContainer ,
+ const char * ComponentName ,
+ Engines::Container_var & myContainer ,
+ Engines::Component_var & objComponent ) ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_InLineNode.cxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_InLineNode.hxx"
+
+GraphBase::InLineNode::InLineNode() :
+ GraphBase::ComputingNode::ComputingNode() {
+ _PythonFunction = SUPERV::ListOfStrings() ;
+}
+
+GraphBase::InLineNode::InLineNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * aDataFlowName ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::ComputingNode::ComputingNode( ORB , ptrNamingService , aDataFlowName ,
+ Graph_prof_debug , Graph_fdebug ) {
+ _PythonFunction = SUPERV::ListOfStrings() ;
+ cdebug << "GraphBase::InLineNode::Node " << this
+ << "' _Name "
+ << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+}
+
+GraphBase::InLineNode::InLineNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& NodeService ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::ComputingNode::ComputingNode( ORB , ptrNamingService ,
+ NodeService ,
+ NodeName , akind , NodeFirstCreation ,
+ NodeLastModification ,
+ NodeEditorRelease ,
+ NodeAuthor , NodeComment , GeneratedName ,
+ X , Y ,
+ Graph_prof_debug , Graph_fdebug ) {
+ _PythonFunction = SUPERV::ListOfStrings() ;
+ cdebug_in << "GraphBase::InLineNode::Node " << this
+ << "' _Name "
+ << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind()
+ << " ServiceName " << ServiceName() << " In("
+ << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug_out << "GraphBase::InLineNode::Node" << endl;
+}
+
+GraphBase::InLineNode::InLineNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::ComputingNode::ComputingNode( ORB , ptrNamingService ,
+ SALOME_ModuleCatalog::Service() ,
+ NodeName , akind , NodeFirstCreation ,
+ NodeLastModification , NodeEditorRelease ,
+ NodeAuthor , NodeComment , GeneratedName ,
+ X , Y ,
+ Graph_prof_debug , Graph_fdebug ) {
+
+ cdebug_in << "GraphBase::InLineNode::Node " << this
+ << "' _Name "
+ << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind() << " FuncName " << FuncName
+ << " ServiceName " << ServiceName() << " In("
+ << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ SetPythonFunction( FuncName , aPythonFunction ) ;
+ SALOME_ModuleCatalog::Service aNodeService ;
+ aNodeService.ServiceName = NodeName ;
+// python -> service
+ SetService( aNodeService ) ;
+ cdebug_out << "GraphBase::InLineNode::Node" << endl;
+}
+
+GraphBase::InLineNode::~InLineNode() {
+ cdebug << "GraphBase::InLineNode::~Node " << this
+ << " _Name "
+ << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( _Comment != NULLSTRING )
+// delete [] _Comment;
+}
+
+void GraphBase::InLineNode::SetPythonFunction( const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ) {
+ int i ;
+ cdebug << "GraphBase::InLineNode::PythonFunction length " << aPythonFunction.length()
+ << endl ;
+ _FuncName = my_strdup( FuncName ) ;
+ if ( ( aPythonFunction.length() == 0 ) ||
+ ( aPythonFunction.length() == 1 && strlen( aPythonFunction[ 0 ] ) == 0 ) ) {
+ _PythonFunction.length( 0 ) ;
+ }
+ else {
+ _PythonFunction.length( aPythonFunction.length() ) ;
+ for ( i = 0 ; i < aPythonFunction.length() ; i++ ) {
+ cdebug << aPythonFunction[ i ] << endl ;
+ _PythonFunction[ i ] = CORBA::string_dup( aPythonFunction[ i ] ) ;
+ }
+ }
+}
+
+//bool GraphBase::InLineNode::SaveXML( ostream &f , char *Tabs ,
+bool GraphBase::InLineNode::SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int XCoordinate , int YCoordinate ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aPythonFunction ;
+ if ( PyFuncName() ) {
+ aFuncNames.resize( 1 ) ;
+ aFuncNames[0] = CORBA::string_dup( PyFuncName() ) ;
+ aPythonFunction.resize( 1 ) ;
+ aPythonFunction[0] = PythonFunction() ;
+ }
+// return GraphBase::ComputingNode::SaveXML( f , Tabs , "" , "" , "" , "" ,
+ return GraphBase::ComputingNode::SaveXML( Graph , info , "" , "" , "" , "" ,
+ aFuncNames , aPythonFunction ,
+ XCoordinate , YCoordinate ) ;
+}
+
+bool GraphBase::InLineNode::SavePY(ostream &f , const char * aGraphName ,
+ int XCoordinate , int YCoordinate ) const {
+ GraphBase::ListOfFuncName aFuncNames ;
+ GraphBase::ListOfPythonFunctions aPythonFunction ;
+ if ( PyFuncName() ) {
+ aFuncNames.resize( 1 ) ;
+ aFuncNames[0] = CORBA::string_dup( PyFuncName() ) ;
+ aPythonFunction.resize( 1 ) ;
+ aPythonFunction[0] = PythonFunction() ;
+ }
+ return GraphBase::ComputingNode::SavePY( f , aGraphName , "" , "" , "" , NULL ,
+ aFuncNames , aPythonFunction ,
+ XCoordinate , YCoordinate ) ;
+}
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_InLineNode.hxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_INLINENODE_HXX
+#define _DATAFLOWBASE_INLINENODE_HXX
+
+#include "Python.h"
+
+#include "DataFlowBase_ComputingNode.hxx"
+
+namespace GraphBase {
+
+ class InLineNode : public ComputingNode {
+
+ private:
+
+ char * _FuncName ;
+ SUPERV::ListOfStrings _PythonFunction ;
+ PyObject * _MyPyRunMethod ;
+
+ public:
+
+ InLineNode() ;
+ InLineNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * DataFlowName ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ InLineNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const SALOME_ModuleCatalog::Service& NodeService ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ InLineNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~InLineNode() ;
+
+ void SetPythonFunction( const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ) ;
+ const SUPERV::ListOfStrings * PythonFunction() const {
+ return &_PythonFunction ; } ;
+ char * PyFuncName() const {
+ return my_strdup( _FuncName ) ; } ;
+ void PyRunMethod( PyObject * MyPyRunMethod ) {
+ _MyPyRunMethod = MyPyRunMethod ; } ;
+ PyObject * PyRunMethod() {
+ return _MyPyRunMethod ;
+ }
+
+
+// bool SaveXML( ostream &f , char *Tabs ,
+ bool SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int XCoordinate , int YCoordinate ) const ;
+ bool SavePY( ostream &f , const char * aGraphName ,
+ int XCoordinate , int YCoordinate ) const ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_InPort.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_InPort.hxx"
+#include "DataFlowBase_OutPort.hxx"
+
+char ** _PortStateName ;
+
+GraphBase::InPort::InPort(
+ const char *const * Name ,
+ const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ,
+ const SUPERV::KindOfPort aKind) :
+ Port( Name , aserviceParameter ) {
+ _OutPort = NULL ;
+ _InitialOutPort = NULL ;
+ Kind( aKind ) ;
+}
+
+//GraphBase::InPort::~InPort() {
+// cout << "InPort::~InPort()" << endl ;
+//}
+
+bool GraphBase::InPort::IsConnected() const {
+ return ( _OutPort != NULL && !_OutPort->IsDataConnected() ) ;
+}
+
+bool GraphBase::InPort::IsDataConnected() const {
+ return ( _OutPort != NULL && _OutPort->IsDataConnected() ) ;
+}
+
+void GraphBase::InPort::StringValue(ostream & f ) const {
+ if ( _OutPort )
+ _OutPort->StringValue( f ) ;
+ else
+ f << "(undefined)" ;
+}
+
+ostream & operator<< (ostream &f ,const GraphBase::InPort &P) {
+ f << P.PortName() << ", "
+ << "type : " << P.PortType() << ", " ;
+ f << "from "
+ << P.NodeName() << ", ";
+
+ return f;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_InPort.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_INPORT_HXX
+#define _DATAFLOWBASE_INPORT_HXX
+
+#include "DataFlowBase_Port.hxx"
+
+namespace GraphBase {
+
+ class OutPort ;
+
+ class InPort : public Port {
+
+ SUPERV::GraphState _State ;
+ OutPort * _OutPort ;
+ OutPort * _InitialOutPort ;
+
+ public:
+
+ InPort() {
+ cout << "InPort()" << endl ;
+ _State = SUPERV::UndefinedState ;
+ _OutPort = NULL ;
+ _InitialOutPort = NULL ;
+ } ;
+ InPort( const char *const * NodeName ,
+ const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ,
+ const SUPERV::KindOfPort aKind = SUPERV::ServiceParameter ) ;
+ virtual ~InPort() {
+ cdebug << "GraphBase::InPort::~InPort " << PortName() << endl ; } ;
+ virtual void destroy() {
+ _OutPort = NULL ;
+ _InitialOutPort = NULL ;
+ cdebug << "GraphBase::InPort::destroy " << PortName() << " "
+ << NodeName() << endl ; } ;
+
+ void State( SUPERV::GraphState aState ) {
+ cdebug << pthread_self() << " " << PortName() << " from "
+ << NodeName() << " SUPERV::GraphState " << _State << " "
+ << " --> " << aState << " _EndSwitchPort "
+ << IsEndSwitch() << endl ;
+ _State = aState ; } ;
+ SUPERV::GraphState State() { return _State ; } ;
+
+ OutPort * GetOutPort() {
+ return _OutPort ; } ;
+ OutPort * GetOutPort() const {
+ return _OutPort ; } ;
+ bool IsConnected() const ;
+ bool IsDataConnected() const ;
+ bool AddOutPort( OutPort * anOutPort ) {
+ if ( _OutPort )
+ return false ;
+ _OutPort = anOutPort ;
+ return true ; } ;
+ bool ChangeOutPort( OutPort * anOutPort ) {
+ if ( _InitialOutPort == NULL ) {
+ _InitialOutPort = _OutPort ;
+ }
+ _OutPort = anOutPort ;
+ return true ; } ;
+ bool InitialOutPort() {
+ if ( _InitialOutPort ) {
+ _OutPort = _InitialOutPort ;
+ _InitialOutPort = NULL ;
+ return true ;
+ }
+ return false ; } ;
+ bool RemoveOutPort() {
+ if ( _OutPort == NULL )
+ return false ;
+ _OutPort = NULL ;
+ return RemoveCoords() ; } ;
+
+ void StringValue(ostream & f ) const ;
+
+ } ;
+
+} ;
+
+ostream & operator<< (ostream &,const GraphBase::InPort &);
+
+#endif
--- /dev/null
+using namespace std;
+
+#include "DataFlowBase_XmlHandler.hxx"
+
+//#include <qaccel.h>
+#include <qxml.h>
+#include <qmessagebox.h>
+
+// Pour Jean
+// Fonction Load qui utilise un Parser de fichier xml de Dataflow
+// Utilise DataFlowEditor_XmlHandler.hxx et .cxx
+
+//#include "SALOME_NamingService.hxx"
+
+//#include <SALOMEconfig.h>
+//#include CORBA_CLIENT_HEADER(SALOME_SuperVision)
+
+#include "DataFlowBase_Graph.hxx"
+
+bool GraphBase::Graph::LoadXml( CORBA::ORB_ptr _Orb ,
+ const char* myFileName ,
+ GraphBase::SGraph & aDataFlow )
+{
+ char * FileName = new char[ strlen( myFileName ) + 5 ] ;
+ strcpy( FileName , myFileName ) ;
+ QString aqstrFileName(FileName);
+ QFile afile( aqstrFileName);
+
+ if ( !afile.exists() || !afile.open( IO_ReadOnly ) ) {
+ strcat( FileName , ".xml" ) ;
+ aqstrFileName = QString(FileName);
+ QFile afile( aqstrFileName );
+ if ( !afile.exists() || !afile.open( IO_ReadOnly ) ) {
+ return false;
+ }
+ afile.close();
+ }
+ else
+ afile.close();
+
+ QString qstrFileName(FileName);
+ QFile file( qstrFileName);
+ GraphBase::XmlHandler::XmlHandler * myXmlHandler = new GraphBase::XmlHandler::XmlHandler( _Orb , true );
+ QXmlInputSource source( file );
+ QXmlSimpleReader reader;
+ reader.setContentHandler( myXmlHandler );
+ reader.setErrorHandler( myXmlHandler );
+ bool ok = reader.parse( source );
+ file.close();
+ if ( !ok ) {
+// QMessageBox::critical( 0,
+// QString( "INF_PARSE_ERROR" ),
+// QString( myXmlHandler->errorProtocol() ) );
+ return false;
+ }
+
+ aDataFlow = myXmlHandler->GetDataFlow() ;
+ delete myXmlHandler ;
+ // Dataflow is now loaded.
+ return true ;
+}
+
+
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_LoopNode.cxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_LoopNode.hxx"
+
+GraphBase::LoopNode::LoopNode() :
+ GraphBase::GOTONode::GOTONode() {
+
+ cdebug << "GraphBase::LoopNode::LoopNode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+
+}
+
+GraphBase::LoopNode::LoopNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * InitName ,
+ const SUPERV::ListOfStrings & anInitPythonFunction ,
+ const char * MoreName ,
+ const SUPERV::ListOfStrings & aMorePythonFunction ,
+ const char * NextName ,
+ const SUPERV::ListOfStrings & aNextPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::GOTONode::GOTONode( ORB , ptrNamingService , InitName , anInitPythonFunction ,
+ NodeName , akind , NodeFirstCreation ,
+ NodeLastModification , NodeEditorRelease ,
+ NodeAuthor , NodeComment , GeneratedName ,
+ X , Y , Graph_prof_debug , Graph_fdebug ) {
+
+ cdebug_in << "GraphBase::LoopNode::LoopNode " << this
+ << "' _Name " << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind() << " InitName " << InitName
+ << " MoreName " << MoreName << " NextName " << NextName
+ << " ServiceName " << ServiceName() << " In("
+ << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug << "GraphBase::LoopNode::LoopNode SetMorePythonFunction " << MoreName << " "
+ << aMorePythonFunction[0] << endl ;
+ SetMorePythonFunction( MoreName , aMorePythonFunction ) ;
+ cdebug << "GraphBase::LoopNode::LoopNode SetNextPythonFunction " << NextName << " "
+ << aNextPythonFunction[0] << endl ;
+ SetNextPythonFunction( NextName , aNextPythonFunction ) ;
+
+ cdebug_out << "GraphBase::LoopNode::LoopNode" << endl;
+}
+
+GraphBase::LoopNode::~LoopNode() {
+ cdebug << "GraphBase::Node::~Node " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( Comment() != NULLSTRING )
+// delete [] Comment();
+}
+
+//bool GraphBase::LoopNode::SaveXML( ostream &f , char *Tabs ,
+bool GraphBase::LoopNode::SaveXML( QDomDocument & Graph , QDomElement & info ,
+ int XCoordinate , int YCoordinate ) {
+ GraphBase::ListOfPythonFunctions aPythonFunction ;
+ aPythonFunction.resize( 3 ) ;
+ aPythonFunction[0] = PythonFunction() ;
+ aPythonFunction[1] = MorePythonFunction() ;
+ aPythonFunction[2] = NextPythonFunction() ;
+ GraphBase::ListOfFuncName aFuncNames ;
+ aFuncNames.resize( 3 ) ;
+ aFuncNames[0] = CORBA::string_dup( PyFuncName() ) ;
+ aFuncNames[1] = CORBA::string_dup( PyMoreName() ) ;
+ aFuncNames[2] = CORBA::string_dup( PyNextName() ) ;
+ char * CoupledName = "" ;
+ if ( CoupledNode() ) {
+ CoupledName = CoupledNode()->Name() ;
+ }
+// return GraphBase::ComputingNode::SaveXML( f , Tabs , "" , "" , "" ,
+ return GraphBase::ComputingNode::SaveXML( Graph , info , "" , "" , "" ,
+ CoupledName ,
+ aFuncNames , aPythonFunction ,
+ XCoordinate , YCoordinate ) ;
+}
+
+bool GraphBase::LoopNode::SavePY( ostream &f , const char * aGraphName ,
+ int XCoordinate , int YCoordinate ) {
+ GraphBase::ListOfPythonFunctions aPythonFunction ;
+ aPythonFunction.resize( 3 ) ;
+ aPythonFunction[0] = PythonFunction() ;
+ aPythonFunction[1] = MorePythonFunction() ;
+ aPythonFunction[2] = NextPythonFunction() ;
+ GraphBase::ListOfFuncName aFuncNames ;
+ aFuncNames.resize( 3 ) ;
+ aFuncNames[0] = CORBA::string_dup( PyFuncName() ) ;
+ aFuncNames[1] = CORBA::string_dup( PyMoreName() ) ;
+ aFuncNames[2] = CORBA::string_dup( PyNextName() ) ;
+ return GraphBase::ComputingNode::SavePY( f , aGraphName , "" , "" , "" ,
+ CoupledNode() ,
+ aFuncNames , aPythonFunction ,
+ XCoordinate , YCoordinate ) ;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_LoopNode.hxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_LOOPNODE_HXX
+#define _DATAFLOWBASE_LOOPNODE_HXX
+
+#include "DataFlowBase_GOTONode.hxx"
+
+namespace GraphBase {
+
+ class LoopNode : public GOTONode {
+
+ private:
+
+ char * _MoreName ;
+ SUPERV::ListOfStrings * _MorePythonFunction ;
+ PyObject * _MyPyMoreMethod ;
+ char * _NextName ;
+ SUPERV::ListOfStrings * _NextPythonFunction ;
+ PyObject * _MyPyNextMethod ;
+
+ public:
+
+ LoopNode() ;
+ LoopNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * InitName ,
+ const SUPERV::ListOfStrings & aInitPythonFunction ,
+ const char * MoreName ,
+ const SUPERV::ListOfStrings & aMorePythonFunction ,
+ const char * NextName ,
+ const SUPERV::ListOfStrings & aNextPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~LoopNode() ;
+
+ void SetMorePythonFunction( const char * MoreName ,
+ const SUPERV::ListOfStrings & aMorePythonFunction ) {
+ _MoreName = my_strdup( MoreName ) ;
+ _MorePythonFunction = new SUPERV::ListOfStrings( aMorePythonFunction ) ; }
+ SUPERV::ListOfStrings * MorePythonFunction() const {
+ SUPERV::ListOfStrings * aMorePythonFunction ;
+ aMorePythonFunction = new SUPERV::ListOfStrings( *_MorePythonFunction ) ;
+ return aMorePythonFunction ; } ;
+ char * PyMoreName() {
+ return my_strdup( _MoreName ) ; } ;
+ void PyMoreMethod( PyObject * MyPyMoreMethod ) {
+ _MyPyMoreMethod = MyPyMoreMethod ; } ;
+ PyObject * PyMoreMethod() {
+ return _MyPyMoreMethod ;
+ }
+
+ void SetNextPythonFunction( const char * NextName ,
+ const SUPERV::ListOfStrings & aNextPythonFunction ) {
+ _NextName = my_strdup( NextName ) ;
+ _NextPythonFunction = new SUPERV::ListOfStrings( aNextPythonFunction ) ; }
+ SUPERV::ListOfStrings * NextPythonFunction() const {
+ SUPERV::ListOfStrings * aNextPythonFunction ;
+ aNextPythonFunction = new SUPERV::ListOfStrings( *_NextPythonFunction ) ;
+ return aNextPythonFunction ; } ;
+ char * PyNextName() {
+ return my_strdup( _NextName ) ; } ;
+ void PyNextMethod( PyObject * MyPyNextMethod ) {
+ _MyPyNextMethod = MyPyNextMethod ; } ;
+ PyObject * PyNextMethod() {
+ return _MyPyNextMethod ;
+ }
+
+// bool SaveXML(ostream &f , char *Tabs , int X , int Y ) ;
+ bool SaveXML(QDomDocument & Graph , QDomElement & info , int X , int Y ) ;
+
+ bool SavePY(ostream &f , const char * aGraphName , int X , int Y ) ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_OutPort.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_OutPort.hxx"
+
+//GraphBase::OutPort::~OutPort() {
+// In GraphExecutor::OutPort
+// int i ;
+// for ( i = 1 ; i <= _InPortsSize ; i++ ) {
+// if ( !_InPorts[ i ]->RemoveLink() )
+// cout << "GraphBase::OutPort::~OutPort error "
+// << _InPorts[ i ]->PortName() << endl ;
+// }
+//}
+
+bool GraphBase::OutPort::HasInPort() const {
+ return _InPortsSize != 0 ;
+}
+
+const GraphBase::InPort * GraphBase::OutPort::GetInPort(
+ const GraphBase::InPort * toPort ) {
+ const GraphBase::InPort * anInPort = NULL ;
+ int index = _MapOfInPorts[ toPort->NodePortName() ] ;
+ if ( index > 0 && index <= _InPortsSize ) {
+ anInPort = _InPorts[ index-1 ] ;
+ if ( anInPort != toPort ) {
+ cout << "GraphBase::OutPort::GetInPort inconsistency toPort "
+ << hex << (void *) toPort << " != anInPort " << (void *) anInPort
+ << dec << endl ;
+ anInPort = NULL ;
+ }
+ }
+ return anInPort ;
+}
+
+SUPERV::Link_var GraphBase::OutPort::InPortObjRef(
+ const GraphBase::InPort * toPort ) {
+ SUPERV::Link_var aLink = SUPERV::Link::_nil() ;
+ int index = _MapOfInPorts[ toPort->NodePortName() ] ;
+ if ( index > 0 && index <= _InPortsSize ) {
+ aLink = _Links[ index-1 ] ;
+ }
+ return aLink ;
+}
+
+bool GraphBase::OutPort::AddInPort( GraphBase::InPort * toPort ) {
+ int index = _MapOfInPorts[ toPort->NodePortName() ] ;
+ if ( index > 0 && index <= _InPortsSize ) {
+ return false ;
+ }
+ _InPortsSize += 1 ;
+ _InPorts.resize( _InPortsSize ) ;
+ _MapOfInPorts[ toPort->NodePortName() ] = _InPortsSize ;
+ _InPorts[ _InPortsSize-1 ] = toPort ;
+ _Links.resize( _InPortsSize ) ;
+ _Links[ _InPortsSize-1 ] = SUPERV::Link::_nil() ;
+ cdebug << "OutPort " << NodeName() << "(" << PortName() << ") --> InPort "
+ << toPort->NodeName() << "(" << toPort->PortName() << ") SwitchPort "
+ << toPort->IsEndSwitch() << endl ;
+ return true ;
+}
+
+bool GraphBase::OutPort::AddInPortObjRef( GraphBase::InPort * toPort ,
+ SUPERV::Link_var aLink ) {
+ int index = _MapOfInPorts[ toPort->NodePortName() ] ;
+ if ( index <= 0 || index > _InPortsSize ) {
+ return false ;
+ }
+ _Links[ index - 1 ] = aLink ;
+ return true ;
+}
+
+bool GraphBase::OutPort::RemoveInPort( GraphBase::InPort * toPort ) {
+ int i ;
+ int index = _MapOfInPorts[ toPort->NodePortName() ] ;
+ if ( index <= 0 || index > _InPortsSize ) {
+ cdebug << "GraphBase::OutPort::RemoveInPort Error " << NodePortName()
+ << " --> " << toPort->NodePortName() << endl ;
+ return false ;
+ }
+ _InPortsSize -= 1 ;
+ for ( i = index - 1 ; i < _InPortsSize ; i++ ) {
+ _MapOfInPorts[ _InPorts[ i+1 ]->NodePortName() ] = i + 1 ;
+ _InPorts[ i ] = _InPorts[ i+1 ] ;
+ _Links[ i ] = _Links[ i+1 ] ;
+ }
+ _InPorts.resize( _InPortsSize ) ;
+ _Links.resize( _InPortsSize ) ;
+ _MapOfInPorts.erase( toPort->NodePortName() ) ;
+ if ( _InPortsSize == 0 ) {
+ PortStatus(NotConnected ) ;
+ }
+ toPort->RemoveOutPort() ;
+ return true ;
+}
+
+bool GraphBase::OutPort::ReNameInPort( const char* OldNodePortName ,
+ const char* NewNodePortName ) {
+ int index = _MapOfInPorts[ OldNodePortName ] ;
+ if ( index <= 0 || index > _InPortsSize ) {
+ cdebug << "GraphBase::OutPort::ReNameLink Error " << OldNodePortName
+ << " --> " << NewNodePortName << " index " << index << endl ;
+ return false ;
+ }
+ _MapOfInPorts.erase( OldNodePortName ) ;
+ _MapOfInPorts[ NewNodePortName ] = index ;
+ return true ;
+}
+
+#if 0
+bool GraphBase::OutPort::RemoveLinks() {
+ bool RetVal = true ;
+ int i ;
+ for ( i = 0 ; i < _InPortsSize ; i++ ) {
+ MESSAGE( " to " << *_InPorts[ i ] );
+ RetVal = _InPorts[ i ]->RemoveLink() ;
+ if ( !RetVal )
+ break ;
+ RetVal = RemoveLink( _InPorts[ i ] ) ;
+ if ( !RetVal )
+ break ;
+ }
+ PortStatus(NotConnected ) ;
+ return RetVal ;
+}
+#endif
+
+ostream & operator<< (ostream &f ,const GraphBase::OutPort &P)
+{
+ f << P.PortName() << ", "
+ << "type : " << P.PortType() << ", " ;
+
+ f << "from "
+ << P.NodeName() << ", ";
+
+ return f;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_OutPort.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_OUTPORT_HXX
+#define _DATAFLOWBASE_OUTPORT_HXX
+
+#include "DataFlowBase_DataPort.hxx"
+#include "DataFlowBase_InPort.hxx"
+
+namespace GraphBase {
+
+ class OutPort : public DataPort {
+
+ private:
+
+ StatusOfPort _Connected ;
+
+// Inports connected to this OutPort
+ map< string , int > _MapOfInPorts ;
+ int _InPortsSize ;
+ vector<InPort * > _InPorts ;
+ vector<SUPERV::Link_var > _Links ;
+
+ public:
+
+ OutPort( const char *const * NodeName ,
+ const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ,
+ const SUPERV::KindOfPort aKind = SUPERV::ServiceParameter ) :
+ DataPort( NodeName , aserviceParameter ) {
+ _Connected = NotConnected ;
+ _InPortsSize = 0 ;
+ Kind( aKind ) ; } ;
+ virtual ~OutPort() {
+ cdebug << "GraphBase::OutPort::~OutPort " << PortName() << endl ; } ;
+ virtual void destroy() {
+ int i ;
+ for ( i = 0 ; i < _InPortsSize ; i++ ) {
+ _MapOfInPorts.erase( _InPorts[ i ]->PortName() ) ;
+// _InPorts[ i ]->destroy() ; BUG ...
+ _InPorts[ i ]->RemoveOutPort() ;
+ }
+ _InPorts.resize( 0 ) ;
+ cdebug << "GraphBase::OutPort::destroy " << PortName() << " "
+ << NodeName() << endl ; } ;
+
+ const StatusOfPort PortStatus() const {
+ return _Connected; } ;
+ void PortStatus(StatusOfPort c) { _Connected = c; } ;
+ const bool IsNotConnected() const {
+ return ( _Connected == NotConnected ) ; } ;
+ const bool IsConnected() const {
+ return ( _Connected != NotConnected ) ; } ;
+ const bool IsPortConnected() const {
+ return ( _Connected == PortConnected ||
+ _Connected == PortAndDataConnected ) ; } ;
+ const bool IsPortAndDataConnected() const {
+ return ( _Connected == PortAndDataConnected ) ; } ;
+ const bool IsDataConnected() const {
+ return ( _Connected == DataConnected ) ; } ;
+
+ const int InPortsSize() const {
+ return _InPortsSize ; } ;
+ const InPort * InPorts( const int i ) const {
+ return _InPorts[ i ] ; } ;
+ InPort * ChangeInPorts( const int i ) {
+ return _InPorts[ i ] ; } ;
+ SUPERV::Link_var LinkObjRef( const int i ) const {
+ return _Links[ i ] ; } ;
+
+// bool RemoveLinks() ;
+
+ bool HasInPort() const ;
+ const InPort * GetInPort( const InPort * toPort ) ;
+ SUPERV::Link_var InPortObjRef( const InPort * toPort ) ;
+ bool AddInPort( InPort * toPort ) ;
+ bool AddInPortObjRef( InPort * toPort , SUPERV::Link_var aLink ) ;
+
+ bool RemoveInPort( InPort * toPort ) ;
+ bool ReNameInPort( const char* OldNodePortName ,
+ const char* NewNodePortName ) ;
+
+ } ;
+
+} ;
+
+ostream & operator<< (ostream &,const GraphBase::OutPort &);
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_Port.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_Port.hxx"
+
+//GraphBase::Port::~Port() {
+// cout << "Port::~Port()" << endl ;
+//}
+
+bool GraphBase::Port::AddCoord( const int nxy , const int *x ,
+ const int *y ) {
+ int i ;
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ _X.resize( nxy ) ;
+ _Y.resize( nxy ) ;
+ for ( i = 0 ; i < nxy ; i++ ) {
+ _X[ i ] = x[ i ] ;
+ _Y[ i ] = y[ i ] ;
+ }
+ }
+ return true ;
+}
+
+bool GraphBase::Port::AddCoord( const int index ,
+ const int x , const int y ) {
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ if ( index <= 0 || index > _X.size()+1 )
+ return false ;
+ _X.resize( _X.size()+1 ) ;
+ _Y.resize( _Y.size()+1 ) ;
+ int i ;
+ for ( i = _X.size() - 1 ; i >= index ; i-- ) {
+ _X[ i ] = _X[ i-1 ] ;
+ _Y[ i ] = _Y[ i-1 ] ;
+ }
+ _X[ index - 1 ] = x ;
+ _Y[ index - 1 ] = y ;
+// cdebug << "AddCoord " << NodeName() << "(" << PortName() << ") ["
+// << index-1 << "] " << x << " " << y << endl ;
+// for ( i = 0 ; i < _X.size() ; i++ ) {
+// cdebug << " [" << i << "] " << _X[ i ] << " " << _Y[ i ] << endl ;
+// }
+ }
+ return true ;
+}
+
+bool GraphBase::Port::ChangeCoord( const int index ,
+ const int x ,
+ const int y ) {
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ if ( index <= 0 || index > _X.size() )
+ return false ;
+ _X[ index - 1 ] = x ;
+ _Y[ index - 1 ] = y ;
+// cdebug << "ChangeCoord " << NodeName() << "(" << PortName() << ") ["
+// << index-1 << "] " << x << " " << y << endl ;
+// int i ;
+// for ( i = 0 ; i < _X.size() ; i++ ) {
+// cdebug << " [" << i << "] " << _X[ i ] << " " << _Y[ i ] << endl ;
+// }
+ }
+ return true ;
+}
+
+bool GraphBase::Port::RemoveCoord( const int index ) {
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ if ( index <= 0 || index > _X.size() )
+ return false ;
+ int i ;
+ for ( i = index - 1 ; i < _X.size() - 1 ; i++ ) {
+ _X[ i ] = _X[ i+1 ] ;
+ _Y[ i ] = _Y[ i+1 ] ;
+ }
+ _X.resize( _X.size()-1 ) ;
+ _Y.resize( _Y.size()-1 ) ;
+ }
+ return true ;
+}
+
+bool GraphBase::Port::RemoveCoords() {
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ _X.resize( 0 ) ;
+ _Y.resize( 0 ) ;
+ }
+ return true ;
+}
+
+int GraphBase::Port::GetCoord() const {
+ int npt ;
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ npt = _X.size() ;
+ }
+ return npt ;
+}
+
+bool GraphBase::Port::GetCoord( int *x , int *y ) const {
+ int i ;
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ for ( i = 0 ; i < _X.size() ; i++ ) {
+ x[ i ] = _X[ i ] ;
+ y[ i ] = _Y[ i ] ;
+ }
+ }
+ return true ;
+}
+
+const GraphBase::ListOfCoords * GraphBase::Port::Coords() const {
+ GraphBase::ListOfCoords * _list_Coords = new GraphBase::ListOfCoords ;
+ int i ;
+ if ( !IsEndSwitch() ) {
+ _list_Coords->resize( _X.size() );
+ for ( i = 0 ; i < _X.size() ; i++ ) {
+ (*_list_Coords)[ i ].theX = _X[ i ] ;
+ (*_list_Coords)[ i ].theY = _Y[ i ] ;
+ }
+ }
+ return _list_Coords ;
+}
+
+bool GraphBase::Port::GetCoord( const int index , long &x , long &y ) const {
+ if ( IsEndSwitch() ) {
+ return false ;
+ }
+ else {
+ if ( index <= 0 || index > _X.size() )
+ return false ;
+ x = _X[ index - 1 ] ;
+ y = _Y[ index - 1 ] ;
+// cdebug << "GetCoord " << NodeName() << "(" << PortName() << ") ["
+// << index-1 << "] " << x << " " << y << endl ;
+// int i ;
+// for ( i = 0 ; i < _X.size() ; i++ ) {
+// cdebug << " [" << i << "] " << _X[ i ] << " " << _Y[ i ] << endl ;
+// }
+ }
+ return true ;
+}
+
+ostream & operator<< (ostream & f ,const SUPERV::KindOfPort & s ) {
+ switch (s) {
+ case SUPERV::ServiceParameter :
+ f << "ServiceParameter";
+ break;
+ case SUPERV::GateParameter :
+ f << "GateParameter";
+ break;
+ case SUPERV::LoopParameter :
+ f << "LoopParameter";
+ break;
+ case SUPERV::InLineParameter :
+ f << "InLineParameter";
+ break;
+ case SUPERV::SwitchParameter :
+ f << "SwitchParameter";
+ break;
+ case SUPERV::EndSwitchParameter :
+ f << "EndSwitchParameter";
+ break;
+ default :
+ f << "UnknownKindOfPort";
+ break;
+ }
+
+ return f;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_Port.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_PORT_HXX
+#define _DATAFLOWBASE_PORT_HXX
+
+#include <list>
+#include <vector>
+
+#include "DataFlowBase_ServicesParameter.hxx"
+
+namespace GraphBase {
+
+ class Port : public ServicesParameter {
+
+ const char *const * _NodeName ;
+ SUPERV::Port_var _Port ;
+ SUPERV::KindOfPort _KindOfPort ;
+
+ vector<long > _X ;
+ vector<long > _Y ;
+
+ public:
+
+ Port() {
+ cout << "Port()" << endl ;
+ _NodeName = NULL ;
+ _Port = SUPERV::Port::_nil() ;
+ _KindOfPort = SUPERV::UndefinedParameter ;
+ } ;
+ Port( const char *const * NodeName ,
+ const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ,
+ const SUPERV::KindOfPort aKindOfPort = SUPERV::ServiceParameter ) :
+ ServicesParameter( aserviceParameter ) {
+ _NodeName = NodeName ;
+ _Port = SUPERV::Port::_nil() ;
+ _KindOfPort = aKindOfPort ;
+ } ;
+ virtual ~Port() {
+ cdebug << "~Port" << endl ; } ;
+
+ SUPERV::Port_var ObjRef() const { return _Port ; } ;
+ void ObjRef(SUPERV::Port_var aPort) {
+ _Port = aPort ; } ;
+
+ const char * NodeName() const { return *_NodeName ; } ;
+ const char * NodePortName() const {
+// cout << "NodePortName " << hex << (void *) _NodeName << " "
+// << dec << _NodeName << endl ;
+ char * _NodePortName = new char [ strlen( *_NodeName ) +
+ strlen( ServicesParameterName() ) + 3 ] ;
+ strcpy( _NodePortName , *_NodeName ) ;
+ strcat( _NodePortName , "\\" ) ;
+ strcat( _NodePortName , ServicesParameterName() ) ;
+// strcat( _NodePortName , "\\" ) ;
+ return _NodePortName ; } ;
+
+ const char * PortName() const {
+ if ( this == NULL )
+ return NULLSTRING ;
+ return ServicesParameterName() ; } ;
+ const char * PortType() const { return ServicesParameterType() ; } ;
+
+ void Kind( SUPERV::KindOfPort aKindOfPort ) {
+ if ( _KindOfPort == SUPERV::GateParameter && aKindOfPort == SUPERV::InLineParameter ) {
+ cdebug << "GraphBase::Port::Kind " << _KindOfPort << " --> " << aKindOfPort
+ << endl ;
+ }
+ _KindOfPort = aKindOfPort ; } ;
+ const SUPERV::KindOfPort Kind() const { return _KindOfPort ; } ;
+ bool IsParam() const {
+ return _KindOfPort == SUPERV::ServiceParameter ; } ;
+ bool IsGate() const {
+ return _KindOfPort == SUPERV::GateParameter ||
+ _KindOfPort == SUPERV::GOTOParameter ; } ;
+ bool IsInLine() const {
+ return _KindOfPort == SUPERV::InLineParameter ; } ;
+ bool IsLoop() const {
+ return _KindOfPort == SUPERV::LoopParameter ; } ;
+ bool IsSwitch() const {
+ return _KindOfPort == SUPERV::SwitchParameter ; } ;
+ bool IsEndSwitch() const {
+ return _KindOfPort == SUPERV::EndSwitchParameter ; } ;
+ bool IsGOTO() const {
+ return _KindOfPort == SUPERV::GOTOParameter ; } ;
+// bool IsBus() const { return ( ( _KindOfPort == SUPERV::InLineParameter ) ||
+// ( _PortIndex != -1 ) ) ; } ;
+
+// void PortIndex( const int anIndex ) {
+// _PortIndex = anIndex ; } ;
+// const int PortIndex() const {
+// return _PortIndex ; } ;
+
+
+ bool AddCoord( const int nxy , const int *x , const int *y ) ;
+ bool AddCoord( const int index , const int x , const int y ) ;
+ bool ChangeCoord( const int index ,
+ const int x ,
+ const int y ) ;
+ bool RemoveCoord( const int index ) ;
+ bool RemoveCoords() ;
+ int GetCoord() const ;
+ bool GetCoord( int *x , int *y ) const ;
+ const GraphBase::ListOfCoords * Coords() const ;
+ bool GetCoord( const int index , long &x , long &y ) const ;
+
+ } ;
+
+} ;
+
+ostream & operator<< (ostream &,const SUPERV::KindOfPort &);
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_PortsOfNode.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_PortsOfNode.hxx"
+
+GraphBase::PortsOfNode::PortsOfNode() :
+ GraphBase::Service::Service( SALOME_ModuleCatalog::Service() ) {
+ cdebug << "GraphBase::PortsOfNode::PortsOfNode " << this
+ << endl ;
+ _NodeInPortsSize = 0 ;
+ _NodeOutPortsSize = 0 ;
+}
+
+GraphBase::PortsOfNode::PortsOfNode( const char *DataFlowName ) :
+ GraphBase::Service::Service( SALOME_ModuleCatalog::Service() ) {
+ cdebug << "GraphBase::PortsOfNode::PortsOfNode " << this
+ << endl ;
+ _NodeInPortsSize = 0 ;
+ _NodeOutPortsSize = 0 ;
+}
+
+GraphBase::PortsOfNode::~PortsOfNode() {
+ cdebug << "GraphBase::PortsOfNode::~PortsOfNode " << this
+ << endl ;
+// int i ;
+// for ( i = 0 ; i < _NodeInPortsSize ; i++ ) {
+// delete _NodeInPorts[ i ] ;
+// }
+// for ( i = 0 ; i < _NodeOutPortsSize ; i++ ) {
+// delete _NodeOutPorts[ i ] ;
+// }
+}
+
+void GraphBase::PortsOfNode::DefPortsOfNode(
+ CORBA::ORB_ptr ORB ,
+ const SALOME_ModuleCatalog::Service& aService ,
+ const char *const * NodeName ,
+ const SUPERV::KindOfNode aKind ,
+ const bool DataFlowOrComputing ,
+ const bool WithInLoop ,
+ const bool WithInGate ,
+ const bool WithOutGate ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) {
+ int i ;
+ cdebug_in << "DefPortsOfNode : " << *NodeName << endl ;
+ SUPERV::KindOfPort aPortKind = SUPERV::ServiceParameter ;
+ if ( aKind == SUPERV::InLineNode ) {
+ aPortKind = SUPERV::InLineParameter ;
+ }
+ else if ( aKind == SUPERV::LoopNode || aKind == SUPERV::EndLoopNode ) {
+ aPortKind = SUPERV::InLineParameter ;
+ }
+ else if ( aKind == SUPERV::SwitchNode || aKind == SUPERV::EndSwitchNode ) {
+ aPortKind = SUPERV::InLineParameter ;
+ }
+ else if ( aKind == SUPERV::GOTONode ) {
+ aPortKind = SUPERV::InLineParameter ;
+ }
+ for ( i = 0 ; i < _NodeInPortsSize ; i++ ) {
+ cdebug << "DefPortsOfNode delete In" << i << ". " << _NodeInPorts[i]
+ << endl ;
+ _MapOfNodeInPorts.erase( _NodeInPorts[i]->PortName() ) ;
+ delete _NodeInPorts[i] ;
+ }
+ _NodeInPorts.resize( 0 );
+ for ( i = 0 ; i < _NodeOutPortsSize ; i++ ) {
+ cdebug << "DefPortsOfNode delete Out" << i << ". " << _NodeOutPorts[i]->PortName()
+ << endl ;
+ _MapOfNodeOutPorts.erase( _NodeOutPorts[i]->PortName() ) ;
+ delete _NodeOutPorts[i] ;
+ }
+ _NodeOutPorts.resize( 0 );
+
+ SetService( aService ) ;
+
+ int iVec = 0 ;
+ _NodeInPortsSize = aService.ServiceinParameter.length() ;
+ if ( WithInGate ) {
+ SALOME_ModuleCatalog::ServicesParameter anInGateParameter ;
+ _NodeInPortsSize = _NodeInPortsSize + 1 ;
+ iVec += 1 ;
+ char *aParametername = "InGate" ;
+ if ( aKind == SUPERV::EndSwitchNode ) {
+ aParametername = "Default" ;
+ }
+ anInGateParameter.Parametertype = CORBA::string_dup( "bool" ) ;
+ anInGateParameter.Parametername = CORBA::string_dup( aParametername ) ;
+ _NodeInPorts.resize( _NodeInPortsSize );
+ _MapOfNodeInPorts[ aParametername ] = iVec ;
+ _NodeInPorts[iVec-1] = new GraphBase::InPort( NodeName , anInGateParameter ,
+ SUPERV::GateParameter );
+// _NodeInPorts[iVec-1]->Kind( SUPERV::GateParameter ) ;
+ _NodeInPorts[iVec-1]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ cdebug << "DefPortsOfNode : " << "_MapOfNodeInPorts[ " << aParametername
+ << " ] = " << iVec << " " << _NodeInPorts[iVec-1]->Kind() << " "
+ << _NodeInPorts[iVec-1] << endl ;
+ }
+ if ( WithInLoop ) {
+ SALOME_ModuleCatalog::ServicesParameter anInLoopParameter ;
+ _NodeInPortsSize = _NodeInPortsSize + 1 ;
+ iVec += 1 ;
+ char *aParametername = "InitLoop" ;
+ if ( aKind == SUPERV::EndLoopNode ) {
+ aParametername = "DoLoop" ;
+ }
+ anInLoopParameter.Parametertype = CORBA::string_dup( "bool" ) ;
+ anInLoopParameter.Parametername = CORBA::string_dup( aParametername ) ;
+ if ( _NodeInPortsSize > _NodeInPorts.size() ) {
+ _NodeInPorts.resize( _NodeInPortsSize );
+ }
+ _MapOfNodeInPorts[ aParametername ] = iVec ;
+ _NodeInPorts[iVec-1] = new GraphBase::InPort( NodeName , anInLoopParameter ,
+ SUPERV::LoopParameter );
+// _NodeInPorts[iVec-1]->Kind( SUPERV::LoopParameter ) ;
+ _NodeInPorts[iVec-1]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ cdebug << "DefPortsOfNode : " << "_MapOfNodeInPorts[ " << aParametername
+ << " ] = " << iVec << " " << _NodeInPorts[iVec-1]->Kind() << " "
+ << _NodeInPorts[iVec-1] << endl ;
+ }
+ if ( _NodeInPortsSize > _NodeInPorts.size() ) {
+ _NodeInPorts.resize(_NodeInPortsSize);
+ }
+ cdebug << "NodeInPortsSize " << _NodeInPortsSize << endl ;
+ for ( i = iVec ; i < _NodeInPortsSize ; i++ ) {
+ string _aParametername = CORBA::string_dup(aService.ServiceinParameter[i-iVec].Parametername) ;
+ const char *aParametername = _aParametername.c_str() ;
+ if ( _MapOfNodeInPorts[ aParametername ] ) {
+ if ( !DataFlowOrComputing &&
+ !strcmp( aParametername , "InGate" ) ) {
+ }
+ else {
+ cdebug << "Error, Parametername duplicated : " << aParametername
+ << endl ;
+ }
+ }
+ else {
+ _MapOfNodeInPorts[ aParametername ] = i+1 ;
+ cdebug << "DefPortsOfNode : " << "_MapOfNodeInPorts[ " << aParametername
+ << " ] = " << i+1 << endl ;
+ const SALOME_ModuleCatalog::ServicesParameter aServiceParameter = aService.ServiceinParameter[i-iVec] ;
+ _NodeInPorts[i] = new GraphBase::InPort( NodeName , aServiceParameter ,
+ aPortKind );
+ _NodeInPorts[i]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ cdebug << i << ". " << *_NodeInPorts[i] << " " << _NodeInPorts[i]->Kind() << endl ;
+ }
+ }
+
+ iVec = 0 ;
+ _NodeOutPortsSize = aService.ServiceoutParameter.length() ;
+ if ( WithOutGate ) {
+ SALOME_ModuleCatalog::ServicesParameter anOutGateParameter ;
+ _NodeOutPortsSize = _NodeOutPortsSize + 1 ;
+ iVec += 1 ;
+ char *aParametername = "OutGate" ;
+ if ( aKind == SUPERV::SwitchNode ) {
+ aParametername = "Default" ;
+ }
+ anOutGateParameter.Parametertype = CORBA::string_dup( "bool" ) ;
+ anOutGateParameter.Parametername = CORBA::string_dup( aParametername ) ;
+ _NodeOutPorts.resize(_NodeOutPortsSize);
+ _MapOfNodeOutPorts[ aParametername ] = iVec ;
+ _NodeOutPorts[iVec-1] = new GraphBase::OutPort( NodeName , anOutGateParameter ,
+ SUPERV::GateParameter );
+// _NodeOutPorts[iVec-1]->Kind( SUPERV::GateParameter ) ;
+ _NodeOutPorts[iVec-1]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ cdebug << "DefPortsOfNode : " << "_MapOfNodeOutPorts[ " << aParametername
+ << " ] = " << iVec << " " << _NodeOutPorts[iVec-1]->Kind() << " "
+ << _NodeOutPorts[iVec-1] << endl ;
+ }
+ if ( WithInLoop ) {
+ SALOME_ModuleCatalog::ServicesParameter anOutLoopParameter ;
+ _NodeOutPortsSize = _NodeOutPortsSize + 1 ;
+ iVec += 1 ;
+ char *aParametername = "DoLoop" ;
+ anOutLoopParameter.Parametertype = CORBA::string_dup( "bool" ) ;
+ anOutLoopParameter.Parametername = CORBA::string_dup( aParametername ) ;
+ if ( _NodeOutPortsSize > _NodeOutPorts.size() ) {
+ _NodeOutPorts.resize(_NodeOutPortsSize);
+ }
+ _MapOfNodeOutPorts[ aParametername ] = iVec ;
+ _NodeOutPorts[iVec-1] = new GraphBase::OutPort( NodeName , anOutLoopParameter ,
+ SUPERV::LoopParameter );
+// _NodeOutPorts[iVec-1]->Kind( SUPERV::LoopParameter ) ;
+ _NodeOutPorts[iVec-1]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ cdebug << "DefPortsOfNode : " << "_MapOfNodeInPorts[ " << aParametername
+ << " ] = " << iVec << " " << _NodeOutPorts[iVec-1]->Kind() << " "
+ << _NodeOutPorts[iVec-1] << endl ;
+ }
+ if ( _NodeOutPortsSize > _NodeOutPorts.size() ) {
+ _NodeOutPorts.resize(_NodeOutPortsSize);
+ }
+ cdebug << "NodeOutPortsSize " << _NodeOutPortsSize << endl ;
+ for ( i = iVec ; i < _NodeOutPortsSize ; i++ ) {
+ string _aParametername = CORBA::string_dup(aService.ServiceoutParameter[i-iVec].Parametername) ;
+ const char *aParametername = _aParametername.c_str() ;
+ if ( _MapOfNodeOutPorts[ aParametername ] ) {
+ if ( !DataFlowOrComputing &&
+ !strcmp( aParametername , "OutGate" ) ) {
+ }
+ else {
+ cdebug << "Error, Parametername duplicated : " << aParametername
+ << endl ;
+ }
+ }
+ else {
+ _MapOfNodeOutPorts[ aParametername ] = i+1 ;
+ cdebug << "DefPortsOfNode : " << "_MapOfNodeOutPorts[ " << aParametername
+ << " ] = " << i+1 << endl ;
+ const SALOME_ModuleCatalog::ServicesParameter aServiceParameter = aService.ServiceoutParameter[i-iVec] ;
+ _NodeOutPorts[i] = new GraphBase::OutPort( NodeName , aServiceParameter ,
+ aPortKind );
+ _NodeOutPorts[i]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ cdebug << i << ". " << *_NodeOutPorts[i] << " " << _NodeOutPorts[i]->Kind() << endl ;
+ }
+ }
+ cdebug_out << "DefPortsOfNode : " << *NodeName << endl ;
+}
+
+GraphBase::InPort * GraphBase::PortsOfNode::AddInPort(
+ CORBA::ORB_ptr ORB ,
+ const char *const * NodeName ,
+ const SUPERV::KindOfNode aKind ,
+ const char * InputParameterName ,
+ const char * InputParameterType ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) {
+ cdebug_in << "DefPortsOfNode::InPort : " << *NodeName << " " << aKind << " "
+ << InputParameterName << " " << InputParameterType << endl ;
+ GraphBase::InPort * anInPort = NULL ;
+ if ( aKind == SUPERV::InLineNode || aKind == SUPERV::LoopNode ||
+ aKind == SUPERV::EndLoopNode || aKind == SUPERV::SwitchNode ||
+ aKind == SUPERV::EndSwitchNode || aKind == SUPERV::GOTONode ) {
+ SUPERV::KindOfPort aPortKind = SUPERV::InLineParameter ;
+ if ( aKind == SUPERV::EndSwitchNode ) {
+ aPortKind = SUPERV::EndSwitchParameter ;
+ }
+ anInPort = GetChangeInPort( InputParameterName ) ;
+ if ( anInPort == NULL ) {
+ _NodeInPortsSize = _NodeInPortsSize + 1 ;
+ _NodeInPorts.resize(_NodeInPortsSize);
+ _MapOfNodeInPorts[ InputParameterName ] = _NodeInPortsSize ;
+ SALOME_ModuleCatalog::ServicesParameter aServiceParameter ;
+ aServiceParameter.Parametername = InputParameterName ;
+ aServiceParameter.Parametertype = InputParameterType ;
+ SUPERV::KindOfPort aPortKind = SUPERV::ServiceParameter ;
+ _NodeInPorts[_NodeInPortsSize-1] = new GraphBase::InPort( NodeName ,
+ aServiceParameter ,
+ aPortKind ) ;
+ _NodeInPorts[_NodeInPortsSize-1]->Kind( SUPERV::InLineParameter ) ;
+ _NodeInPorts[_NodeInPortsSize-1]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ anInPort = _NodeInPorts[_NodeInPortsSize-1] ;
+ }
+ else {
+ cdebug << "InPort already exists" << endl ;
+ }
+ }
+ cdebug_out << "DefPortsOfNode::InPort _NodeInPortsSize " << _NodeInPortsSize
+ << " " << anInPort->Kind() << endl ;
+ return anInPort ;
+}
+
+GraphBase::OutPort * GraphBase::PortsOfNode::AddOutPort(
+ CORBA::ORB_ptr ORB ,
+ const char *const * NodeName ,
+ const SUPERV::KindOfNode aKind ,
+ const char * OutputParameterName ,
+ const char * OutputParameterType ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) {
+ cdebug_in << "DefPortsOfNode::OutPort : " << *NodeName << " " << aKind << " "
+ << OutputParameterName << " " << OutputParameterType << endl ;
+ GraphBase::OutPort * anOutPort = NULL ;
+ if ( aKind == SUPERV::InLineNode || aKind == SUPERV::LoopNode ||
+ aKind == SUPERV::EndLoopNode || aKind == SUPERV::SwitchNode ||
+ aKind == SUPERV::EndSwitchNode || aKind == SUPERV::GOTONode ) {
+ SUPERV::KindOfPort aPortKind = SUPERV::InLineParameter ;
+ anOutPort = GetChangeOutPort( OutputParameterName ) ;
+ if ( anOutPort == NULL ) {
+ _NodeOutPortsSize = _NodeOutPortsSize + 1 ;
+ _NodeOutPorts.resize(_NodeOutPortsSize);
+ _MapOfNodeOutPorts[ OutputParameterName ] = _NodeOutPortsSize ;
+ SALOME_ModuleCatalog::ServicesParameter aServiceParameter ;
+ aServiceParameter.Parametername = OutputParameterName ;
+ aServiceParameter.Parametertype = OutputParameterType ;
+ _NodeOutPorts[_NodeOutPortsSize-1] = new GraphBase::OutPort( NodeName ,
+ aServiceParameter ,
+ aPortKind );
+ _NodeOutPorts[_NodeOutPortsSize-1]->Kind( SUPERV::InLineParameter ) ;
+ _NodeOutPorts[_NodeOutPortsSize-1]->SetDebug( ORB , Graph_prof_debug , Graph_fdebug ) ;
+ anOutPort = _NodeOutPorts[_NodeOutPortsSize-1] ;
+ }
+ else {
+ cdebug << "OutPort already exists" << endl ;
+ }
+ }
+ cdebug_out << "DefPortsOfNode::OutPort _NodeOutPortsSize "
+ << _NodeOutPortsSize << " " << anOutPort->Kind() << endl ;
+ return anOutPort ;
+}
+
+void GraphBase::PortsOfNode::DelInPort( const char * InputParameterName ) {
+ cdebug << "DefPortsOfNode::DelInPort : " << InputParameterName << endl ;
+ int index = _MapOfNodeInPorts[ InputParameterName ] -1 ;
+ if ( index >= 0 ) {
+ cdebug << "DefPortsOfNode::DelInPort : _NodeInPorts[" << index << "] "
+ << _NodeInPorts[ index ]->PortName() << " "
+ << _NodeInPorts[ index ]->NodeName() << endl ;
+ _MapOfNodeInPorts.erase( InputParameterName ) ;
+ _NodeInPorts[ index ]->destroy() ;
+ int i ;
+ for ( i = index ; i < _NodeInPortsSize - 1 ; i++ ) {
+ _MapOfNodeInPorts.erase( _NodeInPorts[ i+1 ]->PortName() ) ;
+ _MapOfNodeInPorts[ _NodeInPorts[ i+1 ]->PortName() ] = i+1 ;
+ _NodeInPorts[ i ] = _NodeInPorts[ i+1 ] ;
+ }
+ _NodeInPortsSize = _NodeInPortsSize - 1 ;
+ _NodeInPorts.resize( _NodeInPortsSize ) ;
+ for ( i = 0 ; i < _NodeInPortsSize ; i++ ) {
+ cdebug << "DefPortsOfNode::DelInPort ListOfInPorts : _NodeInPorts[" << i << "] "
+ << _NodeInPorts[ i ]->PortName() << " "
+ << _NodeInPorts[ i ]->NodeName() << endl ;
+ }
+ }
+ else {
+ cdebug << "DefPortsOfNode::DelInPort : index out of range ERROR " << index
+ << endl ;
+ }
+}
+
+void GraphBase::PortsOfNode::DelOutPort( const char * OutputParameterName ) {
+ cdebug << "DefPortsOfNode::DelOutPort : " << OutputParameterName << endl ;
+ int index = _MapOfNodeOutPorts[ OutputParameterName ] - 1 ;
+ if ( index >= 0 ) {
+ cdebug << "DefPortsOfNode::DelOutPort : _NodeOutPorts[" << index << "] "
+ << _NodeOutPorts[ index ]->PortName() << " "
+ << _NodeOutPorts[ index ]->NodeName() << endl ;
+ _MapOfNodeOutPorts.erase( OutputParameterName ) ;
+ _NodeOutPorts[ index ]->destroy() ;
+ int i ;
+ for ( i = index ; i < _NodeOutPortsSize ; i++ ) {
+ _MapOfNodeOutPorts.erase( _NodeOutPorts[ i+1 ]->PortName() ) ;
+ _MapOfNodeOutPorts[ _NodeOutPorts[ i+1 ]->PortName() ] = i+1 ;
+ _NodeOutPorts[ i ] = _NodeOutPorts[ i+1 ] ;
+ }
+ _NodeOutPortsSize = _NodeOutPortsSize - 1 ;
+ _NodeOutPorts.resize( _NodeOutPortsSize ) ;
+ for ( i = 0 ; i < _NodeOutPortsSize ; i++ ) {
+ cdebug << "DefPortsOfNode::DelOutPort ListOfOutPorts : _NodeOutPorts[" << i
+ << "] " << _NodeOutPorts[ i ]->PortName() << " "
+ << _NodeOutPorts[ i ]->NodeName() << endl ;
+ }
+ }
+ else {
+ cdebug << "DefPortsOfNode::DelOutPort : index out of range ERROR " << index
+ << endl ;
+ }
+}
+
+#if 0
+void GraphBase::PortsOfNode::InOutPort( GraphBase::InPort * InputPort ,
+ GraphBase::OutPort * OutputPort ) {
+ cdebug_in << "DefPortsOfNode::InOutPort : " << InputPort->PortName()
+ << " " << OutputPort->PortName() << endl ;
+ InputPort->PortIndex( _MapOfNodeOutPorts[ OutputPort->PortName() ] - 1 ) ;
+ OutputPort->PortIndex( _MapOfNodeInPorts[ InputPort->PortName() ] - 1 ) ;
+ cdebug_out << "DefPortsOfNode::InOutPort " << InputPort->PortIndex()
+ << " " << OutputPort->PortIndex() << endl ;
+}
+#endif
+
+const GraphBase::InPort *GraphBase::PortsOfNode::GetInPort( const char *name) {
+ return GetChangeInPort( name ) ;
+}
+
+const GraphBase::OutPort *GraphBase::PortsOfNode::GetOutPort( const char *name) {
+ return GetChangeOutPort( name ) ;
+}
+
+GraphBase::InPort *GraphBase::PortsOfNode::GetChangeInPort( const char *name) {
+// cdebug_in << "GraphBase::PortsOfNode::GetChangePort " << name <<" " << way
+// << endl;
+
+ GraphBase::InPort * pP = NULL;
+ if ( !_MapOfNodeInPorts.empty() ) {
+ int i = _MapOfNodeInPorts[ name ] ;
+// cout << "GraphBase::PortsOfNode::GetChangeInPort _MapOfNodeInPorts[ "
+// << name << " ] : " << i-1 << " " << _NodeInPorts[ i-1 ]->NodeName()
+// << endl ;
+ if ( i > 0 )
+ pP = _NodeInPorts[ i-1 ] ;
+ }
+// cdebug_out << "GraphBase::PortsOfNode::GetChangeInPort " << endl;
+
+ return pP;
+}
+
+GraphBase::OutPort *GraphBase::PortsOfNode::GetChangeOutPort( const char *name ) {
+// cdebug_in << "GraphBase::PortsOfNode::GetChangePort " << name <<" " << way
+// << endl;
+
+ GraphBase::OutPort * pP = NULL;
+ if ( !_MapOfNodeOutPorts.empty() ) {
+ int i = _MapOfNodeOutPorts[ name ] ;
+// cout << "GraphBase::PortsOfNode::GetChangeOutPort _MapOfNodeOutPorts[ "
+// << name << " ] : " << i-1 << " " << _NodeOutPorts[ i-1 ]->NodeName()
+// << endl ;
+ if ( i > 0 )
+ pP = _NodeOutPorts[ i-1 ] ;
+ }
+// cdebug_out << "GraphBase::PortsOfNode::GetChangeOutPort " << endl;
+
+ return pP;
+}
+
+#if 0
+bool GraphBase::PortsOfNode::RemoveLinks() {
+ int RetVal = true ;
+ int i ;
+ for ( i = 0 ; i < _NodeInPortsSize ; i++ ) {
+ cdebug << "GraphBase::PortsOfNode::RemoveLinks of InPorts : "
+ << *_NodeInPorts[ i ] ;
+ if ( _NodeInPorts[ i ]->IsConnected() ) {
+ RetVal = _NodeInPorts[ i ]->GetLink()->RemoveLink( _NodeInPorts[ i ] ) ;
+ cdebug << " from "
+ << *_NodeInPorts[ i ]->GetLink() ;
+ }
+ else {
+ cdebug << " not connected" ;
+ }
+ cdebug << endl ;
+ if ( !RetVal )
+ break ;
+ }
+ if ( RetVal ) {
+ for ( i = 0 ; i < _NodeOutPortsSize ; i++ ) {
+ cdebug << "GraphBase::PortsOfNode::RemoveLinks of OutPort : "
+ << *_NodeOutPorts[ i ] ;
+ RetVal = _NodeOutPorts[ i ]->RemoveLinks() ;
+ if ( !RetVal )
+ break ;
+ }
+ }
+ return RetVal ;
+}
+#endif
+
+void GraphBase::PortsOfNode::ListPorts( ostrstream & f,
+ const bool klink ) const {
+
+ int i ;
+
+ f << " Input Ports : " ;
+ if ( klink ) {
+ f << GetNodeInPortsSize() << " port"
+ << (GetNodeInPortsSize() > 1 ? "s" : "") << endl;
+
+ for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
+ f << " Port "
+// << hex << GetNodeInPort(i) << dec << " "
+ << *(GetNodeInPort(i)) << " " ;
+ GetNodeInPort(i)->StringValue( f ) ;
+ f << endl;
+ }
+
+ f << " Output Ports : " ;
+ }
+
+ f << GetNodeOutPortsSize() << " port"
+ << (GetNodeOutPortsSize() > 1 ? "s" : "") << endl;
+
+ for ( i = 0 ; i < GetNodeOutPortsSize() ; i++ ) {
+ f << " Port "
+// << hex << GetNodeOutPort(i) << dec << " "
+ << *(GetNodeOutPort(i)) << " " ;
+ GetNodeOutPort(i)->StringValue( f ) ;
+ f << endl;
+ }
+
+ if ( !klink ) {
+ f << " Output Ports : " ;
+ f << GetNodeInPortsSize() << " port"
+ << (GetNodeInPortsSize() > 1 ? "s" : "") << endl;
+
+ for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
+ f << " Port "
+// << hex << GetNodeInPort(i) << dec << " "
+ << *(GetNodeInPort(i)) << " " ;
+ GetNodeInPort(i)->StringValue( f ) ;
+ f << endl;
+ }
+ }
+
+}
+
+ostream & operator<< (ostream & f ,const SUPERV::KindOfNode & s ) {
+ switch (s) {
+ case SUPERV::ComputingNode :
+ f << "ComputingNode";
+ break;
+ case SUPERV::FactoryNode :
+ f << "FactoryNode";
+ break;
+ case SUPERV::InLineNode :
+ f << "InLineNode";
+ break;
+ case SUPERV::DataFlowNode :
+ f << "DataFlowNode";
+ break;
+ case SUPERV::LoopNode :
+ f << "LoopNode";
+ break;
+ case SUPERV::EndLoopNode :
+ f << "EndLoopNode";
+ break;
+ case SUPERV::SwitchNode :
+ f << "SwitchNode";
+ break;
+ case SUPERV::EndSwitchNode :
+ f << "EndSwitchNode";
+ break;
+ case SUPERV::GOTONode :
+ f << "GOTONode";
+ break;
+ default :
+ f << "UnknownKindOfNode";
+ break;
+ }
+
+ return f;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_PortsOfNode.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_PORTSOFNODE_HXX
+#define _DATAFLOWBASE_PORTSOFNODE_HXX
+
+#include "DataFlowBase_Service.hxx"
+
+#include "DataFlowBase_InPort.hxx"
+#include "DataFlowBase_OutPort.hxx"
+
+namespace GraphBase {
+
+ class PortsOfNode : public Service {
+
+ private:
+
+// Only For getting Ports of InNodes and OutNode
+ map< string , int > _MapOfNodeInPorts ;
+ int _NodeInPortsSize ;
+ vector<InPort *> _NodeInPorts;
+
+ map< string , int > _MapOfNodeOutPorts ;
+ int _NodeOutPortsSize ;
+ vector<OutPort *> _NodeOutPorts;
+
+ public:
+
+ PortsOfNode() ;
+ PortsOfNode( const char *DataFlowName ) ;
+ virtual ~PortsOfNode() ;
+
+ void DefPortsOfNode( CORBA::ORB_ptr ORB ,
+ const SALOME_ModuleCatalog::Service& NodeService ,
+ const char *const * NodeName ,
+ const SUPERV::KindOfNode aKind ,
+ const bool DataFlowOrComputing ,
+ const bool WithGateArg ,
+ const bool WithInGate , const bool WithOutGate ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) ;
+
+ InPort * AddInPort( CORBA::ORB_ptr ORB ,
+ const char *const * NodeName ,
+ const SUPERV::KindOfNode aKind ,
+ const char * InputParameterName ,
+ const char * InputParameterType ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) ;
+ OutPort * AddOutPort( CORBA::ORB_ptr ORB ,
+ const char *const * NodeName ,
+ const SUPERV::KindOfNode aKind ,
+ const char * OutputParameterName ,
+ const char * InputParameterType ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) ;
+// void InOutPort( InPort * InputPort , OutPort * OutputPort ) ;
+
+ void DelInPort( const char * InputParameterName ) ;
+ void DelOutPort( const char * OutputParameterName ) ;
+
+ const int GetNodeInPortsSize() const { return _NodeInPortsSize ; } ;
+ const InPort *GetNodeInPort(int i) const {
+ return _NodeInPorts[i] ; } ;
+ InPort *GetChangeNodeInPort(int i) const {
+ return _NodeInPorts[i] ; } ;
+ const int GetNodeOutPortsSize() const { return _NodeOutPortsSize ; } ;
+ const OutPort *GetNodeOutPort(int i) const {
+ return _NodeOutPorts[i] ; } ;
+ OutPort *GetChangeNodeOutPort(int i) const {
+ return _NodeOutPorts[i] ; } ;
+
+ const InPort *GetInPort( const char *name ) ;
+ const OutPort *GetOutPort( const char *name ) ;
+ InPort *GetChangeInPort( const char *name ) ;
+ OutPort *GetChangeOutPort( const char *name ) ;
+
+ void ListPorts( ostrstream & , const bool klink = true ) const ;
+ };
+
+};
+
+ostream & operator<< (ostream &,const SUPERV::KindOfNode &);
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_Service.cxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include "DataFlowBase_Service.hxx"
+
+void GraphBase::Service::SetService( const SALOME_ModuleCatalog::Service aService ) {
+ _Service.ServiceName = CORBA::string_dup( aService.ServiceName ) ;
+ _Service.ServiceinParameter.length( aService.ServiceinParameter.length() ) ;
+ _Service.ServiceoutParameter.length( aService.ServiceoutParameter.length() ) ;
+ int i ;
+ for ( i = 0 ; i < _Service.ServiceinParameter.length() ; i++ ) {
+ _Service.ServiceinParameter[ i ].Parametertype = CORBA::string_dup( aService.ServiceinParameter[ i ].Parametertype ) ;
+ _Service.ServiceinParameter[ i ].Parametername = CORBA::string_dup( aService.ServiceinParameter[ i ].Parametername ) ;
+ }
+ for ( i = 0 ; i < _Service.ServiceoutParameter.length() ; i++ ) {
+ _Service.ServiceoutParameter[ i ].Parametertype = CORBA::string_dup( aService.ServiceoutParameter[ i ].Parametertype ) ;
+ _Service.ServiceoutParameter[ i ].Parametername = CORBA::string_dup( aService.ServiceoutParameter[ i ].Parametername ) ;
+ }
+ cdebug << "GraphBase::Service::SetService : " << _Service << endl ;
+ _Instance = 0 ;
+}
+
+ostream & operator<< (ostream & f ,const SALOME_ModuleCatalog::Service & s ) {
+ f << "Name " << s.ServiceName << endl ;
+ int i ;
+ for ( i = 0 ; i < s.ServiceinParameter.length() ; i++ ) {
+ if ( i == 0 )
+ f << " Inparameters " << i ;
+ else
+ f << " " << i ;
+ f << ". " << s.ServiceinParameter[i].Parametername
+ << ". " << s.ServiceinParameter[i].Parametertype << endl ;
+ }
+ for ( i = 0 ; i < s.ServiceoutParameter.length() ; i++ ) {
+ if ( i == 0 )
+ f << " Outparameters " << i ;
+ else
+ f << " " << i ;
+ f << ". " << s.ServiceoutParameter[i].Parametername
+ << ". " << s.ServiceoutParameter[i].Parametertype << endl ;
+ }
+ return f;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_Service.hxx
+// Created : 2002
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_SERVICE_HXX
+#define _DATAFLOWBASE_SERVICE_HXX
+
+#include "DataFlowBase_ServicesParameter.hxx"
+
+ostream & operator<< (ostream & f ,const SALOME_ModuleCatalog::Service & s ) ;
+
+namespace GraphBase {
+
+ class Service : public Base {
+
+ SALOME_ModuleCatalog::Service _Service ;
+ int _Instance ;
+
+ public:
+
+ Service( const SALOME_ModuleCatalog::Service aService ) {
+ SetService( aService ) ;
+ cdebug << "GraphBase::Service::Service : " << _Service << endl ;
+ } ;
+ Service( const char * aServiceName ) {
+ _Service.ServiceName = CORBA::string_dup( aServiceName ) ;
+ cdebug << "GraphBase::Service::Service : " << _Service << endl ;
+ _Instance = 0 ; } ;
+ virtual ~Service() {
+ MESSAGE( "GraphBase::Service::~Service" );
+ } ;
+
+ void SetService( const SALOME_ModuleCatalog::Service aService ) ;
+
+ const SALOME_ModuleCatalog::Service * GetService() const {
+ cdebug << "GraphBase::Service::GetService : " << _Service << endl ;
+ return &_Service ; } ;
+ const char * ServiceName() const {
+// cdebug << "ServiceName " << hex << (void *) _Service.ServiceName
+// << dec << " = " << _Service.ServiceName << endl ;
+ return _Service.ServiceName ; } ;
+ const SALOME_ModuleCatalog::ListOfServicesParameter ServiceInParameter() const {
+ return _Service.ServiceinParameter ; } ;
+ const SALOME_ModuleCatalog::ListOfServicesParameter ServiceOutParameter() const {
+ return _Service.ServiceoutParameter ; } ;
+
+ const int Instances() const { return _Instance ; } ;
+ int NewInstance() { _Instance += 1 ;
+ return _Instance ; } ;
+ void Instance( int AddInst = 1 ) { if ( AddInst == 1 )
+ _Instance += 1 ;
+ else
+ _Instance = AddInst ; } ;
+
+ } ;
+
+} ;
+
+#endif
--- /dev/null
+#ifndef _DATAFLOWBASE_SERVICESPARAMETER_HXX
+#define _DATAFLOWBASE_SERVICESPARAMETER_HXX
+
+#include "DataFlowBase_Base.hxx"
+
+namespace GraphBase {
+
+ class ServicesParameter : public Base {
+
+ SALOME_ModuleCatalog::ServicesParameter _ServicesParameter ;
+
+ public:
+
+ ServicesParameter() {
+ cout << "ServicesParameter()" << endl ;
+ _ServicesParameter.Parametername = (char *) NULL ;
+ _ServicesParameter.Parametertype = (char *) NULL ;
+ } ;
+ ServicesParameter( const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ) {
+ _ServicesParameter = aserviceParameter ; } ;
+ virtual ~ServicesParameter() {
+// cout << "ServicesParameter::~ServicesParameter()" << endl ;
+ } ;
+ const SALOME_ModuleCatalog::ServicesParameter & GetServicesParameter() const {
+ return _ServicesParameter ; } ;
+ const char * ServicesParameterName() const {
+ return _ServicesParameter.Parametername ; } ;
+ const char * ServicesParameterType() const {
+ return _ServicesParameter.Parametertype ; } ;
+
+ } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_SwitchNode.cxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <strstream>
+#include <iostream>
+
+#include "DataFlowBase_SwitchNode.hxx"
+
+GraphBase::SwitchNode::SwitchNode() :
+ GraphBase::GOTONode::GOTONode() {
+
+ cdebug << "GraphBase::SwitchNode::SwitchNode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+
+}
+
+GraphBase::SwitchNode::SwitchNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug ,
+ ostream * Graph_fdebug ) :
+ GraphBase::GOTONode::GOTONode( ORB , ptrNamingService , FuncName , aPythonFunction ,
+ NodeName , akind , NodeFirstCreation ,
+ NodeLastModification , NodeEditorRelease ,
+ NodeAuthor , NodeComment , GeneratedName ,
+ X , Y , Graph_prof_debug , Graph_fdebug ) {
+
+ cdebug_in << "GraphBase::SwitchNode::SwitchNode " << this
+ << "' _Name " << (void *) Name() << " '" << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " "
+ << " KindOfNode " << Kind() << " FuncName " << FuncName
+ << " ServiceName " << ServiceName() << " In("
+ << ServiceInParameter().length()
+ << ") Out(" << ServiceOutParameter().length() << ")" << endl ;
+
+ cdebug_out << "GraphBase::SwitchNode::SwitchNode" << endl;
+}
+
+GraphBase::SwitchNode::~SwitchNode() {
+ cdebug << "GraphBase::SwitchNode::~SwitchNode " << this
+ << " _Name " << (void *) Name() << " " << Name() << " _Comment "
+ << (void *) Comment() << " " << Comment() << " " << endl ;
+// if ( _ComponentName != NULLSTRING )
+// delete [] _ComponentName ;
+// delete [] _Name ;
+// delete [] _EditorRelease ;
+// if ( _Author != NULLSTRING )
+// delete [] _Author ;
+// if ( _Computer != FACTORYSERVER )
+// delete [] _Computer;
+// if ( _Comment != NULLSTRING )
+// delete [] _Comment;
+}
+
--- /dev/null
+//=============================================================================
+// File : DataFlowBase_SwitchNode.hxx
+// Created : 2003
+// Author : Jean Rahuel, CEA
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#ifndef _DATAFLOWBASE_SWITCHNODE_HXX
+#define _DATAFLOWBASE_SWITCHNODE_HXX
+
+#include "DataFlowBase_GOTONode.hxx"
+
+namespace GraphBase {
+
+ class SwitchNode : public GOTONode {
+
+ private:
+
+ public:
+
+ SwitchNode() ;
+ SwitchNode( CORBA::ORB_ptr ORB ,
+ SALOME_NamingService* ptrNamingService ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const char *NodeName ,
+ const SUPERV::KindOfNode akind ,
+ const SUPERV::SDate NodeFirstCreation ,
+ const SUPERV::SDate NodeLastModification ,
+ const char * NodeEditorRelease ,
+ const char * NodeAuthor ,
+ const char * NodeComment ,
+ const bool GeneratedName ,
+ const long X ,
+ const long Y ,
+ int * Graph_prof_debug = NULL ,
+ ostream * Graph_fdebug = NULL ) ;
+ virtual ~SwitchNode() ;
+
+ };
+
+};
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : DataFlowBase_XmlHandler.cxx
+// Created : Thu Sept 13 14:20:36 2001
+// Author : Arnaud RES
+// Project : SALOME
+// Copyright : CEA
+// $Header$
+
+//#include "SALOME_NamingService.hxx"
+
+//#include <SALOMEconfig.h>
+//#include CORBA_CLIENT_HEADER(SALOME_SuperVision)
+
+//#include "DataFlow_debug.hxx"
+
+#include "DataFlowBase_XmlHandler.hxx"
+
+#include <qstring.h>
+//#include <qxmlattributes.h>
+#include <qxml.h>
+
+#define TRACE 0
+
+//static string NULLSTRING = string("") ;
+
+GraphBase::XmlHandler::XmlHandler( CORBA::ORB_ptr Orb ,
+ const bool aConstructor ) :
+ _Orb( Orb ) , dataflowxml(false), depth(0), constructor(aConstructor) {
+ int i ;
+ for ( i = 0 ; i < maxlevel ; i++ ) {
+ fieldname[i] = NULLSTRING ;
+ fieldvalue[i] = NULLSTRING ;
+ step[i] = 0 ;
+ }
+ VXSize = 0 ;
+}
+
+GraphBase::XmlHandler::XmlHandler() {}
+
+GraphBase::XmlHandler::~XmlHandler() {}
+
+QString GraphBase::XmlHandler::errorProtocol()
+{
+ return errorProt;
+}
+
+bool GraphBase::XmlHandler::startDocument()
+{
+ // at the beginning of parsing: do some initialization
+ errorProt = "";
+ return TRUE;
+}
+
+bool GraphBase::XmlHandler::startElement( const QString&, const QString&,
+ const QString& qName,
+ const QXmlAttributes& atts ) {
+ // do different actions depending on the name of the tag and the
+ // state you are in
+
+#if TRACE
+ MESSAGE( "====================startElement " << depth << " " << qName)
+
+#endif
+ if ( qName == "dataflow" && depth == 0 ) {
+ // Dataflow detected
+ dataflowxml = TRUE;
+ }
+ if ( dataflowxml ) {
+ fieldname[depth++] = qName ;
+ }
+ if ( depth == maxlevel+1 )
+ return false ;
+ return dataflowxml ;
+
+}
+
+static bool returnfalse( GraphBase::XmlHandler *myXmlHandler ,
+ const char *msg ,
+ const QString& qName ) {
+ MESSAGE( "returnfalse ERROR qName " << qName << " " << msg
+ << " fieldname " << myXmlHandler->getfieldname(myXmlHandler->getdepth())
+ << " fieldvalue '"
+ << myXmlHandler->getfieldvalue(myXmlHandler->getdepth()) << "'" )
+ return false ;
+}
+
+bool GraphBase::XmlHandler::endElement( const QString&,
+ const QString&,
+ const QString& qName) {
+
+ if ( !dataflowxml ||
+ ( qName != QString( fieldname[depth].c_str() ) &&
+ fieldvalue[depth] != NULLSTRING ) ) {
+ MESSAGE( "endElement ERROR " << dataflowxml << " qName " << qName
+ << " fieldname" << fieldname[depth] << " fieldvalue "
+ << fieldvalue[depth] )
+ return returnfalse( this , "top" , qName ) ;
+ }
+ if ( fieldvalue[depth] == NULLSTRING )
+ depth -= 1 ;
+
+#if TRACE
+ MESSAGE( " ==========endElement step[" << depth << "]="
+ << step[depth] << " qName " << qName << " fieldvalue '"
+ << fieldvalue[depth] << "'")
+#endif
+ switch ( depth ) {
+ case 0 : {
+ if ( step[depth] == 0 && qName == "dataflow" ) {
+ dataflowxml = false ;
+ }
+ else
+ return returnfalse( this , "depth0" , qName ) ;
+ break ;
+ }
+
+ case 1 : {
+ switch ( step[depth] ) {
+ case 0 :
+ if ( qName == "info-list" ) {
+// aDataFlow.Info = aNode ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth1-0" , qName ) ;
+ break ;
+ case 1 :
+ if ( qName == "node-list" ) {
+// node-list ok
+ step[depth]++ ;
+ step[3] = 16 ;
+ step[4] = 3 ;
+ }
+ else
+ return returnfalse( this , "depth1-1" , qName ) ;
+ break ;
+ case 2 :
+ if ( qName == "link-list" ) {
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth1-2" , qName ) ;
+ break ;
+ case 3 :
+ if ( qName == "data-list" ) {
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth1-3" , qName ) ;
+ break ;
+ default:
+ return returnfalse( this , "depth1-d" , qName ) ;
+ break ;
+ }
+ break ;
+ }
+
+ case 2 : {
+ switch ( step[depth] ) {
+ case 0 :
+ if ( qName == "node" ) {
+// Node ok
+ if ( step[1] == 0 ) {
+ aDataFlow.Info = aNode ;
+ }
+ else if ( step[1] == 1 ) {
+ int sizenode = aDataFlow.Nodes.size() ;
+ aDataFlow.Nodes.resize( sizenode+1 ) ;
+ aDataFlow.Nodes[ sizenode ] = aNode ;
+ }
+ step[3] = 0 ;
+ aNode.theService.ServiceinParameter.length( 0 ) ;
+ aNode.theService.ServiceoutParameter.length( 0 ) ;
+ aNode.theListOfParameters.resize( 0 ) ;
+ aNode.theListOfFuncName.resize( 0 ) ;
+ aNode.theListOfPythonFunctions.resize( 0 ) ;
+ break ;
+ }
+ else if ( qName == "link" || qName == "data" ) {
+ step[depth]++ ;
+ }
+ else {
+ return returnfalse( this , "depth2-0" , qName ) ;
+ break ;
+ }
+ case 1 :
+ if ( qName == "link" ) {
+ int sizelink = aDataFlow.Links.size() ;
+ aDataFlow.Links.resize( sizelink+1 ) ;
+ aDataFlow.Links[ sizelink ] = aLink ;
+ if ( VXSize ) {
+ aDataFlow.Links[ sizelink ].aListOfCoords.resize( VXSize ) ;
+ int ic ;
+ for ( ic = 0 ; ic < VXSize ; ic++ ) {
+ aDataFlow.Links[ sizelink ].aListOfCoords[ ic ].theX = VX[ic] ;
+ aDataFlow.Links[ sizelink ].aListOfCoords[ ic ].theY = VY[ic] ;
+ }
+ }
+ VXSize = 0 ;
+ step[3] = 16 ;
+ break ;
+ }
+ else if ( qName == "data" ) {
+ step[depth]++ ;
+ }
+ else {
+ return returnfalse( this , "depth2-1" , qName ) ;
+ break ;
+ }
+ case 2 :
+ if ( qName == "data" ) {
+// Data ok
+ if ( constructor ) {
+ int sizedata = aDataFlow.Datas.size() ;
+ aDataFlow.Datas.resize( sizedata+1 ) ;
+ aDataFlow.Datas[ sizedata ] = aLink ;
+ if ( VXSize ) {
+ aDataFlow.Datas[ sizedata ].aListOfCoords.resize( VXSize ) ;
+ int ic ;
+ for ( ic = 0 ; ic < VXSize ; ic++ ) {
+ aDataFlow.Datas[ sizedata ].aListOfCoords[ ic ].theX = VX[ic] ;
+ aDataFlow.Datas[ sizedata ].aListOfCoords[ ic ].theY = VY[ic] ;
+ }
+ }
+ }
+ VXSize = 0 ;
+ step[3] = 16 ;
+ }
+ else
+ return returnfalse( this , "depth2-2" , qName ) ;
+ break ;
+ default:
+ return returnfalse( this , "depth2-d" , qName ) ;
+ break ;
+ }
+ break ;
+ }
+
+ case 3 : {
+ switch ( step[depth] ) {
+ case 0 :
+ if ( qName == "component-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-0" , qName ) ;
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aNode.theComponentName = fieldvalue[depth].c_str() ;
+ else
+ aNode.theComponentName = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-0" , qName ) ;
+ break ;
+ case 1 :
+ if ( qName == "interface-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-1" , qName ) ;
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aNode.theInterfaceName = fieldvalue[depth].c_str() ;
+ else
+ aNode.theInterfaceName = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-1" , qName ) ;
+ break ;
+ case 2 :
+ if ( qName == "node-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-2" , qName ) ;
+ aNode.theName = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-2" , qName ) ;
+ break ;
+ case 3 :
+ if ( qName == "kind" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-3" , qName ) ;
+// kind ok
+ sscanf( fieldvalue[depth].c_str() ,"%d" , &aNode.theKind ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ step[4] = 0 ;
+ }
+ else
+ return returnfalse( this , "depth3-3" , qName ) ;
+ break ;
+ case 4 :
+ if ( qName == "coupled-node" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-4" , qName ) ;
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aNode.theCoupledNode = fieldvalue[depth].c_str() ;
+ else
+ aNode.theCoupledNode = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ break ;
+ }
+ else
+ step[depth]++ ;
+// return returnfalse( this , "depth3-4" , qName ) ;
+// break ;
+ case 5 :
+ if ( qName == "service" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth3-5" , qName ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ step[4] = 6;
+ step[5] = 4 ;
+// service ok
+ }
+ else
+ return returnfalse( this , "depth3-5" , qName ) ;
+ break ;
+ case 6 :
+ if ( qName == "Parameter-list" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth3-6" , qName ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ step[4] = 8 ;
+ step[5] = 8 ;
+// Parameter-list ok
+ break ;
+ }
+ else
+ step[depth]++ ;
+ step[5] = 0 ;
+ step[6] = 0 ;
+// NO Parameter-list
+// return returnfalse( this , "depth3-6" , qName ) ;
+// break ;
+ case 7 :
+ if ( qName == "PyFunction-list" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth3-7" , qName ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ step[5] = 0 ;
+ step[6] = 0 ;
+// Parameter-list ok
+ break ;
+ }
+ else
+ step[depth]++ ;
+ step[5] = 0 ;
+ step[6] = 0 ;
+// NO PyFunction-list
+// return returnfalse( this , "depth3-7" , qName ) ;
+// break ;
+ case 8 :
+ if ( qName == "creation-date" ) {
+ SUPERV::SDate D ;
+ char Date[23] ;
+ strcpy( Date , fieldvalue[depth].c_str() ) ;
+ int i ;
+ for ( i = 0 ; i < strlen(Date) ; i++ ) {
+ if ( Date[i] == '/' || Date[i] == '-' || Date[i] == ':' )
+ Date[i] = ' ' ;
+ }
+// MESSAGE( "Date(" << Date << ")" );
+ int Day , Month , Year , Hour , Minute , Second ;
+ sscanf( Date ,"%d%d%d%d%d%d" , &Day ,
+ &Month ,
+ &Year ,
+ &Hour ,
+ &Minute ,
+ &Second ) ;
+ D.Day = Day ;
+ D.Month = Month ;
+ D.Year = Year ;
+ D.Hour = Hour ;
+ D.Minute = Minute ;
+ D.Second = Second ;
+ aNode.theFirstCreation = D ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-8" , qName ) ;
+ break ;
+ case 9 :
+ if ( qName == "lastmodification-date" ) {
+ SUPERV::SDate D ;
+ char Date[23] ;
+ strcpy( Date , fieldvalue[depth].c_str() ) ;
+ int i ;
+ for ( i = 0 ; i < strlen(Date) ; i++ ) {
+ if ( Date[i] == '/' || Date[i] == '-' || Date[i] == ':' )
+ Date[i] = ' ' ;
+ }
+// MESSAGE( "Date(" << Date << ")" );
+ int Day , Month , Year , Hour , Minute , Second ;
+ sscanf( Date ,"%d%d%d%d%d%d" , &Day ,
+ &Month ,
+ &Year ,
+ &Hour ,
+ &Minute ,
+ &Second ) ;
+ D.Day = Day ;
+ D.Month = Month ;
+ D.Year = Year ;
+ D.Hour = Hour ;
+ D.Minute = Minute ;
+ D.Second = Second ;
+ aNode.theLastModification = D ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-9" , qName ) ;
+ break ;
+ case 10 :
+ if ( qName == "editor-release" ) {
+ aNode.theEditorRelease = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-10" , qName ) ;
+ break ;
+ case 11 :
+ if ( qName == "author" ) {
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aNode.theAuthor = fieldvalue[depth].c_str() ;
+ else
+ aNode.theAuthor = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-11" , qName ) ;
+ break ;
+ case 12 :
+ if ( qName == "container" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-12" , qName ) ;
+// computer ok
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aNode.theContainer = fieldvalue[depth].c_str() ;
+ else
+ aNode.theContainer = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-12" , qName ) ;
+ break ;
+ case 13 :
+ if ( qName == "comment" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-13" , qName ) ;
+// comment ok
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aNode.theComment = fieldvalue[depth].c_str() ;
+ else
+ aNode.theComment = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-13" , qName ) ;
+ break ;
+ case 14 :
+ if ( qName == "x-position" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-14" , qName ) ;
+ sscanf( fieldvalue[depth].c_str() , "%d" , &aNode.theCoords.theX ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+// x-position ok
+ }
+ else
+ return returnfalse( this , "depth3-14" , qName ) ;
+ break ;
+ case 15 :
+ if ( qName == "y-position" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-15" , qName ) ;
+ sscanf( fieldvalue[depth].c_str() , "%d" , &aNode.theCoords.theY ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+// y-position ok
+ }
+ else
+ return returnfalse( this , "depth3-15" , qName ) ;
+ break ;
+ case 16 :
+ if ( qName == "fromnode-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-16" , qName ) ;
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aLink.FromNodeName = fieldvalue[depth].c_str() ;
+ else
+ aLink.FromNodeName = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ step[4] = 3 ;
+ }
+ else
+ return returnfalse( this , "depth3-16" , qName ) ;
+ break ;
+ case 17 :
+ if ( qName == "fromserviceparameter-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-17" , qName ) ;
+ aLink.FromServiceParameterName = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-17" , qName ) ;
+ break ;
+ case 18 :
+ if ( qName == "tonode-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-18" , qName ) ;
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aLink.ToNodeName = fieldvalue[depth].c_str() ;
+ else
+ aLink.ToNodeName = "" ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-18" , qName ) ;
+ break ;
+ case 19 :
+ if ( qName == "toserviceparameter-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth3-19" , qName ) ;
+ aLink.ToServiceParameterName = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth3-19" , qName ) ;
+ step[5] = 2 ;
+ break ;
+ case 20 :
+ if ( qName == "data-value" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth3-20" , qName ) ;
+// data-value ok
+ step[depth]++ ;
+// step[4] = 3 ;
+ break ;
+ }
+ else
+ step[depth]++ ;
+// return returnfalse( this , "depth3-20" , qName ) ;
+// break ;
+ case 21 :
+ if ( qName == "coord-list" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth3-21" , qName ) ;
+// coord-list ok
+ step[depth] = 14 ;
+ step[4] = 5 ;
+ }
+ else
+ return returnfalse( this , "depth3-21" , qName ) ;
+ break ;
+ default:
+ return returnfalse( this , "depth3-d" , qName ) ;
+ break ;
+ }
+ break ;
+ }
+
+
+ case 4 : {
+ switch ( step[depth] ) {
+ case 0 :
+ if ( qName == "service-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth4-0" , qName ) ;
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) )
+ aNode.theService.ServiceName = fieldvalue[depth].c_str() ;
+ else
+ aNode.theService.ServiceName = "" ;
+ aNode.theService.ServiceinParameter.length( 0 ) ;
+ aNode.theService.ServiceoutParameter.length( 0 ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth4-0" , qName ) ;
+ break ;
+ case 1 :
+ if ( qName == "inParameter-list" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth4-1" , qName ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ step[5] = 1 ;
+ step[6] = 2 ; // First outParameter
+// inParameterlist ok
+ }
+ else
+ return returnfalse( this , "depth4-1" , qName ) ;
+ break ;
+ case 2 :
+ if ( qName == "outParameter-list" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth4-2" , qName ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth] = 0 ;
+// outParameterlist ok
+ step[5] = 0 ;
+ step[6] = 0 ;
+ }
+ else
+ return returnfalse( this , "depth4-2" , qName ) ;
+ break ;
+ case 3 :
+ if ( qName == "value-type" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth4-3" , qName ) ;
+ int Kind ;
+ sscanf( fieldvalue[depth].c_str() , "%d" , &Kind ) ;
+// switch ( D.Value.type()->kind() ) {
+ aLink.aLinkValue = CORBA::Any() ;
+ switch ( Kind ) {
+ case CORBA::tk_string: {
+ aLink.aLinkValue <<= (char *) NULL ;
+ char * t;
+ aLink.aLinkValue >>= t;
+#if TRACE
+ MESSAGE( t << " (string)" );
+#endif
+ break;
+ }
+ case CORBA::tk_double: {
+ aLink.aLinkValue <<= (double ) 0. ;
+ double d;
+ aLink.aLinkValue >>= d;
+#if TRACE
+ MESSAGE( d << " (double)" );
+#endif
+ break;
+ }
+ case CORBA::tk_long: {
+ aLink.aLinkValue <<= (long ) 0 ;
+ long l;
+ aLink.aLinkValue >>= l;
+#if TRACE
+ MESSAGE( l << " (long)" );
+#endif
+ break;
+ }
+ case CORBA::tk_objref: {
+ aLink.aLinkValue.replace(CORBA::_tc_Object, NULL);
+#if TRACE
+ MESSAGE( " (object reference)" );
+#endif
+ break;
+ }
+ default:
+ MESSAGE( "(other ERROR)" );
+ }
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ break ;
+ }
+ else
+ step[depth]++ ;
+// return returnfalse( this , "depth4-3" , qName ) ;
+// break ;
+ case 4 :
+ if ( qName == "value" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth4-4" , qName ) ;
+ if ( !strcmp( fieldvalue[depth].c_str() , "?" ) ) {
+// aLink.aLinkValue.Value = fieldvalue[depth].c_str() ;
+ aLink.aLinkValue = CORBA::Any() ; // ???
+ }
+ else {
+ switch ( aLink.aLinkValue.type()->kind() ) {
+ case CORBA::tk_string: {
+ aLink.aLinkValue <<= fieldvalue[depth].c_str() ;
+ char * t;
+ aLink.aLinkValue >>= t;
+#if TRACE
+ MESSAGE( t << " (string)" );
+#endif
+ break;
+ }
+ case CORBA::tk_double: {
+ double d;
+ sscanf( fieldvalue[depth].c_str() , "%lf" , &d ) ;
+ aLink.aLinkValue <<= d;
+#if TRACE
+ MESSAGE( d << " (double)" );
+#endif
+ break;
+ }
+ case CORBA::tk_long: {
+ long l;
+ sscanf( fieldvalue[depth].c_str() , "%ld" , &l ) ;
+ aLink.aLinkValue <<= l;
+#if TRACE
+ MESSAGE( l << " (long)" );
+#endif
+ break;
+ }
+ case CORBA::tk_objref: {
+ CORBA::Object_ptr ObjRef ;
+ const char * IORObjRef = fieldvalue[depth].c_str() ;
+ ObjRef = _Orb->string_to_object( IORObjRef ) ;
+ aLink.aLinkValue <<= ObjRef;
+#if TRACE
+ MESSAGE( IORObjRef << "(object reference)" );
+#endif
+ break;
+ }
+ default: {
+ aLink.aLinkValue <<= _Orb->string_to_object( fieldvalue[depth].c_str() ) ;
+ MESSAGE( "(other ERROR)" );
+ }
+ }
+ }
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ step[5] = 2 ;
+ break ;
+ }
+ else
+ step[depth]++ ;
+// return returnfalse( this , "depth4-4" , qName ) ;
+// break ;
+ case 5 :
+ if ( qName == "coord" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth4-5" , qName ) ;
+ if ( VXSize == VX.size() ) {
+ VX.resize( VX.size() + 10 ) ;
+ VY.resize( VY.size() + 10 ) ;
+ }
+ VX[ VXSize ] = X ;
+ VY[ VXSize ] = Y ;
+ VXSize++ ;
+ step[5] = 2 ;
+ }
+ else
+ return returnfalse( this , "depth4-5" , qName ) ;
+ break ;
+ case 6 :
+ if ( qName == "inParameter" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth4-6" , qName ) ;
+ int size = aNode.theListOfParameters.size() ;
+ aNode.theListOfParameters.resize( size+1 ) ;
+ aNode.theListOfParameters[size].theInParameter = aParameter ;
+ step[depth]++ ;
+// One more aParameter input
+ }
+ else
+ return returnfalse( this , "depth4-6" , qName ) ;
+ break ;
+ case 7 :
+ if ( qName == "outParameter" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth4-7" , qName ) ;
+ int size = aNode.theListOfParameters.size() ;
+ aNode.theListOfParameters[size-1].theOutParameter = aParameter ;
+// One more aParameter output
+ step[4] = 6 ;
+ step[5] = 4 ;
+ }
+ else
+ return returnfalse( this , "depth4-7" , qName ) ;
+ break ;
+ case 8 :
+ if ( qName == "PyFunction" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth4-8" , qName ) ;
+// One more PyFunction
+ step[4] = 8 ;
+ step[5] = 8 ;
+ }
+ else
+ return returnfalse( this , "depth4-8" , qName ) ;
+ break ;
+ default:
+ return returnfalse( this , "depth4-d" , qName ) ;
+ break ;
+ }
+ break ;
+ }
+
+
+ case 5 : {
+ switch ( step[depth] ) {
+ case 0 :
+ if ( qName == "inParameter" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth5-0" , qName ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ int size = aNode.theService.ServiceinParameter.length() ;
+ aNode.theService.ServiceinParameter.length( size+1 ) ;
+ aNode.theService.ServiceinParameter[size] = aParameter ;
+// One more aParameter input
+ step[6] = 0 ; // Next one
+ }
+ else
+ return returnfalse( this , "depth5-0" , qName ) ;
+ break ;
+ case 1 :
+ if ( qName == "outParameter" ) {
+ if ( fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "depth5-1" , qName ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ int size = aNode.theService.ServiceoutParameter.length() ;
+ aNode.theService.ServiceoutParameter.length( size+1 ) ;
+ aNode.theService.ServiceoutParameter[size] = aParameter ;
+// One more aParameter Output
+ step[6] = 2 ; // Next one
+ }
+ else
+ return returnfalse( this , "depth5-1" , qName ) ;
+ break ;
+ case 2 :
+ if ( qName == "x" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-2" , qName ) ;
+ sscanf( fieldvalue[depth].c_str() , "%d" , &X ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth5-2" , qName ) ;
+ break ;
+ case 3 :
+ if ( qName == "y" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-3" , qName ) ;
+ sscanf( fieldvalue[depth].c_str() , "%d" , &Y ) ;
+ fieldvalue[depth] = NULLSTRING ;
+ }
+ else
+ return returnfalse( this , "depth5-3" , qName ) ;
+ break ;
+ case 4 :
+ if ( qName == "inParameter-type" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-4" , qName ) ;
+ aParameter.Parametertype = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth5-4" , qName ) ;
+ break ;
+ case 5 :
+ if ( qName == "inParameter-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-5" , qName ) ;
+ aParameter.Parametername = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth5-5" , qName ) ;
+ break ;
+ case 6 :
+ if ( qName == "outParameter-type" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-6" , qName ) ;
+ aParameter.Parametertype = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth5-6" , qName ) ;
+ break ;
+ case 7 :
+ if ( qName == "outParameter-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-7" , qName ) ;
+ aParameter.Parametername = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth5-7" , qName ) ;
+ break ;
+ case 8 :
+ if ( qName == "FuncName" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-8" , qName ) ;
+ int l = aNode.theListOfFuncName.size() ;
+ aNode.theListOfFuncName.resize( l+1 ) ;
+ aNode.theListOfFuncName[ l ] = fieldvalue[depth].c_str() ;
+ aNode.theListOfPythonFunctions.resize( l+1 ) ;
+ aNode.theListOfPythonFunctions[ l ] = new SUPERV::ListOfStrings() ;
+#if TRACE
+ MESSAGE( " ==========theListOfFuncName/theListOfPythonFunctions size "
+ << l+1 )
+#endif
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth5-8" , qName ) ;
+ break ;
+ case 9 :
+ if ( qName == "PyFunc" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth5-9" , qName ) ;
+ int l = aNode.theListOfPythonFunctions.size() - 1 ;
+ SUPERV::ListOfStrings aPythonFunction = *aNode.theListOfPythonFunctions[ l ] ;
+ int ll = aPythonFunction.length() ;
+ aPythonFunction.length( ll+1 ) ;
+ if ( strcmp( fieldvalue[depth].c_str() , "?" ) ) {
+ aPythonFunction[ ll ] = fieldvalue[depth].c_str() ;
+ }
+ else {
+ aPythonFunction[ ll ] = NULLSTRING ;
+ }
+ if ( ll ) {
+ aNode.theListOfPythonFunctions.resize( l ) ;
+ aNode.theListOfPythonFunctions.resize( l+1 ) ;
+ }
+ aNode.theListOfPythonFunctions[ l ] = new SUPERV::ListOfStrings( aPythonFunction ) ;
+#if TRACE
+ MESSAGE( " ==========theListOfPythonFunctions[" << l << "] size " << ll+1
+ << " [" << ll << "] = " << aPythonFunction[ ll ] )
+#endif
+ fieldvalue[depth] = NULLSTRING ;
+// step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth5-9" , qName ) ;
+ break ;
+ default:
+ return returnfalse( this , "depth5-d" , qName ) ;
+ break ;
+ }
+ break ;
+ }
+
+ case 6 : {
+ switch ( step[depth] ) {
+ case 0 :
+ if ( qName == "inParameter-type" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth6-0" , qName ) ;
+ aParameter.Parametertype = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth6-0" , qName ) ;
+ break ;
+ case 1 :
+ if ( qName == "inParameter-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth6-1" , qName ) ;
+ aParameter.Parametername = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth6-1" , qName ) ;
+ break ;
+ case 2 :
+ if ( qName == "outParameter-type" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth6-2" , qName ) ;
+ aParameter.Parametertype = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth6-2" , qName ) ;
+ break ;
+ case 3 :
+ if ( qName == "outParameter-name" ) {
+ if ( fieldvalue[depth] == NULLSTRING )
+ return returnfalse( this , "depth6-3" , qName ) ;
+ aParameter.Parametername = fieldvalue[depth].c_str() ;
+ fieldvalue[depth] = NULLSTRING ;
+ step[depth]++ ;
+ }
+ else
+ return returnfalse( this , "depth6-3" , qName ) ;
+ break ;
+ default:
+ return returnfalse( this , "depth6-d" , qName ) ;
+ break ;
+ }
+ break ;
+ }
+ }
+
+ return TRUE;
+}
+
+
+bool GraphBase::XmlHandler::characters( const QString& ch ) {
+ // we are not interested in whitespaces
+ QString ch_simplified = ch.simplifyWhiteSpace();
+ if ( ch_simplified.isEmpty() ) {
+ return TRUE;
+ }
+ depth -= 1 ;
+#if TRACE
+ MESSAGE( "characters step[" << depth << "]=" << step[depth]
+ << " ch " << ch << " fieldvalue_must_be_NULL " << fieldvalue[depth] )
+#endif
+ if ( depth < 0 || fieldvalue[depth] != NULLSTRING )
+ return returnfalse( this , "characters " , ch ) ;
+
+ fieldvalue[depth] = ch ;
+ return TRUE;
+}
+
+
+QString GraphBase::XmlHandler::errorString() {
+ cout << "the document is not in the quote file format" << endl ;
+ return "the document is not in the quote file format";
+}
+
+
+bool GraphBase::XmlHandler::fatalError( const QXmlParseException& exception ) {
+ errorProt += QString( "fatal parsing error: %1 in line %2, column %3\n" )
+ .arg( exception.message() )
+ .arg( exception.lineNumber() )
+ .arg( exception.columnNumber() );
+ cout << "GraphBase::XmlHandler::fatalError " << errorProt.latin1() << endl ;
+ return QXmlDefaultHandler::fatalError( exception );
+}
+
+#if 0
+SALOME_SuperVision::Date GraphBase::XmlHandler::StringToDate( QString& myStrDate) const
+{
+ SALOME_SuperVision::Date aDate;
+ QString qstrDate(myStrDate);
+ QString qstrTemp;
+
+ // Date
+ int iPos = qstrDate.find("/");
+ qstrTemp = qstrDate.left(iPos).stripWhiteSpace();
+ aDate.Day = qstrTemp.toShort();
+ qstrDate = qstrDate.right(qstrDate.length()-iPos);
+ iPos = qstrDate.find("/");
+ qstrTemp = qstrDate.left(iPos).stripWhiteSpace();
+ aDate.Month = qstrTemp.toShort();
+ qstrDate = qstrDate.right(qstrDate.length()-iPos);
+ iPos = qstrDate.find(" ");
+ qstrTemp = qstrDate.left(iPos).stripWhiteSpace();
+ aDate.Year = qstrTemp.toShort();
+
+ // Time
+ qstrDate = qstrDate.right(qstrDate.length()-iPos);
+ iPos = qstrDate.find(":");
+ qstrTemp = qstrDate.left(iPos).stripWhiteSpace();
+ aDate.Hour = qstrTemp.toShort();
+ qstrDate = qstrDate.right(qstrDate.length()-iPos);
+ iPos = qstrDate.find(":");
+ qstrTemp = qstrDate.left(iPos).stripWhiteSpace();
+ aDate.Minute = qstrTemp.toShort();
+ qstrDate = qstrDate.right(qstrDate.length()-iPos).stripWhiteSpace();
+ aDate.Second = qstrDate.toShort();
+
+ return aDate;
+}
+#endif
+
+
--- /dev/null
+//=============================================================================
+// File : GraphBase_XmlHandler.hxx
+// Created : Thu Jun 14 14:02:23 2001
+// Author : Arnaud RES
+// Project : SALOME
+// Copyright : CEA
+// $Header$
+
+#define INCLUDE_MENUITEM_DEF
+#define QT_ALTERNATE_QTSMANIP
+
+#include <qxml.h>
+#include <qstringlist.h>
+#include <qaction.h>
+#include <qlist.h>
+
+//#include <SALOMEconfig.h>
+//#include CORBA_CLIENT_HEADER(SALOME_SuperVision)
+
+#include "DataFlowBase_Graph.hxx"
+
+#define maxlevel 7
+
+namespace GraphBase {
+
+ class XmlHandler : public QXmlDefaultHandler {
+
+ CORBA::ORB_ptr _Orb ;
+ bool dataflowxml ;
+ string fieldname[maxlevel] ;
+ string fieldvalue[maxlevel] ;
+ long step[maxlevel] ;
+ long depth ;
+ bool constructor ;
+ GraphBase::SNode aNode ;
+ SALOME_ModuleCatalog::ServicesParameter aParameter ;
+ SUPERV::ListOfStrings aPythonFunction ;
+ GraphBase::SLink aLink ;
+// SALOME_SuperVisionBase::ServicesParameterValue aLinkValue ;
+ CORBA::Any aLinkValue ;
+ int X ;
+ int Y ;
+ int VXSize ;
+ vector<int > VX ;
+ vector<int > VY ;
+ QString errorProt;
+
+ GraphBase::SGraph aDataFlow ;
+
+ public:
+
+ XmlHandler();
+ XmlHandler( CORBA::ORB_ptr Orb , const bool aConstructor );
+ virtual ~XmlHandler();
+
+ GraphBase::SGraph & GetDataFlow() {
+ return aDataFlow ; } ;
+
+ // return the error protocol if parsing failed
+ QString errorProtocol();
+
+ // overloaded handler functions
+ bool startDocument();
+ bool startElement( const QString& namespaceURI, const QString& localName,
+ const QString& qName, const QXmlAttributes& atts );
+ bool endElement( const QString& namespaceURI, const QString& localName,
+ const QString& qName );
+ bool characters( const QString& ch );
+
+ QString errorString();
+
+ bool fatalError (const QXmlParseException& exception);
+
+ SUPERV::SDate StringToDate( QString& qstrDate) const;
+
+ const long getdepth() const { return depth ; } ;
+ const string getfieldname( const long adepth ) const { return fieldname[adepth] ; } ;
+ const string getfieldvalue( const long adepth ) const { return fieldvalue[adepth] ; } ;
+
+ };
+
+} ;
+
--- /dev/null
+#==============================================================================
+# File : Makefile.in
+# Created : aug 21 2001
+# Author : , CEA
+# Project : SALOME
+# Copyright : CEA 2001
+# $Header:
+#==============================================================================
+
+# source path
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl
+
+
+@COMMENCE@
+
+EXPORT_HEADERS = \
+ DataFlowBase_Base.hxx \
+ DataFlowBase_ServicesParameter.hxx \
+ DataFlowBase_Port.hxx \
+ DataFlowBase_DataPort.hxx \
+ DataFlowBase_InPort.hxx \
+ DataFlowBase_OutPort.hxx \
+ DataFlowBase_Service.hxx \
+ DataFlowBase_PortsOfNode.hxx \
+ DataFlowBase_ComputingNode.hxx \
+ DataFlowBase_FactoryNode.hxx \
+ DataFlowBase_InLineNode.hxx \
+ DataFlowBase_GOTONode.hxx \
+ DataFlowBase_LoopNode.hxx \
+ DataFlowBase_EndOfLoopNode.hxx \
+ DataFlowBase_SwitchNode.hxx \
+ DataFlowBase_EndOfSwitchNode.hxx \
+ DataFlowBase_DataNode.hxx \
+ DataFlowBase_XmlHandler.hxx \
+ DataFlowBase_Graph.hxx
+
+# Libraries targets
+LIB = libSalomeSuperVisionBase.la
+LIB_SRC = \
+ DataFlowBase_Base.cxx \
+ DataFlowBase_Port.cxx \
+ DataFlowBase_DataPort.cxx \
+ DataFlowBase_InPort.cxx \
+ DataFlowBase_OutPort.cxx \
+ DataFlowBase_Service.cxx \
+ DataFlowBase_PortsOfNode.cxx \
+ DataFlowBase_ComputingNode.cxx \
+ DataFlowBase_FactoryNode.cxx \
+ DataFlowBase_InLineNode.cxx \
+ DataFlowBase_GOTONode.cxx \
+ DataFlowBase_LoopNode.cxx \
+ DataFlowBase_EndOfLoopNode.cxx \
+ DataFlowBase_SwitchNode.cxx \
+ DataFlowBase_EndOfSwitchNode.cxx \
+ DataFlowBase_DataNode.cxx \
+ DataFlowBase_XmlHandler.cxx \
+ DataFlowBase_LoadXml.cxx \
+ DataFlowBase_Graph.cxx
+
+LIB_CLIENT_IDL = Logger.idl \
+ SALOME_ModuleCatalog.idl \
+ SALOME_Component.idl \
+ SALOMEDS.idl \
+ SUPERV.idl \
+ SALOMEDS_Attributes.idl \
+ SALOME_Exception.idl
+# Executables targets
+BIN = SuperVisionBase_CheckOfUndefined
+BIN_SRC =
+BIN_SERVER_IDL =
+
+CPPFLAGS+= $(PYTHON_INCLUDES) $(QT_MT_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) \
+ -I${KERNEL_ROOT_DIR}/include/salome
+CXXFLAGS= -g -D_DEBUG_ -D__x86__ -D__linux__ -ftemplate-depth-42 \
+ -I${KERNEL_ROOT_DIR}/include/salome
+#LDFLAGS= -L../../../lib $(CORBA_LIBS) -lomniORB3 -ltcpwrapGK -lomniDynamic3 -lomnithread -lCOS3 -lCOSDynamic3 -lSalomeNS -lSalomeLifeCycleCORBA -lOpUtil -lSalomeLoggerServer -lc $(PYTHON_LIBS) $(QT_MT_LIBS) $(OGL_LIBS)
+LDFLAGS= $(CORBA_LIBS) -lomniORB3 -ltcpwrapGK -lomniDynamic3 -lomnithread -lCOS3 \
+ -lCOSDynamic3 -lSalomeNS -lSalomeLifeCycleCORBA -lOpUtil -lSalomeLoggerServer \
+ -lc $(QT_MT_LIBS) -L${KERNEL_ROOT_DIR}/lib/salome
+
+LIBS += -L../../lib/salome
+
+@CONCLUDE@
+
+
--- /dev/null
+using namespace std;
+#include <iostream>
+#include <fstream>
+#include <unistd.h>
+
+#include "DataFlowBase_Base.hxx"
+#include "DataFlowBase_Graph.hxx"
+
+int main(int argc, char **argv) {
+// debugFile("TestSuperVision.log");
+ return 0;
+}
+
--- /dev/null
+##==============================================================================
+# File : Makefile.in
+# Created : aug 29 16:50:13 CEA 2001
+# Author : Arnaud RES, OPENCASCADE
+# Project : SALOME
+# Copyright : CEA 2001
+# $Header:
+#==============================================================================
+
+# source path
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+
+
+@COMMENCE@
+
+# exported header files
+EXPORT_HEADERS = SUPERVGUI.h
+
+# .po files to transform in .qm
+PO_FILES = \
+ SUPERVGUI_icons.po \
+ SUPERVGUI_msg_en.po \
+ SUPERVGUI_msg_fr.po
+
+# Libraries targets
+
+LIB = libSUPERVGUI.la
+
+LIB_SRC = SUPERVGUI.cxx \
+ SUPERVGUI_Service.cxx \
+ SUPERVGUI_Python.cxx \
+ SUPERVGUI_Information.cxx \
+ SUPERVGUI_Notification.cxx \
+ SUPERVGUI_Main.cxx \
+ SUPERVGUI_View.cxx \
+ SUPERVGUI_Graph.cxx \
+ SUPERVGUI_Array.cxx \
+ SUPERVGUI_Node.cxx \
+ SUPERVGUI_GraphNode.cxx \
+ SUPERVGUI_ComputeNode.cxx \
+ SUPERVGUI_ControlNode.cxx \
+ SUPERVGUI_Port.cxx \
+ SUPERVGUI_BrowseNodeDlg.cxx \
+ SUPERVGUI_Link.cxx \
+ SUPERVGUI_CtrlLink.cxx \
+ SUPERVGUI_Label.cxx
+
+LIB_MOC = SUPERVGUI.h \
+ SUPERVGUI_Service.h \
+ SUPERVGUI_Python.h \
+ SUPERVGUI_Information.h \
+ SUPERVGUI_Notification.h \
+ SUPERVGUI_Main.h \
+ SUPERVGUI_View.h \
+ SUPERVGUI_Graph.h \
+ SUPERVGUI_Array.h \
+ SUPERVGUI_Node.h \
+ SUPERVGUI_GraphNode.h \
+ SUPERVGUI_ComputeNode.h \
+ SUPERVGUI_ControlNode.h \
+ SUPERVGUI_Port.h \
+ SUPERVGUI_BrowseNodeDlg.h \
+ SUPERVGUI_Link.h \
+ SUPERVGUI_Label.h
+
+LIB_CLIENT_IDL = SALOMEDS.idl \
+ SALOMEDS_Attributes.idl \
+ SALOME_ModuleCatalog.idl \
+ SALOME_Component.idl \
+ SUPERV.idl \
+ SALOME_Exception.idl
+
+LIB_SERVER_IDL =
+
+CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) \
+ -ftemplate-depth-42 -I${KERNEL_ROOT_DIR}/include/salome
+LDFLAGS+=$(QT_MT_LIBS) $(OCC_LIBS) $(VTK_LIBS) $(OGL_LIBS) \
+ -lSalomeGUI -lSalomeNS -lqsplitterP \
+ -lSalomeLifeCycleCORBA -lSalomeNotification -lSUPERVGraph \
+ -L${KERNEL_ROOT_DIR}/lib/salome
+
+LIBS+= $(PYTHON_LIBS)
+
+@CONCLUDE@
--- /dev/null
+using namespace std;
+// File : SUPERVGUI.cxx
+// Created : 31 octobre 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI.h"
+
+#include "QAD_Resource.h"
+#include "QAD_FileDlg.h"
+#include "QAD_Application.h"
+#include "QAD_StudyFrame.h"
+#include "QAD_RightFrame.h"
+#include "QAD_LeftFrame.h"
+#include "QAD_ViewFrame.h"
+#include "QAD_ObjectBrowser.h"
+#include "QAD_ObjectBrowserItem.h"
+#include "SALOME_Selection.h"
+#include "SALOMEGUI_NameDlg.h"
+#include "Utils_ORB_INIT.hxx"
+#include "SALOME_ListIteratorOfListIO.hxx"
+#include "SALOME_InteractiveObject.hxx"
+#include <qapplication.h>
+#include "SALOMEGUI_ImportOperation.h"
+
+#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
+
+
+int SUPERVGUI::factory = 0;
+SUPERVGUI Supervision;
+
+
+SUPERVGUI::SUPERVGUI(): QObject(),
+ desktop(0),
+ study(0),
+ engine(0),
+ browser(0)
+ //info(0)
+{
+ Trace("SUPERVGUI::SUPERVGUI")
+ if (factory==0) {
+ factory = 1;
+ MESSAGE("SUPERVGUI Info : factory build");
+ } else {
+ MESSAGE("SUPERVGUI Error : another call to factory constructor");
+ };
+}
+
+SUPERVGUI::~SUPERVGUI() {
+ Trace("SUPERVGUI::~SUPERVGUI")
+ if (factory==1) {
+ factory = 0;
+ //info->close();
+ browser->close();
+ MESSAGE("SUPERVGUI Info : factory destroy");
+ } else {
+ MESSAGE("SUPERVGUI Error : another call to factory destructor");
+ };
+}
+
+void SUPERVGUI::init(QAD_Desktop* parent) {
+ Trace("SUPERVGUI::init")
+ if (desktop==0) {
+ desktop = parent;
+ study = desktop->getActiveStudy();
+ SALOME_NamingService* namingService = desktop->getNameService();
+ loadEngine(namingService);
+ browser = new SUPERVGUI_Service(namingService);
+ //info = new SUPERVGUI_Information();
+ cursor = desktop->cursor();
+ connect(desktop->getMainFrame(), SIGNAL(windowActivated(QWidget*)), this, SLOT(setMain(QWidget*)));
+ };
+}
+
+
+QAD_StudyFrame* SUPERVGUI::createGraph() {
+ QAD_StudyFrame* aStudyFrame = study->newWindow3d(study->getNextStudyFrameName(),
+ VIEW_GRAPHSUPERV, false);
+ if (aStudyFrame) {
+ connect(aStudyFrame,
+ SIGNAL(sfBeforeStudyFrameClosing(QAD_StudyFrame*)),
+ &Supervision,
+ SLOT(onGraphClosed(QAD_StudyFrame*)));
+ }
+ return aStudyFrame;
+}
+
+
+
+void SUPERVGUI::loadEngine(SALOME_NamingService* namingService) {
+ Trace("SUPERVGUI::loadEngine")
+ SALOME_LifeCycleCORBA LCC(namingService);
+ Engines::Component_var objComponent = LCC.FindOrLoad_Component("SuperVisionContainer", "SUPERV");
+ if (CORBA::is_nil(objComponent)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_LOAD_SUPERV"));
+ return;
+ };
+
+ SUPERV::SuperG_var aSuperVisionComponent;
+ aSuperVisionComponent = SUPERV::SuperG::_narrow(objComponent);
+ if (CORBA::is_nil(aSuperVisionComponent)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_NARROW_SUPERV"));
+ return;
+ };
+
+ engine = new SUPERV::SuperG_var;
+ *engine = aSuperVisionComponent;
+}
+/*
+bool SUPERVGUI::information(SUPERV_CNode node, bool isReadOnly) {
+ Trace("SUPERVGUI::information")
+ return(info->run(node, isReadOnly));
+}
+*/
+void SUPERVGUI::putInfo(const char* mess) {
+ Trace("SUPERVGUI::putInfo")
+ desktop->putInfo(mess);
+}
+
+QAD_Desktop* SUPERVGUI::getDesktop() {
+ Trace("SUPERVGUI::getDesktop")
+ return(desktop);
+}
+
+SUPERV_Engine SUPERVGUI::getEngine() {
+ Trace("SUPERVGUI::getEngine")
+ return(engine);
+}
+
+SUPERVGUI_Service* SUPERVGUI::getBrowser() {
+ Trace("SUPERVGUI::getBrowser")
+ return(browser);
+}
+
+QCursor SUPERVGUI::getCursor() {
+ Trace("SUPERVGUI::getCursor")
+ return(cursor);
+}
+
+SUPERVGUI_Main* SUPERVGUI::getMain() {
+ Trace("SUPERVGUI::getMain")
+ return main;
+}
+
+
+void SUPERVGUI::registerGraph(QString theName, SUPERVGUI_Main* theGraph){
+ theGraph->setHashCode(theName);
+ myGraphList.append(theGraph);
+}
+
+
+void SUPERVGUI::unregisterGraph(SUPERVGUI_Main* theGraph) {
+ SUPERVGUI_Main* aMain;
+ for (aMain = myGraphList.first(); aMain; aMain = myGraphList.next()) {
+ if (aMain == theGraph)
+ myGraphList.remove(aMain);
+ }
+}
+
+
+bool SUPERVGUI::isContains(QAD_Study* theStudy, const QString theKey) {
+ SUPERVGUI_Main* aMain;
+ for (aMain = myGraphList.first(); aMain; aMain = myGraphList.next()) {
+ if ((aMain->getStudy() == theStudy) && (aMain->getHashCode() == theKey))
+ return true;
+ }
+ return false;
+}
+
+
+void SUPERVGUI::onGraphClosed(QAD_StudyFrame* theStudyFrame) {
+ QAD_ViewFrame* viewFrame = theStudyFrame->getRightFrame()->getViewFrame();
+ if(SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(viewFrame)){
+ disconnect(theStudyFrame, 0 , this, 0);
+ SUPERVGraph_View* view = supervFrame->getViewWidget();
+ SUPERVGUI_Main* aGraph = dynamic_cast<SUPERVGUI_Main*>(view);
+ if (aGraph) {
+ unregisterGraph(aGraph);
+ }
+ }
+}
+
+void SUPERVGUI::setMain(QWidget* w) {
+ main = 0;
+ QAD_StudyFrame* aStudyFrame = dynamic_cast<QAD_StudyFrame*>(w);
+ if (!aStudyFrame) return;
+
+ study = aStudyFrame->getStudy();
+ if (!study) return;
+
+ QAD_ViewFrame* viewFrame = aStudyFrame->getRightFrame()->getViewFrame();
+ if(SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(viewFrame)){
+ SUPERVGraph_View* view = supervFrame->getViewWidget();
+ if (view)
+ main = dynamic_cast<SUPERVGUI_Main*>(view);
+ }
+ Trace("SUPERVGUI::setMain - main: "<<main);
+}
+
+
+void SUPERVGUI::importDataflow() {
+ Trace("SUPERVGUI::importDataflow");
+ QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
+ "",
+ "*.xml",
+ tr("MSG_IMPORT"),
+ true);
+
+ if (!f.isEmpty()) {
+ if (isContains(study, f)) {
+ if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
+ tr("MSG_GRAPH_DISPLAYED").arg(f),
+ QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
+ return;
+ }
+
+ SUPERV_Graph aGraph = (*Supervision.getEngine())->GraphE(f);
+ //QFileInfo aFile(f);
+ //aGraph->SetName(aFile.baseName());
+ if (SUPERV_isNull(aGraph)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_FILE").arg(f));
+ return;
+ }
+
+ QAD_StudyFrame* aStudyFrame = createGraph();
+ SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
+ (aStudyFrame->getRightFrame()->getViewFrame());
+ if(aViewFrame) {
+ main = new SUPERVGUI_Main(aViewFrame, desktop, aGraph);
+ registerGraph(f, main);
+ study->showFrame(aStudyFrame);
+ }
+ }
+}
+
+void SUPERVGUI::displayDataflow() {
+ Trace("SUPERVGUI::displayDataflow");
+ QAD_ObjectBrowser* aBrowser = ((QAD_StudyFrame*)(desktop->getMainFrame()->activeWindow()))->getLeftFrame()->getObjectBrowser();
+ SUPERV_Graph aDataFlow;
+ QString aIORName;
+
+ QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)(aBrowser->getListView()->currentItem());
+ SALOMEDS::SObject_var aObj = desktop->getActiveStudy()->getStudyDocument()->FindObjectID(item->getEntry().latin1());
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (aObj->FindAttribute(anAttr, "AttributeIOR")) {
+ SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ Standard_CString ior = anIOR->Value();
+ aIORName = ior;
+ if (isContains(study, aIORName)) {
+ if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
+ tr("MSG_GRAPH_DISPLAYED").arg(""),
+ QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
+ return;
+ }
+ aDataFlow = (*Supervision.getEngine())->getGraph(ior);
+ if (SUPERV_isNull(aDataFlow)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_ACCESS_BAD_IOR"));
+ return;
+ }
+ }
+ QAD_StudyFrame* aStudyFrame = createGraph();
+ SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
+ (aStudyFrame->getRightFrame()->getViewFrame());
+ if(aViewFrame) {
+ main = new SUPERVGUI_Main(aViewFrame, desktop, aDataFlow);
+ main->setAsFromStudy(true);
+ registerGraph(aIORName, main);
+ study->showFrame(aStudyFrame);
+ }
+}
+
+
+void SUPERVGUI::renameDataflow() {
+ SALOME_Selection* Sel = SALOME_Selection::Selection( study->getSelection() );
+ SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
+ for ( ; It.More(); It.Next() ) {
+ Handle(SALOME_InteractiveObject) IObject = It.Value();
+
+ SALOMEDS::Study_var aStudy = study->getStudyDocument();
+ SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeName_var aName;
+ if ( !obj->_is_nil() ) {
+ if (obj->FindAttribute(anAttr, "AttributeName")) {
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ QString nm = QString( aName->Value() );
+ bool ok = FALSE;
+ nm = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), nm );
+ if ( !nm.isEmpty() ) {
+ QApplication::setOverrideCursor( Qt::waitCursor );
+ study->renameIObject( IObject, nm );
+ QApplication::restoreOverrideCursor();
+ }
+ }
+ }
+ }
+}
+
+
+void SUPERVGUI::exportDataflow() {
+ Trace("SUPERVGUI::exportDataflow")
+ if (main==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
+ } else {
+ QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
+ "",
+ "*.xml",
+ tr("TTL_EXPORT_DATAFLOW"),
+ false);
+ if (!f.isEmpty()) {
+ if (main->exportDataflow(f)) {
+ unregisterGraph(main);
+ registerGraph(f, main);
+ }
+ }
+ }
+}
+
+void SUPERVGUI::newDataflow() {
+ Trace("SUPERVGUI::editDataflow");
+ QAD_StudyFrame* aStudyFrame = createGraph();
+ SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
+ (aStudyFrame->getRightFrame()->getViewFrame());
+ if(aViewFrame){
+ main = new SUPERVGUI_Main(aViewFrame, desktop, false);
+ main->addNode();
+ study->showFrame(aStudyFrame);
+ }
+}
+
+void SUPERVGUI::modifyDataflow() {
+ Trace("SUPERVGUI::modifyDataflow")
+ QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
+ "",
+ "*.xml",
+ tr("Modify Dataflow"),
+ true);
+ if (!f.isEmpty()){
+ if (isContains(study, f)) {
+ if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
+ tr("MSG_GRAPH_DISPLAYED").arg(f),
+ QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
+ return;
+ }
+
+ SUPERV_Graph aGraph = (*Supervision.getEngine())->Graph(f);
+ //QFile aFile(f);
+ //aGraph->SetName(aFile.name());
+ if (SUPERV_isNull(aGraph)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_FILE").arg(f));
+ return;
+ }
+
+ QAD_StudyFrame* aStudyFrame = createGraph();
+ SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
+ (aStudyFrame->getRightFrame()->getViewFrame());
+ if(aViewFrame) {
+ main = new SUPERVGUI_Main(aViewFrame, desktop, aGraph);
+ registerGraph(f, main);
+ study->showFrame(aStudyFrame);
+ }
+ }
+}
+
+void SUPERVGUI::reloadDataflow() {
+ Trace("SUPERVGUI::reloadDataflow")
+ if (main==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RELOAD"));
+ } else {
+ main->sync();
+ };
+}
+
+void SUPERVGUI::runDataflow() {
+ Trace("SUPERVGUI::runDataflow")
+ if (main==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
+ } else {
+ main->run();
+ };
+}
+
+void SUPERVGUI::stepByStep() {
+ Trace("SUPERVGUI::stepByStep")
+ if (main==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
+ } else {
+ main->startExecute();
+ }
+}
+
+void SUPERVGUI::killDataflow() {
+ Trace("SUPERVGUI::killDataflow")
+ if (main==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_KILL"));
+ } else {
+ main->kill();
+ };
+}
+
+void SUPERVGUI::suspendResumeDataflow() {
+ Trace("SUPERVGUI::suspendResumeDataflow")
+ if (main==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_SUSPEND"));
+ } else {
+ main->suspendResume();
+ };
+}
+
+void SUPERVGUI::showComponents() {
+ Trace("SUPERVGUI::showComponents");
+ if (main==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_ADD"));
+ } else {
+ if (main->isEditable())
+ main->addNode();
+ else
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOTEDITABLE"));
+ }
+}
+
+void SUPERVGUI::customPopup(QPopupMenu* popup) {
+ Trace("SUPERVGUI::customPopup");
+ if(popup->count() > 3) {
+ // Temporary code: is to be deleted soon
+ popup->removeItem(QAD_Display_Popup_ID);
+ popup->removeItem(QAD_DisplayOnly_Popup_ID);
+ popup->removeItem(QAD_Erase_Popup_ID);
+ int id = popup->idAt(popup->count() - 1);
+ if (id < 0 && id != -1) popup->removeItem(id); // separator
+ // Temporary code end
+ }
+ SALOME_Selection* Sel = SALOME_Selection::Selection(study->getSelection() );
+ if ((Sel==NULL) || (Sel->IObjectCount() == 0)) return;
+
+ Handle(SALOME_InteractiveObject) anIObj = Sel->firstIObject();
+
+ // insert SUPERV-specific popup items here
+
+ bool isDataflow, ownObj;
+ whatIsSelected(anIObj, ownObj, isDataflow);
+
+ if (isDataflow) {
+ popup->insertItem(tr( "MSG_RENAME" ), this, SLOT(renameDataflow()));
+ popup->insertItem("Display", this, SLOT(displayDataflow()));
+ popup->insertSeparator();
+ }
+ if (ownObj)
+ popup->insertItem(tr("MSG_DELETE"), this, SLOT(deleteObject()));
+}
+
+
+
+/** Returns:
+ theIsOwner = true if Selected object belongs to Suipervision.
+ theIsDataflow = true if Selected object is Dataflow
+*/
+void SUPERVGUI::whatIsSelected(const Handle(SALOME_InteractiveObject)& theObj, bool& theIsOwner, bool& theIsDataflow) {
+ theIsOwner = false;
+ theIsDataflow = false;
+
+ if (theObj.IsNull()) return;
+
+ SALOMEDS::Study_var aStudy = study->getStudyDocument();
+ SALOMEDS::SObject_var obj = aStudy->FindObjectID( theObj->getEntry() );
+
+ if ( !obj->_is_nil() ) {
+ SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
+ if ( !comp->_is_nil() ) {
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeName_var aName;
+ if (comp->FindAttribute(anAttr, "AttributeName")) {
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ QString compName(aName->Value());
+ if (compName.compare(STUDY_SUPERVISION) == 0) {
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (obj->FindAttribute(anAttr, "AttributeIOR")) {
+ SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ SUPERV_Graph aDataFlow = (*Supervision.getEngine())->getGraph(anIOR->Value());
+ if (!SUPERV_isNull(aDataFlow))
+ theIsDataflow = true;
+ }
+ CORBA::String_var anObjectID = obj->GetID();
+ CORBA::String_var aComponentID = comp->GetID();
+ if (strcmp(anObjectID, aComponentID)) theIsOwner = true;
+ }
+ }
+ }
+ }
+}
+
+
+void SUPERVGUI::deleteObject() {
+ SALOME_Selection* Sel = SALOME_Selection::Selection(study->getSelection() );
+ if ((Sel==NULL) || (Sel->IObjectCount() == 0)) return;
+
+ Handle(SALOME_InteractiveObject) anIObj = Sel->firstIObject();
+ bool aIsOwner, aIsDataflow;
+ whatIsSelected(anIObj, aIsOwner, aIsDataflow);
+
+ if (!aIsOwner) return;
+
+ if (QMessageBox::warning(QAD_Application::getDesktop(),
+ tr("WARNING"),
+ tr("MSG_ASK_DELETE"),
+ QMessageBox::No,
+ QMessageBox::Yes) == QMessageBox::No)
+ return;
+
+ SALOMEDS::Study_var aStudy = study->getStudyDocument();
+ SALOMEDS::SObject_var aObj = aStudy->FindObjectID( anIObj->getEntry() );
+ if (!aObj->_is_nil()) {
+ if (aIsDataflow) {
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (aObj->FindAttribute(anAttr, "AttributeIOR")) {
+ SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ QString ior = anIOR->Value();
+
+ SUPERVGUI_Main* aMain;
+ for (aMain = myGraphList.first(); aMain; aMain = myGraphList.next()) {
+ if ((aMain->getStudy() == study) && (aMain->getHashCode() == ior)) {
+ aMain->setAsFromStudy(false);
+ break;
+ }
+ }
+ }
+ }
+ QAD_Operation* op = new SALOMEGUI_ImportOperation( study );
+ SALOMEDS::StudyBuilder_var aBuilder = aStudy->NewBuilder();
+ op->start();
+ aBuilder->RemoveObjectWithChildren(aObj);
+ op->finish();
+ }
+ Sel->ClearIObjects() ;
+}
+
+
+
+void SUPERVGUI::activeStudyChanged() {
+ Trace("SUPERVGUI::activeStudyChanged");
+ study = desktop->getActiveStudy();
+}
+
+extern "C" bool OnGUIEvent(int command, QAD_Desktop* parent) {
+ Supervision.init(parent);
+ switch (command) {
+ case 301:
+ Supervision.importDataflow();
+ return(false);
+
+ case 302:
+ Supervision.exportDataflow();
+ return(false);
+
+ case 303:
+ Supervision.newDataflow();
+ return(false);
+
+ case 304:
+ Supervision.modifyDataflow();
+ return(false);
+
+ case 305:
+ Supervision.reloadDataflow();
+ return(false);
+
+ case 306:
+ Supervision.runDataflow();
+ return(false);
+
+ case 307:
+ Supervision.killDataflow();
+ return(false);
+
+ case 308:
+ Supervision.suspendResumeDataflow();
+ return(false);
+
+ case 309:
+ Supervision.showComponents();
+ return(false);
+
+ case 310:
+ Supervision.stepByStep();
+ return(false);
+
+ default:
+ QMessageBox::warning(QAD_Application::getDesktop(), "Supervision Error", "Unknown Command From Salome");
+ return(false);
+
+ }
+}
+
+extern "C" bool OnKeyPress(QKeyEvent* e, QAD_Desktop* parent, SUPERVGUI_Main* s) {
+ return(false);
+}
+
+extern "C" bool OnMousePress(QMouseEvent* e, QAD_Desktop* parent, SUPERVGUI_Main* s) {
+ return(false);
+}
+
+extern "C" bool OnMouseMove(QMouseEvent* e, QAD_Desktop* parent, SUPERVGUI_Main* s) {
+ return(false);
+}
+
+extern "C" bool OnPopupGUIEvent(int theCommandID, QAD_Desktop* parent) {
+ return(false);
+}
+
+extern "C" bool SetSettings(QAD_Desktop* parent) {
+ Trace("extern SUPERVGUI::SetSettings")
+ Supervision.init(parent);
+ return(true);
+}
+
+extern "C" void definePopup(QString& theContext, QString& theParent, QString& theObject) {
+ theObject = "";
+ theContext = "";
+}
+
+extern "C" bool customPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext, const QString& theParent, const QString& theObject) {
+ Supervision.init(parent);
+ Supervision.customPopup(popup);
+ return(true);
+}
+
+extern "C" void activeStudyChanged(QAD_Desktop* parent) {
+ // Supervision.activeStudyChanged();
+}
+
+extern "C" int supportedViewType()
+{
+ return (int)VIEW_GRAPHSUPERV;
+}
--- /dev/null
+// File : SUPERVGUI.h
+// Created : 31 octobre 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_H
+#define SUPERVGUI_H
+
+// Acces a l'ihm de SALOME
+// -----------------------
+
+#include "QAD_Desktop.h"
+
+
+#include "SUPERVGUI_Def.h"
+#include "SUPERVGUI_Service.h"
+#include "SUPERVGUI_Main.h"
+//#include "SUPERVGUI_Information.h"
+
+
+// Definition de la classe principale du module de supervision
+// -----------------------------------------------------------
+
+class SUPERVGUI: public QObject {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI();
+ virtual ~SUPERVGUI();
+
+ QAD_Desktop* getDesktop();
+ SUPERV_Engine getEngine();
+ QAD_Study* getActiveStudy()
+ { return study; };
+
+ SUPERVGUI_Service* getBrowser();
+ QCursor getCursor();
+ //bool information(SUPERV_CNode node, bool isReadOnly);
+ void putInfo(const char* mess);
+
+ void importDataflow();
+ void exportDataflow();
+ void newDataflow();
+ void modifyDataflow();
+ void reloadDataflow();
+ void runDataflow();
+ void stepByStep();
+ void killDataflow();
+ void suspendResumeDataflow();
+ void showComponents();
+
+ void init(QAD_Desktop* parent);
+ SUPERVGUI_Main* getMain();
+ void customPopup(QPopupMenu* popup);
+ void activeStudyChanged();
+
+ bool isContains(QAD_Study* theStudy, const QString theKey);
+
+ void registerGraph(QString theName, SUPERVGUI_Main* theGraph);
+ void unregisterGraph(SUPERVGUI_Main* theGraph);
+ QAD_StudyFrame* createGraph();
+
+ /** Returns:
+ theIsOwner = true if Selected object belongs to Suipervision.
+ theIsDataflow = true if Selected object is Dataflow
+ */
+ void whatIsSelected(const Handle(SALOME_InteractiveObject)& theObj, bool& theIsOwner, bool& theIsDataflow);
+
+ private slots:
+ void setMain(QWidget* w);
+ void displayDataflow();
+ void renameDataflow();
+ void deleteObject();
+ void onGraphClosed(QAD_StudyFrame* );
+
+ private:
+ void loadEngine(SALOME_NamingService* namingService);
+
+ static int factory;
+ QAD_Desktop* desktop;
+ QAD_Study* study;
+ SUPERV_Engine engine;
+ SUPERVGUI_Service* browser;
+ //SUPERVGUI_Information* info;
+ QCursor cursor;
+
+ SUPERVGUI_Main* main; // active main
+ QPtrList<SUPERVGUI_Main> myGraphList;
+};
+
+
+// Acces a l'instance unique de la classe du module de l'interface graphique de la supervision
+// -------------------------------------------------------------------------------------------
+extern SUPERVGUI Supervision;
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Array.cxx
+// Created : 08 / 02 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Def.h"
+#include "SUPERVGUI_Array.h"
+#include "SUPERVGUI_Main.h"
+#include "SUPERVGUI_ComputeNode.h"
+#include "SUPERVGUI_BrowseNodeDlg.h"
+#include <qtooltip.h>
+#include <qlayout.h>
+
+#define ADDNODES(NodesName) \
+ ncols = nodes->NodesName.length(); \
+ for (int co=0; co<ncols; co++) { \
+ SUPERV_CNode aCNode = SUPERV::CNode::_narrow(nodes->NodesName[co]); \
+ x = 50 + co * (CELL_WIDTH + CELL_SPACE);\
+ SUPERVGUI_Node* aNode = new SUPERVGUI_Cell(viewport(), main, aCNode); \
+ ResizeGraph(aNode, x, y); \
+ addChild(aNode, x, y); \
+ }
+
+
+
+#define ADDCONTROLNODES(NodesName) \
+ ncols = nodes->NodesName.length(); \
+ x = 50; \
+ for (int co=0; co<ncols; co++) { \
+ SUPERV_CNode aCNode = SUPERV::CNode::_narrow(nodes->NodesName[co]); \
+ SUPERVGUI_Node* aNode = new SUPERVGUI_Cell(viewport(), main, aCNode); \
+ ResizeGraph(aNode, x, y); \
+ addChild(aNode, x, y); \
+ x += (CELL_WIDTH + CELL_SPACE); \
+ SUPERV_CNode aCNodeEnd = SUPERV::CNode::_narrow(nodes->NodesName[co]->Coupled()); \
+ SUPERVGUI_Node* aNodeEnd = new SUPERVGUI_Cell(viewport(), main, aCNodeEnd); \
+ ResizeGraph(aNodeEnd, x, y); \
+ addChild(aNodeEnd, x, y); \
+ x += (CELL_WIDTH + CELL_SPACE); \
+ }
+
+
+
+
+SUPERVGUI_Array::SUPERVGUI_Array(SUPERVGUI_Main* m):
+ SUPERVGUI_View(m)
+{
+ resizeContents(GRAPH_WIDTH, GRAPH_HEIGHT);
+ setName("TableView");
+ hide();
+}
+
+SUPERVGUI_Array::~SUPERVGUI_Array() {
+ Trace("SUPERVGUI_Array::~SUPERVGUI_Array")
+}
+
+bool SUPERVGUI_Array::create() {
+ Trace("SUPERVGUI_Array::create");
+ SUPERV_Nodes nodes = main->getDataflow()->Nodes();
+ int aCount = 0;
+ aCount += nodes->CNodes.length();
+ aCount += nodes->FNodes.length();
+ aCount += nodes->INodes.length();
+ aCount += nodes->GNodes.length();
+ aCount += nodes->LNodes.length();
+ aCount += nodes->SNodes.length();
+ if (aCount == 0) {
+ show();
+ return true;
+ }
+
+ //SUPERV_Nodes nodes;
+ SUPERVGUI_Cell* cell;
+ QString aLabel;
+ int x, y;
+ int nligs = main->getDataflow()->LevelMax();
+ int ncols = main->getDataflow()->ThreadsMax();
+
+ // there is no any calculations
+ if (ncols == 0) return false;
+
+ for (int co=0; co<ncols; co++) {
+ aLabel = QString("Thread %1").arg(co);
+ QLabel* aTitle = new QLabel(aLabel, viewport());
+ aTitle->setAlignment(QLabel::AlignCenter | QLabel::AlignVCenter);
+ aTitle->setLineWidth(1);
+ aTitle->setPaletteBackgroundColor(MAIN_TITLE);
+ aTitle->setMinimumSize(CELL_WIDTH, CELL_HEIGHT);
+ aTitle->setFrameStyle(QFrame::Panel | QFrame::Plain);
+ addChild(aTitle, 50 + co * (CELL_WIDTH + CELL_SPACE), 20);
+ }
+ for (int li=0; li<=nligs; li++) {
+ nodes = main->getDataflow()->LevelNodes(li);
+ y = 60 + li * (CELL_HEIGHT + CELL_SPACE);
+ ADDNODES(CNodes);
+ ADDNODES(FNodes);
+ ADDNODES(INodes);
+ ADDNODES(GNodes);
+ ADDCONTROLNODES(LNodes);
+ ADDCONTROLNODES(SNodes);
+ }
+ nodeX = 50;
+ nodeY = y + CELL_HEIGHT*2;
+
+ show();
+ return true;
+}
+
+void SUPERVGUI_Array::destroy() {
+ Trace("SUPERVGUI_Array::destroy")
+ hide();
+
+ SUPERVGUI_Cell* cell;
+ QObjectList* ihmList = queryList("SUPERVGUI_Cell");
+ QObjectListIt i(*ihmList);
+
+ while ((cell=(SUPERVGUI_Cell*)i.current()) != 0) {
+ ++i;
+ cell->updateStudy();
+ cell->close(true);
+ };
+
+ delete ihmList;
+}
+
+void SUPERVGUI_Array::sync() {
+ Trace("SUPERVGUI_Array::sync")
+ if (SUPERV_isNull(main->getDataflow())) return;
+
+ SUPERVGUI_Cell* cell;
+ QObjectList* ihmList = queryList("SUPERVGUI_Cell");
+ QObjectListIt i(*ihmList);
+ while ((cell=(SUPERVGUI_Cell*)i.current()) != 0) {
+ ++i;
+ cell->sync();
+ }
+ delete ihmList;
+}
+
+SUPERVGUI_Node* SUPERVGUI_Array::addNode(SUPERV_CNode node) {
+ Trace("SUPERVGUI_Array::Array")
+ SUPERVGUI_Node* n = new SUPERVGUI_ComputeNode(viewport(), main, node);
+ ResizeGraph(n, nodeX, nodeY);
+ addChild(n, nodeX, nodeY);
+ nodeX += NODE_DX;
+ nodeY += NODE_DY;
+ n->sync();
+ return(n);
+}
+
+void SUPERVGUI_Array::contentsMousePressEvent(QMouseEvent* e) {
+ Trace("SUPERVGUI_Array::contentsMousePressEvent")
+ if (e->button() == RightButton) {
+ myPopup->exec(e->globalPos());
+ };
+}
+
+
+
+
+
+// ------------------------------------
+// Cell widget of the table
+// ------------------------------------
+
+
+SUPERVGUI_Cell::SUPERVGUI_Cell(QWidget* parent, SUPERVGUI_Main* m, SUPERV_CNode n):
+ SUPERVGUI_Node(parent, m, n),
+ guiNode(NULL)
+{
+ Trace("SUPERVGUI_Cell::SUPERVGUI_Cell");
+ setLineWidth(2);
+ setFrameStyle(QFrame::Panel | QFrame::Raised);
+
+ QHBoxLayout* aBox = new QHBoxLayout(this);
+ aBox->setMargin(3);
+ aBox->setSpacing(3);
+ component = new SUPERVGUI_Label(this, CELL_WIDTH_PART, LABEL_HEIGHT, myNode->Comment(), QLabel::AlignLeft);
+ connect(component, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(showPopup(QMouseEvent*)));
+
+ myTitle = new SUPERVGUI_Label(this, CELL_WIDTH_PART, LABEL_HEIGHT, name(), QLabel::AlignLeft);
+ connect(myTitle, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(showPopup(QMouseEvent*)));
+ myTitle->setMinimumSize(CELL_WIDTH_PART, LABEL_HEIGHT);
+ myTitle->setMaximumSize(CELL_WIDTH_PART, LABEL_HEIGHT);
+
+ // aBox->addWidget(service);
+ aBox->addWidget(myTitle);
+ aBox->addWidget(component);
+
+ myStatus->reparent(this, pos());
+ aBox->addWidget(myStatus);
+
+ // QToolTip::add(service, myNode->Name());
+ QToolTip::add(myTitle, myTitle->text());
+
+ myPopup->setItemEnabled(myDeleteItem, false);
+ adjustSize();
+}
+
+SUPERVGUI_Cell::~SUPERVGUI_Cell() {
+ Trace("SUPERVGUI_Cell::~SUPERVGUI_Cell");
+ QToolTip::remove(myTitle);
+ if (guiNode != NULL) {
+ guiNode->close();
+ }
+}
+
+void SUPERVGUI_Cell::sync() {
+ Trace("SUPERVGUI_Cell::sync");
+ if (myMain == NULL) return;
+ myTitle->setText(myNode->Name());
+ component->setText(myNode->Comment());
+
+ if (guiNode != NULL) {
+ guiNode->sync();
+
+ SUPERVGUI_PortIn* pi;
+ QObjectList* ihmList = guiNode->queryList("SUPERVGUI_PortIn");
+ QObjectListIt i(*ihmList);
+ while ((pi=(SUPERVGUI_PortIn*)i.current()) != 0) {
+ ++i;
+ pi->sync();
+ }
+ delete ihmList;
+
+ SUPERVGUI_PortOut* po;
+ ihmList = guiNode->queryList("SUPERVGUI_PortOut");
+ i = *ihmList;
+ while ((po=(SUPERVGUI_PortOut*)i.current()) != 0) {
+ ++i;
+ po->sync();
+ }
+ delete ihmList;
+ }
+ SUPERVGUI_Node::sync();
+}
+
+
+void SUPERVGUI_Cell::updateStudy()
+{
+ Trace("SUPERVGUI_Cell::updateStudy")
+ if (guiNode != NULL)
+ {
+ SUPERVGUI_PortOut* po;
+ QObjectList* ihmList = guiNode->queryList("SUPERVGUI_PortOut");
+ QObjectListIt i(*ihmList);
+ while ((po=(SUPERVGUI_PortOut*)i.current()) != 0)
+ {
+ ++i;
+ po->updateStudy();
+ }
+ delete ihmList;
+ }
+}
+
+
+void SUPERVGUI_Cell::rename() {
+ SUPERVGUI_Node::rename();
+ myTitle->setText(myNode->Name());
+ // QToolTip::remove(myTitle);
+ //QToolTip::add(myTitle, myTitle->text());
+}
--- /dev/null
+// File : SUPERVGUI_Array.h
+// Created : 08 / 02 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Array_H
+#define SUPERVGUI_Array_H
+
+using namespace std;
+#include "SUPERVGUI_Def.h"
+#include <qpopupmenu.h>
+#include "SUPERVGUI_Node.h"
+#include "SUPERVGUI_View.h"
+#include "SUPERVGUI_Label.h"
+
+class SUPERVGUI_Main;
+
+
+class SUPERVGUI_Array: public SUPERVGUI_View {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Array(SUPERVGUI_Main* m);
+ virtual ~SUPERVGUI_Array();
+
+ void sync();
+ bool create();
+ void destroy();
+
+ SUPERVGUI_Node* addNode(SUPERV_CNode node);
+
+ private:
+ void contentsMousePressEvent(QMouseEvent* e);
+
+
+ int nodeX;
+ int nodeY;
+};
+
+
+
+
+
+
+
+class SUPERVGUI_Cell: public SUPERVGUI_Node {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Cell(QWidget* parent, SUPERVGUI_Main* m, SUPERV_CNode n);
+ virtual ~SUPERVGUI_Cell();
+
+ void sync();
+ void hideAll() {};
+ void showAll() {};
+
+ void updateStudy();
+
+ public slots:
+ virtual void rename();
+
+ private:
+ SUPERVGUI_Label* myTitle;
+ SUPERVGUI_Node* guiNode;
+ SUPERVGUI_Label* component;
+ //SUPERVGUI_Label* service;
+
+ int myShowItem;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_BrowseNodeDlg.cxx
+// Created : 10 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#include "SUPERVGUI_BrowseNodeDlg.h"
+#include "SUPERVGUI_Node.h"
+#include "SUPERVGUI.h"
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qhbox.h>
+#include <qgroupbox.h>
+
+/**
+ * Constructor
+ */
+SUPERVGUI_PortField::SUPERVGUI_PortField( QWidget* theParent, SUPERV_Port thePort ) {
+ myPort = thePort;
+ myIsEditable = myPort->IsInput() && ( !myPort->IsLinked() );
+
+ QString aLabelTxt(myPort->Name());
+
+ SUPERV_CNode aNode = myPort->Node();
+ SALOME_ModuleCatalog::Service* aService = aNode->Service();
+ SALOME_ModuleCatalog::ListOfServicesParameter aList;
+ aList = (myPort->IsInput())? aService->ServiceinParameter : aService->ServiceoutParameter;
+ for (int i = 0; i < aList.length(); i++) {
+ SALOME_ModuleCatalog::ServicesParameter* aParam = &(aList[i]);
+ if (aLabelTxt == aParam->Parametername) {
+ aLabelTxt += QString(" (") + QString(aParam->Parametertype) + QString(")");
+ break;
+ }
+ }
+
+ aLabelTxt += QString(":");
+ myLabel = new QLabel(aLabelTxt, theParent );
+
+ myValue = new QLineEdit( theParent );
+ myLabel->setBuddy( myValue );
+ if (!myIsEditable) {
+ myValue->setReadOnly( !myIsEditable );
+ QPalette aPalette = myValue->palette();
+ aPalette.setInactive(aPalette.disabled());
+ aPalette.setActive(aPalette.disabled());
+ myValue->setPalette(aPalette);
+ }
+ myValue->installEventFilter( this );
+}
+
+/**
+ * Sets value from text edit control to engine of port
+ */
+bool SUPERVGUI_PortField::setNewValue() {
+ if ( !myIsEditable ) return false;
+
+ QString aTxt = myValue->text();
+ if ( aTxt.isNull() || aTxt.isEmpty() ) return false;
+
+ if ( aTxt.find( "Unknown" ) < 0 ) {
+ return myPort->Input( ( *Supervision.getEngine() )->StringValue( aTxt ) );
+ }
+ return false;
+}
+
+/**
+ * Event filter
+ */
+bool SUPERVGUI_PortField::eventFilter( QObject* o, QEvent* e )
+{
+ if ( o == myValue ) {
+ if ( e->type() == QEvent::FocusIn ) {
+ emit activated();
+ }
+ }
+ return QObject::eventFilter( o, e );
+}
+
+
+/**
+ * Constructor
+ */
+SUPERVGUI_BrowseNodeDlg::SUPERVGUI_BrowseNodeDlg( SUPERVGUI_Node* theNode )
+ : QDialog( theNode, 0, false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose )
+{
+ myActiveField = 0;
+ setSizeGripEnabled( true );
+ myNode = theNode;
+ myPortsList.setAutoDelete( true );
+
+ SUPERV_CNode aEngine = myNode->getEngine();
+ mySelection = SALOME_Selection::Selection( Supervision.getActiveStudy()->getSelection() );
+// mySelection->ClearIObjects();
+
+ setName( "SUPERVGUI_BrowseNodeDlg" );
+ setCaption( tr( "TIT_BROWSENODE" ) + aEngine->Name() );
+
+ QGridLayout* aBaseLayout = new QGridLayout( this );
+ aBaseLayout->setMargin( 11 ); aBaseLayout->setSpacing( 6 );
+
+ QGroupBox* aInBox = new QGroupBox( 2, Qt::Horizontal, "Input", this );
+ aInBox->setMargin( 11 );
+ aBaseLayout->addWidget( aInBox, 0, 0 );
+
+ QGroupBox* aOutBox = new QGroupBox( 2, Qt::Horizontal, "Output", this);
+ aOutBox->setMargin( 11 );
+ aBaseLayout->addWidget( aOutBox, 0, 1 );
+
+ myIsEditable = false;
+ int aPIcount = 0;
+ int aPOcount = 0;
+ SUPERV_Ports ports = aEngine->Ports();
+ int n = ports->length();
+
+ for ( int i = 0; i < n; i++ ) {
+ if ( ports[i]->IsInput() ) {
+ if ( !ports[i]->IsGate() ) { // not a gate
+ SUPERVGUI_PortField* aField = new SUPERVGUI_PortField( aInBox, ports[i] );
+ if ( aField->isEditable() ) myIsEditable = true;
+ myPortsList.append( aField );
+ if ( !myActiveField )
+ myActiveField = aField;
+ connect( aField, SIGNAL( activated() ), this, SLOT( onFieldActivated() ) );
+ }
+ aPIcount++;
+ }
+ else {
+ if ( !ports[i]->IsGate() ) { // not a gate
+ myPortsList.append( new SUPERVGUI_PortField( aOutBox, ports[i] ) );
+ }
+ aPOcount++;
+ }
+ }
+
+ QGroupBox* aBtnBox = new QGroupBox( this );
+ aBtnBox->setColumnLayout( 0, Qt::Vertical );
+ aBtnBox->layout()->setSpacing( 0 );
+ aBtnBox->layout()->setMargin( 0 );
+
+ QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox->layout() );
+ aBtnLayout->setAlignment( Qt::AlignTop );
+ aBtnLayout->setSpacing( 6 );
+ aBtnLayout->setMargin( 11 );
+
+ if ( myIsEditable ) {
+ QLabel* aInfoLab = new QLabel( tr( "ENTER_OR_SELECT_LBL" ), this );
+ aBaseLayout->addMultiCellWidget( aInfoLab, 1, 1, 0, 1 );
+
+ QPushButton* aOkBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
+ connect( aOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ aBtnLayout->addWidget( aOkBtn );
+ aBaseLayout->addMultiCellWidget( aBtnBox, 2, 2, 0, 1 );
+ } else
+ aBaseLayout->addMultiCellWidget( aBtnBox, 1, 1, 0, 1 );
+
+ aBtnLayout->addStretch();
+ QPushButton* aCancelBtn = new QPushButton( myIsEditable ? tr( "BUT_CANCEL" ) : tr( "BUT_CLOSE" ), aBtnBox );
+ aBtnLayout->addWidget( aCancelBtn );
+ connect( aCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+
+ if ( !myIsEditable )
+ aBtnLayout->addStretch();
+
+ connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) );
+ myNode->getMain()->lockedGraph(true);
+}
+
+/**
+ * Destructor
+ */
+SUPERVGUI_BrowseNodeDlg::~SUPERVGUI_BrowseNodeDlg() {
+}
+
+/**
+ * Set current values of editable ports
+ */
+void SUPERVGUI_BrowseNodeDlg::setValues() {
+ SUPERVGUI_PortField* aField;
+ for ( aField = myPortsList.first(); aField; aField = myPortsList.next() ) {
+ aField->updateGUI();
+ }
+}
+
+/**
+ * Set inputed values of editable ports and then closes and destroys dialog
+ */
+void SUPERVGUI_BrowseNodeDlg::accept() {
+ if ( myIsEditable ) {
+ SUPERVGUI_PortField* aField;
+ for ( aField = myPortsList.first(); aField; aField = myPortsList.next() ) {
+ aField->setNewValue();
+ }
+ myNode->sync();
+ }
+ myNode->getMain()->lockedGraph(false);
+ QDialog::accept();
+ close();
+}
+
+
+/**
+ * Closes and destroys dialog
+ */
+void SUPERVGUI_BrowseNodeDlg::reject() {
+ myNode->getMain()->lockedGraph(false);
+ QDialog::reject();
+ close();
+}
+
+/**
+ * Update current values on show event
+ */
+void SUPERVGUI_BrowseNodeDlg::showEvent( QShowEvent* theEvent ) {
+ setValues();
+ QDialog::showEvent( theEvent );
+}
+
+/**
+ * Slot, called when field is focused
+ */
+void SUPERVGUI_BrowseNodeDlg::onFieldActivated()
+{
+ SUPERVGUI_PortField* aField = (SUPERVGUI_PortField*)sender();
+ myActiveField = (aField->isEditable())? aField : 0;
+}
+
+
+
+/**
+ * Slot, called when selection is changed
+ */
+void SUPERVGUI_BrowseNodeDlg::onSelectionChanged()
+{
+ if ( myActiveField ) {
+ if( mySelection->IObjectCount() == 1 ) {
+ Handle( SALOME_InteractiveObject ) anIO = mySelection->firstIObject();
+ if ( anIO->hasEntry() ) {
+ SALOMEDS::SObject_var aObj = Supervision.getActiveStudy()->
+ getStudyDocument()->FindObjectID( anIO->getEntry() );
+
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeIOR_var anIOR;
+ Standard_CString ior = "";
+
+ if (aObj->FindAttribute( anAttr, "AttributeIOR" ) ) {
+ anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
+ ior = anIOR->Value();
+ myActiveField->setData( ior );
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Constructor
+ */
+SUPERVGUI_GetValueDlg::SUPERVGUI_GetValueDlg( SUPERVGUI_PortIn* thePort )
+ : QDialog( thePort, 0, false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose )
+{
+ myOKBtn = 0;
+ setSizeGripEnabled( true );
+ myPort = thePort;
+ myPortESNode = 0;
+
+ mySelection = SALOME_Selection::Selection( Supervision.getActiveStudy()->getSelection() );
+// mySelection->ClearIObjects();
+
+ setName( "SUPERVGUI_GetValueDlg" );
+ setCaption( tr( "TIT_SETVALUE_PORT" ) );
+
+ QGridLayout* aBaseLayout = new QGridLayout( this );
+ aBaseLayout->setMargin( 11 ); aBaseLayout->setSpacing( 6 );
+
+ QGroupBox* aBox = new QGroupBox( this );
+ aBox->setColumnLayout( 0, Qt::Vertical );
+ aBox->layout()->setSpacing( 0 ); aBox->layout()->setMargin( 0 );
+ QGridLayout* aBoxLayout = new QGridLayout( aBox->layout() );
+ aBoxLayout->setAlignment( Qt::AlignTop );
+ aBoxLayout->setSpacing( 6 ); aBoxLayout->setMargin( 11 );
+ aBaseLayout->addWidget( aBox, 0, 0 );
+ aBox->setMinimumWidth( 200 );
+
+ QLabel* aInfoLab = new QLabel( tr( "ENTER_OR_SELECT_LBL" ), aBox );
+ QFont fnt = aInfoLab->font(); fnt.setBold( true ); aInfoLab->setFont( fnt );
+ aBoxLayout->addMultiCellWidget( aInfoLab, 0, 0, 0, 1 );
+ myField = new SUPERVGUI_PortField( aBox, myPort->getPort() );
+ bool myIsEditable = myField->isEditable();
+ aBoxLayout->addWidget( myField->myLabel, 1, 0 );
+ aBoxLayout->addWidget( myField->myValue, 1, 1 );
+
+ QGroupBox* aBtnBox = new QGroupBox( this );
+ aBtnBox->setColumnLayout( 0, Qt::Vertical );
+ aBtnBox->layout()->setSpacing( 0 ); aBtnBox->layout()->setMargin( 0 );
+ QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox->layout() );
+ aBtnLayout->setAlignment( Qt::AlignTop );
+ aBtnLayout->setSpacing( 6 ); aBtnLayout->setMargin( 11 );
+
+ aBaseLayout->addWidget( aBtnBox, 1, 0 );
+
+ if ( myIsEditable ) {
+ myOKBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
+ connect( myOKBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ aBtnLayout->addWidget( myOKBtn );
+ }
+
+ aBtnLayout->addStretch();
+ myCancelBtn = new QPushButton( myIsEditable ? tr( "BUT_CANCEL" ) : tr( "BUT_CLOSE" ), aBtnBox );
+ aBtnLayout->addWidget( myCancelBtn );
+ connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+
+ if ( !myIsEditable )
+ aBtnLayout->addStretch();
+
+ myField->updateGUI();
+ connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) );
+ myPort->getMain()->lockedGraph(true);
+}
+
+/**
+ * Constructor
+ */
+SUPERVGUI_GetValueDlg::SUPERVGUI_GetValueDlg( SUPERVGUI_PortInESNode* thePort )
+ : QDialog( thePort, 0, false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose )
+{
+ myOKBtn = 0;
+ setSizeGripEnabled( true );
+ myPort = 0;
+ myPortESNode = thePort;
+
+ mySelection = SALOME_Selection::Selection( Supervision.getActiveStudy()->getSelection() );
+// mySelection->ClearIObjects();
+
+ setName( "SUPERVGUI_GetValueDlg" );
+ setCaption( tr( "TIT_SETVALUE_PORT" ) );
+
+ QGridLayout* aBaseLayout = new QGridLayout( this );
+ aBaseLayout->setMargin( 11 ); aBaseLayout->setSpacing( 6 );
+
+ QGroupBox* aBox = new QGroupBox( this );
+ aBox->setColumnLayout( 0, Qt::Vertical );
+ aBox->layout()->setSpacing( 0 ); aBox->layout()->setMargin( 0 );
+ QGridLayout* aBoxLayout = new QGridLayout( aBox->layout() );
+ aBoxLayout->setAlignment( Qt::AlignTop );
+ aBoxLayout->setSpacing( 6 ); aBoxLayout->setMargin( 11 );
+ aBaseLayout->addWidget( aBox, 0, 0 );
+ aBox->setMinimumWidth( 200 );
+
+ QLabel* aInfoLab = new QLabel( tr( "ENTER_OR_SELECT_LBL" ), aBox );
+ QFont fnt = aInfoLab->font(); fnt.setBold( true ); aInfoLab->setFont( fnt );
+ aBoxLayout->addMultiCellWidget( aInfoLab, 0, 0, 0, 1 );
+ myField = new SUPERVGUI_PortField( aBox, myPortESNode->getPort() );
+ bool myIsEditable = myField->isEditable();
+ aBoxLayout->addWidget( myField->myLabel, 1, 0 );
+ aBoxLayout->addWidget( myField->myValue, 1, 1 );
+
+ QGroupBox* aBtnBox = new QGroupBox( this );
+ aBtnBox->setColumnLayout( 0, Qt::Vertical );
+ aBtnBox->layout()->setSpacing( 0 ); aBtnBox->layout()->setMargin( 0 );
+ QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox->layout() );
+ aBtnLayout->setAlignment( Qt::AlignTop );
+ aBtnLayout->setSpacing( 6 ); aBtnLayout->setMargin( 11 );
+
+ aBaseLayout->addWidget( aBtnBox, 1, 0 );
+
+ if ( myIsEditable ) {
+ myOKBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
+ connect( myOKBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ aBtnLayout->addWidget( myOKBtn );
+ }
+
+ aBtnLayout->addStretch();
+ myCancelBtn = new QPushButton( myIsEditable ? tr( "BUT_CANCEL" ) : tr( "BUT_CLOSE" ), aBtnBox );
+ aBtnLayout->addWidget( myCancelBtn );
+ connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+
+ if ( !myIsEditable )
+ aBtnLayout->addStretch();
+
+ myField->updateGUI();
+ connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) );
+ myPortESNode->getMain()->lockedGraph(true);
+}
+
+/**
+ * Destructor
+ */
+SUPERVGUI_GetValueDlg::~SUPERVGUI_GetValueDlg() {
+}
+
+/**
+ * Set entered value into port and then closes and destroys dialog
+ */
+void SUPERVGUI_GetValueDlg::accept() {
+ if ( myField->setNewValue() ) {
+
+ if (myPort != 0)
+ myPort->sync();
+ else
+ myPortESNode->sync();
+ }
+ else {
+ if ( QMessageBox::warning( QAD_Application::getDesktop(),
+ tr( "ERROR" ), tr( "MSG_CANT_SETVAL" ),
+ QMessageBox::Retry, QMessageBox::Abort) == QMessageBox::Retry )
+ return;
+ }
+
+ if (myPort != 0)
+ myPort->getMain()->lockedGraph(false);
+ else
+ myPortESNode->getMain()->lockedGraph(false);
+ QDialog::accept();
+ close();
+}
+
+/**
+ * Closes and destroys dialog
+ */
+void SUPERVGUI_GetValueDlg::reject() {
+ if (myPort != 0)
+ myPort->getMain()->lockedGraph(false);
+ else
+ myPortESNode->getMain()->lockedGraph(false);
+ QDialog::reject();
+ close();
+}
+
+/**
+ * Slot, called when selection is changed
+ */
+void SUPERVGUI_GetValueDlg::onSelectionChanged()
+{
+ if( mySelection->IObjectCount() == 1 ) {
+ Handle( SALOME_InteractiveObject ) anIO = mySelection->firstIObject();
+ if ( anIO->hasEntry() ) {
+ SALOMEDS::SObject_var aObj = Supervision.getActiveStudy()->
+ getStudyDocument()->FindObjectID( anIO->getEntry() );
+
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeIOR_var anIOR;
+ Standard_CString ior = "";
+
+ if (aObj->FindAttribute( anAttr, "AttributeIOR" ) ) {
+ anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr );
+ ior = anIOR->Value();
+ myField->setData( ior );
+ }
+ }
+ }
+}
+
--- /dev/null
+// File : SUPERVGUI_BrowseNodeDlg.h
+// Created : 10 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#ifndef SUPERVGUI_BrowseNodeDlg_H
+#define SUPERVGUI_BrowseNodeDlg_H
+
+#include <qdialog.h>
+#include "SUPERVGUI_Def.h"
+#include "SUPERVGUI_Port.h"
+#include "SALOME_Selection.h"
+
+class SUPERVGUI_Node;
+
+/**
+ * Class for ports values management (for internal using)
+ */
+class SUPERVGUI_PortField : public QObject {
+
+ Q_OBJECT
+
+public:
+ SUPERVGUI_PortField( QWidget* theParent, SUPERV_Port thePort );
+ virtual ~SUPERVGUI_PortField() {};
+
+ bool eventFilter( QObject* o, QEvent* e );
+
+ bool isEditable () { return myIsEditable; }
+
+ void setData( const QString& data ) { myValue->setText( data ); myValue->home( false ); }
+ void updateGUI() { myValue->setText( myPort->ToString() ); }
+
+ bool setNewValue();
+
+signals :
+ void activated();
+
+public:
+ SUPERV_Port myPort;
+ QLabel* myLabel;
+ QLineEdit* myValue;
+ bool myIsEditable;
+};
+
+
+/**
+ * Browse Node Dialog box
+ */
+class SUPERVGUI_BrowseNodeDlg: public QDialog {
+
+ Q_OBJECT
+
+public:
+ SUPERVGUI_BrowseNodeDlg( SUPERVGUI_Node* theNode );
+ virtual ~SUPERVGUI_BrowseNodeDlg();
+
+ void setValues();
+
+protected slots:
+ void accept();
+ void reject();
+ void onFieldActivated();
+ void onSelectionChanged();
+
+protected:
+ void showEvent( QShowEvent* theEvent );
+
+private:
+ SUPERVGUI_Node* myNode;
+ bool myIsEditable;
+ QPtrList<SUPERVGUI_PortField> myPortsList;
+ SUPERVGUI_PortField* myActiveField;
+ SALOME_Selection* mySelection;
+};
+
+/**
+ * Get Value dialog box
+ */
+class SUPERVGUI_GetValueDlg: public QDialog {
+ Q_OBJECT
+
+public:
+// SUPERVGUI_GetValueDlg( SUPERVGUI_Port thePort );
+ SUPERVGUI_GetValueDlg( SUPERVGUI_PortIn* thePort );
+ SUPERVGUI_GetValueDlg( SUPERVGUI_PortInESNode* thePort );
+ ~SUPERVGUI_GetValueDlg();
+
+private slots:
+ void accept();
+ void reject();
+ void onSelectionChanged();
+
+private:
+ QPushButton* myOKBtn;
+ QPushButton* myCancelBtn;
+ SUPERVGUI_PortField* myField;
+ SUPERVGUI_PortIn* myPort;
+ SUPERVGUI_PortInESNode* myPortESNode; //last correction
+ SALOME_Selection* mySelection;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_ComputeNode.cxx
+// Created : 09 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#include "SUPERVGUI_ComputeNode.h"
+#include "SUPERVGUI_Main.h"
+#include <qapplication.h>
+#include <qtooltip.h>
+
+
+SUPERVGUI_ComputeNode::SUPERVGUI_ComputeNode(QWidget* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode)
+:SUPERVGUI_GraphNode(theParent, theMain, theNode)
+{
+ setLineWidth(2);
+ setFrameStyle(QFrame::Panel | QFrame::Raised);
+
+ QGridLayout* aGridLayout = new QGridLayout(this, 0, 2, 3, 1);
+
+ myTitle->setPaletteBackgroundColor(QColor(63, 213, 255));
+ myTitle->reparent(this, pos());
+ aGridLayout->addMultiCellWidget(myTitle, 0, 0, 0, 1);
+
+ QString aComment(theNode->Comment());
+ if (aComment.isNull() || aComment.isEmpty()) {
+ if (getNodeType() == SUPERV::FactoryNode)
+ aComment = QString(myNode->Service()->ServiceName) + QString(tr("COMMENT_FROM"))
+ + QString(getFactoryNode()->GetComponentName());
+ else
+ //aComment = tr("COMMENT_PYTHON");
+ aComment = tr("COMMENT_CNODE");
+ theNode->SetComment(aComment.latin1());
+ }
+
+ myServiceBox = new QVBox(this, "service");
+ myComment = new SUPERVGUI_Label(myServiceBox, LABEL_WIDTH, LABEL_HEIGHT, aComment, QLabel::AlignLeft);
+ connect(myComment, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(showPopup(QMouseEvent*)));
+ QToolTip::add(myComment, myComment->text());
+ aGridLayout->addMultiCellWidget(myServiceBox, 1, 1, 0, 1);
+
+ myStatus->reparent(this, pos());
+ myTime->reparent(this, pos());
+ aGridLayout->addWidget(myStatus, 2, 0);
+ aGridLayout->addWidget(myTime, 2, 1);
+
+ myPortsBox->reparent(this, pos());
+
+ aGridLayout->addMultiCellWidget(myPortsBox, 3, 3, 0, 1);
+ adjustSize();
+
+ myShowPopup = new QPopupMenu(this);
+ myServiceItem = myShowPopup->insertItem(tr("POP_SHOWTITLES"), this, SLOT(switchService()));
+ myPortsItem = myShowPopup->insertItem(tr("POP_SHOWPORTS"), this, SLOT(switchPorts()));
+
+ myPopup->insertSeparator();
+ myPopup->insertItem(tr("POP_SHOW"), myShowPopup);
+ myShowPopup->setItemChecked(myServiceItem, true);
+ myShowPopup->setItemChecked(myPortsItem, true);
+
+ show();
+}
+
+
+SUPERVGUI_ComputeNode::~SUPERVGUI_ComputeNode() {
+ QToolTip::remove(myComment);
+}
+
+
+void SUPERVGUI_ComputeNode::sync()
+{
+ Trace("SUPERVGUI_Node::sync");
+ setName(myNode->Name());
+ myTitle->setText(name());
+
+ myComment->setText(myNode->Comment());
+
+ bool editing = myMain->getDataflow()->IsEditing();
+ myPopup->setItemEnabled(myKillItem, !editing);
+ if (myMain->isEditable()) {
+ myPopup->setItemEnabled(myRenameItem, editing);
+ myPopup->setItemEnabled(myDeleteItem, editing);
+ }
+ SUPERVGUI_GraphNode::sync();
+}
+
+
+
+/**
+ * Hides services info and ports
+ */
+void SUPERVGUI_ComputeNode::hideAll() {
+ myServiceBox->hide();
+ myShowPopup->setItemChecked(myServiceItem, false);
+ myPortsBox->hide();
+ myShowPopup->setItemChecked(myPortsItem, false);
+
+ updateShape();
+}
+
+
+/**
+ * Shows services info and ports
+ */
+void SUPERVGUI_ComputeNode::showAll() {
+ myServiceBox->show();
+ myShowPopup->setItemChecked(myServiceItem, true);
+ myPortsBox->show();
+ myShowPopup->setItemChecked(myPortsItem, true);
+
+ updateShape();
+}
+
+
+/**
+ * Switches visibility of Service names in the node
+ */
+void SUPERVGUI_ComputeNode::switchService() {
+ bool aIsVisible = myServiceBox->isVisible();
+ if (aIsVisible) myServiceBox->hide();
+ else myServiceBox->show();
+ updateShape();
+ myShowPopup->setItemChecked(myServiceItem, !aIsVisible);
+}
+
+
+/**
+ * Switches visibility of Ports in the node
+ */
+void SUPERVGUI_ComputeNode::switchPorts() {
+ bool aIsVisible = myPortsBox->isVisible();
+ if (aIsVisible) myPortsBox->hide();
+ else myPortsBox->show();
+ updateShape();
+ myShowPopup->setItemChecked(myPortsItem, !aIsVisible);
+}
+
+
+void SUPERVGUI_ComputeNode::updateShape() {
+ qApp->processEvents();
+ adjustSize();
+}
--- /dev/null
+// File : SUPERVGUI_ComputeNode.h
+// Created : 09 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#ifndef SUPERVGUI_ComputeNode_H
+#define SUPERVGUI_ComputeNode_H
+
+#include "SUPERVGUI_GraphNode.h"
+
+
+class SUPERVGUI_ComputeNode: public SUPERVGUI_GraphNode {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_ComputeNode(QWidget* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode);
+ virtual ~SUPERVGUI_ComputeNode();
+
+ void sync();
+ void hideAll();
+ void showAll();
+ virtual void updateShape();
+
+ public slots:
+ void switchService();
+ void switchPorts();
+
+
+ private:
+ QPopupMenu* myShowPopup;
+ int myServiceItem;
+ int myPortsItem;
+
+ //int myPIcount;
+ //int myPOcount;
+
+ SUPERVGUI_Label* myComment;
+ QVBox* myServiceBox;
+ //QFrame* myPortsBox;
+ //QGridLayout* myPortLayout;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_ControlNode.cxx
+// Created : 14 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#include "SUPERVGUI_ControlNode.h"
+#include <qapplication.h>
+#include "SUPERVGUI_Main.h"
+#include <qgroupbox.h>
+
+#define TITLECOLOR Qt::red.light()
+#define BACKCOLOR Qt::cyan.light()
+
+//-----------------------------------------------------------
+//******************* Start Node ****************************
+//-----------------------------------------------------------
+SUPERVGUI_StartControlNode::SUPERVGUI_StartControlNode(QWidget* theParent, SUPERVGUI_Main* theMain,
+ SUPERV_CNode theNode):
+ SUPERVGUI_GraphNode(theParent, theMain, theNode)
+{
+ setPaletteBackgroundColor(BACKCOLOR);
+ QGridLayout* aGridLayout = new QGridLayout(this, 0, 3, 0, 0);
+ aGridLayout->setColStretch(0, 1);
+ aGridLayout->setColStretch(1, 1);
+ aGridLayout->addColSpacing(2, LABEL_HEIGHT/2);
+
+ myTitle->setAlignment(Qt::AlignHCenter);
+ myTitle->reparent(this, pos());
+ myTitle->setPaletteBackgroundColor(TITLECOLOR);
+
+ aGridLayout->addMultiCellWidget(myTitle, 0, 0, 0, 2);
+
+ myPortsBox->reparent(this, pos());
+ aGridLayout->addMultiCellWidget(myPortsBox, 1, 1, 0, 1);
+
+ myStatus->reparent(this, pos());
+ myTime->reparent(this, pos());
+ aGridLayout->addWidget(myStatus, 2, 0);
+ aGridLayout->addMultiCellWidget(myTime, 2, 2, 1, 2);
+
+ myPopup->insertSeparator();
+ myPortsItem = myPopup->insertItem(tr("POP_HIDEPORTS"), this, SLOT(switchPorts()));
+
+ adjustSize();
+ setShape();
+ show();
+}
+
+
+void SUPERVGUI_StartControlNode::switchPorts() {
+ bool aIsVisible = myPortsBox->isVisible();
+ if (aIsVisible) myPortsBox->hide();
+ else myPortsBox->show();
+ updateShape();
+ myPopup->setItemChecked(myPortsItem, aIsVisible);
+}
+
+
+void SUPERVGUI_StartControlNode::hideAll() {
+ myPortsBox->hide();
+ updateShape();
+ myPopup->setItemChecked(myPortsItem, true);
+}
+
+
+void SUPERVGUI_StartControlNode::showAll() {
+ myPortsBox->show();
+ updateShape();
+ myPopup->setItemChecked(myPortsItem, false);
+}
+
+
+void SUPERVGUI_StartControlNode::rename() {
+ SUPERVGUI_Node::rename();
+ QString aStr(tr("ENDNODE_PREFIX"));
+ aStr+=name();
+ myEndNode->setNodeName(aStr);
+}
+
+
+void SUPERVGUI_StartControlNode::remove() {
+ myEndNode->deleteLinks();
+ deleteLinks();
+ myEndNode->getEngine()->destroy();
+ myNode->destroy();
+ myMain->getGraph()->deleteNode(myEndNode);
+ myMain->getGraph()->deleteNode(this);
+}
+
+
+void SUPERVGUI_StartControlNode::setEndNode(SUPERVGUI_EndControlNode* theEndNode) {
+ myEndNode = theEndNode;
+}
+
+
+void SUPERVGUI_StartControlNode::setShape() {
+ int aH = height();
+ int aW = width();
+ int aOffset = LABEL_HEIGHT/2;
+ QPointArray aArray(8);
+ aArray.setPoint(0, aOffset, aH);
+ aArray.setPoint(1, 0, aH-LABEL_HEIGHT);
+ aArray.setPoint(2, 0, LABEL_HEIGHT);
+ aArray.setPoint(3, aOffset, 0);
+ aArray.setPoint(4, aW, 0);
+ aArray.setPoint(5, aW-aOffset, LABEL_HEIGHT);
+ aArray.setPoint(6, aW-aOffset, aH-LABEL_HEIGHT);
+ aArray.setPoint(7, aW, aH);
+ QRegion aRegion(aArray);
+
+ setMask(aRegion);
+}
+
+
+void SUPERVGUI_StartControlNode::updateShape() {
+ qApp->processEvents();
+ adjustSize();
+ setShape();
+}
+
+
+void SUPERVGUI_StartControlNode::addOutputPort() {
+ SUPERVGUI_GraphNode::addOutputPort();
+ myEndNode->updatePorts();
+ myEndNode->updateShape();
+ updateLinksPrs(true);
+ myEndNode->updateLinksPrs(true);
+}
+
+void SUPERVGUI_StartControlNode::addInputPort() {
+ SUPERVGUI_GraphNode::addInputPort();
+ myEndNode->updatePorts();
+ myEndNode->updateShape();
+ updateLinksPrs(true);
+ myEndNode->updateLinksPrs(true);
+}
+
+void SUPERVGUI_StartControlNode::deletePort(SUPERVGUI_Port* thePort) {
+ if (getNodeType() == SUPERV::LoopNode) {
+ SUPERV_Port aPortEngine = thePort->getPort();
+ QString aName(aPortEngine->Name());
+ QString aNameIn = aName + "Input";
+ QString aNameOut = aName + "Output";
+
+ SUPERVGUI_Port* aPort = (SUPERVGUI_Port*) child(aNameOut, "SUPERVGUI_Port");
+ aPort->deleteLinks();
+ aPort->close(true);
+
+ aPort = (SUPERVGUI_Port*) child(aNameIn, "SUPERVGUI_Port");
+ aPort->deleteLinks();
+ aPort->close(true);
+
+ aPort = (SUPERVGUI_Port*) myEndNode->child(aNameIn, "SUPERVGUI_Port");
+ aPort->deleteLinks();
+ aPort->close(true);
+
+ aPort = (SUPERVGUI_Port*) myEndNode->child(aNameOut, "SUPERVGUI_Port");
+ aPort->deleteLinks();
+ aPort->close(true);
+
+ myPIcount--;
+ myPOcount--;
+ myEndNode->getPIcount()--;
+ myEndNode->getPOcount()--;
+
+ aPortEngine->destroy();
+ updatePorts();
+ updateShape();
+ myEndNode->updatePorts();
+ myEndNode->updateShape();
+ } else {
+ SUPERVGUI_GraphNode::deletePort(thePort);
+ }
+}
+
+
+QPoint SUPERVGUI_StartControlNode::getOutConnectPnt() {
+ return QPoint(pos().x() + width() - LABEL_HEIGHT/2,
+ pos().y() + (height()/2));
+}
+
+
+//-----------------------------------------------------------
+//******************* End Node ******************************
+//-----------------------------------------------------------
+
+SUPERVGUI_EndControlNode::SUPERVGUI_EndControlNode(QWidget* theParent, SUPERVGUI_Main* theMain,
+ SUPERV_CNode theNode, SUPERVGUI_StartControlNode* theStart):
+ SUPERVGUI_GraphNode(theParent, theMain, theNode)
+{
+ myStartNode = theStart;
+
+ setPaletteBackgroundColor(BACKCOLOR);
+
+ QGridLayout* aGridLayout = new QGridLayout(this, 0, 3, 0, 0);
+ aGridLayout->setColStretch(1, 1);
+ aGridLayout->setColStretch(2, 1);
+ aGridLayout->addColSpacing(0, LABEL_HEIGHT/2);
+
+ myTitle->setAlignment(Qt::AlignHCenter);
+ myTitle->reparent(this, pos());
+ myTitle->setPaletteBackgroundColor(TITLECOLOR);
+ aGridLayout->addMultiCellWidget(myTitle, 0, 0, 0, 2);
+
+ myPortsBox = new QFrame(this);
+ myPortLayout = new QGridLayout(myPortsBox, 0, 2, 0, 1);
+
+ myPIcount = 0;
+ myPOcount = 0;
+ SUPERV_Ports ports = myNode->Ports();
+ int n = ports->length();
+
+ for (int i=0; i<n; i++) {
+ if (ports[i]->IsInput()) {
+ myPortLayout->addWidget(new SUPERVGUI_PortIn(myPortsBox, myMain, ports[i]),
+ myPIcount, 0);
+ myPIcount++;
+ } else {
+ myPortLayout->addWidget(new SUPERVGUI_PortOut(myPortsBox, myMain, ports[i]),
+ myPOcount, 1, Qt::AlignRight);
+ myPOcount++;
+ }
+ }
+ aGridLayout->addMultiCellWidget(myPortsBox, 1, 1, 1, 2);
+
+ myStatus->reparent(this, pos());
+ myTime->reparent(this, pos());
+ aGridLayout->addMultiCellWidget(myStatus, 2, 2, 0, 1);
+ aGridLayout->addWidget(myTime, 2, 2);
+
+ adjustSize();
+ setShape();
+
+ myPopup->removeItem(myRenameItem);
+ myPopup->removeItem(myDeleteItem);
+ myPopup->removeItem(mySeparatorId);
+
+ myPopup->insertSeparator();
+ myPortsItem = myPopup->insertItem(tr("POP_HIDEPORTS"), this, SLOT(switchPorts()));
+ myStartNode->setEndNode(this);
+ show();
+}
+
+
+void SUPERVGUI_EndControlNode::switchPorts() {
+ bool aIsVisible = myPortsBox->isVisible();
+ if (aIsVisible) myPortsBox->hide();
+ else myPortsBox->show();
+ updateShape();
+ myPopup->setItemChecked(myPortsItem, aIsVisible);
+}
+
+void SUPERVGUI_EndControlNode::hideAll() {
+ myPortsBox->hide();
+ updateShape();
+ myPopup->setItemChecked(myPortsItem, true);
+}
+
+
+void SUPERVGUI_EndControlNode::showAll() {
+ myPortsBox->show();
+ updateShape();
+ myPopup->setItemChecked(myPortsItem, false);
+}
+
+
+void SUPERVGUI_EndControlNode::setShape() {
+ int aH = height();
+ int aW = width();
+ int aOffset = LABEL_HEIGHT/2;
+ QPointArray aArray(8);
+ aArray.setPoint(0, 0, aH);
+ aArray.setPoint(1, aOffset, aH-LABEL_HEIGHT);
+ aArray.setPoint(2, aOffset, LABEL_HEIGHT);
+ aArray.setPoint(3, 0, 0);
+ aArray.setPoint(4, aW-aOffset, 0);
+ aArray.setPoint(5, aW, LABEL_HEIGHT);
+ aArray.setPoint(6, aW, aH-LABEL_HEIGHT);
+ aArray.setPoint(7, aW-aOffset, aH);
+ QRegion aRegion(aArray);
+
+ setMask(aRegion);
+}
+
+
+void SUPERVGUI_EndControlNode::updateShape() {
+ qApp->processEvents();
+ adjustSize();
+ setShape();
+}
+
+
+QPoint SUPERVGUI_EndControlNode::getInConnectPnt() {
+ return QPoint(pos().x() + LABEL_HEIGHT/2,
+ pos().y() + (height()/2));
+}
+
+
+//-----------------------------------------------------------
+//******************* GoTo Node *****************************
+//-----------------------------------------------------------
+SUPERVGUI_GotoNode::SUPERVGUI_GotoNode(QWidget* theParent, SUPERVGUI_Main* theMain,
+ SUPERV_CNode theNode):
+ SUPERVGUI_GraphNode(theParent, theMain, theNode)
+{
+ setPaletteBackgroundColor(BACKCOLOR);
+
+ QGridLayout* aGridLayout = new QGridLayout(this, 3, 2, 0, 0);
+
+ myTitle->setAlignment(Qt::AlignHCenter);
+ myTitle->reparent(this, pos());
+ myTitle->setPaletteBackgroundColor(Qt::green.light());
+ aGridLayout->addMultiCellWidget(myTitle, 0, 0, 0, 1);
+
+ myPortsBox->reparent(this, pos());
+ aGridLayout->addMultiCellWidget(myPortsBox, 1, 1, 0, 1);
+
+ myStatus->reparent(this, pos());
+ myTime->reparent(this, pos());
+ aGridLayout->addWidget(myStatus, 2, 0);
+ aGridLayout->addWidget(myTime, 2, 1);
+
+ myPopup->insertSeparator();
+ myPopup->insertItem("Link to Node...", this, SLOT(linkToNode()));
+
+ adjustSize();
+ setShape();
+ show();
+
+ //SUPERV_Ports aPorts = getEngine()->Ports(); //existing
+ //int n = aPorts->length();
+}
+
+
+void SUPERVGUI_GotoNode::setShape() {
+ int aH = height();
+ int aW = width();
+ QPointArray aArray(8);
+ aArray.setPoint(0, LABEL_HEIGHT, aH);
+ aArray.setPoint(1, 0, aH-LABEL_HEIGHT);
+ aArray.setPoint(2, 0, LABEL_HEIGHT);
+ aArray.setPoint(3, LABEL_HEIGHT, 0);
+ aArray.setPoint(4, aW-LABEL_HEIGHT, 0);
+ aArray.setPoint(5, aW, LABEL_HEIGHT);
+ aArray.setPoint(6, aW, aH-LABEL_HEIGHT);
+ aArray.setPoint(7, aW-LABEL_HEIGHT, aH);
+ QRegion aRegion(aArray);
+
+ setMask(aRegion);
+}
+
+
+void SUPERVGUI_GotoNode::hideAll() {
+ myPortsBox->hide();
+ updateShape();
+ //myPopup->setItemChecked(myPortsItem, true);
+}
+
+
+void SUPERVGUI_GotoNode::showAll() {
+ myPortsBox->show();
+ updateShape();
+ //myPopup->setItemChecked(myPortsItem, false);
+}
+
+void SUPERVGUI_GotoNode::updateShape() {
+ qApp->processEvents();
+ adjustSize();
+ setShape();
+}
+
+
+void SUPERVGUI_GotoNode::linkToNode() {
+ SUPERVGUI_SelectInlineDlg* aDlg = new SUPERVGUI_SelectInlineDlg(getMain());
+ if (aDlg->exec()) {
+ setLinkedNode((char*)aDlg->getName().latin1());
+ myMain->getGraph()->sync();
+ }
+ delete aDlg;
+}
+
+
+void SUPERVGUI_GotoNode::setLinkedNode(char* theNodeName) {
+ getGotoNode()->SetCoupled(theNodeName);
+}
+
+
+
+//-----------------------------------------------------------
+//*************** Select Inline node dialog******************
+//-----------------------------------------------------------
+
+SUPERVGUI_SelectInlineDlg::SUPERVGUI_SelectInlineDlg(SUPERVGUI_Main* theMain)
+ :QDialog(theMain, 0, true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+ setSizeGripEnabled( true );
+ setCaption(tr("TIT_FUNC_PYTHON"));
+ QGridLayout* aMainLayout = new QGridLayout(this, 2, 2, 7, 4);
+
+ QLabel* aLabel = new QLabel("Connect to", this );
+ aMainLayout->addWidget(aLabel, 0, 0);
+
+ myCombo = new QComboBox(this);
+ SUPERV_Nodes aNodesList = theMain->getDataflow()->Nodes();
+ int i;
+ for (i = 0; i < aNodesList->INodes.length(); i++) {
+ myCombo->insertItem(QString(aNodesList->INodes[i]->Name()));
+ }
+ for (i = 0; i < aNodesList->LNodes.length(); i++) {
+ myCombo->insertItem(QString(aNodesList->LNodes[i]->Name()));
+ }
+ for (i = 0; i < aNodesList->SNodes.length(); i++) {
+ myCombo->insertItem(QString(aNodesList->SNodes[i]->Name()));
+ }
+ aMainLayout->addWidget(myCombo, 0, 1);
+
+ QGroupBox* aBtnBox = new QGroupBox( this );
+ aBtnBox->setColumnLayout( 0, Qt::Vertical );
+ aBtnBox->layout()->setSpacing( 0 ); aBtnBox->layout()->setMargin( 0 );
+ QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox->layout() );
+ aBtnLayout->setAlignment( Qt::AlignTop );
+ aBtnLayout->setSpacing( 6 ); aBtnLayout->setMargin( 11 );
+
+ QPushButton* aOKBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
+ connect( aOKBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ aBtnLayout->addWidget( aOKBtn );
+
+ aBtnLayout->addStretch();
+
+ QPushButton* aCancelBtn = new QPushButton( tr("BUT_CANCEL"), aBtnBox );
+ connect( aCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ aBtnLayout->addWidget( aCancelBtn );
+
+ aMainLayout->addMultiCellWidget(aBtnBox, 1, 1, 0, 1);
+}
--- /dev/null
+// File : SUPERVGUI_ControlNode.h
+// Created : 14 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+#ifndef SUPERVGUI_ControlNode_H
+#define SUPERVGUI_ControlNode_H
+
+#include "SUPERVGUI_GraphNode.h"
+#include <qlayout.h>
+#include <qdialog.h>
+#include <qcombobox.h>
+
+
+class SUPERVGUI_EndControlNode;
+
+
+/**
+ * Start node of Switch and Loop
+ */
+class SUPERVGUI_StartControlNode: public SUPERVGUI_GraphNode {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_StartControlNode(QWidget* theParent, SUPERVGUI_Main* theMain,
+ SUPERV_CNode theNode);
+ virtual ~SUPERVGUI_StartControlNode() {};
+
+ virtual void hideAll();
+ virtual void showAll();
+ virtual void updateShape();
+ virtual void deletePort(SUPERVGUI_Port* thePort);
+
+ void setEndNode(SUPERVGUI_EndControlNode* theEndNode);
+
+ virtual QPoint getOutConnectPnt();
+
+ public slots:
+ void switchPorts();
+ virtual void rename();
+ virtual void remove();
+ virtual void addInputPort();
+ virtual void addOutputPort();
+
+ private:
+ void setShape();
+
+ SUPERVGUI_EndControlNode* myEndNode;
+ int myPortsItem;
+};
+
+
+
+
+/**
+ * End node of Switch and Loop
+ */
+class SUPERVGUI_EndControlNode: public SUPERVGUI_GraphNode {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_EndControlNode(QWidget* theParent, SUPERVGUI_Main* theMain,
+ SUPERV_CNode theNode, SUPERVGUI_StartControlNode* theStart);
+ virtual ~SUPERVGUI_EndControlNode() {};
+
+ virtual void hideAll();
+ virtual void showAll();
+ virtual void updateShape();
+
+ virtual QPoint getInConnectPnt();
+
+ public slots:
+ void switchPorts();
+
+ private:
+ void setShape();
+
+ SUPERVGUI_StartControlNode* myStartNode;
+ int myPortsItem;
+};
+
+
+class SUPERVGUI_SelectInlineDlg: public QDialog {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_SelectInlineDlg(SUPERVGUI_Main* theMain);
+ virtual ~SUPERVGUI_SelectInlineDlg() {};
+
+ QString getName() { return myCombo->currentText(); }
+
+ private:
+ QComboBox* myCombo;
+};
+
+
+/**
+ * GOTO node
+ */
+class SUPERVGUI_GotoNode: public SUPERVGUI_GraphNode {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_GotoNode(QWidget* theParent, SUPERVGUI_Main* theMain,
+ SUPERV_CNode theNode);
+ virtual ~SUPERVGUI_GotoNode() {};
+
+ virtual void hideAll();
+ virtual void showAll();
+ virtual void updateShape();
+
+ void setLinkedNode(char* theNodeName);
+
+ public slots:
+ void linkToNode();
+
+ private:
+ void setShape();
+
+
+};
+
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_CtrlLink.cxx
+// Created : 14 / 05 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#include "SUPERVGUI_CtrlLink.h"
+#include "SUPERVGUI_Graph.h"
+#include "SUPERVGUI_GraphNode.h"
+
+#define LINE_WIDTH 2
+#define DRAW_CLR Qt::black
+
+SUPERVGUI_CtrlLink::SUPERVGUI_CtrlLink(SUPERVGUI_Graph* theGraph,
+ SUPERVGUI_GraphNode* theFromNode,
+ SUPERVGUI_GraphNode* theToNode)
+{
+ myOutNode = theFromNode;
+ myInNode = theToNode;
+ myGraph = theGraph;
+}
+
+
+
+void SUPERVGUI_CtrlLink::paint(QPainter* thePainter, bool toErase) {
+ if ((myGraph == NULL) || (myInNode == NULL) || (myOutNode == NULL))
+ return;
+ thePainter->save();
+
+ QPen aDataPen;
+ aDataPen.setWidth(LINE_WIDTH);
+ if (toErase) {
+ aDataPen.setColor(myGraph->viewport()->paletteBackgroundColor());
+ } else {
+ aDataPen.setColor(DRAW_CLR);
+ }
+ thePainter->setPen(aDataPen);
+ thePainter->moveTo(myOutNode->getOutConnectPnt());
+ thePainter->lineTo(myInNode->getInConnectPnt());
+
+ thePainter->restore();
+}
--- /dev/null
+// File : SUPERVGUI_CtrlLink.h
+// Created : 14 / 05 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#ifndef SUPERVGUI_CTRLLink_H
+#define SUPERVGUI_CTRLLink_H
+
+
+#include "SUPERVGUI_Def.h"
+
+class SUPERVGUI_Graph;
+class SUPERVGUI_GraphNode;
+
+class SUPERVGUI_CtrlLink {
+public:
+ SUPERVGUI_CtrlLink() { myOutNode=NULL; myInNode=NULL; myGraph=NULL; }
+
+ SUPERVGUI_CtrlLink(SUPERVGUI_Graph* theGraph,
+ SUPERVGUI_GraphNode* theFromNode,
+ SUPERVGUI_GraphNode* theToNode);
+
+ ~SUPERVGUI_CtrlLink() {};
+
+
+ void paint(QPainter* thePainter, bool toErase);
+
+private:
+ SUPERVGUI_GraphNode* myOutNode;
+ SUPERVGUI_GraphNode* myInNode;
+ SUPERVGUI_Graph* myGraph;
+};
+
+#endif
--- /dev/null
+// File : SUPERVGUI_Def.h
+// Created : 18 / 11 / 2002
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+#ifndef SUPERVGUI_DEF_H
+#define SUPERVGUI_DEF_H
+
+
+// Nom du noeud de supervision dans l'etude
+// ----------------------------------------
+
+#define STUDY_SUPERVISION "Supervision"
+
+#define STUDY_PORT_IN "In"
+#define STUDY_PORT_OUT "Out"
+
+// Nom d'un nouveau Dataflow
+// -------------------------
+
+#define MAIN_NEW "aNewDataFlow"
+
+#define MAIN_COLOR QColor(165, 255, 176)
+#define MAIN_TITLE QColor( 63, 213, 255)
+#define MAIN_CTRL QColor(255, 108, 106)
+#define MAIN_BACK QColor(NODE_RED, NODE_GREEN, NODE_BLUE)
+
+// Taille du dataflow sous forme de graphe
+// ---------------------------------------
+
+#define GRAPH_WIDTH 3500
+#define GRAPH_HEIGHT 3500
+
+#define GRAPH_MAX 245e5
+
+// Taille du dataflow sous forme de tableau
+// ----------------------------------------
+
+#define ARRAY_WIDTH 1500
+#define ARRAY_HEIGHT 3000
+
+#define CELL_WIDTH 270
+#define CELL_WIDTH_PART 90
+#define CELL_HEIGHT 25
+
+#define CELL_SPACE 5
+
+// Noeuds
+// ------
+/*
+NODE_Waiting "Waiting", 035, 192, 255, true, true, true, true bleu
+NODE_Running "Running", 032, 210, 032, true, true, true, true vert
+NODE_Suspended "Suspended", 255, 180, 000, false, true, true, true orange
+NODE_Done "Finished", 255, 158, 255, true, false, true, false violet
+NODE_Errored "Aborted", 255, 000, 000, true, false, true, false rouge
+NODE_Killed "Killed", 255, 000, 000, true, false, b, !b rouge
+NODE_Editing "", NODE_RED, NODE_GREEN, NODE_BLUE, true, false, true, false fond
+*/
+
+
+#define NODE_RED 255
+#define NODE_GREEN 249
+#define NODE_BLUE 147
+
+#define NODE_DX 35
+#define NODE_DY 40
+
+// Ports
+// -----
+
+#define PORT_WIDTH 75
+#define PORT_HEIGHT 28
+
+// Taille des points carres constituant les lignes entre les noeuds
+// ----------------------------------------------------------------
+
+#define POINT_SIZE 5
+#define POINT_SIZE_HALF 2
+
+// Taille et couleurs des liens
+// ----------------------------
+
+#define LINK_WIDTH 2
+
+#define LINK_DATA QColor( 0, 0, 0), LINK_WIDTH
+#define LINK_CTRL MAIN_CTRL , LINK_WIDTH
+#define LINK_SKCH QColor(255, 0, 230), LINK_WIDTH
+
+// Taille des labels des noeuds
+// ----------------------------
+
+#define LABEL_WIDTH 160
+#define LABEL_HEIGHT 20
+
+// Taille de la boite de filtre de notification
+// --------------------------------------------
+
+#define NOTIFICATION_WIDTH 250
+#define NOTIFICATION_HEIGHT 450
+
+// Names of control ports
+// -------------------------
+#define OUTVOID "OutVoid"
+#define INVOID "InVoid"
+
+// Convention pour la souris
+// -------------------------
+
+#define MouseNo (-2)
+
+// Trace pour l'aide a la mise au point
+// ------------------------------------
+
+//#define DEBUG_MODE_COMPIL
+
+#ifdef DEBUG_MODE_COMPIL
+
+#define Trace(m) MESSAGE(m);
+
+#else
+
+#define Trace(m)
+
+#endif
+
+
+// Includes de base
+// ----------------
+
+#include <stdio.h>
+
+// Includes Qt
+// -----------
+
+#include <qobjectlist.h>
+
+#include <qmainwindow.h>
+#include <qscrollview.h>
+
+#include <qdialog.h>
+#include <qfiledialog.h>
+#include <qinputdialog.h>
+#include <qmessagebox.h>
+
+#include <qpopupmenu.h>
+#include <qtimer.h>
+#include <qpainter.h>
+
+#include <qmultilineedit.h>
+#include <qlistview.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+
+//VRV: porting on Qt 3.0.5
+#if QT_VERSION >= 0x030005
+#include <qcursor.h>
+#endif
+//VRV: porting on Qt 3.0.5
+
+// Acces au moteur de supervision
+// ------------------------------
+
+#include "utilities.h"
+
+#include "SALOME_LifeCycleCORBA.hxx"
+#include CORBA_CLIENT_HEADER(SUPERV)
+#include CORBA_SERVER_HEADER(SALOMEDS)
+#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
+
+#define SUPERV_Engine SUPERV::SuperG_var*
+
+#define SUPERV_Graph SUPERV::Graph_var
+
+#define SUPERV_CNode SUPERV::CNode_var
+#define SUPERV_FNode SUPERV::FNode_var
+#define SUPERV_INode SUPERV::INode_var
+#define SUPERV_SNode SUPERV::SNode_var
+#define SUPERV_LNode SUPERV::LNode_var
+#define SUPERV_GNode SUPERV::GNode_var
+#define SUPERV_ELNode SUPERV::ELNode_var
+#define SUPERV_ESNode SUPERV::ESNode_var
+
+#define SUPERV_Links SUPERV::ListOfLinks_var
+#define SUPERV_Ports SUPERV::ListOfPorts_var
+#define SUPERV_Nodes SUPERV::ListOfNodes_var
+#define SUPERV_Strings SUPERV::ListOfStrings_var
+
+#define SUPERV_Link SUPERV::Link_var
+#define SUPERV_Date SUPERV::SDate
+#define SUPERV_Port SUPERV::Port_var
+
+#define SUPERV_Editing SUPERV::EditingState
+#define SUPERV_Running SUPERV::RunningState
+#define SUPERV_Suspend SUPERV::SuspendState
+#define SUPERV_Done SUPERV::DoneState
+#define SUPERV_Error SUPERV::ErrorState
+#define SUPERV_Kill SUPERV::KillState
+#define SUPERV_Stop SUPERV::StopState
+#define SUPERV_Ready SUPERV::ReadyState
+#define SUPERV_Waiting SUPERV::WaitingState
+
+//#define SUPERV_Event SUPERV::GraphEvent
+//#define SUPERV_State SUPERV::GraphState
+
+#define SUPERV_isNull(oc) (CORBA::is_nil(oc))
+
+
+enum GraphViewType { GRAPH, CONTROLFLOW, TABLE };
+//enum NodeType { COMPUTE, SWITCH, LOOP, GOTO, LABEL };
+
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Graph.cxx
+// Created : 17 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Def.h"
+#include "SUPERVGUI_Graph.h"
+#include "SUPERVGUI_Main.h"
+#include "SUPERVGUI_ComputeNode.h"
+#include "SUPERVGUI_ControlNode.h"
+
+
+//#define CHECKTIME
+
+#ifdef CHECKTIME
+#include <sys/timeb.h>
+#endif
+
+
+#define UPDATECONTROLNODES(NodesName) \
+ n = nodes->NodesName.length(); \
+ for (int i=0; i<n; i++) { \
+ SUPERV_CNode aCNode = SUPERV::CNode::_narrow(nodes->NodesName[i]); \
+ SUPERV_CNode aCNodeEnd = SUPERV::CNode::_narrow(nodes->NodesName[i]->Coupled()); \
+ ihmNode = (SUPERVGUI_Node *)child(aCNode->Name(), "SUPERVGUI_Node"); \
+ if (ihmNode == NULL) { \
+ main->addControlNode(aCNode, aCNodeEnd, false); \
+ } else { \
+ ResizeGraph(ihmNode, aCNode->X(), aCNode->Y()); \
+ moveChild(ihmNode, aCNode->X(), aCNode->Y()); \
+ ihmList->removeRef(ihmNode); \
+ ihmNode->sync(); \
+ aEndNodePrs = (SUPERVGUI_EndControlNode*)child(aCNodeEnd->Name(), "SUPERVGUI_EndControlNode"); \
+ ResizeGraph(aEndNodePrs, aCNodeEnd->X(), aCNodeEnd->Y()); \
+ moveChild(aEndNodePrs, aCNodeEnd->X(), aCNodeEnd->Y()); \
+ ihmList->removeRef(aEndNodePrs); \
+ aEndNodePrs->sync(); \
+ } \
+ }
+
+
+#define UPDATENODES(NodesName, FuncName) \
+ n = nodes->NodesName.length(); \
+ for (int i=0; i<n; i++) { \
+ SUPERV_CNode aCNode = SUPERV::CNode::_narrow(nodes->NodesName[i]); \
+ ihmNode = (SUPERVGUI_Node *)child(aCNode->Name(), "SUPERVGUI_Node"); \
+ if (ihmNode == NULL) { \
+ main->FuncName(aCNode); \
+ } else { \
+ ResizeGraph(ihmNode, aCNode->X(), aCNode->Y()); \
+ moveChild(ihmNode, aCNode->X(), aCNode->Y()); \
+ ihmList->removeRef(ihmNode); \
+ ihmNode->sync(); \
+ } \
+ }
+
+
+SUPERVGUI_Graph::SUPERVGUI_Graph(SUPERVGUI_Main* m):
+ SUPERVGUI_View(m),
+ myNewLink(0)
+{
+ Trace("SUPERVGUI_Graph::SUPERVGUI_Graph");
+ myIsControlView = false;
+ myLinksList.setAutoDelete(true);
+ viewport()->setMouseTracking(true);
+
+ resizeContents(GRAPH_WIDTH, GRAPH_HEIGHT);
+
+ if (SUPERV_isNull(main->getDataflow())) return;
+
+
+ //create sketching popup menu
+ mySketchPopup = new QPopupMenu(viewport());
+ if (!mySketchPopup->isCheckable())
+ mySketchPopup->setCheckable(true);
+ myDelPntItem = mySketchPopup->insertItem(tr("MSG_DEL_LAST_PNT"), this, SLOT(delLastPnt()));
+ mySketchPopup->insertItem(tr("MSG_DEL_LINK"), this, SLOT(delCreatingLink()));
+ myOrtoItem = mySketchPopup->insertItem(tr("MSG_ORTHO_LINE"), this, SLOT(setOrtho()));
+
+ //create link popup menu
+ myLinkPopup = new QPopupMenu(viewport());
+ myDelLinkItem = myLinkPopup->insertItem(tr("MSG_DELLINK"), this, SLOT(deleteLink()));
+ myAddLinkPntItem = myLinkPopup->insertItem(tr("MSG_ADD_POINT"), this, SLOT(addPoint()));
+ myDelLinkPntItem = myLinkPopup->insertItem(tr("MSG_DEL_POINT"), this, SLOT(deletePoint()));
+}
+
+
+
+SUPERVGUI_Graph::~SUPERVGUI_Graph() {
+}
+
+/**
+ * Synchronizes Graph presentation with internal graph structure
+ */
+void SUPERVGUI_Graph::sync() {
+ if (SUPERV_isNull(main->getDataflow())) return;
+
+ myLinksList.clear();
+
+ SUPERVGUI_Node* ihmNode;
+ QObjectList* ihmList = queryList("SUPERVGUI_Node");
+ SUPERV_Nodes nodes = main->getDataflow()->Nodes();
+
+ MESSAGE("CNodes="<<nodes->CNodes.length());
+ MESSAGE("FNodes="<<nodes->FNodes.length());
+ MESSAGE("INodes="<<nodes->INodes.length());
+ MESSAGE("GNodes="<<nodes->GNodes.length());
+ MESSAGE("LNodes="<<nodes->LNodes.length());
+ MESSAGE("SNodes="<<nodes->SNodes.length());
+
+ int n;
+ UPDATENODES(CNodes, addComputeNode);
+ UPDATENODES(FNodes, addComputeNode);
+ UPDATENODES(INodes, addComputeNode);
+ UPDATENODES(GNodes, addGOTONode);
+
+ SUPERVGUI_EndControlNode* aEndNodePrs;
+ UPDATECONTROLNODES(LNodes);
+ UPDATECONTROLNODES(SNodes);
+
+ QObjectListIt i(*ihmList);
+ while ((ihmNode=(SUPERVGUI_Node*)i.current()) != 0) {
+ ++i;
+ ihmNode->close(true);
+ }
+ delete ihmList;
+
+ ihmList = queryList("SUPERVGUI_GraphNode");
+ i=(*ihmList);
+ SUPERVGUI_GraphNode* aGraphNode;
+ while ((aGraphNode=(SUPERVGUI_GraphNode*)i.current()) != 0) {
+ ++i;
+ aGraphNode->updateLinksPrs();
+ }
+ delete ihmList;
+
+ draw();
+}
+
+
+/**
+ * Reimplemented for repainting links
+ */
+bool SUPERVGUI_Graph::eventFilter(QObject* object, QEvent* event) {
+ if (event->type() == QEvent::Paint) {
+ draw();
+ return true;
+ }
+ return QScrollView::eventFilter(object, event);
+}
+
+
+/**
+ * Clears content of Graph (links)
+ */
+void SUPERVGUI_Graph::clearView() {
+ QPainter aPainter(viewport());
+ aPainter.eraseRect(viewport()->rect());
+}
+
+
+/**
+ * Draws links using off screen buffer
+ */
+void SUPERVGUI_Graph::draw() {
+#ifdef CHECKTIME
+ struct timeb aTm1;
+ ftime(&aTm1);
+#endif
+ if (myLinksList.count() == 0) {
+ return;
+ }
+ int aWidth = viewport()->width();
+ int aHeight = viewport()->height();
+ QPixmap aPixmap(aWidth, aHeight);
+ aPixmap.setOptimization(QPixmap::BestOptim);
+ aPixmap.fill(viewport()->paletteBackgroundColor());
+
+ QPainter aPainter(&aPixmap);
+ QPoint aPos = viewportToContents(viewport()->pos());
+
+ if (myIsControlView) {
+ SUPERVGUI_CtrlLink* aLink;
+ QMap<QString, SUPERVGUI_CtrlLink>::Iterator it;
+ for ( it = myCtrlLinks.begin(); it != myCtrlLinks.end(); ++it ) {
+ it.data().paint(&aPainter, false);
+ }
+ } else {
+ SUPERVGUI_Link* aLink;
+ for (aLink = myLinksList.first(); aLink; aLink = myLinksList.next()) {
+ aLink->isInRect(aPos.x(), aPos.y(), aWidth, aHeight);
+ if (aLink->isInRect(aPos.x(), aPos.y(), aWidth, aHeight)) {
+ aLink->paint(&aPainter, false);
+ }
+ }
+ }
+ bitBlt(viewport(), 0, 0,
+ &aPixmap, 0, 0, aWidth, aHeight,
+ Qt::CopyROP, true);
+
+ if (myNewLink) {
+ myNewLink->repaintSketch();
+ }
+#ifdef CHECKTIME
+ struct timeb aTm2;
+ ftime(&aTm2);
+ ulong aTm = 1000*(aTm2.time-aTm1.time)+(aTm2.millitm-aTm1.millitm);
+ cout<<"### Time="<<aTm<<endl;
+#endif
+}
+
+
+void SUPERVGUI_Graph::contentsMousePressEvent(QMouseEvent* e) {
+ Trace("SUPERVGUI_Graph::contentsMousePressEvent");
+ if ( e->button() == Qt::RightButton) {
+ if (myNewLink) {
+ main->showPopup(mySketchPopup, e);
+ } else {
+ SUPERVGUI_Link* aLink = SUPERVGUI_Link::getSelectedLink();
+ if (aLink && main->isEditable()) {
+ myLinkPopup->setItemEnabled(myAddLinkPntItem,
+ !aLink->haveSelectedPoint());
+ myLinkPopup->setItemEnabled(myDelLinkPntItem,
+ aLink->haveSelectedPoint());
+
+
+ if (!aLink->isESInputPort()) {
+ SUPERV::KindOfPort aOutType = aLink->getOutputPort()->getPort()->Kind();
+ SUPERV::KindOfPort aInType = aLink->getInputPort()->getPort()->Kind();
+ myLinkPopup->setItemEnabled(myDelLinkItem,
+ ((aOutType != SUPERV::LoopParameter)
+ &&
+ (aInType != SUPERV::LoopParameter)));
+ }
+
+ myMousePos = e->pos();
+ mySelectedLink = aLink;
+ mySelectedPoint = mySelectedLink->getSelectedPoint();
+ main->showPopup(myLinkPopup, e);
+ } else {
+ mySelectedLink = 0;
+ main->showPopup(myPopup, e);
+ }
+ }
+ }
+ emit mousePressed(e);
+
+ SUPERVGUI_View::contentsMousePressEvent(e);
+}
+
+
+void SUPERVGUI_Graph::contentsMouseReleaseEvent(QMouseEvent* e) {
+ Trace("SUPERVGUI_Graph::contentsMouseReleaseEvent");
+ if (myNewLink && (e->button() == Qt::LeftButton)) {
+ myNewLink->addTmpPoint(e->pos());
+ mySketchPopup->setItemEnabled(myDelPntItem, true);
+ }
+ emit mouseReleased(e);
+ SUPERVGUI_View::contentsMouseReleaseEvent(e);
+}
+
+
+void SUPERVGUI_Graph::contentsMouseMoveEvent(QMouseEvent* e) {
+ Trace("SUPERVGUI_Graph::contentsMouseMoveEvent");
+ if (myNewLink) {
+ myNewLink->drawTo(e->pos());
+ }
+ emit mouseMoved(e);
+ SUPERVGUI_View::contentsMouseMoveEvent(e);
+}
+
+
+void SUPERVGUI_Graph::addPoint() {
+ mySelectedLink->addPoint(myMousePos.x(), myMousePos.y());
+}
+
+
+void SUPERVGUI_Graph::deletePoint() {
+ mySelectedLink->removePoint(mySelectedPoint);
+}
+
+
+void SUPERVGUI_Graph::deleteLink() {
+ QString aName;
+ if (mySelectedLink->isESInputPort())
+ aName = mySelectedLink->getInputPortES()->getPort()->Name();
+ else
+ aName = mySelectedLink->getInputPort()->getPort()->Name();
+
+ if (aName != "Default") {
+ deleteLink(mySelectedLink);
+ mySelectedLink = 0;
+ repaintContents();
+ }
+}
+
+
+void SUPERVGUI_Graph::deleteLink(SUPERVGUI_Link* theLink) {
+ theLink->destroyEngine();
+ myLinksList.removeRef(theLink);
+ if (myLinksList.count() == 0) clearView();
+}
+
+
+void SUPERVGUI_Graph::setAsFromStudy(bool theToStudy) {
+ SUPERVGUI_View::setAsFromStudy(theToStudy);
+ if (theToStudy) return;
+
+ SUPERVGUI_PortOut* aPortOut;
+ QObjectList* aPortsList = queryList("SUPERVGUI_PortOut");
+ QObjectListIt aPortIt(*aPortsList);
+ while ((aPortOut=(SUPERVGUI_PortOut*)aPortIt.current()) != 0) {
+ ++aPortIt;
+ if (aPortOut->isInStudy()) {
+ aPortOut->setStudyState(false);
+ aPortOut->sync();
+ }
+ }
+ delete aPortsList;
+}
+
+
+/**
+ * Begins Link sketching
+ */
+void SUPERVGUI_Graph::sketchBegin(SUPERVGUI_Port* thePort) {
+ if (thePort == 0) return;
+
+ SUPERV_Port aPort = thePort->getPort();
+ myNewLink = new SUPERVGUI_Link(this);
+ mySketchPopup->setItemEnabled(myDelPntItem, false);
+ mySketchPopup->setItemChecked(myOrtoItem, myNewLink->isOrthoMode());
+
+ myNewLink->setBeginPort(thePort);
+
+ if (aPort->IsInput()) {
+ if (aPort->Kind() == SUPERV::EndSwitchParameter
+ ||
+ aPort->Node()->Kind() == SUPERV::EndSwitchNode) {
+ myNewLink->setInputPortES(dynamic_cast<SUPERVGUI_PortInESNode*>(thePort));
+ }
+ else
+ myNewLink->setInputPort(dynamic_cast<SUPERVGUI_PortIn*>(thePort));
+ }
+ else
+ myNewLink->setOutputPort(dynamic_cast<SUPERVGUI_PortOut*>(thePort));
+}
+
+
+void SUPERVGUI_Graph::sketchEnd(SUPERVGUI_Port* thePort) {
+ if (!myNewLink) return;
+
+ bool aIsInput = myNewLink->getBeginPort()->getPort()->IsInput();
+ if (aIsInput && thePort->getPort()->IsInput()
+ ||
+ !aIsInput && !thePort->getPort()->IsInput()) {
+ return;
+ }
+
+
+ SUPERV_Port aPort = thePort->getPort();
+ if (aPort->IsInput()) {
+
+ int aKind = myNewLink->getOutputPort()->getPort()->Kind();
+
+ if ((aPort->Kind() == SUPERV::EndSwitchParameter
+ ||
+ aPort->Node()->Kind() == SUPERV::EndSwitchNode)
+ &&
+ (aKind == SUPERV::InLineParameter || aKind == SUPERV::ServiceParameter))
+ {
+ QString aName(aPort->Name());
+ if (aName != "Default")
+ myNewLink->setInputPortES(dynamic_cast<SUPERVGUI_PortInESNode*>(thePort));
+ }
+ else{
+ if (aPort->IsLinked()) return;
+
+ if (aKind == SUPERV::GateParameter || aPort->Kind() == SUPERV::GateParameter) {
+ if (aKind != aPort->Kind() && aKind != SUPERV::InLineParameter
+ && aPort->Kind() != SUPERV::InLineParameter) {
+ return;
+ }
+ else { //connection like Gate <--> Gate
+ myNewLink->setInputPort(dynamic_cast<SUPERVGUI_PortIn*>(thePort));
+ }
+ } else {
+ myNewLink->setInputPort(dynamic_cast<SUPERVGUI_PortIn*>(thePort));
+ }
+ }
+
+ } else {
+ if (myNewLink->isESInputPort()) {
+ if(aPort->Kind() == SUPERV::InLineParameter || aPort->Kind() == SUPERV::ServiceParameter)
+ {
+ myNewLink->setOutputPort(dynamic_cast<SUPERVGUI_PortOut*>(thePort));
+ }
+ else
+ return;
+ }
+ else {
+ int aKind = myNewLink->getInputPort()->getPort()->Kind();
+
+ if (aKind == SUPERV::GateParameter || aPort->Kind() == SUPERV::GateParameter) {
+ if (aKind != aPort->Kind() && aKind != SUPERV::InLineParameter
+ && aPort->Kind() != SUPERV::InLineParameter) {
+ return;
+ }
+ else //connection like Gate <--> Gate
+ myNewLink->setOutputPort(dynamic_cast<SUPERVGUI_PortOut*>(thePort));
+ } else
+ myNewLink->setOutputPort(dynamic_cast<SUPERVGUI_PortOut*>(thePort));
+ }
+ }
+
+ if (myNewLink->isCreationComplete()) { // if everything is defined
+ if (myNewLink->createEngine()) {
+ myLinksList.append(myNewLink);
+ myNewLink = 0;
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_CREATE_LINK"));
+ delete myNewLink;
+ }
+ }
+}
+
+
+/**
+ * Returns true if presentation of link exists
+ */
+bool SUPERVGUI_Graph::isLinkPrsExists(SUPERV_Link theLink) {
+ SUPERVGUI_Link* aTmpLink;
+ for (aTmpLink = myLinksList.first(); aTmpLink; aTmpLink = myLinksList.next()) {
+ SUPERVGUI_PortOut* aOutPort = aTmpLink->getOutputPort();
+ if (strcmp(aOutPort->getPort()->Node()->Name(),
+ theLink->OutPort()->Node()->Name()) == 0) {
+ QString aName(theLink->OutPort()->Name());
+ aName += "Output";
+ if (aOutPort->name() == aName) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
+/**
+ * Creates link presentation from link engine
+ * Returns false if fails
+ */
+bool SUPERVGUI_Graph::createLinkPrs(SUPERV_Link theLink) {
+ SUPERVGUI_Link* aNewLink = new SUPERVGUI_Link(this, theLink);
+
+ // Find output node
+ SUPERVGUI_Node* aOutNode = (SUPERVGUI_Node*)
+ child(theLink->OutPort()->Node()->Name(), "SUPERVGUI_Node");
+ if (aOutNode) {
+ QString aName(theLink->OutPort()->Name());
+ aName += "Output";
+ SUPERVGUI_PortOut* aOutPort = (SUPERVGUI_PortOut*)
+ aOutNode->child(aName, "SUPERVGUI_PortOut");
+ if (aOutPort)
+ aNewLink->setOutputPort(aOutPort);
+ else {
+ delete aNewLink;
+ return false;
+ }
+ } else {
+ delete aNewLink;
+ return false;
+ }
+ // Find input node
+ SUPERVGUI_Node* aInNode = (SUPERVGUI_Node*)
+ child(theLink->InPort()->Node()->Name(), "SUPERVGUI_Node");
+ if (aInNode) {
+ QString aName(theLink->InPort()->Name());
+ aName += "Input";
+ if (theLink->InPort()->Kind() == SUPERV::EndSwitchParameter) {
+ //If input port is EndSwitchParameter
+ SUPERVGUI_PortInESNode* aInPortES =(SUPERVGUI_PortInESNode*)
+ aInNode->child(aName, "SUPERVGUI_PortInESNode"); //returns null
+ if (aInPortES)
+ aNewLink->setInputPortES(aInPortES);
+ else {
+ delete aNewLink;
+ return false;
+ }
+ } else {
+ SUPERVGUI_PortIn* aInPort =(SUPERVGUI_PortIn*)
+ aInNode->child(aName, "SUPERVGUI_PortIn");
+ if (aInPort)
+ aNewLink->setInputPort(aInPort);
+ else {
+ delete aNewLink;
+ return false;
+ }
+ }
+ } else {
+ delete aNewLink;
+ return false;
+ }
+ aNewLink->setVisible(!myIsControlView);
+ myLinksList.append(aNewLink);
+ return true;
+}
+
+
+void SUPERVGUI_Graph::delLastPnt() {
+ if (myNewLink) {
+ myNewLink->delLastTmpPoint();
+ }
+}
+
+void SUPERVGUI_Graph::delCreatingLink() {
+ myNewLink->abortCreation();
+ delete myNewLink;
+ myNewLink=0;
+ repaintContents();
+}
+
+void SUPERVGUI_Graph::setOrtho() {
+ if (myNewLink) {
+ bool aIsOrtho = !mySketchPopup->isItemChecked(myOrtoItem);
+ myNewLink->setOrthoMode(aIsOrtho);
+ mySketchPopup->setItemChecked(myOrtoItem, aIsOrtho);
+ }
+}
+
+
+
+void SUPERVGUI_Graph::setFullView() {
+ QObjectList* aNodeList = queryList("SUPERVGUI_Node");
+ QObjectListIt aIt(*aNodeList);
+ SUPERVGUI_Node* aNode;
+ while ((aNode=(SUPERVGUI_Node*)aIt.current()) != 0) {
+ ++aIt;
+ aNode->showAll();
+ }
+ delete aNodeList;
+
+ myCtrlLinks.clear();
+ SUPERVGUI_Link* aLink;
+ for (aLink = myLinksList.first(); aLink; aLink = myLinksList.next()) {
+ aLink->setVisible(true);
+ }
+ draw();
+ myIsControlView = false;
+}
+
+
+void SUPERVGUI_Graph::setControlView() {
+ QObjectList* aNodeList = queryList("SUPERVGUI_Node");
+ QObjectListIt aIt(*aNodeList);
+ SUPERVGUI_Node* aNode;
+ while ((aNode=(SUPERVGUI_Node*)aIt.current()) != 0) {
+ ++aIt;
+ aNode->hideAll();
+ }
+ delete aNodeList;
+ myCtrlLinks.clear();
+ SUPERVGUI_Link* aLink;
+ for (aLink = myLinksList.first(); aLink; aLink = myLinksList.next()) {
+ aLink->setVisible(false);
+
+ QString aOutName(aLink->getEngineLink()->OutPort()->Node()->Name());
+ QString aInName(aLink->getEngineLink()->InPort()->Node()->Name());
+ QString aKey = aOutName + aInName;
+
+ if (!myCtrlLinks.contains(aKey)) {
+ SUPERVGUI_GraphNode* aOutNode = (SUPERVGUI_GraphNode*)
+ child(aOutName, "SUPERVGUI_GraphNode");
+ if (!aOutNode) continue;
+ SUPERVGUI_GraphNode* aInNode = (SUPERVGUI_GraphNode*)
+ child(aInName, "SUPERVGUI_GraphNode");
+ if (!aInNode) continue;
+
+ myCtrlLinks[aKey] = SUPERVGUI_CtrlLink(this, aOutNode, aInNode);
+ }
+ }
+ draw();
+ myIsControlView = true;
+}
+
+
+void SUPERVGUI_Graph::deleteNode(SUPERVGUI_Node* theNode) {
+ theNode->close(true);
+ draw();
+}
+
--- /dev/null
+// File : SUPERVGUI_Graph.h
+// Created : 17 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Graph_H
+#define SUPERVGUI_Graph_H
+
+using namespace std;
+//#include "SUPERVGUI.h"
+#include "SUPERVGUI_View.h"
+#include "SUPERVGUI_Node.h"
+#include "SUPERVGUI_Link.h"
+#include "SUPERVGUI_CtrlLink.h"
+#include <qmap.h>
+
+
+class SUPERVGUI_Main;
+
+class SUPERVGUI_Graph: public SUPERVGUI_View {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Graph(SUPERVGUI_Main* m);
+ virtual ~SUPERVGUI_Graph();
+
+ void sync();
+ void contentsMousePressEvent(QMouseEvent* e);
+ void contentsMouseReleaseEvent(QMouseEvent* e);
+ void contentsMouseMoveEvent(QMouseEvent* e);
+
+
+ virtual void setAsFromStudy(bool theToStudy);
+
+ bool isLinkPrsExists(SUPERV_Link theLink);
+ bool createLinkPrs(SUPERV_Link theLink);
+ void removeLinks()
+ { myLinksList.clear(); };
+
+ void setFullView();
+ void setControlView();
+ bool isControlView() { return myIsControlView; }
+
+ void deleteLink(SUPERVGUI_Link* theLink);
+
+ void deleteNode(SUPERVGUI_Node* theNode);
+
+ void draw();
+ void clearView();
+
+signals:
+ void mouseMoved(QMouseEvent* theEvent);
+ void mousePressed(QMouseEvent* theEvent);
+ void mouseReleased(QMouseEvent* theEvent);
+
+public slots:
+ void sketchBegin(SUPERVGUI_Port* thePort);
+ void sketchEnd(SUPERVGUI_Port* thePort);
+
+
+private slots:
+ void addPoint();
+ void deleteLink();
+ void deletePoint();
+ void delLastPnt();
+ void delCreatingLink();
+ void setOrtho();
+
+ protected:
+ bool eventFilter(QObject* object, QEvent* event);
+
+ private:
+
+ QPoint myMousePos;
+ SUPERVGUI_Link* mySelectedLink;
+ int mySelectedPoint;
+
+ // Popup menu for link creation management
+ QPopupMenu* mySketchPopup;
+ int myDelPntItem;
+ int myOrtoItem;
+
+ // Popup menu for link
+ QPopupMenu* myLinkPopup;
+ int myDelLinkPntItem;
+ int myAddLinkPntItem;
+ int myDelLinkItem;
+
+ bool myIsControlView;
+ SUPERVGUI_Link* myNewLink;
+ QPtrList<SUPERVGUI_Link> myLinksList;
+ QMap<QString, SUPERVGUI_CtrlLink> myCtrlLinks;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_ComputeNode.cxx
+// Created : 09 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+#include "SUPERVGUI_GraphNode.h"
+#include "SUPERVGUI_Graph.h"
+#include "SUPERVGUI_Main.h"
+
+
+SUPERVGUI_GraphNode::SUPERVGUI_GraphNode(QWidget* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode)
+ :SUPERVGUI_Node(theParent, theMain, theNode),
+ MouseX(MouseNo),
+ MouseY(MouseNo)
+{
+ //disconnect(myTitle, 0, this, 0);
+ myTitle = new SUPERVGUI_Label(this, LABEL_WIDTH, LABEL_HEIGHT, name(), QLabel::AlignLeft);
+ myTitle->hide();
+ connect(myTitle, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(mouseTitlePress(QMouseEvent*)));
+ connect(myTitle, SIGNAL(MouseMove (QMouseEvent*)), this, SLOT(mouseTitleMove(QMouseEvent*)));
+ connect(myTitle, SIGNAL(MouseRelease(QMouseEvent*)), this, SLOT(mouseTitleRelease(QMouseEvent*)));
+
+ myPortsBox = new QFrame(0);
+ myPortLayout = new QGridLayout(myPortsBox, 0, 2, 0, 1);
+
+ myTimer = new QTimer(this);
+ connect(myTimer, SIGNAL(timeout()), this, SLOT(movingNode(/*QMouseEvent* e*/)));
+ myStopFlag = true;
+
+ myX = -1;
+ myY = -1;
+ myDifX = 0;
+ myDifY = 0;
+ myFirstDifX = 0;
+ myFirstDifY = 0;
+
+ myPIcount = 0;
+ myPOcount = 0;
+ SUPERV_Ports ports = myNode->Ports();
+ int n = ports->length();
+
+ for (int i=0; i<n; i++) {
+ if (ports[i]->IsInput()) {
+ myPortLayout->addWidget(new SUPERVGUI_PortIn(myPortsBox, myMain, ports[i]),
+ myPIcount, 0);
+ myPIcount++;
+ } else {
+ myPortLayout->addWidget(new SUPERVGUI_PortOut(myPortsBox, myMain, ports[i]),
+ myPOcount, 1, Qt::AlignRight);
+ myPOcount++;
+ }
+ }
+}
+
+
+
+SUPERVGUI_GraphNode::~SUPERVGUI_GraphNode() {
+}
+
+void SUPERVGUI_GraphNode::mouseTitlePress(QMouseEvent* e) {
+ if (e->button() == RightButton) {
+ MouseLeft = 0;
+ showPopup(e);
+ } else {
+ MouseLeft = 1;
+ SUPERVGUI_Graph* sv = myMain->getGraph();
+ MouseX = sv->childX(this) - e->globalX();
+ MouseY = sv->childY(this) - e->globalY();
+ }
+}
+
+void SUPERVGUI_GraphNode::mouseTitleMove(QMouseEvent* e) {
+ Trace("SUPERVGUI_Node::moveAgain")
+ SUPERVGUI_Graph* sv = myMain->getGraph();
+
+ if ((MouseX == MouseNo) && (MouseY == MouseNo)) {
+ MouseX = sv->childX(this) - e->globalX();
+ MouseY = sv->childY(this) - e->globalY();
+ MouseLeft = (e->state() == RightButton? 0: 1);
+ };
+
+ if (MouseLeft == 1) {
+
+ int x = e->globalX()+MouseX;
+ int y = e->globalY()+MouseY;
+ x = x<0? 0: x;
+ y = y<0? 0: y;
+
+ if (x > myMain->getGraph()->horizontalScrollBar()->value()
+ + myMain->getGraph()->viewport()->width() - width()/2
+ ||
+ y > myMain->getGraph()->verticalScrollBar()->value()
+ + myMain->getGraph()->viewport()->height() - height()/2
+ ||
+ x < myMain->getGraph()->horizontalScrollBar()->value()
+ ||
+ y < myMain->getGraph()->verticalScrollBar()->value()){
+ if (!myTimer->isActive()) {
+ myX = x;
+ myY = y;
+ myDifX = x - myNode->X();
+ myDifY = y - myNode->Y();
+ myFirstDifX = myDifX;
+ myFirstDifY = myDifY;
+ }
+
+ StartTimer();
+ myStopFlag = false;
+
+ if (x - myNode->X() > 15 && abs(myDifX) < abs(myDifY)) {
+ if (x > myMain->getGraph()->horizontalScrollBar()->value()
+ + myMain->getGraph()->viewport()->width() - width()/2)
+ myDifX = 5; // or another positive number
+ else {
+ //not out of the right boundary
+ sv->moveChild(this, x, myNode->Y()); //new X and old Y
+ myNode->Coords(x, myNode->Y());
+ myX = x;
+ }
+ }
+
+ if (x - myNode->X() < -15 && abs(myDifX) < abs(myDifY)) {
+ if(x < myMain->getGraph()->horizontalScrollBar()->value())
+ myDifX = -5; //or another negative number
+ else {
+ //not out of the left boundary
+ sv->moveChild(this, x, myNode->Y()); //new X and old Y
+ myNode->Coords(x, myNode->Y());
+ myX = x;
+ }
+ }
+
+ if (y - myNode->Y() > 15 && abs(myDifX) > abs(myDifY)) {
+ if (y > myMain->getGraph()->verticalScrollBar()->value()
+ + myMain->getGraph()->viewport()->height() - height()/2)
+ myDifY = 5; //or another positive number
+ else {
+ //not out of the lower boundary
+ sv->moveChild(this, myNode->X(), y); //old X and new Y
+ myNode->Coords(myNode->X(), y);
+ myY = y;
+ }
+ }
+
+ if (y - myNode->Y() < -15 && abs(myDifX) > abs(myDifY)) {
+ if (y < myMain->getGraph()->verticalScrollBar()->value())
+ myDifY = -5; //or another negative number
+ else {
+ //not out of the upper boundary
+ sv->moveChild(this, myNode->X(), y); //old X and new Y
+ myNode->Coords(myNode->X(), y);
+ myY = y;
+ }
+ }
+
+ }
+ else {
+ if ((myDifX*(x - myNode->X()) < 0 || myDifY*(y - myNode->Y()) < 0)) {
+ StopTimer();
+ myStopFlag = true;
+ }
+ //for mouse moving to boundaries from outside space (chack then node must be move)
+ int xp1, yp1, xp2, yp2;
+ xp1 = myMain->getGraph()->horizontalScrollBar()->value();
+ xp2 = myMain->getGraph()->horizontalScrollBar()->value() +
+ myMain->getGraph()->viewport()->width();
+ yp1 = myMain->getGraph()->verticalScrollBar()->value();
+ yp2 = myMain->getGraph()->verticalScrollBar()->value() +
+ myMain->getGraph()->viewport()->height();
+ if (x >= xp1
+ && x <= xp1+myMain->getGraph()->viewport()->visibleRect().width()
+ && y >= yp1
+ && y <= yp1+myMain->getGraph()->viewport()->visibleRect().height()) {
+ sv->moveChild(this, x, y);
+ myNode->Coords(x, y);
+ }
+
+ }
+ }
+}
+
+void SUPERVGUI_GraphNode::mouseTitleRelease(QMouseEvent* e) {
+ StopTimer();
+ myStopFlag = true;
+}
+
+void SUPERVGUI_GraphNode::movingNode() {
+ SUPERVGUI_Graph* sv = myMain->getGraph();
+
+ myX = myX<0 ? 0: myX;
+ myY = myY<0 ? 0: myY;
+
+ if (myDifX > 0)
+ myX = myX + 5;
+ if (myDifX < 0)
+ myX = myX - 5;
+ if (myDifY > 0)
+ myY = myY + 5;
+ if (myDifY < 0)
+ myY = myY - 5;
+
+ myMain->getGraph()->ResizeGraph(this, myX, myY);
+ myMain->getGraph()->scrollBy( myX - myNode->X(), myY - myNode->Y() );
+ sv->moveChild(this, myX, myY);
+ myNode->Coords(myX, myY);
+}
+
+void SUPERVGUI_GraphNode::StartTimer() {
+ Trace("SUPERVGUI_Main::StartTimer")
+ if (!myTimer->isActive()) {
+ myTimer->start(170);
+ };
+}
+
+void SUPERVGUI_GraphNode::StopTimer() {
+ Trace("SUPERVGUI_Main::StopTimer")
+ if (myTimer->isActive()) {
+ myTimer->stop();
+ };
+}
+
+void SUPERVGUI_GraphNode::deleteLinks() {
+ QObjectList* aList = queryList("SUPERVGUI_Port");
+ SUPERVGUI_Port* aPort;
+ QObjectListIt aIt(*aList);
+ while ((aPort=(SUPERVGUI_Port*)aIt.current()) != 0) {
+ ++aIt;
+ aPort->deleteLinks();
+ }
+ delete aList;
+}
+
+
+void SUPERVGUI_GraphNode::sync() {
+ SUPERVGUI_Node::sync();
+
+ SUPERVGUI_Port* pi;
+ QObjectList* ihmList = queryList("SUPERVGUI_Port");
+ QObjectListIt i(*ihmList);
+ while ((pi=(SUPERVGUI_Port*)i.current()) != 0) {
+ ++i;
+ pi->sync();
+ }
+ delete ihmList;
+}
+
+
+/**
+ * Creates presentation of links to In ports
+ * If toCheckExisting = false the links will be created without checking
+ * of their existing in Graph
+ * If toCheckExisting = true the existing of links will be checked before creation
+ */
+void SUPERVGUI_GraphNode::updateLinksPrs(bool toCheckExisting) {
+ SUPERVGUI_Graph* aGraph= myMain->getGraph();
+ SUPERVGUI_PortIn* pi;
+ QObjectList* ihmList = queryList("SUPERVGUI_PortIn");
+ QObjectListIt i(*ihmList);
+ while ((pi=(SUPERVGUI_PortIn*)i.current()) != 0) {
+ ++i;
+ if (pi->getPort()->IsLinked()) {
+ SUPERV_Link aLink = pi->getPort()->Link();
+ if (toCheckExisting) {
+ if (aGraph->isLinkPrsExists(aLink))
+ continue;
+ }
+ aGraph->createLinkPrs(aLink);
+ }
+ }
+ delete ihmList;
+
+ //Find PortInESNode
+ SUPERVGUI_PortInESNode* piES;
+ QObjectList* ihmListES = queryList("SUPERVGUI_PortInESNode");
+ QObjectListIt iES(*ihmListES);
+ while ((piES=(SUPERVGUI_PortInESNode*)iES.current()) != 0) {
+ ++iES;
+ if (piES->getPort()->IsLinked()) {
+ SUPERV_Links aLinks = piES->getPort()->Links();
+ for (int j=0; j<aLinks->length(); j++) {
+ if (toCheckExisting) {
+ if (aGraph->isLinkPrsExists(aLinks[j]))
+ continue;
+ }
+ aGraph->createLinkPrs(aLinks[j]);
+ }
+ }
+ }
+ delete ihmListES;
+}
+
+
+void SUPERVGUI_GraphNode::setNodeName(QString theName) {
+ SUPERVGUI_Node::setNodeName(theName);
+ myTitle->setText(name());
+}
+
+
+void SUPERVGUI_GraphNode::deletePort(SUPERVGUI_Port* thePort) {
+ if (thePort->isA("SUPERVGUI_PortIn") || thePort->isA("SUPERVGUI_PortInESNode")) {
+ myPIcount--;
+ }
+ else {
+ myPOcount--;
+ }
+ thePort->deleteLinks();
+
+ thePort->getPort()->destroy();
+ thePort->close(true);
+ updatePorts();
+ updateShape();
+}
+
+
+void SUPERVGUI_GraphNode::addInputPort() {
+ SUPERV_Port aPort = createInPort();
+ if (aPort == NULL) return;
+
+ if (getNodeType() == SUPERV::EndSwitchNode) {
+ SUPERVGUI_PortInESNode* aPortPrs = new SUPERVGUI_PortInESNode(myPortsBox, myMain, aPort);
+ myPortLayout->addWidget(aPortPrs, myPIcount, 0);
+
+ if (myPortsBox->isVisible()) {
+ aPortPrs->show();
+ }
+ }
+ else {
+ SUPERVGUI_PortIn* aPortPrs = new SUPERVGUI_PortIn(myPortsBox, myMain, aPort);
+ myPortLayout->addWidget(aPortPrs, myPIcount, 0);
+
+ if (myPortsBox->isVisible()) {
+ aPortPrs->show();
+ }
+ }
+
+ myPIcount++;
+ updatePorts();
+ updateShape();
+}
+
+
+void SUPERVGUI_GraphNode::addOutputPort() {
+ SUPERV_Port aPort = createOutPort();
+ if (aPort == NULL) return;
+
+ SUPERVGUI_PortOut* aPortPrs = new SUPERVGUI_PortOut(myPortsBox, myMain, aPort);
+ myPortLayout->addWidget(aPortPrs, myPOcount, 1, Qt::AlignRight);
+ myPOcount++;
+ if (myPortsBox->isVisible()) {
+ aPortPrs->show();
+ }
+ updatePorts();
+ updateShape();
+}
+
+
+void SUPERVGUI_GraphNode::updatePorts() {
+ bool isAdded = false;
+ SUPERV_Ports aPorts = getEngine()->Ports();
+ int n = aPorts->length();
+ SUPERVGUI_Port* aPortPrs;
+ bool aIsVisible = myPortsBox->isVisible();
+ for (int i=0; i < n; i++) {
+ QString aName(aPorts[i]->Name());
+ aName += (aPorts[i]->IsInput())? "Input":"Output";
+ aPortPrs = (SUPERVGUI_Port*) child(aName, "SUPERVGUI_Port");
+ if (aPortPrs == NULL) {
+ if (aPorts[i]->IsInput()) {
+ SUPERVGUI_PortIn* aPortIn = new SUPERVGUI_PortIn(myPortsBox, myMain, aPorts[i]);
+ myPortLayout->addWidget(aPortIn, myPIcount, 0);
+ if (aIsVisible) aPortIn->show();
+ myPIcount++;
+ isAdded = true;
+ } else {
+ SUPERVGUI_PortOut* aPortOut = new SUPERVGUI_PortOut(myPortsBox, myMain, aPorts[i]);
+ myPortLayout->addWidget(aPortOut, myPOcount, 1, Qt::AlignRight);
+ if (aIsVisible) aPortOut->show();
+ myPOcount++;
+ isAdded = true;
+ }
+ }
+ }
+
+ QObjectList* aShownPortsList = queryList("SUPERVGUI_Port");
+ QObjectListIt aLI(*aShownPortsList);
+ SUPERVGUI_Port* aVisPort;
+
+ while ((aVisPort=(SUPERVGUI_Port*)aLI.current()) != 0) {
+ ++aLI;
+ QString aNameVisible(aVisPort->getPort()->Name());
+
+ bool aIsExists = false;
+ for (int i=0; i < n; i++) {
+ QString aName(aPorts[i]->Name());
+ if (aName == aNameVisible)
+ aIsExists = true;
+ }
+
+ if (!aIsExists) { //we have a visible object, which has no engine entity
+ aVisPort->close(true);
+ }
+ }
+}
+
+
+/**
+ * Returns coordinates of connection point in content coordinates
+ */
+QPoint SUPERVGUI_GraphNode::getInConnectPnt() {
+ return QPoint(pos().x(),
+ pos().y() + (height()/2));
+}
+QPoint SUPERVGUI_GraphNode::getOutConnectPnt() {
+ return QPoint(pos().x() + width(),
+ pos().y() + (height()/2));
+}
--- /dev/null
+// File : SUPERVGUI_GraphNode.h
+// Created : 10 / 01 / 2003
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#ifndef SUPERVGUI_GraphNode_H
+#define SUPERVGUI_GraphNode_H
+
+#include "SUPERVGUI_Node.h"
+#include <qlayout.h>
+
+
+class SUPERVGUI_GraphNode: public SUPERVGUI_Node {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_GraphNode(QWidget* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode);
+ virtual ~SUPERVGUI_GraphNode();
+
+ virtual void hideAll() {};
+ virtual void showAll() {};
+
+ virtual void deleteLinks();
+ virtual void sync();
+
+ virtual void updateLinksPrs(bool toCheckExisting = false);
+ virtual void setNodeName(QString aName);
+
+ virtual void deletePort(SUPERVGUI_Port* thePort);
+
+ virtual QPoint getInConnectPnt();
+ virtual QPoint getOutConnectPnt();
+
+ virtual void updateShape() {};
+ virtual void updatePorts();
+
+ int& getPIcount()
+ { return myPIcount;}
+
+ int& getPOcount()
+ { return myPOcount;}
+
+ public slots:
+ void mouseTitlePress(QMouseEvent* e);
+ void mouseTitleMove(QMouseEvent* e);
+ void mouseTitleRelease(QMouseEvent* e);
+ void movingNode();
+ virtual void addInputPort();
+ virtual void addOutputPort();
+
+// virtual void addInputPortES();
+// virtual void addOutputPortES();
+
+ protected:
+ SUPERVGUI_Label* myTitle;
+
+ QFrame* myPortsBox;
+ QGridLayout* myPortLayout;
+ QTimer* myTimer;
+ int myPIcount;
+ int myPOcount;
+
+ private:
+ void StartTimer();
+ void StopTimer();
+ int MouseX;
+ int MouseY;
+ int MouseLeft;
+ int myX;
+ int myY;
+ int myDifX;
+ int myDifY;
+ int myFirstDifX;
+ int myFirstDifY;
+ bool myStopFlag;
+
+};
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Information.cxx
+// Created : 22 / 01 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Information.h"
+#include "QAD_Application.h"
+#include "QAD_Desktop.h"
+#include "QAD_MessageBox.h"
+#include <qapplication.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+#include <qlayout.h>
+
+
+/*!
+ Constructor
+*/
+SUPERVGUI_Information::SUPERVGUI_Information(SUPERV_CNode node, bool isReadOnly)
+ : QDialog( QAD_Application::getDesktop(), "", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
+{
+ Trace("SUPERVGUI_Information::SUPERVGUI_Information");
+ setCaption( tr( "TLT_INFORMATIONS" ) );
+ setSizeGripEnabled( true );
+ myNode = node;
+
+ QGridLayout* TopLayout = new QGridLayout( this );
+ TopLayout->setSpacing( 6 );
+ TopLayout->setMargin( 11 );
+
+ QGroupBox* TopGroup = new QGroupBox( this, "TopGroup" );
+ TopGroup->setColumnLayout(0, Qt::Vertical );
+ TopGroup->layout()->setSpacing( 0 );
+ TopGroup->layout()->setMargin( 0 );
+ QGridLayout* TopGroupLayout = new QGridLayout( TopGroup->layout() );
+ TopGroupLayout->setAlignment( Qt::AlignTop );
+ TopGroupLayout->setSpacing( 6 );
+ TopGroupLayout->setMargin( 11 );
+
+ QLabel* nameL = new QLabel( tr( "NAME_LBL" ), TopGroup );
+ nameV = new QLineEdit( TopGroup );
+ nameV->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+ nameV->setMinimumSize( 200, 0 );
+ nameV->setReadOnly( isReadOnly );
+ nameV->setText( node->Name() );
+
+ QLabel* authL = new QLabel( tr( "AUTHOR_LBL" ), TopGroup);
+ authV = new QLineEdit( TopGroup );
+ authV->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+ authV->setMinimumSize( 200, 0 );
+ authV->setReadOnly( isReadOnly );
+ authV->setText( node->Author() );
+
+
+ if (node->IsFactory()) {
+ contL = new QLabel( tr( "CONTAINER_LBL" ), TopGroup );
+ contV = new QLineEdit( TopGroup );
+ contV->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+ contV->setMinimumSize( 200, 0 );
+ }
+ QLabel* cdatL = new QLabel( tr( "DATE_CREATION_LBL" ), TopGroup );
+ cdatV = new QLabel( TopGroup );
+ cdatV->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+ cdatV->setMinimumSize( 200, 0 );
+ cdatV->setText( date( node->CreationDate() ) );
+
+ QLabel* udatL = new QLabel( tr( "DATE_MODIFICATION_LBL" ), TopGroup );
+ udatV = new QLabel( TopGroup );
+ udatV->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+ udatV->setMinimumSize( 200, 0 );
+ udatV->setText( date( node->LastUpdateDate() ) );
+
+ QLabel* commL = new QLabel( tr( "COMMENT_LBL" ), TopGroup);
+ commV = new QMultiLineEdit( TopGroup );
+ commV->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
+ commV->setMinimumSize( 200, 100 );
+ commV->setReadOnly( isReadOnly );
+ commV->setText( node->Comment() );
+
+ TopGroupLayout->addWidget( nameL, 0, 0 );
+ TopGroupLayout->addWidget( nameV, 0, 1 );
+ TopGroupLayout->addWidget( authL, 1, 0 );
+ TopGroupLayout->addWidget( authV, 1, 1 );
+ if (node->IsFactory()) {
+ TopGroupLayout->addWidget( contL, 2, 0 );
+ TopGroupLayout->addWidget( contV, 2, 1 );
+ }
+ TopGroupLayout->addWidget( cdatL, 3, 0 );
+ TopGroupLayout->addWidget( cdatV, 3, 1 );
+ TopGroupLayout->addWidget( udatL, 4, 0 );
+ TopGroupLayout->addWidget( udatV, 4, 1 );
+ TopGroupLayout->addWidget( commL, 5, 0 );
+ TopGroupLayout->addMultiCellWidget( commV, 5, 6, 1, 1 );
+ TopGroupLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding ), 6, 0 );
+ TopGroupLayout->setColStretch( 1, 5 );
+
+ QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
+ GroupButtons->setColumnLayout(0, Qt::Vertical );
+ GroupButtons->layout()->setSpacing( 0 );
+ GroupButtons->layout()->setMargin( 0 );
+ QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
+ GroupButtonsLayout->setAlignment( Qt::AlignTop );
+ GroupButtonsLayout->setSpacing( 6 );
+ GroupButtonsLayout->setMargin( 11 );
+
+ QPushButton* okB = new QPushButton( tr( "BUT_OK" ), GroupButtons );
+ QPushButton* cancelB = new QPushButton( tr( "BUT_CANCEL" ), GroupButtons );
+
+ GroupButtonsLayout->addWidget( okB, 0, 0 );
+ GroupButtonsLayout->addItem ( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
+ GroupButtonsLayout->addWidget( cancelB, 0, 2 );
+
+ TopLayout->addWidget( TopGroup, 0, 0 );
+ TopLayout->addWidget( GroupButtons, 1, 0 );
+
+ connect( okB, SIGNAL( clicked() ), this, SLOT( okButton() ) );
+ connect( cancelB, SIGNAL( clicked() ), this, SLOT( koButton() ) );
+}
+
+/*!
+ Destructor
+*/
+SUPERVGUI_Information::~SUPERVGUI_Information() {
+ Trace("SUPERVGUI_Information::~SUPERVGUI_Information");
+}
+
+/*!
+ Executes dialog
+*/
+/*
+bool SUPERVGUI_Information::run( SUPERV_CNode node, bool isReadOnly ) {
+ Trace("SUPERVGUI_Information::run");
+ nameV->setReadOnly( isReadOnly );
+ authV->setReadOnly( isReadOnly );
+ commV->setReadOnly( isReadOnly );
+
+ nameV->setText( node->Name() );
+ authV->setText( node->Author() );
+ commV->setText( node->Comment() );
+ if (node->IsFactory()) {
+ SUPERV_FNode aFNode = SUPERV::FNode::_narrow(node);
+ contV->setText( aFNode->GetContainer());
+ contL->show();
+ contV->show();
+ }
+ else {
+ contL->hide();
+ contV->hide();
+ }
+ qApp->processEvents();
+ adjustSize();
+
+ //commV->setText( node->Comment() );
+ cdatV->setText( date( node->CreationDate() ) );
+ udatV->setText( date( node->LastUpdateDate() ) );
+
+ bool b1 = true;
+ bool b2 = true;
+ bool b3 = true;
+ bool b4 = true;
+ bool result = false;
+ if ( exec() == Accepted ) {
+ if (! isReadOnly ) {
+ //b3 = node->SetContainer( contV->text().latin1() );
+ //}
+ //else {
+ if ( strcmp( node->Name(), nameV->text().latin1() ) != 0 ) {
+ b1 = node->SetName( nameV->text().latin1() );
+ }
+ b2 = node->SetAuthor ( authV->text().latin1() );
+ if (node->IsFactory()) {
+ SUPERV_FNode aFNode = SUPERV::FNode::_narrow(node);
+ b3 = aFNode->SetContainer( contV->text().latin1() );
+ }
+ b4 = node->SetComment ( commV->text().latin1() );
+ }
+ result = b1 && b2 && b3 && b4;
+ if ( !result ) {
+ QAD_MessageBox::warn1( this, tr( "ERROR" ), tr( "MSG_CANT_CHANGE_INFO" ), tr( "BUT_OK" ) );
+ }
+ }
+ return result;
+ }*/
+
+/*!
+ Returns string representation of date
+*/
+QString SUPERVGUI_Information::date( SUPERV_Date d ) {
+ Trace("SUPERVGUI_Information::date");
+ QString dt( "" );
+
+ if ( d.Day != 0 ) {
+ dt += ( char )( d.Day / 10 + 48 );
+ dt += ( char )( d.Day % 10 + 48 );
+ dt += '/';
+ dt += ( char )( d.Month / 10 + 48 );
+ dt += ( char )( d.Month % 10 + 48 );
+ dt += '/';
+ dt += ( char )( ( d.Year / 1000 ) %10 + 48 );
+ dt += ( char )( ( d.Year / 100 ) % 10 + 48 );
+ dt += ( char )( ( d.Year / 10 ) % 10 + 48 );
+ dt += ( char )( d.Year %10 + 48 );
+ dt += ' ';
+ dt += ( char )( d.Hour / 10 + 48 );
+ dt += ( char )( d.Hour % 10 + 48 );
+ dt += ':';
+ dt += ( char )( d.Minute / 10 + 48 );
+ dt += ( char )( d.Minute % 10 + 48 );
+ dt += ':';
+ dt += ( char )( d.Second / 10 + 48 );
+ dt += ( char )( d.Second % 10 + 48 );
+ };
+ return( dt );
+}
+
+/*!
+ <OK> button slot
+*/
+void SUPERVGUI_Information::okButton() {
+ Trace("SUPERVGUI_Information::okButton");
+ myNode->SetName( nameV->text().latin1());
+ myNode->SetAuthor( authV->text().latin1() );
+ if (myNode->IsFactory()) {
+ SUPERV_FNode aFNode = SUPERV::FNode::_narrow(myNode);
+ aFNode->SetContainer( contV->text().latin1() );
+ }
+ myNode->SetComment( commV->text().latin1() );
+ accept();
+}
+
+/*!
+ <Cancel> button slot
+*/
+void SUPERVGUI_Information::koButton() {
+ Trace("SUPERVGUI_Information::koButton");
+ reject();
+}
--- /dev/null
+// File : SUPERVGUI_Information.h
+// Created : 22 / 01 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+using namespace std;
+#ifndef SUPERVGUI_Information_H
+#define SUPERVGUI_Information_H
+
+#include "SUPERVGUI_Def.h"
+
+class SUPERVGUI_Information: public QDialog {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Information(SUPERV_CNode node, bool isReadOnly);
+ virtual ~SUPERVGUI_Information();
+
+ //bool run(SUPERV_CNode node, bool isReadOnly);
+
+ private slots:
+ void okButton();
+ void koButton();
+
+ private:
+ QString date(SUPERV_Date d);
+
+ QLineEdit* nameV;
+ QLineEdit* authV;
+ QLineEdit* contV;
+ QLabel* contL;
+ QMultiLineEdit* commV;
+ QLabel* cdatV;
+ QLabel* udatV;
+ SUPERV_CNode myNode;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Label.cxx
+// Created : 24 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Label.h"
+#include "SUPERVGUI_Def.h"
+
+SUPERVGUI_Label::SUPERVGUI_Label(QWidget* parent, int dx, int dy, const char* text, int a)
+ : QLabel(parent) {
+ Trace("SUPERVGUI_Label::SUPERVGUI_Label")
+ setMinimumSize(dx, dy);
+ setMaximumSize(dx, dy);
+ setText((QString)text);
+ setAlignment(a | QLabel::AlignVCenter);
+}
+
+SUPERVGUI_Label::~SUPERVGUI_Label() {
+ Trace("SUPERVGUI_Label::~SUPERVGUI_Label")
+}
+
+void SUPERVGUI_Label::mousePressEvent(QMouseEvent* e) {
+ Trace("SUPERVGUI_Label::mousePressEvent")
+ emit MousePress(e);
+}
+
+void SUPERVGUI_Label::mouseReleaseEvent(QMouseEvent* e) {
+ Trace("SUPERVGUI_Label::mouseReleaseEvent")
+ emit MouseRelease(e);
+}
+
+void SUPERVGUI_Label::mouseMoveEvent(QMouseEvent* e) {
+ Trace("SUPERVGUI_Label::mouseMoveEvent")
+ emit MouseMove(e);
+}
--- /dev/null
+// File : SUPERVGUI_Label.h
+// Created : 24 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+//#include "SUPERVGUI.h"
+
+#ifndef SUPERVGUI_Label_H
+#define SUPERVGUI_Label_H
+
+using namespace std;
+#include <qlabel.h>
+
+class SUPERVGUI_Label: public QLabel {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Label(QWidget* parent, int dx, int dy, const char* text, int a);
+ virtual ~SUPERVGUI_Label();
+
+ void mousePressEvent(QMouseEvent* e);
+ void mouseReleaseEvent(QMouseEvent* e);
+ void mouseMoveEvent(QMouseEvent* e);
+
+ signals:
+ void MousePress(QMouseEvent* e);
+ void MouseRelease(QMouseEvent* e);
+ void MouseMove(QMouseEvent* e);
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Link.cxx
+// Created : 20 / 12 / 2002
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+
+#include "SUPERVGUI_Graph.h"
+#include "SUPERVGUI_Main.h"
+#include "SUPERVGUI_Link.h"
+
+
+
+#define SKETCH_CLR Qt::green
+#define DRAW_CLR Qt::black
+#define HLT_CLR Qt::magenta
+#define CTRL_CLR Qt::red
+
+#define LINE_WIDTH 2
+#define PNT_SIZE 6
+
+
+// Prevents moving of several links at once
+bool SUPERVGUI_Link::LinkIsMoving=false;
+
+bool SUPERVGUI_Link::OrthoMode = false;
+
+SUPERVGUI_Link* SUPERVGUI_Link::SelectedLink=0;
+
+/**
+ * Consructor:
+ * If link is NULL - this must be defined later
+ */
+SUPERVGUI_Link::SUPERVGUI_Link(SUPERVGUI_Graph* theGraph, SUPERV_Link theLink) {
+ myGraph = theGraph;
+ myEngine = theLink;
+ myPortIn = 0;
+ myPortInES = 0;
+ myPortOut = 0;
+ myStartPort = 0;
+ myHltPnt = -1;
+ myPntMovingState = false;
+ myPainter = 0;
+ myIsVisible = true;
+ myTmpPen.setColor(SKETCH_CLR);
+ myTmpPen.setWidth(LINE_WIDTH);
+ myIsSelected = false;
+ myTmpPoints.clear();
+
+ if (!SUPERV_isNull(myEngine))
+ connectToEvents();
+}
+
+
+//**********************************************************************
+SUPERVGUI_Link::~SUPERVGUI_Link() {
+ if (!SUPERV_isNull(myEngine)) {
+ disconnect(myGraph, 0, this, 0);
+ }
+ if (SelectedLink == this) SelectedLink=0;
+ emit linkDeleted(this);
+}
+
+
+//**********************************************************************
+void SUPERVGUI_Link::setInputPort(SUPERVGUI_PortIn* thePortIn) {
+ myPortIn = thePortIn;
+ myPortIn->setLinkPrs(this);
+}
+
+
+//**********************************************************************
+void SUPERVGUI_Link::setInputPortES(SUPERVGUI_PortInESNode* thePortInES) {
+ myPortInES = thePortInES;
+ myPortInES->setLinkPrs(this);
+}
+
+//**********************************************************************
+bool SUPERVGUI_Link::isESInputPort() {
+ if (myPortInES)
+ return true;
+ else
+ return false;
+}
+
+//**********************************************************************
+void SUPERVGUI_Link::destroyEngine() {
+ if (!SUPERV_isNull(myEngine)) {
+ myEngine->destroy();
+ }
+}
+
+//**********************************************************************
+void SUPERVGUI_Link::setOutputPort(SUPERVGUI_PortOut* thePortOut){
+ myPortOut = thePortOut;
+ myPortOut->addLinkPrs(this);
+}
+
+
+//**********************************************************************
+void SUPERVGUI_Link::addPoint(long theX, long theY) {
+ if (SUPERV_isNull(myEngine)) return;
+
+ if (myEngine->CoordsSize() <= 0) {
+ myEngine->AddCoord(1, theX, theY);
+ return;
+ } else {
+ QPoint aPnt(theX, theY);
+ long aX, aY;
+ myEngine->Coords(1, aX, aY);
+ if (!isESInputPort()) {
+ if (distance(aPnt, myGraph->viewportToContents(myPortIn->getConnectPnt()),
+ QPoint(aX, aY)) <= 0) {
+ myEngine->AddCoord(1, theX, theY);
+ return;
+ }
+ }
+ else {
+ if (distance(aPnt, myGraph->viewportToContents(myPortInES->getConnectPnt()),
+ QPoint(aX, aY)) <= 0) {
+ myEngine->AddCoord(1, theX, theY);
+ return;
+ }
+ }
+
+ int i = 2;
+ long aNextX, aNextY;
+ for (i = 2; i <= myEngine->CoordsSize(); i++) {
+ myEngine->Coords(i, aNextX, aNextY);
+ if (distance(aPnt, QPoint(aX, aY),
+ QPoint(aNextX, aNextY)) <= 0) {
+ myEngine->AddCoord(i, theX, theY);
+ return;
+ }
+ aX = aNextX;
+ aY = aNextY;
+ }
+ if (distance(aPnt, QPoint(aX, aY),
+ myGraph->viewportToContents(myPortOut->getConnectPnt())) <= 0) {
+ myEngine->AddCoord(myEngine->CoordsSize()+1, theX, theY);
+ return;
+ }
+ }
+ repaint();
+}
+
+
+//**********************************************************************
+/**
+ * Can be used only in Sketching mode
+ */
+void SUPERVGUI_Link::addTmpPoint(QPoint thePnt) {
+ if (OrthoMode) {
+ int aSize = myTmpPoints.size();
+ QPoint aPrevPnt;
+ // Previous point
+ if (aSize > 0)
+ aPrevPnt = myTmpPoints[aSize-1];
+ else
+ aPrevPnt = myStartPort->getConnectPnt();
+
+ // Next point
+ QPoint aNewPoint;
+ if (Abs(thePnt.x() - aPrevPnt.x()) >
+ Abs(thePnt.y() - aPrevPnt.y())) {
+ aNewPoint = QPoint(thePnt.x(), aPrevPnt.y());
+ } else {
+ aNewPoint = QPoint(aPrevPnt.x(), thePnt.y());
+ }
+ // repaint last line
+
+ myPainter->drawLine(aPrevPnt, thePnt);
+ myPainter->moveTo(aPrevPnt);
+ myPainter->lineTo(aNewPoint);
+ myPainter->lineTo(thePnt);
+
+ myTmpPoints.push_back(aNewPoint);
+ } else
+ myTmpPoints.push_back(thePnt);
+}
+
+
+//**********************************************************************
+/**
+ * Can be used only in Sketching mode
+ */
+void SUPERVGUI_Link::delLastTmpPoint() {
+ int aSize = myTmpPoints.size();
+ if (aSize > 0) {
+ QPoint aRemPnt = myTmpPoints[aSize-1];
+
+ QPoint aLastPnt;
+ if (aSize > 1)
+ aLastPnt = myTmpPoints[aSize-2];
+ else
+ aLastPnt = myStartPort->getConnectPnt();
+
+ myPainter->moveTo(aLastPnt);
+ myPainter->lineTo(aRemPnt);
+ myPainter->lineTo(myPrevPoint);
+
+ myPainter->drawLine(aLastPnt, myPrevPoint);
+
+ myTmpPoints.pop_back();
+ }
+}
+
+
+//**********************************************************************
+void SUPERVGUI_Link::removeLastPoint() {
+ if (myEngine && (!SUPERV_isNull(myEngine)))
+ myEngine->RemoveCoord(myEngine->CoordsSize());
+}
+
+
+//**********************************************************************
+void SUPERVGUI_Link::removePoint(int thePnt) {
+ if ((thePnt > -1) && (!SUPERV_isNull(myEngine))) {
+ paint(true);
+ myEngine->RemoveCoord(thePnt);
+ paint(false);
+ }
+}
+
+//**********************************************************************
+/**
+ * Repaints the link
+ */
+void SUPERVGUI_Link::repaint() {
+ paint(true);
+ paint(false);
+}
+
+
+//**********************************************************************
+/**
+ * Paints or erases the link
+ * if toErase = true then it draws link by background color
+ */
+void SUPERVGUI_Link::paint(bool toErase) {
+ if ((!myGraph) || (!myIsVisible)) return;
+ if (!myEngine && SUPERV_isNull(myEngine)) return;
+ // if (!isCreationComplete()) return;
+
+ QPainter aPainter(myGraph->viewport());
+ QPen aDataPen;
+ aDataPen.setWidth(LINE_WIDTH);
+
+ if (toErase) {
+ aDataPen.setColor(myGraph->viewport()->paletteBackgroundColor());
+ } else {
+ if (strcmp(myEngine->InPort()->Name(), "InVoid")==0)
+ aDataPen.setColor(CTRL_CLR);
+ else
+ aDataPen.setColor(DRAW_CLR);
+ }
+ aPainter.setPen(aDataPen);
+ drawLink(&aPainter);
+}
+
+
+//**********************************************************************
+/**
+ * Defines a pen and draws link using given painter
+ */
+void SUPERVGUI_Link::paint(QPainter* thePainter, bool toErase) {
+ if ((!myGraph) || (!myIsVisible)) return;
+ if (!myEngine && SUPERV_isNull(myEngine)) return;
+ // if (!isCreationComplete()) return;
+ thePainter->save();
+
+ QPen aDataPen;
+ aDataPen.setWidth(LINE_WIDTH);
+
+ if (toErase) {
+ aDataPen.setColor(myGraph->viewport()->paletteBackgroundColor());
+ } else {
+ if (strcmp(myEngine->InPort()->Name(), "InVoid")==0)
+ aDataPen.setColor(CTRL_CLR);
+ else
+ aDataPen.setColor(DRAW_CLR);
+ }
+ thePainter->setPen(aDataPen);
+ drawLink(thePainter);
+ thePainter->restore();
+}
+
+
+//**********************************************************************
+/**
+ * Draws link using given painter
+ */
+void SUPERVGUI_Link::drawLink(QPainter* thePainter) {
+ if (!myIsVisible) return;
+ if (!isESInputPort())
+ thePainter->moveTo(myPortIn->getConnectPnt());
+ else
+ thePainter->moveTo(myPortInES->getConnectPnt());
+ long aX, aY;
+ QPoint aPnt;
+ for (int i=0; i < myEngine->CoordsSize(); i++) {
+ myEngine->Coords(i+1, aX, aY);
+ aPnt = myGraph->contentsToViewport(QPoint(aX, aY));
+ thePainter->lineTo(aPnt);
+ thePainter->drawEllipse(aPnt.x()-PNT_SIZE/2, aPnt.y()-PNT_SIZE/2,
+ PNT_SIZE, PNT_SIZE);
+ }
+ thePainter->lineTo(myPortOut->getConnectPnt());
+}
+
+
+//**********************************************************************
+/**
+ * Repaints whole link when it is sketching
+ */
+void SUPERVGUI_Link::repaintSketch() {
+ if (!myStartPort) return;
+ if (!myPainter) return;
+
+ // myPainter->save();
+ //myPainter->setRasterOp(Qt::CopyROP);
+ myPainter->moveTo(myStartPort->getConnectPnt());
+ for (int i = 0; i< myTmpPoints.size(); i++) {
+ myPainter->lineTo(myGraph->contentsToViewport(myTmpPoints[i]));
+ }
+ myPainter->lineTo(myPrevPoint);
+ //myPainter->restore();
+}
+
+
+//**********************************************************************
+/**
+ * Drawing of non created link following to mouse pointer
+ */
+void SUPERVGUI_Link::drawTo(QPoint thePnt) {
+ if (!myStartPort) {
+ if (myPortIn)
+ myStartPort = myPortIn;
+ else if (myPortInES)
+ myStartPort = myPortInES;
+ else if (myPortOut)
+ myStartPort = myPortOut;
+ else
+ return;
+ }
+ if (!myPainter) {
+ myPainter = new QPainter(myGraph->viewport());
+ myPainter->setPen(myTmpPen);
+ myPainter->setRasterOp(Qt::XorROP);
+ myPrevPoint = myStartPort->getConnectPnt();
+ LinkIsMoving = true;
+ }
+
+ long aX, aY;
+
+ QPoint aStartPnt;
+ if (myTmpPoints.size() > 0)
+ aStartPnt = myGraph->contentsToViewport(myTmpPoints[myTmpPoints.size()-1]);
+ else
+ aStartPnt = myStartPort->getConnectPnt();
+
+ // erase old line
+ myPainter->drawLine(aStartPnt, myPrevPoint);
+
+ // draw new line
+ QPoint aNewPoint = myGraph->contentsToViewport(thePnt);
+ myPainter->drawLine(aStartPnt, aNewPoint);
+ myPrevPoint = aNewPoint;
+
+}
+
+
+//**********************************************************************
+/**
+ * Set link non visible
+ */
+void SUPERVGUI_Link::setVisible(bool theVisible) {
+ myIsVisible = theVisible;
+ if (myIsVisible) {
+ connectToEvents();
+ } else {
+ disconnect(myGraph, 0, this, 0);
+ }
+}
+
+
+//**********************************************************************
+/**
+ * Checks full definition of the link
+ */
+bool SUPERVGUI_Link::isCreationComplete() {
+ bool aIsBoth = myPortIn && myPortOut;
+ if (myPortIn && myPortOut) {
+ SUPERV_Port aInPort = myPortIn->getPort();
+ QString aInNodeName(aInPort->Node()->Name());
+ SUPERV_Port aOutPort = myPortOut->getPort();
+ QString aOutNodeName(aOutPort->Node()->Name());
+
+ return (aInNodeName != aOutNodeName);
+ }
+ else if (myPortInES && myPortOut) {
+ SUPERV_Port aInPortES = myPortInES->getPort();
+ QString aInNodeName(aInPortES->Node()->Name());
+ SUPERV_Port aOutPort = myPortOut->getPort();
+ QString aOutNodeName(aOutPort->Node()->Name());
+
+ return (aInNodeName != aOutNodeName);
+ }
+ else
+ return false;
+}
+
+//**********************************************************************
+/**
+ * Abort creation of link
+ */
+void SUPERVGUI_Link::abortCreation() {
+ LinkIsMoving = false;
+}
+
+//**********************************************************************
+/**
+ * Final procedure of link creation
+ */
+bool SUPERVGUI_Link::createEngine() {
+ // clear temporary drawing
+ QPen aOldPen(myGraph->viewport()->paletteBackgroundColor(), LINE_WIDTH);
+ //check if myPainter not null
+ if (myPainter) {
+ myPainter->setPen(aOldPen);
+ myPainter->setRasterOp(Qt::CopyROP);
+
+ QPoint aStartPnt;
+ if (myTmpPoints.size() > 0)
+ aStartPnt = myGraph->contentsToViewport(myTmpPoints[myTmpPoints.size()-1]);
+ else
+ aStartPnt = myStartPort->getConnectPnt();
+
+ myPainter->drawLine(aStartPnt, myPrevPoint);
+
+ delete myPainter;
+ myPainter = 0;
+ }
+
+ // Create engine
+ if (!isESInputPort())
+ myEngine = myGraph->getMain()->getDataflow()->
+ Link(myPortOut->getPort(), myPortIn->getPort());
+ else
+ myEngine = myGraph->getMain()->getDataflow()->
+ Link(myPortOut->getPort(), myPortInES->getPort());
+
+ if (SUPERV_isNull(myEngine)) return false;
+
+ // remember all points
+ QPoint aPnt;
+ if (myStartPort == myPortOut) {
+ int aSize = myTmpPoints.size();
+ for (int i = aSize; i > 0; i--) {
+ aPnt = myTmpPoints[i-1];
+ myEngine->AddCoord(aSize+1-i, aPnt.x(), aPnt.y());
+ }
+ } else {
+ for (int i = 0; i < myTmpPoints.size(); i++) {
+ aPnt = myTmpPoints[i];
+ myEngine->AddCoord(i+1, aPnt.x(), aPnt.y());
+ }
+ }
+ LinkIsMoving = false;
+
+ // empty temporary resources
+ myTmpPoints.clear();
+ myStartPort = 0;
+ connectToEvents();
+ paint(false);
+ return true;
+}
+
+
+
+//**********************************************************************
+void SUPERVGUI_Link::onMouseMove(QMouseEvent * theEvent) {
+ if (myPntMovingState) {
+ drawSegments();
+
+ QPoint aPos = myGraph->contentsToViewport(theEvent->pos());
+ int aX = (aPos.x() > 0)? aPos.x(): 1;
+ int aY = (aPos.y() > 0)? aPos.y(): 1;
+ aX = (aX < myGraph->contentsWidth())? aX: myGraph->contentsWidth()-1;
+ aY = (aY < myGraph->contentsHeight())? aY: myGraph->contentsHeight()-1;
+
+ myMovedPnt = QPoint(aX, aY);
+ drawSegments();
+ return;
+ }
+
+ if (LinkIsMoving) return;
+
+ // Points highlighting
+ QPoint aPos = theEvent->pos();
+ if (myEngine->CoordsSize() > 0 ) {
+ long aX, aY;
+ bool aIsFound = false;
+ for (int i=0; i < myEngine->CoordsSize(); i++) {
+ myEngine->Coords(i+1, aX, aY);
+ if (distance(aX, aY,
+ aPos.x(),
+ aPos.y()) < (PNT_SIZE+2)) {
+ myHltPnt = i+1;
+ aIsFound = true;
+ break;
+ }
+ }
+ if (!aIsFound) myHltPnt = -1;
+ }
+
+ // Highlight line
+ if (isSelected(aPos)) {
+ if (SelectedLink==0) {
+ QPen aNewPen(HLT_CLR, LINE_WIDTH);
+ QPainter aPainter(myGraph->viewport());
+ aPainter.setPen(aNewPen);
+ drawLink(&aPainter);
+ myIsSelected = true;
+ SelectedLink = this;
+ }
+ } else if (myIsSelected) {
+ myIsSelected = false;
+ if (SelectedLink == this) SelectedLink = 0;
+ paint(false);
+ }
+}
+
+
+//**********************************************************************
+/**
+ * For internal using only
+ * Draws segments by current Pen when point is moving
+ */
+void SUPERVGUI_Link::drawSegments() {
+ myPainter->drawLine(myBeforePnt, myMovedPnt);
+ myPainter->drawLine(myMovedPnt, myAfterPnt);
+ myPainter->drawEllipse(myMovedPnt.x()-PNT_SIZE/2,
+ myMovedPnt.y()-PNT_SIZE/2,
+ PNT_SIZE, PNT_SIZE);
+}
+
+
+//**********************************************************************
+void SUPERVGUI_Link::onMousePress(QMouseEvent * theEvent) {
+ if (LinkIsMoving) {
+ return;
+ }
+ if (theEvent->button() != Qt::LeftButton) {
+ myHltPnt = -1;
+ return;
+ }
+ if (myHltPnt > -1) { // start point moving
+ if (myHltPnt == 1) {
+ if (!isESInputPort()) {
+ myBeforePnt = myPortIn->getConnectPnt();
+ }
+ else {
+ myBeforePnt = myPortInES->getConnectPnt();
+ }
+ }
+ else {
+ long aX, aY;
+ myEngine->Coords(myHltPnt-1, aX, aY);
+ myBeforePnt = myGraph->contentsToViewport(QPoint(aX, aY));
+ }
+ if (myHltPnt == myEngine->CoordsSize())
+ myAfterPnt = myPortOut->getConnectPnt();
+ else {
+ long aX, aY;
+ myEngine->Coords(myHltPnt+1, aX, aY);
+ myAfterPnt = myGraph->contentsToViewport(QPoint(aX, aY));
+ }
+ long aX, aY;
+ myEngine->Coords(myHltPnt, aX, aY);
+ myMovedPnt = myGraph->contentsToViewport(QPoint(aX, aY));
+
+ myPainter = new QPainter(myGraph->viewport());
+ QPen aOldPen(myGraph->viewport()->paletteBackgroundColor(), LINE_WIDTH);
+
+ myPainter->setPen(aOldPen);
+ drawSegments();
+
+ myPainter->setPen(myTmpPen);
+ myPainter->setRasterOp(Qt::XorROP);
+ drawSegments();
+
+ myPntMovingState = true;
+ LinkIsMoving = true;
+ } else if (myHltPnt > -1)
+ paint(false);
+}
+
+//**********************************************************************
+void SUPERVGUI_Link::onMouseRelease(QMouseEvent * theEvent){
+ if (theEvent->button() != Qt::LeftButton) return;
+
+ if (myPntMovingState) {
+ myPntMovingState = false;
+ LinkIsMoving = false;
+ drawSegments();
+ delete myPainter;
+ myPainter = 0;
+
+ int aX = (theEvent->pos().x() > 0)? theEvent->pos().x(): 1;
+ int aY = (theEvent->pos().y() > 0)? theEvent->pos().y(): 1;
+ aX = (aX < myGraph->contentsWidth())? aX: myGraph->contentsWidth()-1;
+ aY = (aY < myGraph->contentsHeight())? aY: myGraph->contentsHeight()-1;
+ myEngine->ChangeCoord(myHltPnt, aX, aY);
+
+ paint(false);
+ }
+}
+
+//**********************************************************************
+/**
+ * Connects to the Graph mouse events
+ */
+void SUPERVGUI_Link::connectToEvents() {
+ connect(myGraph, SIGNAL(mouseMoved(QMouseEvent*)),
+ this, SLOT(onMouseMove(QMouseEvent*)));
+
+ connect(myGraph, SIGNAL(mousePressed(QMouseEvent*)),
+ this, SLOT(onMousePress(QMouseEvent*)));
+
+ connect(myGraph, SIGNAL(mouseReleased(QMouseEvent*)),
+ this, SLOT(onMouseRelease(QMouseEvent*)));
+}
+
+
+//**********************************************************************
+bool SUPERVGUI_Link::isSelected(QPoint thePnt) {
+ if (myEngine->CoordsSize() == 0) {
+ if (!isESInputPort()) {
+ return (distance(thePnt, myGraph->viewportToContents(myPortOut->getConnectPnt()),
+ myGraph->viewportToContents(myPortIn->getConnectPnt())) <= 0);
+ }
+ else {
+ return (distance(thePnt, myGraph->viewportToContents(myPortOut->getConnectPnt()),
+ myGraph->viewportToContents(myPortInES->getConnectPnt())) <= 0);
+ }
+ }
+ else {
+ long aX, aY;
+ myEngine->Coords(1, aX, aY);
+ if (!isESInputPort()) {
+ if (distance(thePnt, myGraph->viewportToContents(myPortIn->getConnectPnt()),
+ QPoint(aX, aY)) <= 0) {
+ return true;
+ }
+ }
+ else {
+ if (distance(thePnt, myGraph->viewportToContents(myPortInES->getConnectPnt()),
+ QPoint(aX, aY)) <= 0) {
+ return true;
+ }
+ }
+
+ int i = 2;
+ long aNextX, aNextY;
+ for (i = 2; i <= myEngine->CoordsSize(); i++) {
+ myEngine->Coords(i, aNextX, aNextY);
+ if (distance(thePnt, QPoint(aX, aY),
+ QPoint(aNextX, aNextY)) <= 0) {
+ return true;
+ }
+ aX = aNextX;
+ aY = aNextY;
+ }
+ if (distance(thePnt, QPoint(aX, aY),
+ myGraph->viewportToContents(myPortOut->getConnectPnt())) <= 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
+//**********************************************************************
+/**
+ * Returns true if at least one point is within the rect.
+ * Rect must be in contents coordinate space
+ */
+bool SUPERVGUI_Link::isInRect(int theX, int theY, int theW, int theH) {
+ QRect aRect(theX, theY, theW, theH);
+ if (aRect.contains(myGraph->viewportToContents(myPortOut->getConnectPnt()), true))
+ return true;
+
+ if (!isESInputPort()) {
+ if (aRect.contains(myGraph->viewportToContents(myPortIn->getConnectPnt()), true)) {
+ return true;
+ }
+ }
+ else {
+ if (aRect.contains(myGraph->viewportToContents(myPortInES->getConnectPnt()), true)) {
+ return true;
+ }
+ }
+
+ long aX, aY;
+ QPoint aPrevPnt;
+ if (!isESInputPort())
+ aPrevPnt = myGraph->viewportToContents(myPortIn->getConnectPnt());
+ else
+ aPrevPnt = myGraph->viewportToContents(myPortInES->getConnectPnt());
+ for (int i = 1; i <= myEngine->CoordsSize(); i++) {
+ myEngine->Coords(i, aX, aY);
+ if (aRect.contains(aX, aY, true))
+ return true;
+ else {
+ QRect aTmpRect(QPoint(QMIN(aPrevPnt.x(), aX),
+ QMIN(aPrevPnt.y(), aY)),
+ QPoint(QMAX(aPrevPnt.x(), aX),
+ QMAX(aPrevPnt.y(), aY)));
+ if (aRect.intersects(aTmpRect))
+ return true;
+ aPrevPnt = QPoint(aX, aY);
+ }
+ }
+ QPoint aLastPnt = myGraph->viewportToContents(myPortOut->getConnectPnt());
+ QRect aLastRect(QPoint(QMIN(aPrevPnt.x(), aLastPnt.x()),
+ QMIN(aPrevPnt.y(), aLastPnt.y())),
+ QPoint(QMAX(aPrevPnt.x(), aLastPnt.x()),
+ QMAX(aPrevPnt.y(), aLastPnt.y())));
+ if (aRect.intersects(aLastRect))
+ return true;
+
+ return false;
+}
+
+
+//**********************************************************************
+/**
+ * Calculates distance between points
+ */
+int distance(int x1, int y1, int x2, int y2) {
+ int x = x2 - x1;
+ x = x * x;
+ int y = y2 - y1;
+ y = y * y;
+ return (int) sqrt(x + y);
+}
+
+
+//**********************************************************************
+/**
+ * Finds distance between thePnt and line(thePntLn1, thePntLn2)
+ * Returned value is not an mathematical value - this is only estimation of
+ * of closing point to the line. 0 - means that point belongs to the line
+ */
+int distance(QPoint thePnt, QPoint thePntLn1, QPoint thePntLn2) {
+ int r, s;
+ int a, b, c;
+
+ int px = thePnt.x();
+ int py = thePnt.y();
+ int lx = thePntLn1.x();
+ int ly = thePntLn1.y();
+ int nx = thePntLn2.x();
+ int ny = thePntLn2.y();
+
+ r = px - lx;
+ r = r * r;
+ s = py - ly;
+ s = s * s;
+ a = (int) sqrt((float)(r + s));
+
+ r = px - nx;
+ r = r * r;
+ s = py - ny;
+ s = s * s;
+ b = (int) sqrt((float)(r + s));
+
+ r = nx - lx;
+ r = r * r;
+ s = ny - ly;
+ s = s * s;
+ c = (int) sqrt((float)(r + s));
+
+ return (a+b-c);
+}
+
+void SUPERVGUI_Link::setBeginPort(SUPERVGUI_Port* theBeginPort) {
+ myBeginPort = theBeginPort;
+}
+
+SUPERVGUI_Port* SUPERVGUI_Link::getBeginPort() {
+ return myBeginPort;
+}
+
+
--- /dev/null
+// File : SUPERVGUI_Link.h
+// Created : 20 / 12 / 2002
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+#ifndef SUPERVGUI_Link_H
+#define SUPERVGUI_Link_H
+
+using namespace std;
+
+#include "SUPERVGUI_Def.h"
+#include "SUPERVGUI_Port.h"
+#include <qvaluevector.h>
+
+class SUPERVGUI_Graph;
+
+int distance(int x1, int y1, int x2, int y2);
+int distance(QPoint thePnt, QPoint thePntLn1, QPoint thePntLn2);
+
+
+class SUPERVGUI_Link: public QObject {
+ Q_OBJECT
+
+public:
+ SUPERVGUI_Link(SUPERVGUI_Graph* theGraph, SUPERV_Link theLink=0);
+
+ virtual ~SUPERVGUI_Link();
+
+ void setBeginPort(SUPERVGUI_Port* theBeginPort);
+ SUPERVGUI_Port* getBeginPort();
+
+ void setInputPort(SUPERVGUI_PortIn* thePortIn);
+ SUPERVGUI_PortIn* getInputPort()
+ { return myPortIn; };
+
+ void setInputPortES(SUPERVGUI_PortInESNode* thePortInES);
+ SUPERVGUI_PortInESNode* getInputPortES()
+ { return myPortInES; };
+
+ bool isESInputPort();
+
+ void destroyEngine();
+
+ void setOutputPort(SUPERVGUI_PortOut* thePortOut);
+ SUPERVGUI_PortOut* getOutputPort()
+ { return myPortOut; };
+
+ void addPoint(long theX, long theY);
+ void removeLastPoint();
+
+ void repaint();
+ void paint(bool toErase);
+ void paint(QPainter* thePainter, bool toErase);
+ void drawLink(QPainter* thePainter);
+
+ bool isInRect(int theX, int theY, int theW, int theH);
+
+ SUPERV_Link getEngineLink()
+ { return myEngine; };
+
+ void drawTo(QPoint thePnt);
+ void abortCreation();
+
+ void repaintSketch();
+ void addTmpPoint(QPoint thePnt);
+ void delLastTmpPoint();
+
+ bool isCreationComplete();
+ bool createEngine();
+
+ bool isSelected()
+ { return myIsSelected; };
+
+ bool haveSelectedPoint()
+ { return (myHltPnt > -1); };
+
+ int getSelectedPoint()
+ { return myHltPnt; };
+
+ void removePoint(int thePnt);
+
+ void setVisible(bool theVisible);
+
+ static void setOrthoMode(bool theIsOrtho)
+ { OrthoMode = theIsOrtho; };
+
+ static bool isOrthoMode()
+ { return OrthoMode; };
+
+ static SUPERVGUI_Link* getSelectedLink()
+ { return SelectedLink; };
+
+signals:
+ void linkDeleted(SUPERVGUI_Link*);
+
+public slots:
+ void onMouseMove(QMouseEvent* theEvent);
+ void onMousePress(QMouseEvent* theEvent);
+ void onMouseRelease(QMouseEvent* theEvent);
+
+
+private:
+ void connectToEvents();
+ bool isSelected(QPoint thePnt);
+
+
+ SUPERVGUI_Graph* myGraph;
+ SUPERVGUI_Port* myBeginPort;
+ SUPERVGUI_PortIn* myPortIn;
+ SUPERVGUI_PortInESNode* myPortInES;
+ SUPERVGUI_PortOut* myPortOut;
+
+ SUPERV_Link myEngine;
+
+ QPoint myPrevPoint; // used for sketching only
+ QValueVector<QPoint> myTmpPoints;
+ SUPERVGUI_Port* myStartPort;
+
+ QPen myTmpPen;
+
+ // Points highlighting management
+ int myHltPnt; // number of point or -1
+
+ // Points moving management
+ void drawSegments();
+ bool myPntMovingState;
+ QPoint myBeforePnt, myMovedPnt, myAfterPnt;
+ QPainter* myPainter;
+
+ // Selection of Link
+ bool myIsSelected;
+
+ bool myIsVisible;
+
+ static bool OrthoMode;
+ static bool LinkIsMoving;
+ static SUPERVGUI_Link* SelectedLink;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Main.cxx
+// Created : 24 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "QAD_Splitter.h"
+#include "QAD_LeftFrame.h"
+#include "QAD_ObjectBrowser.h"
+#include "QAD_ObjectBrowserItem.h"
+#include "QAD_PyEditor.h"
+#include "QAD_Message.h"
+#include "QAD_FileDlg.h"
+#include "QAD_Application.h"
+#include "SUPERVGUI_Def.h"
+#include "QAD_RightFrame.h"
+#include "SUPERVGraph_ViewFrame.h"
+#include <qlayout.h>
+#include <qfile.h>
+#include "SUPERVGUI_Main.h"
+#include "SUPERVGUI.h"
+#include "SUPERVGUI_ComputeNode.h"
+#include "SUPERVGUI_ControlNode.h"
+#include "NOTIFICATION.hxx"
+#include "SUPERVGUI_Notification.h"
+#include "SALOMEGUI_ImportOperation.h"
+#include "SUPERVGUI_Information.h"
+
+
+SUPERVGUI_Main::SUPERVGUI_Main(SUPERVGraph_ViewFrame* theParent, QAD_Desktop* theDesktop, bool fromIOR)
+ : SUPERVGraph_View(theParent),
+ myLogged( false ),
+ myFiltered( false ),
+ myLogFileName( QString::null ),
+ myLogFile( NULL ),
+ myWarning( false ),
+ myStep( false ),
+ myTrace( false ),
+ myVerbose( false )
+{
+ Trace("SUPERVGUI_Main::SUPERVGUI_Main (new)");
+ theParent->setViewWidget(this);
+ if (fromIOR) {
+ //SUPERVGUI_Main* am = Supervision.getMain();
+ QAD_ObjectBrowser* ob = ((QAD_StudyFrame*)(theDesktop->getMainFrame()->activeWindow()))->getLeftFrame()->getObjectBrowser();
+ // if (am == 0) {
+ // ob = ((QAD_StudyFrame*)(theDesktop->getMainFrame()->activeWindow()))->getLeftFrame()->getObjectBrowser();
+ //} else {
+ //ob = am->objectBrowser;
+ //};
+ QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)(ob->getListView()->currentItem());
+ SALOMEDS::SObject_var obj = theDesktop->getActiveStudy()->getStudyDocument()->FindObjectID(item->getEntry().latin1());
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (obj->FindAttribute(anAttr, "AttributeIOR")) {
+ SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ Standard_CString ior = anIOR->Value();
+ dataflow = (*Supervision.getEngine())->getGraph(ior);
+ if (SUPERV_isNull(dataflow)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_ACCESS_BAD_IOR"));
+ close();
+ } else {
+ init(theDesktop);
+ }
+ } else {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_NOACCESS_BY_IOR"));
+ close();
+ }
+ } else {
+ dataflow = (*Supervision.getEngine())->Graph(MAIN_NEW);
+ if (SUPERV_isNull(dataflow)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_CREATE_DF"));
+ close();
+ } else {
+ init(theDesktop);
+ }
+ }
+}
+
+SUPERVGUI_Main::SUPERVGUI_Main(SUPERVGraph_ViewFrame* theParent, QAD_Desktop* theDesktop, bool isModify, const char* f)
+ : SUPERVGraph_View(theParent),
+ myLogged( false ),
+ myFiltered( false ),
+ myLogFileName( QString::null ),
+ myLogFile( NULL ),
+ myWarning( false ),
+ myStep( false ),
+ myTrace( false ),
+ myVerbose( false )
+{
+ Trace("SUPERVGUI_Main::SUPERVGUI_Main (file)")
+ theParent->setViewWidget(this);
+ if (isModify) {
+ dataflow = (*Supervision.getEngine())->Graph(f);
+ } else {
+ dataflow = (*Supervision.getEngine())->GraphE(f);
+ }
+ if (SUPERV_isNull(dataflow)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_FILE").arg(f));
+ close();
+ } else {
+ init(theDesktop);
+ }
+}
+
+SUPERVGUI_Main::SUPERVGUI_Main(SUPERVGraph_ViewFrame* theParent, QAD_Desktop* theDesktop, SUPERV_Graph cp)
+ : SUPERVGraph_View(theParent),
+ myLogged( false ),
+ myFiltered( false ),
+ myLogFileName( QString::null ),
+ myLogFile( NULL ),
+ myWarning( false ),
+ myStep( false ),
+ myTrace( false ),
+ myVerbose( false )
+{
+ Trace("SUPERVGUI_Main::SUPERVGUI_Main (copy)");
+ theParent->setViewWidget(this);
+ // dataflow = cp->Copy();
+ dataflow = cp;
+ if (SUPERV_isNull(dataflow)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_COPY"));
+ close();
+ } else {
+ init(theDesktop);
+ }
+}
+
+void SUPERVGUI_Main::init(QAD_Desktop* theDesktop) {
+ Trace("SUPERVGUI_Main::init");
+ if (theDesktop) myNService = theDesktop->getNameService();
+ myHashCode = "New";
+ myCopyNum = 0;
+ choosing = false;
+ myIsLocked = false;
+
+ myIsKilled = false;
+ //myIsRunned = false;
+ myCurrentView = GRAPH;
+ myIsFromStudy = false;
+ study = theDesktop->getActiveStudy();
+ timer = new QTimer(this);
+ connect(timer, SIGNAL(timeout()), this, SLOT(execute()));
+
+ SALOMEDS::Study_var studyDoc = study->getStudyDocument();
+ SALOMEDS::StudyBuilder_var builder = studyDoc->NewBuilder();
+ SALOMEDS::SComponent_var father = studyDoc->FindComponent(STUDY_SUPERVISION);
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeName_var aName;
+ SALOMEDS::AttributePixMap_var aPixmap;
+ if (father->_is_nil()) {
+ QAD_Operation* op = new SALOMEGUI_ImportOperation( study );
+ op->start();
+ father = builder->NewComponent(STUDY_SUPERVISION);
+ anAttr = builder->FindOrCreateAttribute(father, "AttributeName");
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ //aName->SetValue("Supervision");
+ aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "SUPERV" ) );
+
+ anAttr = builder->FindOrCreateAttribute(father, "AttributePixMap");
+ aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+ aPixmap->SetPixMap( "ICON_OBJBROWSER_Supervision" );
+
+ builder->DefineComponentInstance(father, *Supervision.getEngine());
+ op->finish();
+ };
+
+ objectBrowser = study->getActiveStudyFrame()->getLeftFrame()->getObjectBrowser();
+
+
+ graph = new SUPERVGUI_Graph(this);
+ array = new SUPERVGUI_Array(this);
+
+ message = study->getActiveStudyFrame()->getRightFrame()->getMessage();
+ notification = new NOTIFICATION_Consumer();
+
+ QBoxLayout * layout = new QVBoxLayout(this);
+ layout->setMargin(0);
+ layout->setSpacing(0);
+ layout->addWidget(graph);
+ layout->addWidget(array);
+
+ sync();
+ show();
+ if ( myLogged && !myLogFileName.isEmpty() && QFile::exists( myLogFileName ) ) {
+ myLogFile = fopen( myLogFileName.latin1(), "a" );
+ if ( myLogFile == NULL )
+ myLogged = false;
+ }
+}
+
+SUPERVGUI_Main::~SUPERVGUI_Main() {
+ Trace("SUPERVGUI_Main::~SUPERVGUI_Main");
+ if ( myLogFile != NULL) {
+ fclose( myLogFile );
+ }
+ graph->removeLinks();
+ delete notification; // kloss : nota bene : quand un datalow est detruit : verifier que les canaux de notification sont aussi detruit
+ if (!SUPERV_isNull(dataflow)) {
+ if (dataflow->IsExecuting()) {
+ if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
+ tr("MSG_DF_RUNNING"),
+ tr("MSG_DF_EXECUTION"),
+ tr("MSG_DF_KILL")) == 1) {
+ dataflow->Kill();
+ }
+ }
+ }
+}
+
+void SUPERVGUI_Main::StartTimer(const char* m) {
+ Trace("SUPERVGUI_Main::StartTimer")
+ if (!timer->isActive()) {
+ timer->start(5);
+ message->setMessage(m);
+ };
+}
+
+void SUPERVGUI_Main::StopTimer(const char* m) {
+ Trace("SUPERVGUI_Main::StopTimer")
+ if (timer->isActive()) {
+ timer->stop();
+ syncNotification();
+ message->setMessage(m);
+ sync();
+ };
+}
+
+void SUPERVGUI_Main::filterNotification() {
+ Trace("SUPERVGUI_Main::filterNotification");
+ SUPERVGUI_Notification* dlg = new SUPERVGUI_Notification(this);
+ dlg->setFiltered( myFiltered );
+ dlg->setLogged( myLogged, myLogFileName );
+ dlg->setWarning( myWarning );
+ dlg->setStep( myStep );
+ dlg->setTrace( myTrace );
+ dlg->setVerbose( myVerbose );
+ if ( dlg->exec() == QDialog::Accepted ) {
+ myLogged = dlg->getLogged();
+ myLogFileName = dlg->getLogFile();
+ myFiltered = dlg->getFiltered();
+ myWarning = dlg->getWarning();
+ myStep = dlg->getStep();
+ myTrace = dlg->getTrace();
+ myVerbose = dlg->getVerbose();
+ delete dlg;
+ if ( myLogFile != NULL) {
+ fclose( myLogFile );
+ }
+ myLogFile = NULL;
+ if ( myLogged && !myLogFileName.isEmpty() && QFile::exists( myLogFileName ) ) {
+ myLogFile = fopen( myLogFileName.latin1(), "a" );
+ if ( myLogFile == NULL ) {
+ myLogged = false;
+ QMessageBox::warning( QAD_Application::getDesktop(), tr("ERROR"), tr( "ERR_CANT_OPEN_LOG_FILE" ) );
+ }
+ }
+ }
+}
+
+void SUPERVGUI_Main::syncAsync() {
+ Trace("SUPERVGUI_Main::syncAsync")
+ QTimer::singleShot(1, this, SLOT(sync()));
+}
+
+
+/**
+ * Called by timer when dataflow is executing
+ */
+void SUPERVGUI_Main::execute() {
+ SUPERV_CNode aNode;
+ SUPERV::GraphEvent aEvent;
+ SUPERV::GraphState aState;
+ dataflow->EventNoW(aNode, aEvent, aState);
+ if ((aEvent == SUPERV::NoEvent) && (aState == SUPERV::NoState)) return;
+
+ if (!SUPERV_isNull(aNode)) {
+ SUPERVGUI_Node* aNodePrs;
+ if (myCurrentView == TABLE) {
+ aNodePrs = (SUPERVGUI_Node*) array->child(aNode->Name(), "SUPERVGUI_Node");
+ } else {
+ aNodePrs = (SUPERVGUI_Node*) graph->child(aNode->Name(), "SUPERVGUI_Node");
+ }
+ if (aNodePrs)
+ aNodePrs->sync();
+ }
+ switch (dataflow->State()) {
+ case SUPERV_Editing :
+ StopTimer(dataflow->IsReadOnly()? tr("MSG_GRAPH_READONLY"): tr("MSG_GRAPH_EDITING"));
+ break;
+
+ case SUPERV_Suspend :
+ StopTimer(tr("MSG_GRAPH_SUSPENDED"));
+ break;
+
+ case SUPERV_Done :
+ StopTimer(tr("MSG_GRAPH_FINISHED"));
+ break;
+
+ case SUPERV_Error :
+ StopTimer(tr("MSG_GRAPH_ABORTED"));
+ break;
+
+ case SUPERV_Kill :
+ StopTimer(tr("MSG_GRAPH_KILLED"));
+ break;
+
+ }
+}
+
+
+
+void SUPERVGUI_Main::sync() {
+ Trace("SUPERVGUI_Main::sync")
+ if ((SUPERV_isNull(dataflow))) return;
+ QString t = tr("GRAPH_TITLE");
+
+ t += dataflow->Name();
+ setCaption(t);
+
+ study->updateObjBrowser();
+ if (myCurrentView == TABLE) {
+ array->sync();
+ } else {
+ graph->sync();
+ }
+}
+
+
+void SUPERVGUI_Main::showTable() {
+ if (myCurrentView == TABLE) return;
+
+ if (array->create()) {
+ myCurrentView = TABLE;
+ graph->hide();
+ }
+ sync();
+}
+
+
+void SUPERVGUI_Main::showFullGraph() {
+ if (myCurrentView == TABLE) {
+ array->destroy();
+ graph->show();
+ }
+ myCurrentView = GRAPH;
+ graph->sync();
+ graph->setFullView();
+}
+
+
+void SUPERVGUI_Main::showContolFlow() {
+ if (myCurrentView == TABLE) {
+ array->destroy();
+ graph->show();
+ }
+ myCurrentView = CONTROLFLOW;
+ graph->sync();
+ graph->setControlView();
+}
+
+
+bool SUPERVGUI_Main::exportDataflow(QString theFile) {
+ Trace("SUPERVGUI_Main::exportDataflow");
+ if ((SUPERV_isNull(dataflow))) return false;
+
+ if (!theFile.isEmpty()) {
+ if (!dataflow->Export(theFile.latin1())) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_WRITING"));
+ return false;
+ }
+ }
+ return true;
+}
+
+void SUPERVGUI_Main::insertFile() {
+ Trace("SUPERVGUI_Main::insertFile")
+ if ((SUPERV_isNull(dataflow))) return;
+
+ QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
+ "",
+ "*.xml",
+ tr("MSG_GRAPH_INSERT"),
+ true);
+ if (!f.isEmpty()) {
+ if (dataflow->Import(f.latin1())) {
+ if (myCurrentView == TABLE) {
+ array->destroy();
+ array->create();
+ }
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_FILE").arg(f));
+ };
+ };
+}
+
+void SUPERVGUI_Main::copy() {
+ Trace("SUPERVGUI_Main::copy");
+ if (dataflow->ThreadsMax() == 0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOTHING_COPY"));
+ return;
+ }
+ QAD_StudyFrame* aStudyFrame = Supervision.createGraph();
+ SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
+ (aStudyFrame->getRightFrame()->getViewFrame());
+ if(aViewFrame){
+ SUPERV_Graph aNewGraph = dataflow->Copy();
+ QString aNewName(tr("MSG_COPY_PREFIX").arg(++myCopyNum));
+ aNewName += dataflow->Name();
+ aNewGraph->SetName(aNewName);
+ SUPERVGUI_Main* m = new SUPERVGUI_Main(aViewFrame,
+ Supervision.getDesktop(),
+ aNewGraph);
+ study->showFrame(aStudyFrame);
+ }
+}
+
+void SUPERVGUI_Main::run() {
+ Trace("SUPERVGUI_Main::run")
+ if ((SUPERV_isNull(dataflow))) return;
+
+ if (dataflow->IsEditing()) {
+ if (!dataflow->IsValid()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_NOTVALID"));
+ } else if (!dataflow->IsExecutable()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_NOTEXECUTABLE"));
+ } else {
+ myRunTime = QDateTime::currentDateTime();
+ if (myIsKilled) {
+ //if (myIsRunned) {
+ if (!dataflow->ReRun()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_BADEXECUTE"));
+ } else {
+ StartTimer(tr("MSG_GRAPH_STARTED"));
+ syncNotification();
+ sync();
+ }
+ } else {
+ if (!dataflow->Run()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_BADEXECUTE"));
+ } else {
+ StartTimer(tr("MSG_GRAPH_STARTED"));
+ syncNotification();
+ //myIsRunned = true;
+ sync();
+ }
+ }
+ }
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_RUNNING"));
+ }
+}
+
+
+
+void SUPERVGUI_Main::startExecute() {
+ Trace("SUPERVGUI_Main::startExecute")
+ if ((SUPERV_isNull(dataflow))) return;
+
+ if (dataflow->IsEditing()) {
+ if (!dataflow->IsValid()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_NOTVALID"));
+ } else if (!dataflow->IsExecutable()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_NOTEXECUTABLE"));
+ } else {
+ myRunTime = QDateTime::currentDateTime();
+ if (myIsKilled) {
+ //if (myIsRunned) {
+ if (!dataflow->ReStart()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_BADEXECUTE"));
+ } else {
+ StartTimer(tr("MSG_GRAPH_STARTED"));
+ syncNotification();
+ }
+ }
+ else {
+ if (!dataflow->Start()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_BADEXECUTE"));
+ } else {
+ StartTimer(tr("MSG_GRAPH_STARTED"));
+ syncNotification();
+ }
+ }
+ }
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_RUNNING"));
+ }
+}
+
+
+void SUPERVGUI_Main::kill() {
+ Trace("SUPERVGUI_Main::kill")
+ if ((SUPERV_isNull(dataflow))) return;
+
+ if (dataflow->IsEditing()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_NOTRUNNING"));
+ } else if (dataflow->Kill()) {
+ myIsKilled = true;
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANTKILL_DF"));
+ }
+}
+
+void SUPERVGUI_Main::suspendResume() {
+ Trace("SUPERVGUI_Main::suspendResume")
+ if ((SUPERV_isNull(dataflow))) return;
+
+ if (dataflow->IsEditing()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_DF_NOTRUNNING"));
+ } else if (dataflow->State() == SUPERV_Suspend) {
+ if (dataflow->Resume()) {
+ message->setMessage(tr("MSG_DF_RESUMED"));
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_RESUME"));
+ }
+ } else {
+ if (dataflow->Suspend()) {
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_SUSPEND"));
+ }
+ }
+}
+
+void SUPERVGUI_Main::stopRestart() { // kloss : a reviser et a connecter dans le popup du dataflow (pas de creation de bouton)
+ Trace("SUPERVGUI_Main::stopRestart")
+ if ((SUPERV_isNull(dataflow))) return;
+
+ if (dataflow->IsEditing()) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_DF_NOTRUNNING"));
+ } else if (dataflow->State() == SUPERV_Stop) {
+ if (dataflow->ReStart()) {
+ message->setMessage(tr("MSG_DF_RESTARTED"));
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_RESTART"));
+ };
+ } else {
+ if (dataflow->Stop()) {
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_STOP"));
+ };
+ };
+}
+
+void SUPERVGUI_Main::addNode() {
+ Trace("SUPERVGUI_Main::addNode");
+ if (SUPERV_isNull(dataflow)) return;
+
+ if (dataflow->IsExecuting()) {
+ if (QMessageBox::warning(QAD_Application::getDesktop(),
+ tr("WARNING"), tr("MSG_GRAPH_ISRUN"),
+ QMessageBox::Yes, QMessageBox::No) == QMessageBox::No) {
+ return;
+ } else {
+ kill();
+ }
+ }
+ Supervision.getBrowser()->choose();
+}
+
+
+
+/**
+ * Add Computation node
+ */
+void SUPERVGUI_Main::addComputeNode(SUPERV_CNode theNode) {
+ //cout<<"### X="<<theNode->X()<<" Y="<<theNode->Y()<<endl;
+ switch (myCurrentView) {
+ case GRAPH:
+ {
+ SUPERVGUI_Node* aNode = new SUPERVGUI_ComputeNode(graph->viewport(), this, theNode);
+ graph->ResizeGraph(aNode, theNode->X(), theNode->Y());
+ graph->addChild(aNode, theNode->X(), theNode->Y());
+ aNode->sync();
+ }
+ break;
+ case CONTROLFLOW:
+ {
+ SUPERVGUI_Node* aNode = new SUPERVGUI_ComputeNode(graph->viewport(), this, theNode);
+ aNode->hideAll();
+ graph->ResizeGraph(aNode, theNode->X(), theNode->Y());
+ graph->addChild(aNode, theNode->X(), theNode->Y());
+ aNode->sync();
+ }
+ break;
+ case TABLE:
+ array->destroy();
+ array->create();
+ break;
+ }
+}
+
+/**
+ * Add GOTO node
+ */
+void SUPERVGUI_Main::addGOTONode(SUPERV_CNode theNode) {
+ switch (myCurrentView) {
+ case GRAPH:
+ {
+ SUPERVGUI_Node* aNode = new SUPERVGUI_GotoNode(graph->viewport(), this, theNode);
+ graph->ResizeGraph(aNode, theNode->X(), theNode->Y());
+ graph->addChild(aNode, theNode->X(), theNode->Y());
+ aNode->sync();
+ }
+ break;
+ case CONTROLFLOW:
+ {
+ SUPERVGUI_Node* aNode = new SUPERVGUI_GotoNode(graph->viewport(), this, theNode);
+ aNode->hideAll();
+ graph->ResizeGraph(aNode, theNode->X(), theNode->Y());
+ graph->addChild(aNode, theNode->X(), theNode->Y());
+ aNode->sync();
+ }
+ break;
+ case TABLE:
+ array->destroy();
+ array->create();
+ break;
+ }
+}
+
+/**
+ * Add Control node
+ */
+void SUPERVGUI_Main::addControlNode(SUPERV_CNode theStartNode, SUPERV_CNode theEndNode, bool Update) {
+ switch (myCurrentView) {
+ case GRAPH:
+ {
+ SUPERVGUI_StartControlNode* aStartPrs =
+ new SUPERVGUI_StartControlNode(graph->viewport(), this, theStartNode);
+ SUPERVGUI_EndControlNode* aEndPrs =
+ new SUPERVGUI_EndControlNode(graph->viewport(), this, theEndNode, aStartPrs);
+
+ graph->ResizeGraph(aStartPrs, theStartNode->X(), theStartNode->Y());
+ graph->addChild(aStartPrs, theStartNode->X(), theStartNode->Y());
+ graph->ResizeGraph(aEndPrs, theEndNode->X(), theEndNode->Y());
+ graph->addChild(aEndPrs, theEndNode->X(), theEndNode->Y());
+ if (Update) {
+ aStartPrs->updateLinksPrs();
+ aEndPrs->updateLinksPrs();
+ }
+ aStartPrs->sync();
+ aEndPrs->sync();
+ graph->repaintContents();
+ }
+ break;
+ case CONTROLFLOW:
+ {
+ SUPERVGUI_StartControlNode* aStartPrs =
+ new SUPERVGUI_StartControlNode(graph->viewport(), this, theStartNode);
+ SUPERVGUI_EndControlNode* aEndPrs =
+ new SUPERVGUI_EndControlNode(graph->viewport(), this, theEndNode, aStartPrs);
+
+ aStartPrs->hideAll();
+ aEndPrs->hideAll();
+
+ graph->ResizeGraph(aStartPrs, theStartNode->X(), theStartNode->Y());
+ graph->addChild(aStartPrs, theStartNode->X(), theStartNode->Y());
+ graph->ResizeGraph(aEndPrs, theEndNode->X(), theEndNode->Y());
+ graph->addChild(aEndPrs, theEndNode->X(), theEndNode->Y());
+ if (Update) {
+ aStartPrs->updateLinksPrs();
+ aEndPrs->updateLinksPrs();
+ }
+ aStartPrs->sync();
+ aEndPrs->sync();
+ graph->repaintContents();
+ }
+ break;
+ case TABLE:
+ array->destroy();
+ array->create();
+ break;
+ }
+}
+
+
+
+SUPERVGUI_Graph* SUPERVGUI_Main::getGraph() {
+ Trace("SUPERVGUI_Main::getGraph")
+ return(graph);
+}
+
+SUPERVGUI_Array* SUPERVGUI_Main::getArray() {
+ Trace("SUPERVGUI_Main::getArray")
+ return(array);
+}
+
+SUPERV_Graph SUPERVGUI_Main::getDataflow() {
+ Trace("SUPERVGUI_Main::getDataflow")
+ return(dataflow);
+}
+
+QAD_Message* SUPERVGUI_Main::getMessage() {
+ Trace("SUPERVGUI_Main::getMessage")
+ return(message);
+}
+
+QAD_Study* SUPERVGUI_Main::getStudy() {
+ Trace("SUPERVGUI_Main::getStudy")
+ return(study);
+}
+
+bool SUPERVGUI_Main::isArrayShown() {
+ Trace("SUPERVGUI_Main::isArrayShown")
+ return(myCurrentView == TABLE);
+}
+
+void SUPERVGUI_Main::showPopup(QPopupMenu* p, QMouseEvent* e) {
+ Trace("SUPERVGUI_Main::showPopup");
+ // To check is Supervision active?
+ if (myIsLocked) return;
+
+ if (QAD_Application::getDesktop()->getActiveComponent().compare(STUDY_SUPERVISION) !=0) return;
+
+ checkIsInStudy();
+ if (e->button() == RightButton) {
+ p->exec(e->globalPos());
+ }
+}
+
+
+
+void SUPERVGUI_Main::changeInformation() {
+ SUPERVGUI_Information* aDlg = new SUPERVGUI_Information(SUPERV::CNode::_narrow(dataflow), dataflow->IsReadOnly());
+ if (aDlg->exec() )
+ sync();
+ delete aDlg;
+ /* Trace("SUPERVGUI_Main::changeInformation")
+ if (Supervision.information(SUPERV::CNode::_narrow(dataflow), dataflow->IsReadOnly())) {
+ sync();
+ }*/
+}
+
+// returns false, if can't add dataflow into the study
+bool SUPERVGUI_Main::addStudy() {
+ Trace("SUPERVGUI_Main::addStudy");
+ if (myIsFromStudy) return false;
+ if ((SUPERV_isNull(dataflow))) return false;
+
+ SALOMEDS::Study_var aStudy = study->getStudyDocument();
+ SALOMEDS::StudyBuilder_var aBuilder = aStudy->NewBuilder();
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeName_var aName;
+ SALOMEDS::AttributeIOR_var anIORAttr;
+ SALOMEDS::AttributePixMap_var aPixmap;
+ bool aLocked = aStudy->GetProperties()->IsLocked();
+ QAD_Operation* op = new SALOMEGUI_ImportOperation( study );
+
+ // searching dataflow
+ SALOMEDS::SObject_var aSO = aStudy->FindObjectIOR(dataflow->getIOR());
+ if (aSO->_is_nil()) { // create new dataflow SObject
+ SALOMEDS::SComponent_ptr aComponent = aStudy->FindComponent(STUDY_SUPERVISION);
+ if (aComponent->_is_nil()) { // is supervision component not found, then create it
+ QAD_Operation* anOperation = new SALOMEGUI_ImportOperation( study );
+ anOperation->start();
+ if (aLocked) aStudy->GetProperties()->SetLocked(false);
+ aComponent = aBuilder->NewComponent(STUDY_SUPERVISION);
+ anAttr = aBuilder->FindOrCreateAttribute(aComponent, "AttributeName");
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ aName->SetValue(STUDY_SUPERVISION);
+
+ anAttr = aBuilder->FindOrCreateAttribute(aComponent, "AttributePixMap");
+ aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+ aPixmap->SetPixMap( "ICON_OBJBROWSER_Supervision" );
+ aBuilder->DefineComponentInstance(aComponent, *Supervision.getEngine());
+ if (aLocked) aStudy->GetProperties()->SetLocked(true);
+ anOperation->finish();
+ }
+ op->start();
+ aSO = aBuilder->NewObject(aComponent);
+ anAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeName");
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ aName->SetValue(dataflow->Name());
+ anAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeIOR");
+ anIORAttr = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ anIORAttr->SetValue(dataflow->getIOR());
+ op->finish();
+ if (aLocked) return false;
+ }
+
+ sync();
+ Supervision.unregisterGraph(this);
+ Supervision.registerGraph(dataflow->getIOR(), this);
+ myIsFromStudy = true;
+ return true;
+}
+
+
+void SUPERVGUI_Main::chooseData(QListViewItem* item) {
+ Trace("SUPERVGUI_Main::chooseData")
+ if (choosing) {
+ QString id = ((QAD_ObjectBrowserItem*)item)->getEntry();
+ if (!id.isEmpty()) {
+ SALOMEDS::SObject_var object = study->getStudyDocument()->FindObjectID(id.latin1());
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeIOR_var anIOR;
+ Standard_CString ior = "";
+ if (object->FindAttribute(anAttr, "AttributeIOR")) {
+ anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ ior = anIOR->Value();
+ portIn->setValue(ior);
+
+ // stop selection
+ choosing = false;
+ setCursor(Supervision.getCursor());
+ objectBrowser->setCursor(Supervision.getCursor());
+ Supervision.putInfo("");
+ }
+ }
+ }
+}
+
+void SUPERVGUI_Main::setData(SUPERVGUI_PortIn* p) {
+ Trace("SUPERVGUI_Main::setData")
+ portIn = p;
+ choosing = true;
+ setCursor(forbiddenCursor);
+ objectBrowser->setCursor(pointingHandCursor);
+ Supervision.putInfo(tr("MSG_CHOOSE_DATA"));
+}
+
+SALOMEDS::SObject_var SearchOrCreateSOWithName(const SALOMEDS::Study_var theStudy,
+ const SALOMEDS::SObject_var theSO,
+ const char* theName,
+ QAD_Operation* theOperation,
+ bool* theStarted) {
+ SALOMEDS::SObject_var aResult;
+ SALOMEDS::AttributeName_var aName;
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (!*theStarted) { // optimisation
+ SALOMEDS::ChildIterator_var anIterator = theStudy->NewChildIterator(theSO);
+ for (; anIterator->More(); anIterator->Next()) {
+ if (anIterator->Value()->FindAttribute(anAttr, "AttributeName")) {
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ if (strcmp(aName->Value(), theName) == 0) {
+ aResult = anIterator->Value();
+ break;
+ }
+ }
+ }
+ }
+ if (!aResult->_is_nil()) return aResult;
+ // add new SObject
+ if (!*theStarted) {
+ *theStarted = true;
+ theOperation->start();
+ }
+ SALOMEDS::StudyBuilder_var aBuilder = theStudy->NewBuilder();
+ aResult = aBuilder->NewObject(theSO);
+ anAttr = aBuilder->FindOrCreateAttribute(aResult, "AttributeName");
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ aName->SetValue(theName);
+ return aResult;
+}
+
+bool SUPERVGUI_Main::putDataStudy(SUPERV_Port p, const char* inout) {
+ Trace("SUPERVGUI_Main::putDataStudy");
+
+ static bool isIn = false;
+ if (isIn) return true; else isIn = true;
+
+ SALOMEDS::Study_var aStudy = study->getStudyDocument();
+ SALOMEDS::StudyBuilder_var aBuilder = aStudy->NewBuilder();
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeName_var aName;
+ SALOMEDS::AttributeIOR_var anIORAttr;
+ SALOMEDS::AttributePixMap_var aPixmap;
+ bool aTransaction = false;
+ bool aLocked = aStudy->GetProperties()->IsLocked();
+ QAD_Operation* op = new SALOMEGUI_ImportOperation( study );
+
+ // searching dataflow
+ SALOMEDS::SObject_var aSO = aStudy->FindObjectIOR(dataflow->getIOR());
+ if (aSO->_is_nil()) { // create new dataflow SObject
+ SALOMEDS::SComponent_ptr aComponent = aStudy->FindComponent(STUDY_SUPERVISION);
+ if (aComponent->_is_nil()) { // is supervision component not found, then create it
+ QAD_Operation* anOperation = new SALOMEGUI_ImportOperation( study );
+ anOperation->start();
+ if (aLocked) aStudy->GetProperties()->SetLocked(false);
+ aComponent = aBuilder->NewComponent(STUDY_SUPERVISION);
+ anAttr = aBuilder->FindOrCreateAttribute(aComponent, "AttributeName");
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ aName->SetValue(STUDY_SUPERVISION);
+
+ anAttr = aBuilder->FindOrCreateAttribute(aComponent, "AttributePixMap");
+ aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+ aPixmap->SetPixMap( "ICON_OBJBROWSER_Supervision" );
+ aBuilder->DefineComponentInstance(aComponent, *Supervision.getEngine());
+ if (aLocked) aStudy->GetProperties()->SetLocked(true);
+ anOperation->finish();
+ }
+ aTransaction = true;
+ op->start();
+ aSO = aBuilder->NewObject(aComponent);
+ anAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeName");
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ aName->SetValue(dataflow->Name());
+ anAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeIOR");
+ anIORAttr = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ anIORAttr->SetValue(dataflow->getIOR());
+ }
+ aSO = SearchOrCreateSOWithName(aStudy, aSO, // get run time SO
+ QString("Run ") + myRunTime.toString() , op, &aTransaction);
+ aSO = SearchOrCreateSOWithName(aStudy, aSO, p->Node()->Name(), op, &aTransaction); // get node SO
+ aSO = SearchOrCreateSOWithName(aStudy, aSO, inout, op, &aTransaction); // get in/out SO
+ aSO = SearchOrCreateSOWithName(aStudy, aSO, p->Name(), op, &aTransaction); // get port SO
+
+ if (aLocked) {
+ if (aTransaction) op->finish();
+ isIn = false;
+ return false;
+ }
+
+ anAttr = aBuilder->FindOrCreateAttribute(aSO, "AttributeIOR");
+ anIORAttr = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ if (!aTransaction && strcmp(anIORAttr->Value(), p->ToString()) == 0) {
+ isIn = false;
+ return true;
+ }
+ // set object value to the study: if object is external, then put it with
+ // help of the specific component - owner
+ if (p->IsIOR()) {
+ // get according component driver for result object
+ SALOME_LifeCycleCORBA aLCC(myNService);
+ SUPERV_FNode aFNode = SUPERV::FNode::_narrow(p->Node());
+ if (!aFNode->_is_nil()) {
+ Engines::Component_var aComponent = aLCC.FindOrLoad_Component(aFNode->GetContainer(),
+ aFNode->GetComponentName());
+ SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(aComponent);
+ if (!CORBA::is_nil(aDriver)) { // if driver was found, publish object
+ CORBA::Object_ptr anObject = new CORBA::Object();
+ CORBA::Any* anAny = p->ToAny();
+ (*anAny) >>= anObject;
+
+ if (aDriver->CanPublishInStudy(anObject)) {
+ SALOMEDS::SObject_var aTmpSO;
+ if (!aTransaction) {
+ aTmpSO = aSO;
+ aTransaction = true;
+ op->start();
+ }
+ aTmpSO = aDriver->PublishInStudy(aStudy, aTmpSO, anObject, "");
+ aBuilder->Addreference(aSO, aTmpSO);
+ } else { // can't publish object: abort transaction
+ if (aTransaction) op->abort();
+ isIn = false;
+ return false;
+ }
+ }
+ }
+ } else {
+ if (!aTransaction) {
+ aTransaction = true;
+ op->start();
+ }
+ anIORAttr->SetValue(p->ToString()); // ior attribute already set for the prevoius condition
+ }
+
+ if (aTransaction) op->finish();
+ study->updateObjBrowser();
+ isIn = false;
+ return true;
+}
+
+
+void SUPERVGUI_Main::ActivatePanning()
+{
+ if (graph->isVisible()) {
+ graph->ActivatePanning();
+ } else if (array->isVisible()) {
+ array->ActivatePanning();
+ }
+}
+
+
+void SUPERVGUI_Main::ResetView()
+{
+ if (graph->isVisible()) {
+ graph->ResetView();
+ } else if (array->isVisible()) {
+ array->ResetView();
+ }
+}
+
+
+void SUPERVGUI_Main::setAsFromStudy(bool theToStudy) {
+ myIsFromStudy = theToStudy;
+ graph->setAsFromStudy(theToStudy);
+ array->setAsFromStudy(theToStudy);
+}
+
+void SUPERVGUI_Main::checkIsInStudy() {
+ if (!myIsFromStudy) return;
+
+ SALOMEDS::Study_var aStudyDoc = study->getStudyDocument();
+ SALOMEDS::SComponent_var aFatherLbl = aStudyDoc->FindComponent(STUDY_SUPERVISION);
+ SALOMEDS::ChildIterator_var aChildIterator = aStudyDoc->NewChildIterator(aFatherLbl);
+ SALOMEDS::SObject_var aDataflowLbl;
+ SALOMEDS::GenericAttribute_var anAttr;
+
+ for (; aChildIterator->More(); aChildIterator->Next()) {
+ aDataflowLbl = aChildIterator->Value();
+ if (!aDataflowLbl->FindAttribute(anAttr, "AttributeIOR"))
+ continue;
+
+ SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+ if (strcmp(anIOR->Value(), dataflow->getIOR()) == 0) return;
+ }
+ // This Graph considered as in study but in study it is not exists
+ Supervision.unregisterGraph(this);
+ setAsFromStudy(false);
+}
+
+void SUPERVGUI_Main::syncNotification() {
+ char* graph;
+ char* node;
+ char* type;
+ char* message;
+ char* sender;
+ long counter;
+ char* date;
+ long stamp;
+
+ while (notification->Receive(&graph, &node, &type, &message, &sender, &counter, &date, &stamp)) {
+ if (isFiltered(graph, node, type, message, sender, counter, date, stamp)) {
+ QString mess("");
+ mess += "NOTIF: "; mess += graph;
+ mess += " / " ; mess += node;
+ mess += " / " ; mess += type;
+ mess += " / " ; mess += message;
+ getMessage()->setMessage(mess.latin1());
+ };
+ };
+}
+
+bool SUPERVGUI_Main::isFiltered(char* graph, char* node, char* type, char* message,
+ char* sender, long counter, char* date, long stamp) {
+ Trace("SUPERVGUI_Main::isFiltered");
+ bool b = false;
+ if (strcmp(getDataflow()->Name(), graph) == 0) {
+ SUPERVGUI_Node* n;
+ QObjectList* nodes = queryList("SUPERVGUI_Node");
+ QObjectListIt i(*nodes);
+ while ((n=(SUPERVGUI_Node*)i.current()) != 0) {
+ ++i;
+ if (strcmp(n->name(), node) == 0) {
+ if (strcmp(type, NOTIF_WARNING) == 0) {
+ b = n->isWarning();
+ } else if (strcmp(type, NOTIF_STEP) == 0) {
+ b = n->isStep();
+ } else if (strcmp(type, NOTIF_TRACE) == 0) {
+ b = n->isTrace();
+ } else if (strcmp(type, NOTIF_VERBOSE) == 0) {
+ b = n->isVerbose();
+ };
+ break;
+ };
+ };
+ delete nodes;
+ if ( myLogged && myLogFile && ( ( !myFiltered ) || b ) ) {
+ fprintf( myLogFile, "NOTIF %ld\t%s\t%s\t%ld\t%s\t%s\t%s\t%s\n", stamp, date, sender, counter, graph, node, type, message );
+ fflush( myLogFile );
+ };
+ };
+ return( b );
+}
+
+
+
+void SUPERVGUI_Main::setPaletteBackgroundColor(const QColor& color) {
+ array->setPaletteBackgroundColor(color);
+ graph->setPaletteBackgroundColor(color);
+
+ SUPERVGraph_View::setPaletteBackgroundColor(color);
+}
+
--- /dev/null
+// File : SUPERVGUI_Main.h
+// Created : 24 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Main_H
+#define SUPERVGUI_Main_H
+
+//#include "SUPERVGUI.h"
+#include "SUPERVGraph_ViewFrame.h"
+#include "SUPERVGUI_Array.h"
+#include "SUPERVGUI_Graph.h"
+#include "QAD_Desktop.h"
+#include "SUPERVGUI_Port.h"
+
+class QAD_Study;
+class QAD_ObjectBrowser;
+class QAD_Message;
+class NOTIFICATION_Consumer;
+
+
+class SUPERVGUI_Main: public SUPERVGraph_View {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Main(SUPERVGraph_ViewFrame*, QAD_Desktop*, bool fromIOR);
+ SUPERVGUI_Main(SUPERVGraph_ViewFrame*, QAD_Desktop*, bool isModify, const char* filename);
+ SUPERVGUI_Main(SUPERVGraph_ViewFrame*, QAD_Desktop*, SUPERV_Graph);
+ virtual ~SUPERVGUI_Main();
+
+ void run();
+ void startExecute();
+ void kill();
+ void suspendResume();
+ void stopRestart();
+ bool exportDataflow(QString theFile);
+
+ bool putDataStudy(SUPERV_Port port, const char* inout);
+ void setData(SUPERVGUI_PortIn* p);
+
+ SUPERVGUI_Graph* getGraph();
+ SUPERVGUI_Array* getArray();
+ SUPERV_Graph getDataflow();
+ QAD_Message* getMessage();
+ QAD_Study* getStudy();
+ bool isArrayShown();
+ void showPopup(QPopupMenu* p, QMouseEvent* e);
+
+ void ActivatePanning();
+ void ResetView();
+
+ void setHashCode(QString theCode)
+ { myHashCode = theCode; };
+
+ QString getHashCode()
+ { return myHashCode; };
+
+
+ bool isEditable()
+ { if (SUPERV_isNull(dataflow)) return false;
+ return !dataflow->IsReadOnly(); };
+
+ bool isFromStudy() { return myIsFromStudy; }
+ void setAsFromStudy(bool theToStudy);
+ void checkIsInStudy();
+
+ void addComputeNode(SUPERV_CNode theNode);
+ void addControlNode(SUPERV_CNode theStartNode, SUPERV_CNode theEndNode, bool Update);
+ void addGOTONode(SUPERV_CNode theNode);
+
+ void setPaletteBackgroundColor(const QColor& color);
+
+ void lockedGraph(bool theLock) { myIsLocked = theLock; }
+ bool isLocked() { return myIsLocked; }
+
+ public slots:
+ void execute();
+ void sync();
+ void syncAsync();
+ bool addStudy();
+ void insertFile();
+ void addNode();
+ void changeInformation();
+ void copy();
+ void showTable();
+ void showFullGraph();
+ void showContolFlow();
+ void filterNotification();
+
+ private slots:
+ void chooseData(QListViewItem* item);
+
+ private:
+ void init(QAD_Desktop* parent);
+ void StartTimer(const char* m);
+ void StopTimer(const char* m);
+ void syncNotification();
+ bool isFiltered(char* graph, char* node, char* type, char* message, char* sender, long counter, char* date, long stamp);
+
+ SUPERV_Graph dataflow;
+ QAD_Study* study;
+ QAD_ObjectBrowser* objectBrowser;
+ QAD_Message* message;
+ SUPERVGUI_Graph* graph;
+ QTimer* timer;
+
+ GraphViewType myCurrentView;
+ SUPERVGUI_Array* array;
+
+ bool choosing;
+ SUPERVGUI_PortIn* portIn;
+
+ QString myHashCode;
+
+ bool myIsFromStudy;
+ int myCopyNum;
+
+ SALOME_NamingService* myNService;
+ QDateTime myRunTime; // mpv 23.12.2002: we need time of running of dataflow
+ // for right Study document modification
+ /* notification data */
+ NOTIFICATION_Consumer* notification;
+ bool myFiltered;
+ bool myLogged;
+ QString myLogFileName;
+ FILE* myLogFile;
+ bool myWarning;
+ bool myStep;
+ bool myTrace;
+ bool myVerbose;
+ bool myIsKilled;
+ bool myIsLocked;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Node.cxx
+// Created : 24 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Node.h"
+#include "SUPERVGUI_Main.h"
+#include "SUPERVGUI_Python.h"
+#include "SUPERVGUI.h"
+#include "SUPERVGUI_BrowseNodeDlg.h"
+#include "SALOMEGUI_NameDlg.h"
+#include "SUPERVGUI_Information.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qhbox.h>
+#include <qgroupbox.h>
+
+
+
+SUPERVGUI_Node::SUPERVGUI_Node(QWidget* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode):
+ QFrame(theParent, "", WDestructiveClose),
+ myMain(theMain),
+ myNode(theNode),
+ warning(true),
+ step(true),
+ trace(true),
+ verbose(true),
+ aBrowseDlg(0)
+{
+ Trace("SUPERVGUI_Node::SUPERVGUI_Node");
+ QPalette BackColor = QPalette(MAIN_BACK);
+ setPalette(BackColor);
+
+ setName(myNode->Name());
+ //myTitle = new SUPERVGUI_Label(0, LABEL_WIDTH, LABEL_HEIGHT, name(), QLabel::AlignLeft);
+ //connect(myTitle, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(showPopup(QMouseEvent*)));
+ //myTitle->hide();
+
+ myStatus = new SUPERVGUI_Label(0, LABEL_WIDTH/2, LABEL_HEIGHT, "", QLabel::AlignHCenter);
+ myTime = new SUPERVGUI_Label(0, LABEL_WIDTH/2, LABEL_HEIGHT, "00:00:00", QLabel::AlignHCenter);
+ myStatus->hide();
+ myTime->hide();
+
+ connect(myStatus, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(showPopup(QMouseEvent*)));
+ connect(myTime, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(showPopup(QMouseEvent*)));
+
+ //create common popup
+ myPopup = new QPopupMenu(this);
+ if (myMain->isEditable()) {
+ myRenameItem = myPopup->insertItem(tr("MSG_RENAME"), this, SLOT(rename()));
+ myDeleteItem = myPopup->insertItem(tr("MSG_DELETE"), this, SLOT(remove()));
+ mySeparatorId = myPopup->insertSeparator();
+ }
+ myPopup->insertItem(tr("MSG_BROWSE"), this, SLOT(browse()));
+ myPopup->insertItem(tr("MSG_CHANGE_INFO"), this, SLOT(changeInformation()));
+ //myPopup->insertItem(tr("MSG_CONFIGURE"), this, SLOT(configure()));
+
+ if (myMain->isEditable() && (getNodeType() != SUPERV::FactoryNode)
+ && (getNodeType() != SUPERV::ComputingNode)) {
+ if ((getNodeType() != SUPERV::EndLoopNode)) {
+ QPopupMenu* aAddPortMnu = new QPopupMenu(this);
+ aAddPortMnu->insertItem("Input", this, SLOT(addInputPort()));
+ if (getNodeType() != SUPERV::LoopNode)
+ aAddPortMnu->insertItem("Output", this, SLOT(addOutputPort()));
+
+ myPopup->insertSeparator();
+ if ((getNodeType() != SUPERV::EndSwitchNode))
+ myPopup->insertItem("Edit Function", this, SLOT(editFunction()));
+ myPopup->insertItem("Add Port", aAddPortMnu);
+ }
+ }
+
+ // create execution popup
+ myRunPopup = new QPopupMenu(this);
+ mySuspendItem = myRunPopup->insertItem(tr("MSG_SUSPEND"), this, SLOT(suspendResume()));
+ myKillItem = myRunPopup->insertItem(tr("MSG_KILL"), this, SLOT(kill()));
+ //myStopItem = myRunPopup->insertItem(tr("MSG_STOP"), this, SLOT(stopRestart()));
+
+ setState(myNode->State());
+}
+
+SUPERVGUI_Node::~SUPERVGUI_Node()
+{
+ Trace("SUPERVGUI_Node::~SUPERVGUI_Node")
+}
+
+
+void SUPERVGUI_Node::sync() {
+ setState(myNode->State());
+}
+
+
+void SUPERVGUI_Node::setState(SUPERV::GraphState theState)
+{
+ MESSAGE("NodeState="<<theState);
+ myRunPopup->changeItem(mySuspendItem, tr("MSG_SUSPEND"));
+ myRunPopup->setItemEnabled(mySuspendItem, true);
+ myRunPopup->setItemEnabled(myStopItem, false);
+
+ switch (theState) {
+ case SUPERV_Waiting:
+ myStatus->setText("Waiting");
+ myStatus->setPaletteBackgroundColor(QColor(35, 192, 255));
+ break;
+ case SUPERV_Running:
+ myStatus->setText("Running");
+ myStatus->setPaletteBackgroundColor(QColor(32,210,32));
+ myRunPopup->changeItem(myStopItem, tr("MSG_STOP"));
+ myRunPopup->setItemEnabled(myStopItem, true);
+ break;
+ case SUPERV_Suspend:
+ case SUPERV::SuspendReadyState:
+ myStatus->setText("Suspended");
+ myStatus->setPaletteBackgroundColor(QColor(255,180, 0));
+ myRunPopup->changeItem(mySuspendItem, tr("MSG_RESUME"));
+ break;
+ case SUPERV_Done:
+ myStatus->setText("Finished");
+ myStatus->setPaletteBackgroundColor(QColor(255, 158, 255));
+ myRunPopup->setItemEnabled(mySuspendItem, false);
+ myRunPopup->changeItem(myStopItem, tr("MSG_RESTART"));
+ myRunPopup->setItemEnabled(myStopItem, true);
+ break;
+ case SUPERV_Error:
+ myStatus->setText("Aborted");
+ myStatus->setPaletteBackgroundColor(red);
+ myRunPopup->setItemEnabled(mySuspendItem, false);
+ myRunPopup->changeItem(myStopItem, tr("MSG_RESTART"));
+ myRunPopup->setItemEnabled(myStopItem, true);
+ break;
+ case SUPERV_Kill:
+ myStatus->setText("Killed");
+ myStatus->setPaletteBackgroundColor(red);
+ myRunPopup->setItemEnabled(mySuspendItem, false);
+ myRunPopup->changeItem(myStopItem, tr("MSG_RESTART"));
+ myRunPopup->setItemEnabled(myStopItem, true);
+ break;
+ default:
+ //cout<<"### Node state = "<<theState<<endl;
+ myStatus->setText("No Status");
+ myStatus->setPaletteBackgroundColor(QColor(NODE_RED, NODE_GREEN, NODE_BLUE));
+ myRunPopup->setItemEnabled(mySuspendItem, false);
+ break;
+ }
+ myTime->setPaletteBackgroundColor(myStatus->paletteBackgroundColor());
+ int sec = 0; //myNode->getTime();
+ // sec++;
+ char hms[9];
+ int s = sec/3600;
+ hms[0]=(char)(((s/10)%10)+48);
+ hms[1]=(char)((s%10)+48);
+ hms[2]=':';
+ sec = sec%3600;
+ s = sec/60;
+ hms[3]=(char)((s/10)+48);
+ hms[4]=(char)((s%10)+48);
+ hms[5]=':';
+ sec = sec%60;
+ hms[6]=(char)((sec/10)+48);
+ hms[7]=(char)((sec%10)+48);
+ hms[8]='\0';
+ myTime->setText(hms);
+}
+
+void SUPERVGUI_Node::rename()
+{
+ QString nm = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), myNode->Name() );
+ if ( !nm.isEmpty() ) {
+ setNodeName(nm);
+ }
+}
+
+
+void SUPERVGUI_Node::remove() {
+ Trace("SUPERVGUI_Node::remove");
+ deleteLinks();
+ myNode->destroy();
+ myMain->getGraph()->deleteNode(this);
+}
+
+void SUPERVGUI_Node::suspendResume() {
+ Trace("SUPERVGUI_Node::suspendResume");
+ int n = queryList("SUPERVGUI_Node")->count();
+ if (myNode->IsSuspended()) {
+ if (!((n==1)? myMain->getDataflow()->Resume() : myNode->Resume())) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_RESUMENODE"));
+ }
+ } else {
+ if (!((n==1)? myMain->getDataflow()->Suspend() : myNode->Suspend())) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_SUSPENDNODE"));
+ } else {
+ myStatus->setPaletteBackgroundColor(QColor(255,180, 0));
+ myTime->setPaletteBackgroundColor(QColor(255,180, 0));
+ }
+ }
+}
+
+void SUPERVGUI_Node::kill() {
+ Trace("SUPERVGUI_Node::kill");
+ int n = queryList("SUPERVGUI_Node")->count();
+ if (!((n==1)? myMain->getDataflow()->Kill() : myNode->Kill())) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_KILLNODE"));
+ } else {
+ myStatus->setPaletteBackgroundColor(Qt::red);
+ myTime->setPaletteBackgroundColor(Qt::red);
+ }
+}
+
+void SUPERVGUI_Node::stopRestart() {
+ Trace("SUPERVGUI_Node::stopRestart");
+
+ int n = queryList("SUPERVGUI_Node")->count();
+ if ((myNode->State() == SUPERV_Stop) || (myNode->State() == SUPERV_Kill)) {
+ if (!((n==1)? myMain->getDataflow()->Run() : myNode->ReStart())) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_RESTARTNODE"));
+ }
+ } else {
+ if (!((n==1)? myMain->getDataflow()->Stop() : myNode->Stop())) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_STOPNODE"));
+ }
+ }
+}
+
+void SUPERVGUI_Node::changeInformation() {
+ SUPERVGUI_Information* aDlg = new SUPERVGUI_Information(myNode, !myMain->isEditable());
+ if (aDlg->exec() )
+ sync();
+ delete aDlg;
+ /* Trace("SUPERVGUI_Node::changeInformation")
+ if (Supervision.information(myNode, !myMain->isEditable())) {
+ myMain->syncAsync();
+ };*/
+}
+
+void SUPERVGUI_Node::configure() {
+ Trace("SUPERVGUI_Node::configure")
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_NOT_IMPLEMENTED")); // kloss : a faire : lancer l'ihm DATA
+}
+
+void SUPERVGUI_Node::showPython() {
+ Trace("SUPERVGUI_Node::showPython")
+ SUPERVGUI_Python cp(myMain->getStudy()->get_PyInterp(), !myMain->isEditable());
+ cp.exec();
+}
+
+void SUPERVGUI_Node::showPopup(QMouseEvent* e) {
+ Trace("SUPERVGUI_Node::showPopup");
+ if (myMain->getDataflow()->IsExecuting())
+ myMain->showPopup(myRunPopup, e);
+ else
+ myMain->showPopup(myPopup, e);
+}
+
+
+void SUPERVGUI_Node::mousePressEvent(QMouseEvent* e) {
+ myMain->showPopup(myPopup, e);
+}
+
+
+bool SUPERVGUI_Node::isWarning() {
+ Trace("SUPERVGUI_Node::isWarning")
+ return(warning);
+}
+
+bool SUPERVGUI_Node::isStep() {
+ Trace("SUPERVGUI_Node::isStep")
+ return(step);
+}
+
+bool SUPERVGUI_Node::isTrace() {
+ Trace("SUPERVGUI_Node::isTrace")
+ return(trace);
+}
+
+bool SUPERVGUI_Node::isVerbose() {
+ Trace("SUPERVGUI_Node::isVerbose")
+ return(verbose);
+}
+
+void SUPERVGUI_Node::setWarning(bool b) {
+ Trace("SUPERVGUI_Node::setWarning")
+ warning = b;
+}
+
+void SUPERVGUI_Node::setStep(bool b) {
+ Trace("SUPERVGUI_Node::setStep")
+ step = b;
+}
+
+void SUPERVGUI_Node::setTrace(bool b) {
+ Trace("SUPERVGUI_Node::setTrace")
+ trace = b;
+}
+
+void SUPERVGUI_Node::setVerbose(bool b) {
+ Trace("SUPERVGUI_Node::setVerbose")
+ verbose = b;
+}
+
+
+void SUPERVGUI_Node::browse() {
+ if ( !aBrowseDlg ) {
+ aBrowseDlg = new SUPERVGUI_BrowseNodeDlg(this);
+ aBrowseDlg->installEventFilter( this );
+ }
+ if ( !aBrowseDlg->isVisible() )
+ aBrowseDlg->show();
+ else {
+ aBrowseDlg->raise();
+ aBrowseDlg->setActiveWindow();
+ aBrowseDlg->setFocus();
+ }
+}
+
+bool SUPERVGUI_Node::eventFilter( QObject* o, QEvent* e )
+{
+ if ( o == aBrowseDlg && e->type() == QEvent::Close )
+ aBrowseDlg = 0;
+ return QFrame::eventFilter( o, e );
+}
+
+
+void SUPERVGUI_Node::setNodeName(QString aName) {
+ if ( myNode->SetName(aName.latin1())) {
+ setName(myNode->Name());
+ //myTitle->setText(aName);
+ } else
+ QMessageBox::warning( QAD_Application::getDesktop(), tr( "ERROR" ), tr( "MSG_CANT_RENAMENODE" ) );
+}
+
+
+SUPERV_Port SUPERVGUI_Node::createInPort() {
+ SUPERVGUI_PortParamsDlg* aDlg = new SUPERVGUI_PortParamsDlg();
+ if (aDlg->exec()) {
+ SUPERV_INode aNode = getInlineNode();
+ if (SUPERV_isNull(aNode)) {
+ MESSAGE("SUPERVGUI_Node::createInPort: Node is wrong type");
+ return NULL;
+ }
+ SUPERV_Ports aPorts = aNode->Ports();
+ for (int i=0; i<aPorts->length(); i++) {
+ if (aDlg->getName() == QString(aPorts[i]->Name())){
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_PORT_EXIST"));
+ return NULL;
+ }
+ }
+ SUPERV_Port aPort = aNode->InPort(aDlg->getName().latin1(),
+ aDlg->getType().latin1());
+ delete aDlg;
+ return aPort;
+ }
+ delete aDlg;
+ return NULL;
+}
+
+
+SUPERV_Port SUPERVGUI_Node::createOutPort() {
+ SUPERVGUI_PortParamsDlg* aDlg = new SUPERVGUI_PortParamsDlg();
+ if (aDlg->exec()) {
+ SUPERV_INode aNode = getInlineNode();
+ if (SUPERV_isNull(aNode)) {
+ MESSAGE("SUPERVGUI_Node::createInPort: Node is wrong type");
+ return NULL;
+ }
+ SUPERV_Ports aPorts = aNode->Ports();
+ for (int i=0; i<aPorts->length(); i++) {
+ if (aDlg->getName() == QString(aPorts[i]->Name())){
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_PORT_EXIST"));
+ return NULL;
+ }
+ }
+ SUPERV_Port aPort = aNode->OutPort(aDlg->getName().latin1(),
+ aDlg->getType().latin1());
+ delete aDlg;
+ return aPort;
+ }
+ delete aDlg;
+ return NULL;
+}
+
+
+
+void SUPERVGUI_Node::addInputPort() {
+ createInPort();
+}
+
+
+void SUPERVGUI_Node::addOutputPort() {
+ createOutPort();
+}
+
+
+void SUPERVGUI_Node::editFunction() {
+ if (getNodeType() == SUPERV::LoopNode) {
+ SUPERVGUI_EditPythonDlg* aDlg = new SUPERVGUI_EditPythonDlg(true);
+ SUPERV_LNode aLNode = getLoopNode();
+ aDlg->setInitFunction(aLNode->PyInit());
+ aDlg->setMoreFunction(aLNode->PyMore());
+ aDlg->setNextFunction(aLNode->PyNext());
+ if (aDlg->exec()) {
+ aLNode->SetPyInit(aDlg->getInitFuncName().latin1(), (aDlg->getInitFunction()).in());
+ aLNode->SetPyMore(aDlg->getMoreFuncName().latin1(), (aDlg->getMoreFunction()).in());
+ aLNode->SetPyNext(aDlg->getNextFuncName().latin1(), (aDlg->getNextFunction()).in());
+ }
+ delete aDlg;
+ } else {
+ SUPERVGUI_EditPythonDlg* aDlg = new SUPERVGUI_EditPythonDlg();
+ SUPERV_INode aINode = getInlineNode();
+ aDlg->setFunction(aINode->PyFunction());
+ if (aDlg->exec()) {
+ aINode->SetPyFunction(aDlg->getFuncName().latin1(), (aDlg->getFunction()).in());
+ }
+ delete aDlg;
+ }
+}
+
+
+
+
+
+
+/*!
+ * Port parameters dialog definition
+ */
+
+SUPERVGUI_PortParamsDlg::SUPERVGUI_PortParamsDlg()
+ : QDialog(QAD_Application::getDesktop(), 0, true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
+{
+ setSizeGripEnabled( true );
+ setCaption("Port parameters");
+
+ QGridLayout* aBaseLayout = new QGridLayout( this );
+ aBaseLayout->setMargin( 11 ); aBaseLayout->setSpacing( 6 );
+
+ QLabel* aNameLbl = new QLabel("Port Name", this );
+ aBaseLayout->addWidget(aNameLbl, 0, 0);
+
+ myNameTxt = new QLineEdit( this );
+ aNameLbl->setBuddy( myNameTxt );
+ aBaseLayout->addWidget(myNameTxt, 0, 1);
+
+ QLabel* aTypeLbl = new QLabel("Value Type", this );
+ aBaseLayout->addWidget(aTypeLbl, 1, 0);
+
+ myTypeTxt = new QLineEdit( this );
+ aTypeLbl->setBuddy( myTypeTxt );
+ aBaseLayout->addWidget(myTypeTxt, 1, 1);
+
+ QGroupBox* aBtnBox = new QGroupBox( this );
+ aBtnBox->setColumnLayout( 0, Qt::Vertical );
+ aBtnBox->layout()->setSpacing( 0 ); aBtnBox->layout()->setMargin( 0 );
+ QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox->layout() );
+ aBtnLayout->setAlignment( Qt::AlignTop );
+ aBtnLayout->setSpacing( 6 ); aBtnLayout->setMargin( 11 );
+
+ aBaseLayout->addMultiCellWidget( aBtnBox, 2, 2, 0, 1 );
+
+ QPushButton* aOKBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
+ connect( aOKBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ aBtnLayout->addWidget( aOKBtn );
+
+ aBtnLayout->addStretch();
+
+ QPushButton* aCancelBtn = new QPushButton( tr("BUT_CANCEL"), aBtnBox );
+ connect( aCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ aBtnLayout->addWidget( aCancelBtn );
+}
--- /dev/null
+// File : SUPERVGUI_Node.h
+// Created : 24 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Node_H
+#define SUPERVGUI_Node_H
+
+using namespace std;
+#include "SUPERVGUI_Def.h"
+#include "SUPERVGUI_Label.h"
+#include <qvbox.h>
+#include "SUPERVGUI_BrowseNodeDlg.h"
+
+class SUPERVGUI_Main;
+
+class SUPERVGUI_Node: public QFrame {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Node(QWidget* theParent, SUPERVGUI_Main* theMain, SUPERV_CNode theNode);
+ virtual ~SUPERVGUI_Node();
+
+ bool eventFilter( QObject* o, QEvent* e );
+ virtual void sync();
+
+ virtual void hideAll()=0;
+ virtual void showAll()=0;
+ virtual void deleteLinks() {};
+ virtual void setNodeName(QString aName);
+
+ SUPERV_CNode getEngine()
+ { return myNode; };
+
+ SUPERVGUI_Main* getMain()
+ { return myMain; };
+
+ bool isWarning();
+ bool isStep();
+ bool isTrace();
+ bool isVerbose();
+
+ SUPERV::KindOfNode getNodeType()
+ { return myNode->Kind(); }
+
+ SUPERV_CNode getComputingNode()
+ { return myNode; }
+
+ SUPERV_FNode getFactoryNode()
+ { return SUPERV::FNode::_narrow(myNode); }
+
+ SUPERV_INode getInlineNode()
+ { return SUPERV::INode::_narrow(myNode); }
+
+ SUPERV_GNode getGotoNode()
+ { return SUPERV::GNode::_narrow(myNode); }
+
+ SUPERV_LNode getLoopNode()
+ { return SUPERV::LNode::_narrow(myNode); }
+
+ SUPERV_ELNode getEndLoopNode()
+ { return SUPERV::ELNode::_narrow(myNode); }
+
+ SUPERV_SNode getSwitchNode()
+ { return SUPERV::SNode::_narrow(myNode); }
+
+ SUPERV_ESNode getEndSwitchNode()
+ { return SUPERV::ESNode::_narrow(myNode); }
+
+
+ SUPERV_Port createInPort();
+ SUPERV_Port createOutPort();
+
+ protected:
+ void mousePressEvent(QMouseEvent* e);
+
+ public slots:
+ void suspendResume();
+ void kill();
+ void stopRestart();
+ void configure();
+ void showPython();
+
+ virtual void rename();
+ virtual void remove();
+ void changeInformation();
+ void browse();
+
+ void setWarning(bool b);
+ void setStep(bool b);
+ void setTrace(bool b);
+ void setVerbose(bool b);
+ void showPopup(QMouseEvent* e);
+
+ virtual void addInputPort();
+ virtual void addOutputPort();
+ virtual void editFunction();
+
+ protected:
+ virtual void setState(SUPERV::GraphState theState);
+
+ SUPERV_CNode myNode;
+ SUPERVGUI_Main* myMain;
+
+ //SUPERVGUI_Label* myTitle;
+ SUPERVGUI_Label* myTime;
+ SUPERVGUI_Label* myStatus;
+
+ QPopupMenu* myPopup;
+ QPopupMenu* myRunPopup;
+ int myKillItem;
+ int mySuspendItem;
+ int myStopItem;
+ int myRenameItem;
+ int myDeleteItem;
+ int mySeparatorId;
+
+ SUPERVGUI_BrowseNodeDlg* aBrowseDlg;
+
+ private:
+
+ bool warning;
+ bool step;
+ bool trace;
+ bool verbose;
+};
+
+
+
+/*!
+ * Port parameters dialog definition
+ */
+class SUPERVGUI_PortParamsDlg: public QDialog {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_PortParamsDlg();
+ ~SUPERVGUI_PortParamsDlg() {};
+
+ QString getName() { return myNameTxt->text(); }
+ QString getType() { return myTypeTxt->text(); }
+
+ private:
+ QLineEdit* myNameTxt;
+ QLineEdit* myTypeTxt;
+};
+
+
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Notification.cxx
+// Created : 21 / 02 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Notification.h"
+#include "QAD_Message.h"
+#include "QAD_FileDlg.h"
+#include "SUPERVGUI_Node.h"
+#include "SUPERVGUI_Main.h"
+#include "NOTIFICATION.hxx"
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+
+#define SPACING_SIZE 6
+#define MARGIN_SIZE 11
+#define MAX( x, y ) ( x ) > ( y ) ? ( x ) : ( y )
+#define DLG_SIZE_WIDTH 300
+#define DLG_SIZE_HEIGHT 300
+
+/******************************************
+ * Notification settings dialog box
+ ******************************************/
+/*!
+ Constructor
+*/
+SUPERVGUI_Notification::SUPERVGUI_Notification( SUPERVGUI_Main* m )
+ : QDialog( QAD_Application::getDesktop(), "", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ),
+ myMain( m )
+{
+ setCaption( tr( "TLT_FILTER_NOTIFY" ) );
+ setSizeGripEnabled( TRUE );
+ QVBoxLayout* topLayout = new QVBoxLayout( this );
+ topLayout->setSpacing( SPACING_SIZE );
+ topLayout->setMargin( MARGIN_SIZE );
+
+ /* Creating notofication widgets*/
+ /* Top scroll view */
+ myView = new QScrollView( this );
+// myView->setMinimumSize( NOTIFICATION_WIDTH, NOTIFICATION_HEIGHT );
+ myBox = new QVBox( myView );
+ myBox->setMargin( MARGIN_SIZE );
+ myBox->setSpacing( SPACING_SIZE );
+ QFrame* lin;
+
+ /* Notification logging */
+ QLabel* logg = new QLabel( tr( "NOTIFICATION_LOGGING_LBL" ), myBox );
+ QFont fnt = logg->font(); fnt.setBold( true ); logg->setFont( fnt );
+ QWidget* dumb = new QWidget( myBox );
+ QHBoxLayout* dumbLayout = new QHBoxLayout( dumb ); dumbLayout->setMargin( 0 ); dumbLayout->setSpacing( SPACING_SIZE );
+ myLogCheck = new QCheckBox( tr( "SAVE_LOG_LBL" ), dumb );
+ myFileEdit = new QLineEdit( dumb );
+ myFileEdit->setMinimumSize( 200, 0 );
+ myBrowseBtn = new QPushButton( tr( "BUT_BROWSE"), dumb );
+ dumbLayout->addWidget( myLogCheck );
+ dumbLayout->addWidget( myFileEdit );
+ dumbLayout->addWidget( myBrowseBtn );
+ myFilterCheck = new QCheckBox( tr( "FILTER_LOG_LBL" ), myBox );
+
+ lin = new QFrame( myBox );
+ lin->setFrameStyle( QFrame::HLine | QFrame::Plain );
+
+ /* dataflow notification */
+ myMainNotif = new SUPERVGUI_NotifWidget( myBox, QString( myMain->getDataflow()->Name() ) );
+ myMainNotif->setWarning( false );
+ myMainNotif->setStep( false );
+ myMainNotif->setTrace( false );
+ myMainNotif->setVerbose( false );
+
+ /* nodes notification */
+ QObjectList* ihmList = myMain->getGraph()->queryList( "SUPERVGUI_Node" );
+ QObjectListIt i( *ihmList );
+ SUPERVGUI_Node* theNode;
+ while ( ( theNode = ( ( SUPERVGUI_Node* )i.current() ) ) != 0) {
+ lin = new QFrame( myBox );
+ lin->setFrameStyle( QFrame::HLine | QFrame::Plain );
+
+ SUPERVGUI_NotifWidget* nw = new SUPERVGUI_NotifWidget( myBox, theNode );
+ nw->setWarning( theNode->isWarning() );
+ nw->setStep( theNode->isStep() );
+ nw->setTrace( theNode->isTrace() );
+ nw->setVerbose( theNode->isVerbose() );
+ myNotifList.append( nw );
+ ++i;
+ };
+ delete ihmList;
+
+ QWidget* dumb1 = new QWidget( myBox );
+ myBox->setStretchFactor( dumb1, 10 );
+
+ myView->addChild( myBox, 0, 0 );
+ myView->setResizePolicy( QScrollView::AutoOneFit );
+
+ int w = myLogCheck->sizeHint().width() + myFileEdit->minimumSize().width() + myBrowseBtn->sizeHint().width() + SPACING_SIZE * 2;
+ w = MAX( w, logg->sizeHint().width() );
+ w = MAX( w, myMainNotif->sizeHint().width() );
+ w = MAX( w, myFilterCheck->sizeHint().width() );
+ myView->setMinimumWidth( w + MARGIN_SIZE * 4 );
+
+ /* OK/Cancel buttons */
+ QGroupBox* GroupButtons = new QGroupBox( this );
+ GroupButtons->setColumnLayout(0, Qt::Vertical );
+ GroupButtons->layout()->setSpacing( 0 ); GroupButtons->layout()->setMargin( 0 );
+ QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons->layout() );
+ GroupButtonsLayout->setAlignment( Qt::AlignTop );
+ GroupButtonsLayout->setSpacing( SPACING_SIZE );
+ GroupButtonsLayout->setMargin( MARGIN_SIZE );
+ myOkBtn = new QPushButton( tr( "BUT_OK" ), GroupButtons, "buttonOk" );
+ myOkBtn->setAutoDefault( TRUE );
+ myOkBtn->setDefault( TRUE );
+ GroupButtonsLayout->addWidget( myOkBtn );
+ GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ) );
+ myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), GroupButtons, "buttonCancel" );
+ myCancelBtn->setAutoDefault( TRUE );
+ GroupButtonsLayout->addWidget( myCancelBtn );
+
+ topLayout->addWidget( myView );
+ topLayout->addWidget( GroupButtons );
+
+ connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ connect( myLogCheck, SIGNAL( clicked() ), this, SLOT( loggedClicked() ) );
+ connect( myBrowseBtn, SIGNAL( clicked() ), this, SLOT( browseClicked() ) );
+
+ QString file = QString( "/tmp/Notif_" );
+ file += myMain->getDataflow()->Name();
+ file += ".log";
+ myFileEdit->setText( file );
+
+ loggedClicked();
+ resize( MAX( w + MARGIN_SIZE * 4, DLG_SIZE_WIDTH ), DLG_SIZE_HEIGHT );
+}
+
+/*!
+ Destructor
+*/
+SUPERVGUI_Notification::~SUPERVGUI_Notification()
+{
+}
+
+/*!
+ <OK> button slot
+*/
+void SUPERVGUI_Notification::accept()
+{
+ Trace("SUPERVGUI_Notification::accept");
+ for ( int i = 0; i < myNotifList.count(); i++ ) {
+ if ( myNotifList.at( i )->getNode() ) {
+ myNotifList.at( i )->getNode()->setWarning( myNotifList.at( i )->getWarning() );
+ myNotifList.at( i )->getNode()->setStep( myNotifList.at( i )->getStep() );
+ myNotifList.at( i )->getNode()->setTrace( myNotifList.at( i )->getTrace() );
+ myNotifList.at( i )->getNode()->setVerbose( myNotifList.at( i )->getVerbose() );
+ }
+ }
+ QDialog::accept();
+}
+
+/*!
+ <Cancel> button slot
+*/
+void SUPERVGUI_Notification::reject()
+{
+ Trace("SUPERVGUI_Notification::reject");
+ QDialog::reject();
+}
+
+/*!
+ Called when <Save to file> check box is clicked
+*/
+void SUPERVGUI_Notification::loggedClicked()
+{
+ myFileEdit->setEnabled( myLogCheck->isChecked() );
+ myBrowseBtn->setEnabled( myLogCheck->isChecked() );
+ myFilterCheck->setEnabled( myLogCheck->isChecked() );
+}
+
+/*!
+ <Browse> button slot
+*/
+void SUPERVGUI_Notification::browseClicked()
+{
+ QString fn = QAD_FileDlg::getFileName( this,
+ myFileEdit->text(),
+ tr( "ALL_FILES" ),
+ tr( "CHOOSE_LOG_FILES_TLT" ),
+ false );
+ if ( !fn.isEmpty() )
+ myFileEdit->setText( fn );
+}
+
+/*!
+ Set/get methods
+*/
+bool SUPERVGUI_Notification::getLogged()
+{
+ return myLogCheck->isChecked();
+}
+void SUPERVGUI_Notification::setLogged( bool on, QString logFile )
+{
+ myLogCheck->setChecked( on );
+ if ( !logFile.isNull() ) {
+ myFileEdit->setText( logFile );
+ myFileEdit->home( false );
+ }
+ loggedClicked();
+}
+QString SUPERVGUI_Notification::getLogFile()
+{
+ return myFileEdit->text().stripWhiteSpace();
+}
+bool SUPERVGUI_Notification::getFiltered()
+{
+ return myFilterCheck->isChecked();
+}
+void SUPERVGUI_Notification::setFiltered( bool on )
+{
+ myFilterCheck->setChecked( on );
+}
+bool SUPERVGUI_Notification::getWarning()
+{
+ return myMainNotif->getWarning();
+}
+void SUPERVGUI_Notification::setWarning( bool on )
+{
+ myMainNotif->setWarning( on );
+}
+bool SUPERVGUI_Notification::getStep()
+{
+ return myMainNotif->getStep();
+}
+void SUPERVGUI_Notification::setStep( bool on )
+{
+ myMainNotif->setStep( on );
+}
+bool SUPERVGUI_Notification::getTrace()
+{
+ return myMainNotif->getTrace();
+}
+void SUPERVGUI_Notification::setTrace( bool on )
+{
+ myMainNotif->setTrace( on );
+}
+bool SUPERVGUI_Notification::getVerbose()
+{
+ return myMainNotif->getVerbose();
+}
+void SUPERVGUI_Notification::setVerbose( bool on )
+{
+ myMainNotif->setVerbose( on );
+}
+
+/******************************************
+ * Widget containing title and checkboxes
+ ******************************************/
+/*!
+ Constructor
+*/
+SUPERVGUI_NotifWidget::SUPERVGUI_NotifWidget( QWidget* parent, SUPERVGUI_Node* n )
+ : QWidget( parent ), myNode ( n )
+{
+ init();
+}
+/*!
+ Another constructor
+*/
+SUPERVGUI_NotifWidget::SUPERVGUI_NotifWidget( QWidget* parent, QString title )
+ : QWidget( parent ), myNode ( 0 ), myTitle( title )
+{
+ init();
+}
+/*!
+ Destructor
+*/
+SUPERVGUI_NotifWidget::~SUPERVGUI_NotifWidget()
+{
+}
+/*!
+ Creates widget's layout
+*/
+void SUPERVGUI_NotifWidget::init()
+{
+ QGridLayout* topLayout = new QGridLayout( this );
+ topLayout->setMargin( 0 );
+ topLayout->setSpacing( SPACING_SIZE );
+
+ QLabel* tltLab = new QLabel( this );
+ if ( myNode )
+ tltLab->setText( myNode->name() );
+ else
+ tltLab->setText( myTitle );
+ QFont fnt = tltLab->font(); fnt.setBold( true ); tltLab->setFont( fnt );
+
+ myWarningCheck = new QCheckBox( tr( NOTIF_WARNING ), this );
+ myStepCheck = new QCheckBox( tr( NOTIF_STEP ), this );
+ myTraceCheck = new QCheckBox( tr( NOTIF_TRACE ), this );
+ myVerboseCheck = new QCheckBox( tr( NOTIF_VERBOSE ), this );
+
+ topLayout->addMultiCellWidget( tltLab, 0, 0, 0, 4 );
+ topLayout->addWidget( myWarningCheck, 1, 1 );
+ topLayout->addWidget( myStepCheck, 1, 2 );
+ topLayout->addWidget( myTraceCheck, 1, 3 );
+ topLayout->addWidget( myVerboseCheck, 1, 4 );
+ topLayout->addColSpacing( 0, 15 );
+ topLayout->setColStretch( 1, 5 );
+ topLayout->setColStretch( 2, 5 );
+ topLayout->setColStretch( 3, 5 );
+ topLayout->setColStretch( 4, 5 );
+}
+
--- /dev/null
+// File : SUPERVGUI_Notification.h
+// Created : 21 / 02 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Notification_H
+#define SUPERVGUI_Notification_H
+
+using namespace std;
+#include "SUPERVGUI_Def.h"
+#include <qdialog.h>
+#include <qlist.h>
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qvbox.h>
+
+class SUPERVGUI_Main;
+class SUPERVGUI_Node;
+class SUPERVGUI_NotifWidget;
+
+class SUPERVGUI_Notification: public QDialog
+{
+ Q_OBJECT
+
+public:
+ SUPERVGUI_Notification(SUPERVGUI_Main* m);
+ ~SUPERVGUI_Notification();
+
+ bool getLogged();
+ void setLogged( bool on, QString logFile = QString::null );
+ QString getLogFile();
+ bool getFiltered();
+ void setFiltered( bool on );
+ bool getWarning();
+ void setWarning( bool on );
+ bool getStep();
+ void setStep( bool on );
+ bool getTrace();
+ void setTrace( bool on );
+ bool getVerbose();
+ void setVerbose( bool on );
+
+private slots:
+ void accept();
+ void reject();
+ void loggedClicked();
+ void browseClicked();
+
+private:
+ SUPERVGUI_Main* myMain;
+ QScrollView* myView;
+ QVBox* myBox;
+ QPushButton* myOkBtn;
+ QPushButton* myCancelBtn;
+ QCheckBox* myLogCheck;
+ QCheckBox* myFilterCheck;
+ QLineEdit* myFileEdit;
+ QPushButton* myBrowseBtn;
+ SUPERVGUI_NotifWidget* myMainNotif;
+ QList<SUPERVGUI_NotifWidget> myNotifList;
+};
+
+class SUPERVGUI_NotifWidget : public QWidget
+{
+public:
+ SUPERVGUI_NotifWidget( QWidget* parent, SUPERVGUI_Node* n );
+ SUPERVGUI_NotifWidget( QWidget* parent, QString title );
+ ~SUPERVGUI_NotifWidget();
+
+ SUPERVGUI_Node* getNode() { return myNode; }
+
+ bool getWarning() { return myWarningCheck->isChecked(); }
+ bool getStep() { return myStepCheck->isChecked(); }
+ bool getTrace() { return myTraceCheck->isChecked(); }
+ bool getVerbose() { return myVerboseCheck->isChecked(); }
+
+ void setWarning( bool on ) { myWarningCheck->setChecked( on ); }
+ void setStep( bool on ) { myStepCheck->setChecked( on ); }
+ void setTrace( bool on ) { myTraceCheck->setChecked( on ); }
+ void setVerbose( bool on ) { myVerboseCheck->setChecked( on ); }
+
+private:
+ void init();
+
+private:
+ QString myTitle;
+ SUPERVGUI_Node* myNode;
+ QCheckBox* myWarningCheck;
+ QCheckBox* myStepCheck;
+ QCheckBox* myTraceCheck;
+ QCheckBox* myVerboseCheck;
+};
+
+#endif
+
+
+
+
+
+
+
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Port.cxx
+// Created : 25 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Port.h"
+#include "SUPERVGUI_Def.h"
+#include "SUPERVGUI_Main.h"
+#include "SUPERVGUI_Link.h"
+#include "SUPERVGUI.h"
+#include "SUPERVGUI_BrowseNodeDlg.h"
+#include "QAD_LeftFrame.h"
+#include "QAD_ObjectBrowser.h"
+#include <qpoint.h>
+#include "SUPERVGUI_GraphNode.h"
+
+
+// Port en general
+// ---------------
+
+SUPERVGUI_Port::SUPERVGUI_Port(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p):
+ SUPERVGUI_Label(parent, PORT_WIDTH, PORT_HEIGHT, "", QLabel::AlignLeft | QLabel::AlignVCenter),
+ main(m),
+ port(p)
+{
+ Trace("SUPERVGUI_Port::SUPERVGUI_Port");
+ myName = port->Name();
+ QString aName(port->Name());
+ aName += (port->IsInput())? "Input":"Output";
+ setName(aName);
+
+ if (myName.compare(OUTVOID) == 0)
+ setAlignment(QLabel::AlignRight | QLabel::AlignVCenter);
+
+ if (port->IsParam() || port->IsInLine())
+ setText(myName + "=" + port->ToString());
+ else
+ setText(myName);
+
+ setLineWidth(1);
+ setMidLineWidth(2);
+ setFrameShape(QLabel::Box);
+ setFrameShadow(QLabel::Plain);
+
+ popup = new QPopupMenu(this);
+ if (main->isEditable()) {
+ mySketchItem = popup->insertItem(tr("MSG_SKETCH_LINK"), this, SLOT(sketchLink()));
+ popup->insertSeparator();
+ }
+ if (port->IsInLine()) {
+ myDelItem = popup->insertItem(tr("ITM_DEL_PORT"), this, SLOT(deletePort()));
+ }
+ connect(this, SIGNAL(MousePress(QMouseEvent*)), this, SLOT(showPopup(QMouseEvent*)));
+ connect(this, SIGNAL(MouseRelease(QMouseEvent*)), this, SLOT(endSketch()));
+}
+
+SUPERVGUI_Port::~SUPERVGUI_Port() {
+ Trace("SUPERVGUI_Port::~SUPERVGUI_Port")
+}
+
+SUPERV_Port SUPERVGUI_Port::getPort() {
+ Trace("SUPERVGUI_Port::getPort")
+ return(port);
+}
+
+void SUPERVGUI_Port::showPopup(QMouseEvent* e) {
+ Trace("SUPERVGUI_Port::showPopup");
+ if (e->button() != RightButton) return;
+ if (main->getDataflow()->IsExecuting())
+ popup->setItemEnabled(mySketchItem, false);
+ else
+ if (!port->IsInput() //output port
+ ||
+ port->IsInput() && (!port->IsLinked() //not linked input port
+ ||
+ port->Kind() == SUPERV::EndSwitchParameter)) { //input port of EndSwitch node
+ popup->setItemEnabled(mySketchItem, true);
+ }
+
+ main->showPopup(popup, e);
+}
+
+
+QPoint SUPERVGUI_Port::getConnectPnt() {
+ return QPoint(0,0);
+}
+
+
+void SUPERVGUI_Port::sync() {
+ if (port->IsParam() || port->IsInLine())
+ setText(myName + "=" + port->ToString());
+ else
+ setText(myName);
+
+}
+
+
+void SUPERVGUI_Port::sketchLink() {
+ main->getGraph()->sketchBegin(this);
+ if (port->IsInput())
+ setLineWidth(1);
+}
+
+void SUPERVGUI_Port::endSketch() {
+ main->getGraph()->sketchEnd(this);
+ if (port->IsInput() && port->IsLinked())
+ setLineWidth(1);
+}
+
+
+void SUPERVGUI_Port::deletePort() {
+ SUPERVGUI_GraphNode* aNode = (SUPERVGUI_GraphNode* )main->getGraph()->child(port->Node()->Name(), "SUPERVGUI_GraphNode");
+ if (aNode) {
+ aNode->deletePort(this);
+ }
+}
+
+
+
+
+//***********************************************************
+// Port d'entree
+// -------------
+
+SUPERVGUI_PortIn::SUPERVGUI_PortIn(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p)
+ : SUPERVGUI_Port(parent, m, p), myDlg( 0 )
+{
+ Trace("SUPERVGUI_PortIn::SUPERVGUI_PortIn");
+ myLinkPrs = 0;
+ // link->move(0, height()/2-POINT_SIZE_HALF);
+
+ bool editing = port->IsInput() && ( !port->IsLinked() ); //main->isEditable();
+// bool linked = port->IsLinked();
+// bool b = (!linked) && editing;
+ if ((!port->IsGate()) && editing ) {
+ psc = popup->insertItem(tr("MSG_SETVALUE"), this, SLOT(setInput()));
+ }
+ browser = popup->insertItem(tr("MSG_BROWSE"), this, SLOT(browse()));
+}
+
+SUPERVGUI_PortIn::~SUPERVGUI_PortIn() {
+ Trace("SUPERVGUI_PortIn::~SUPERVGUI_PortIn");
+}
+
+
+bool SUPERVGUI_PortIn::eventFilter( QObject* o, QEvent* e )
+{
+ if ( o == myDlg && e->type() == QEvent::Close )
+ myDlg = 0;
+ return SUPERVGUI_Port::eventFilter( o, e );
+}
+
+
+void SUPERVGUI_PortIn::deleteLinks() {
+ if (myLinkPrs) {
+ disconnect(myLinkPrs, 0, this, 0);
+ main->getGraph()->deleteLink(myLinkPrs);
+ myLinkPrs = 0;
+ }
+}
+
+
+void SUPERVGUI_PortIn::sync() {
+ SUPERVGUI_Port::sync();
+ if (port->IsLinked()) {
+ popup->setItemEnabled(browser, port->State() == SUPERV_Ready);
+ } else {
+ if (port->HasInput()) {
+ popup->setItemEnabled(browser, true);
+ setLineWidth(2);
+ } else {
+ popup->setItemEnabled(browser, false);
+ setLineWidth(1);
+ }
+ }
+}
+
+void SUPERVGUI_PortIn::setValue(const char* d) {
+ Trace("SUPERVGUI_PortIn::setValue")
+ if (port->Input((*Supervision.getEngine())->StringValue(d))) {
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_SETVAL"));
+ };
+}
+
+void SUPERVGUI_PortIn::setInput() {
+ Trace("SUPERVGUI_PortIn::setInput");
+ if ( !myDlg ) {
+ myDlg = new SUPERVGUI_GetValueDlg(this);
+ myDlg->installEventFilter( this );
+ }
+ if ( !myDlg->isVisible() )
+ myDlg->show();
+ else {
+ myDlg->raise();
+ myDlg->setActiveWindow();
+ myDlg->setFocus();
+ }
+}
+
+void SUPERVGUI_PortIn::browse() {
+ Trace("SUPERVGUI_PortIn::browse")
+ QString mess(tr("MSG_IPORT_VAL"));
+ mess += port->ToString();
+ QMessageBox::information(QAD_Application::getDesktop(), tr("MSG_INFO"), mess);
+}
+
+
+
+/**
+ * Returns coordinates of connection point in content coordinates
+ */
+QPoint SUPERVGUI_PortIn::getConnectPnt() {
+ // Parent widget is internal node frame
+ // parent of parent is node it self
+ QWidget* aNode = parentWidget()->parentWidget();
+ QPoint aPnt(aNode->pos()); // position of the node
+
+ if (parentWidget()->isVisible()) {
+ aPnt += parentWidget()->pos();
+ return QPoint(aPnt.x() + pos().x(),
+ aPnt.y() + (pos().y() + height()/2));
+ }
+ return QPoint(aPnt.x(),
+ aPnt.y() + (aNode->height()/2));
+}
+
+void SUPERVGUI_PortIn::setLinkPrs(SUPERVGUI_Link* theLink) {
+ myLinkPrs = theLink;
+ connect(myLinkPrs, SIGNAL(linkDeleted(SUPERVGUI_Link*)),
+ this, SLOT(onDeleteLink(SUPERVGUI_Link*)));
+ popup->setItemEnabled(mySketchItem, false);
+}
+
+void SUPERVGUI_PortIn::onDeleteLink(SUPERVGUI_Link*) {
+ disconnect(myLinkPrs, 0, this, 0);
+ myLinkPrs = 0;
+ popup->setItemEnabled(psc, true);
+ if (port->HasInput())
+ setLineWidth(2);
+ if (main->isEditable()) {
+ popup->setItemEnabled(mySketchItem, true);
+ } else {
+ popup->setItemEnabled(mySketchItem, false);
+ }
+}
+
+
+
+//***********************************************************
+// Port de sortie
+// --------------
+
+SUPERVGUI_PortOut::SUPERVGUI_PortOut(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p):
+ SUPERVGUI_Port(parent, m, p),
+ study(false)
+{
+ Trace("SUPERVGUI_PortOut::SUPERVGUI_PortOut")
+ // link->move(width()-POINT_SIZE, height()/2-POINT_SIZE_HALF);
+ myLinksList.setAutoDelete(false);
+
+ if (!port->IsGate()) {
+ pls = popup->insertItem(tr("MSG_PUT_INSTUDY"), this, SLOT(toStudy()));
+ }
+ browser = popup->insertItem(tr("MSG_BROWSE"), this, SLOT(browse()));
+
+ if (!main->getDataflow()->IsReadOnly()) {
+ popup->setItemEnabled(mySketchItem, true);
+ } else {
+ popup->setItemEnabled(mySketchItem, false);
+ }
+}
+
+SUPERVGUI_PortOut::~SUPERVGUI_PortOut() {
+ Trace("SUPERVGUI_PortOut::~SUPERVGUI_PortOut");
+}
+
+void SUPERVGUI_PortOut::sync() {
+ Trace("SUPERVGUI_PortOut::sync")
+ SUPERVGUI_Port::sync();
+
+ bool ok = (port->State() == SUPERV_Ready);
+ popup->setItemEnabled(browser, ok);
+ if (study && ok) {
+ study = main->putDataStudy(port, STUDY_PORT_OUT);
+ }
+
+ if (study) {
+ setLineWidth(2);
+ popup->changeItem(pls, tr("MSG_NOT_INSTUDY"));
+ } else {
+ setLineWidth(1);
+ popup->changeItem(pls, tr("MSG_PUT_INSTUDY"));
+ }
+
+}
+
+void SUPERVGUI_PortOut::updateStudy() {
+ Trace("SUPERVGUI_PortOut::updateStudy")
+ SUPERVGUI_Node* aNode = (SUPERVGUI_Node* )main->getGraph()->child(port->Node()->Name(), "SUPERVGUI_Node");
+ if (aNode)
+ ((SUPERVGUI_PortOut*)aNode->child(port->Name(), "SUPERVGUI_PortOut"))->study = study;
+ else
+ {
+ aNode = (SUPERVGUI_Node* )main->getArray()->child(port->Node()->Name(), "SUPERVGUI_Node");
+ if (aNode)
+ ((SUPERVGUI_PortOut*)aNode->child(port->Name(), "SUPERVGUI_PortOut"))->study = study;
+ }
+}
+
+void SUPERVGUI_PortOut::toStudy() {
+ Trace("SUPERVGUI_PortOut::toStudy")
+ if (!main->isFromStudy()) {
+ if (main->addStudy()) main->setAsFromStudy(true);
+ }
+ if (!main->getStudy()->getStudyDocument()->GetProperties()->IsLocked()) study = !study;
+ sync();
+}
+
+void SUPERVGUI_PortOut::browse() {
+ Trace("SUPERVGUI_PortOut::browse")
+ QString mess(tr("MSG_OPORT_VAL"));
+ mess += port->ToString();
+ QMessageBox::information(QAD_Application::getDesktop(), tr("MSG_INFO"), mess);
+}
+
+
+/**
+ * Returns coordinates of connection point in scroll view content coordinates
+ */
+QPoint SUPERVGUI_PortOut::getConnectPnt() {
+ // Parent widget is internal node frame
+ // parent of parent is node it self
+ QWidget* aNode = parentWidget()->parentWidget();
+ QPoint aPnt(aNode->pos()); // position of the node
+ if (parentWidget()->isVisible()) {
+ aPnt += parentWidget()->pos();
+ return QPoint(aPnt.x() + pos().x() + width(),
+ aPnt.y() + (pos().y() + height()/2));
+ }
+ return QPoint(aPnt.x() + aNode-> width(),
+ aPnt.y() + (aNode->height()/2));
+}
+
+
+void SUPERVGUI_PortOut::addLinkPrs(SUPERVGUI_Link* theLink) {
+ myLinksList.append(theLink);
+ connect(theLink, SIGNAL(linkDeleted(SUPERVGUI_Link*)),
+ this, SLOT(onDeleteLink(SUPERVGUI_Link*)));
+}
+
+
+void SUPERVGUI_PortOut::onDeleteLink(SUPERVGUI_Link* theLink) {
+ disconnect(theLink, 0, this, 0);
+ myLinksList.remove(theLink);
+}
+
+
+void SUPERVGUI_PortOut::deleteLinks() {
+ if (myLinksList.count() > 0) {
+ SUPERVGUI_Link* aLink;
+ while (aLink = myLinksList.last()) {
+ disconnect(aLink, 0, this, 0);
+ myLinksList.remove(aLink);
+ main->getGraph()->deleteLink(aLink);
+ }
+ }
+}
+
+
+
+//***********************************************************
+// Input Port of EndSwitch Node
+// ----------------------------
+SUPERVGUI_PortInESNode::SUPERVGUI_PortInESNode(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p)
+ : SUPERVGUI_Port(parent, m, p), myDlg( 0 )
+{
+ Trace("SUPERVGUI_PortInESNode::SUPERVGUI_PortInESNode");
+ myLinksList.setAutoDelete(false);
+
+ bool editing = port->IsInput() && ( !port->IsLinked() ); //main->isEditable();
+ if ((!port->IsGate()) && editing ) {
+ psc = popup->insertItem(tr("MSG_SETVALUE"), this, SLOT(setInput()));
+ }
+ browser = popup->insertItem(tr("MSG_BROWSE"), this, SLOT(browse()));
+}
+
+SUPERVGUI_PortInESNode::~SUPERVGUI_PortInESNode() {
+ Trace("SUPERVGUI_PortInESNode::~SUPERVGUI_PortInESNode");
+}
+
+bool SUPERVGUI_PortInESNode::eventFilter( QObject* o, QEvent* e ) {
+ if ( o == myDlg && e->type() == QEvent::Close )
+ myDlg = 0;
+ return SUPERVGUI_Port::eventFilter( o, e );
+}
+
+void SUPERVGUI_PortInESNode::sync() {
+ SUPERVGUI_Port::sync();
+ if (port->IsLinked()) {
+ popup->setItemEnabled(browser, port->State() == SUPERV_Ready);
+ } else {
+ if (port->HasInput()) {
+ popup->setItemEnabled(browser, true);
+ setLineWidth(2);
+ } else {
+ popup->setItemEnabled(browser, false);
+ setLineWidth(1);
+ }
+ }
+}
+
+void SUPERVGUI_PortInESNode::setValue(const char* d) {
+ Trace("SUPERVGUI_PortIn::setValue")
+ if (port->Input((*Supervision.getEngine())->StringValue(d))) {
+ sync();
+ } else {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_SETVAL"));
+ };
+}
+
+/**
+ * Returns coordinates of connection point in content coordinates
+ */
+QPoint SUPERVGUI_PortInESNode::getConnectPnt() {
+ QWidget* aNode = parentWidget()->parentWidget();
+ QPoint aPnt(aNode->pos());
+
+ if (parentWidget()->isVisible()) {
+ aPnt += parentWidget()->pos();
+ return QPoint(aPnt.x() + pos().x(),
+ aPnt.y() + (pos().y() + height()/2));
+ }
+ return QPoint(aPnt.x(),
+ aPnt.y() + (aNode->height()/2));
+}
+
+void SUPERVGUI_PortInESNode::setLinkPrs(SUPERVGUI_Link* theLink) {
+ myLinksList.append(theLink);
+ connect(theLink, SIGNAL(linkDeleted(SUPERVGUI_Link*)),
+ this, SLOT(onDeleteLink(SUPERVGUI_Link*)));
+}
+
+void SUPERVGUI_PortInESNode::deleteLinks() {
+ if (myLinksList.count() > 0) {
+ SUPERVGUI_Link* aLink;
+ while (aLink = myLinksList.last()) {
+ disconnect(aLink, 0, this, 0);
+ myLinksList.remove(aLink);
+ main->getGraph()->deleteLink(aLink);
+ }
+ }
+}
+
+void SUPERVGUI_PortInESNode::setInput() {
+ Trace("SUPERVGUI_PortInESNode::setInput");
+ if ( !myDlg ) {
+ myDlg = new SUPERVGUI_GetValueDlg(this);
+ myDlg->installEventFilter( this );
+ }
+ if ( !myDlg->isVisible() )
+ myDlg->show();
+ else {
+ myDlg->raise();
+ myDlg->setActiveWindow();
+ myDlg->setFocus();
+ }
+}
+
+void SUPERVGUI_PortInESNode::browse() {
+ Trace("SUPERVGUI_PortInESNode::browse")
+ QString mess(tr("MSG_IPORT_VAL"));
+ mess += port->ToString();
+ QMessageBox::information(QAD_Application::getDesktop(), tr("MSG_INFO"), mess);
+}
+
+
+void SUPERVGUI_PortInESNode::onDeleteLink(SUPERVGUI_Link* theLink) {
+ disconnect(theLink, 0, this, 0);
+ myLinksList.remove(theLink);
+
+ if (myLinksList.count() == 0) {
+ popup->setItemEnabled(psc, true);
+ } else {
+ popup->setItemEnabled(psc, false);
+ }
+
+ if (port->HasInput())
+ setLineWidth(2);
+
+ if (main->isEditable()) {
+ popup->setItemEnabled(mySketchItem, true);
+ } else {
+ popup->setItemEnabled(mySketchItem, false);
+ }
+}
+
--- /dev/null
+// File : SUPERVGUI_Port.h
+// Created : 25 / 10 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Port_H
+#define SUPERVGUI_Port_H
+
+//#include "SUPERVGUI_Point.h"
+#include "SUPERVGUI_Label.h"
+#include "SUPERVGUI_Def.h"
+#include "SALOME_Selection.h"
+
+class SUPERVGUI_Main;
+class SUPERVGUI_Link;
+
+class SUPERVGUI_Port: public SUPERVGUI_Label {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Port(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p);
+ virtual ~SUPERVGUI_Port();
+
+ SUPERV_Port getPort();
+
+ virtual QPoint getConnectPnt();
+ virtual void deleteLinks() = 0;
+ virtual void sync();
+
+ SUPERVGUI_Main* getMain() { return main;}
+
+ private slots:
+ void sketchLink();
+ void endSketch();
+
+ protected slots:
+ virtual void deletePort();
+
+ protected:
+ SUPERVGUI_Main* main;
+ SUPERV_Port port;
+
+ QPopupMenu* popup;
+ int mySketchItem;
+ int myDelItem;
+ int browser;
+
+ SALOME_Selection* mySelection;
+
+ QString myName;
+
+ private slots:
+ void showPopup(QMouseEvent* e);
+};
+
+
+
+
+class SUPERVGUI_GetValueDlg;
+class SUPERVGUI_PortIn: public SUPERVGUI_Port {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_PortIn(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p);
+ virtual ~SUPERVGUI_PortIn();
+
+ bool eventFilter( QObject* o, QEvent* e );
+
+ void sync();
+ void setValue(const char* id);
+ virtual QPoint getConnectPnt();
+
+ void setLinkPrs(SUPERVGUI_Link* theLink);
+
+ SUPERVGUI_Link* getLinkPrs()
+ { return myLinkPrs; };
+
+ void deleteLinks();
+
+ private slots:
+ void setInput();
+ void browse();
+ void onDeleteLink(SUPERVGUI_Link*);
+
+
+ private:
+ int psd;
+ int psc;
+ SUPERVGUI_Link* myLinkPrs;
+ SUPERVGUI_GetValueDlg* myDlg;
+};
+
+
+
+
+
+class SUPERVGUI_PortOut: public SUPERVGUI_Port {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_PortOut(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p);
+ virtual ~SUPERVGUI_PortOut();
+
+ void sync();
+ void updateStudy();
+ bool isInStudy() { return study; };
+ void setStudyState(bool theIsInStudy) { study = theIsInStudy; };
+ virtual QPoint getConnectPnt();
+
+ void addLinkPrs(SUPERVGUI_Link* theLink);
+
+ SUPERVGUI_Link* getLinkPrs(int theNum)
+ { return myLinksList.at(theNum); };
+
+ int getLinkPrsCount()
+ { return myLinksList.count(); };
+
+ void deleteLinks();
+
+ private slots:
+ void toStudy();
+ void browse();
+
+ void sketch(QMouseEvent* e);
+ void onDeleteLink(SUPERVGUI_Link*);
+
+
+ private:
+ int pls;
+ bool study;
+ QPtrList<SUPERVGUI_Link> myLinksList;
+};
+
+
+class SUPERVGUI_PortInESNode: public SUPERVGUI_Port {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_PortInESNode(QWidget* parent, SUPERVGUI_Main* m, SUPERV_Port p);
+ virtual ~SUPERVGUI_PortInESNode();
+
+ bool eventFilter( QObject* o, QEvent* e );
+
+ void sync();
+ void setValue(const char* id);
+ virtual QPoint getConnectPnt();
+
+ void setLinkPrs(SUPERVGUI_Link* theLink);
+
+ SUPERVGUI_Link* getLinkPrs(int theNum)
+ { return myLinksList.at(theNum); };
+
+ int getLinkPrsCount()
+ { return myLinksList.count(); };
+
+ void deleteLinks();
+
+
+ private slots:
+ void setInput();
+ void browse();
+ void onDeleteLink(SUPERVGUI_Link*);
+
+
+ private:
+// int psd;
+ int psc;
+ QPtrList<SUPERVGUI_Link> myLinksList;
+ SUPERVGUI_GetValueDlg* myDlg;
+
+};
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Python.cxx
+// Created : 18 / 06 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Def.h"
+#include "QAD_PyEditor.h"
+#include "QAD_PyInterp.h"
+#include "QAD_Application.h"
+#include "SUPERVGUI_Python.h"
+#include <qgroupbox.h>
+#include <qlayout.h>
+#include <qapplication.h>
+
+#define MARGIN_SIZE 11
+#define SPACING_SIZE 6
+#define MIN_PYTHON_WIDTH 300
+#define MIN_PYTHON_HEIGHT 200
+
+/*!
+ Constructor
+*/
+SUPERVGUI_Python::SUPERVGUI_Python(QAD_PyInterp* pi, bool isReadOnly)
+ : QDialog( 0, "", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ),
+ py_int( pi )
+{
+ Trace("SUPERVGUI_Python::SUPERVGUI_Python");
+ setCaption("Python Control Code");
+ setSizeGripEnabled( TRUE );
+
+ QVBoxLayout* topLayout = new QVBoxLayout( this );
+ topLayout->setMargin( MARGIN_SIZE ); topLayout->setSpacing( SPACING_SIZE );
+
+ edit = new QMultiLineEdit( this );
+ edit->setPalette( QAD_Application::getPalette( true ) );
+ edit->setReadOnly( isReadOnly );
+ edit->setMinimumSize( MIN_PYTHON_WIDTH, MIN_PYTHON_HEIGHT );
+
+ QGroupBox* GroupButtons = new QGroupBox( this );
+ GroupButtons->setColumnLayout(0, Qt::Vertical );
+ GroupButtons->layout()->setSpacing( 0 ); GroupButtons->layout()->setMargin( 0 );
+ QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons->layout() );
+ GroupButtonsLayout->setAlignment( Qt::AlignTop );
+ GroupButtonsLayout->setSpacing( SPACING_SIZE );
+ GroupButtonsLayout->setMargin( MARGIN_SIZE );
+
+ if ( !isReadOnly ) {
+ ok = new QPushButton( tr( "BUT_OK" ), GroupButtons, "buttonOk" );
+ ok->setAutoDefault( TRUE ); ok->setDefault( TRUE );
+ GroupButtonsLayout->addWidget( ok );
+ connect( ok, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ }
+ GroupButtonsLayout->addStretch();
+ ko = new QPushButton( isReadOnly ? tr( "BUT_CLOSE" ) : tr( "BUT_CANCEL" ), GroupButtons, "buttonCancel" );
+ ko->setAutoDefault( TRUE );
+ GroupButtonsLayout->addWidget( ko );
+ connect( ko, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ if ( isReadOnly ) {
+ GroupButtonsLayout->addStretch();
+ }
+ topLayout->addWidget( edit );
+ topLayout->addWidget( GroupButtons );
+}
+
+/*!
+ Destructor
+*/
+SUPERVGUI_Python::~SUPERVGUI_Python() {
+ Trace("SUPERVGUI_Python::~SUPERVGUI_Python")
+}
+
+/*!
+ <OK> button slot
+*/
+void SUPERVGUI_Python::accept() {
+ Trace("SUPERVGUI_Python::okButton");
+ QDialog::accept();
+ qApp->processEvents();
+ int n = edit->numLines();
+ for ( int li = 0; li < n; li++ ) {
+ QString ligne = edit->textLine( li );
+ if ( !ligne.isEmpty() ) {
+ if ( py_int->run( ligne.latin1() ) ) {
+ QMessageBox::warning(0, "Supervision Error", "Can't Reload Python Code");
+ }
+ }
+ }
+}
+
+/*!
+ <Cancel> button slot
+*/
+void SUPERVGUI_Python::reject() {
+ Trace("SUPERVGUI_Python::koButton");
+ QDialog::reject();
+}
--- /dev/null
+// File : SUPERVGUI_Python.h
+// Created : 18 / 06 / 2002
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Python_H
+#define SUPERVGUI_Python_H
+
+using namespace std;
+#include "SUPERVGUI_Def.h"
+#include "QAD_PyInterp.h"
+
+class SUPERVGUI_Python: public QDialog {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Python(QAD_PyInterp* pi, bool isReadOnly);
+ virtual ~SUPERVGUI_Python();
+
+ private slots:
+ void accept();
+ void reject();
+
+ private:
+ QAD_PyInterp* py_int;
+ QMultiLineEdit* edit;
+ QPushButton* ok;
+ QPushButton* ko;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_Service.cxx
+// Created : 7 / 11 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#include "SUPERVGUI_Service.h"
+#include "SUPERVGUI_Main.h"
+#include "SUPERVGUI.h"
+#include "QAD_Tools.h"
+#include "QAD_FileDlg.h"
+
+#include "SALOME_NamingService.hxx"
+#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
+#include <qlayout.h>
+#include <qtextstream.h>
+
+
+static const char * ComponentIcon[] = {
+"20 20 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" .................. ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" .................. ",
+" . . . ",
+" . . . ",
+" ... ... ... ",
+" .. .. .. .. .. .. ",
+" . . . . . . ",
+" .. .. .. .. .. .. ",
+" ... ... ... "};
+
+
+static const char * InterfaceIcon[] = {
+"20 20 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .. ",
+" ...... ",
+" .. .. ",
+" . . ",
+".......... .. ",
+" . . ",
+" .. .. ",
+" ...... ",
+" .. ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
+
+
+
+
+SUPERVGUI_Service::SUPERVGUI_Service(SALOME_NamingService* ns):
+ QDialog(QAD_Application::getDesktop(), 0, false, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
+ naming(ns)
+{
+ setSizeGripEnabled( true );
+ setCaption(tr("TIT_SERVICES"));
+
+ QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 4);
+
+ myTabPane = new QTabWidget(this);
+ connect(myTabPane, SIGNAL(currentChanged(QWidget *)), this, SLOT(tabChanged(QWidget *)));
+
+ // Create Tab for Corba services
+ QWidget* aCorbaPane = new QWidget(myTabPane);
+ QVBoxLayout* aBaseLayoutV= new QVBoxLayout(aCorbaPane, 0, 4);
+ aBaseLayoutV->setMargin(5);
+ aBaseLayoutV->setSpacing(10);
+
+ QHBoxLayout* aBaseLayout = new QHBoxLayout(aCorbaPane); //!!
+
+ components = new QListView(aCorbaPane);
+ components->addColumn(tr("COL_COMPONENTS"));
+ components->addColumn(tr("COL_PORTTYPE"));
+ components->addColumn(tr("COL_PORTWAY"));
+ components->setColumnAlignment(1, AlignLeft);
+ components->setColumnAlignment(2, AlignLeft);
+ components->setColumnAlignment(3, AlignLeft);
+ components->setSelectionMode(QListView::Extended);
+ components->setRootIsDecorated(true);
+// aBaseLayout->addWidget(components);
+ aBaseLayoutV->addWidget(components); //!!
+
+ //QHGroupBox* aAddBox = new QHGroupBox(tr("TIT_ADDNODE"), aCorbaPane); //!!
+ //aAddBox->setInsideSpacing(20); //!!
+
+ QPushButton* aComputeCBtn = new QPushButton(tr("TIT_ADDCNODE"), aCorbaPane); //!!
+ connect(aComputeCBtn, SIGNAL(clicked()), this, SLOT(addComputeNode())); //!!
+ aComputeCBtn->setDefault(false);
+
+ QPushButton* aComputeBtn = new QPushButton(tr("TIT_ADDFNODE"), aCorbaPane);
+ connect(aComputeBtn, SIGNAL(clicked()), this, SLOT(addFactoryNode()));
+ aComputeBtn->setDefault(true);
+
+ aBaseLayout->addWidget(aComputeBtn);
+ aBaseLayout->addWidget(aComputeCBtn); //!!
+
+ aBaseLayoutV->insertLayout(-1, aBaseLayout);
+ myTabPane->addTab(aCorbaPane, tr("MODULES_PANE"));
+
+
+ // Create Tab for Python services
+ QWidget* aPythonPane = new QWidget(myTabPane);
+ QVBoxLayout* aPythonLayout = new QVBoxLayout(aPythonPane, 0, 4);
+ aPythonLayout->setMargin(5);
+ aPythonLayout->setSpacing(10);
+
+ // Type pane
+ QHGroupBox* aAddBox2 = new QHGroupBox(tr("TIT_ADDNODE"), aPythonPane);
+ aAddBox2->setInsideSpacing(20);
+
+ QLabel* aTypeLbl = new QLabel(tr("LBL_NODETYPE"), aAddBox2);
+
+ myTypeCombo = new QComboBox(aAddBox2);
+ myTypeCombo->insertItem("Computation");
+ myTypeCombo->insertItem("Switch");
+ myTypeCombo->insertItem("Loop");
+ myTypeCombo->insertItem("GoTo");
+ //myTypeCombo->insertItem("Label");
+ connect(myTypeCombo, SIGNAL(activated(int)), this, SLOT(typeNodeSelected(int)));
+
+ aPythonLayout->addWidget(aAddBox2);
+
+ // Edit pane
+ myStackWidget = new QWidgetStack(aPythonPane);
+
+ // other pane
+ myScriptPane = new SUPERVGUI_PythonEditPane(myStackWidget);
+ myOtherId = myStackWidget->addWidget(myScriptPane);
+
+ // loop pane
+ QTabWidget* aLoopTabPane = new QTabWidget(myStackWidget);
+ myInitPane = new SUPERVGUI_PythonEditPane(myStackWidget);
+ aLoopTabPane->addTab(myInitPane, "Init");
+
+ myMorePane = new SUPERVGUI_PythonEditPane(myStackWidget);
+ aLoopTabPane->addTab(myMorePane, "More");
+
+ myNextPane = new SUPERVGUI_PythonEditPane(myStackWidget);
+ aLoopTabPane->addTab(myNextPane, "Next");
+ myLoopId = myStackWidget->addWidget(aLoopTabPane);
+
+ myStackWidget->raiseWidget(myOtherId);
+
+ aPythonLayout->addWidget(myStackWidget, 1);
+
+ // Create button
+ QPushButton* aCreateBtn = new QPushButton(tr("TIT_ADDNODE"), aPythonPane);
+ connect(aCreateBtn, SIGNAL(clicked()), this, SLOT(addInlineNode()));
+ aPythonLayout->addWidget(aCreateBtn);
+
+ myTabPane->addTab(aPythonPane, tr("INLINE_PANE"));
+
+ aMainLayout->addWidget(myTabPane);
+
+ // Close button
+ QHBox* aBtnBox = new QHBox(this);
+ QHBoxLayout* aBtnLayout = new QHBoxLayout(aBtnBox->layout());
+ aBtnLayout->addStretch();
+
+ QPushButton* aCloseBtn = new QPushButton(tr("BUT_CLOSE"), aBtnBox);
+ connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(reject()));
+
+ aMainLayout->addWidget(aBtnBox);
+
+ initialise();
+ myX = 0;
+ myY = 0;
+ myIsInline = false;
+}
+
+
+
+void SUPERVGUI_Service::initialise() {
+ CORBA::Object_ptr obj = naming->Resolve("/Kernel/ModulCatalog");
+ SALOME_ModuleCatalog::ModuleCatalog_var *aModuleCatalog = new SALOME_ModuleCatalog::ModuleCatalog_var;
+ *aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
+ if (CORBA::is_nil(*aModuleCatalog)) {
+ setCaption("Error in Connexion to omniNames with '/Kernel/ModulCatalog'");
+ return;
+ }
+
+ QAD_ResourceMgr* aResMgr = QAD_Desktop::createResourceManager();
+
+ SALOME_ModuleCatalog::ListOfComponents_var lComponents = (*aModuleCatalog)->GetComponentList();
+ long nbComp = lComponents->length();
+ for (int i=0; i<nbComp; i++) {
+ SALOME_ModuleCatalog::Acomponent_ptr C = (*aModuleCatalog)->GetComponent((char *)lComponents[i]);
+ QListViewItem* myComponentItem = new QListViewItem(components, (char*)lComponents[i]);
+ myComponentItem->setSelectable(false);
+ QString aIconName = C->component_icone();
+ if (!aIconName.isEmpty()) {
+ QString resDir = aResMgr->findFile(aIconName, C->componentname()) ;
+ if (resDir) {
+ resDir = QAD_Tools::addSlash(resDir);
+ QPixmap aIcone(resDir + aIconName);
+ QIconSet aIconSet(aIcone);
+ myComponentItem->setPixmap(0, aIconSet.pixmap(QIconSet::Small, QIconSet::Normal));
+ } else {
+ myComponentItem->setPixmap(0, ComponentIcon);
+ }
+ } else {
+ myComponentItem->setPixmap(0, ComponentIcon);
+ }
+ SALOME_ModuleCatalog::ListOfInterfaces* lInterfaces = C->GetInterfaceList();
+ long nbInterf = lInterfaces->length();
+ for (int j=0; j<nbInterf; j++) {
+ SALOME_ModuleCatalog::DefinitionInterface* Interface = C->GetInterface((char*)(*lInterfaces)[j]);
+ QListViewItem* myInterfaceItem = new QListViewItem(myComponentItem, (char*)Interface->interfacename);
+ myInterfaceItem->setSelectable(false);
+ myInterfaceItem->setPixmap(0, InterfaceIcon);
+
+ long nbServices = Interface->interfaceservicelist.length();
+ for (int k=0; k<nbServices; k++) {
+ SALOME_ModuleCatalog::Service* Service = &(Interface->interfaceservicelist[k]);
+ QListViewItem* myServiceItem = new QListViewItem(myInterfaceItem, (char*)Service->ServiceName);
+ myServiceItem->setSelectable(true);
+ components->ensureItemVisible(myServiceItem);
+
+ long nbPortsOut = Service->ServiceoutParameter.length();
+ for (int m=0; m<nbPortsOut; m++) {
+ SALOME_ModuleCatalog::ServicesParameter* PortOut = &(Service->ServiceoutParameter[m]);
+ QListViewItem* myPortOutItem = new QListViewItem(myServiceItem, (char*)PortOut->Parametername, (char*)PortOut->Parametertype, "Out");
+ myPortOutItem->setSelectable(false);
+ }
+
+ long nbPortsIn = Service->ServiceinParameter.length();
+ for (int l=0; l<nbPortsIn; l++) {
+ SALOME_ModuleCatalog::ServicesParameter* PortIn = &(Service->ServiceinParameter[l]);
+ QListViewItem* myPortInItem = new QListViewItem(myServiceItem, (char*)PortIn->Parametername, (char*)PortIn->Parametertype, "In");
+ myPortInItem->setSelectable(false);
+ }
+ }
+ }
+ }
+}
+
+
+
+SUPERVGUI_Service::~SUPERVGUI_Service() {
+ Trace("SUPERVGUI_Service::~SUPERVGUI_Service")
+}
+
+void SUPERVGUI_Service::addComputeNode() {
+ SUPERVGUI_Main* aMain = Supervision.getMain();
+ if (aMain==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NO_SUPERVISION_WINDOW"));
+ } else {
+ CORBA::Object_ptr obj = naming->Resolve("/Kernel/ModulCatalog");
+ SALOME_ModuleCatalog::ModuleCatalog_var* aModuleCatalog = new SALOME_ModuleCatalog::ModuleCatalog_var;
+ *aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
+ if (CORBA::is_nil(*aModuleCatalog)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CHOOSE_SERVICE"));
+ } else {
+ QListViewItem* item;
+ bool b = false;
+ QListViewItemIterator i(components);
+ for (; i.current(); ++i) {
+ item = i.current();
+ if (item->isSelected()) {
+ const char* service = item->text(0).latin1();
+ const char* interface = item->parent()->text(0).latin1();
+ const char* component = item->parent()->parent()->text(0).latin1();
+ SALOME_ModuleCatalog::Acomponent_ptr myComponent = (*aModuleCatalog)->GetComponent(component);
+ if (myComponent==NULL) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_CHOOSE_SERVICE"));
+ } else {
+ const SALOME_ModuleCatalog::Service* myService = myComponent->GetService(interface, service);
+ b = true;
+
+ SUPERV_CNode node = aMain->getDataflow()->CNode(*myService);
+ if (CORBA::is_nil(node)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
+ node->Coords(myX, myY);
+ myX += NODE_DX;
+ myY += NODE_DY;
+ aMain->addComputeNode(SUPERV::CNode::_narrow(node));
+ }
+ }
+ }
+ if (!b) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NONODE_TOADD"));
+ }
+ }
+ }
+}
+
+void SUPERVGUI_Service::addFactoryNode() {
+ SUPERVGUI_Main* aMain = Supervision.getMain();
+ if (aMain==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NO_SUPERVISION_WINDOW"));
+ } else {
+ CORBA::Object_ptr obj = naming->Resolve("/Kernel/ModulCatalog");
+ SALOME_ModuleCatalog::ModuleCatalog_var* aModuleCatalog = new SALOME_ModuleCatalog::ModuleCatalog_var;
+ *aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
+ if (CORBA::is_nil(*aModuleCatalog)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CHOOSE_SERVICE"));
+ } else {
+ QListViewItem* item;
+ bool b = false;
+ QListViewItemIterator i(components);
+ for (; i.current(); ++i) {
+ item = i.current();
+ if (item->isSelected()) {
+ const char* service = item->text(0).latin1();
+ const char* interface = item->parent()->text(0).latin1();
+ const char* component = item->parent()->parent()->text(0).latin1();
+ SALOME_ModuleCatalog::Acomponent_ptr myComponent = (*aModuleCatalog)->GetComponent(component);
+ if (myComponent==NULL) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_CHOOSE_SERVICE"));
+ } else {
+ const SALOME_ModuleCatalog::Service* myService = myComponent->GetService(interface, service);
+ b = true;
+
+ SUPERV_FNode node = aMain->getDataflow()->FNode(component, interface, *myService);
+ if (CORBA::is_nil(node)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
+ node->Coords(myX, myY);
+ myX += NODE_DX;
+ myY += NODE_DY;
+ aMain->addComputeNode(SUPERV::CNode::_narrow(node));
+ }
+ }
+ }
+ if (!b) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NONODE_TOADD"));
+ }
+ }
+ }
+}
+
+
+void SUPERVGUI_Service::addInlineNode() {
+ SUPERVGUI_Main* aMain = Supervision.getMain();
+ if (aMain==0) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NO_SUPERVISION_WINDOW"));
+ } else {
+ int aSel = myTypeCombo->currentItem();
+ switch (aSel) {
+ case 0: // Computation
+ if (myScriptPane->isDefined()) {
+ SUPERV_INode aNode = aMain->getDataflow()->INode(myScriptPane->getFuncName().latin1(),
+ (myScriptPane->getFunction()).in());
+ if (CORBA::is_nil(aNode)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
+ aNode->Coords(myX, myY);
+ myX += NODE_DX;
+ myY += NODE_DY;
+ aMain->addComputeNode(SUPERV::CNode::_narrow(aNode));
+ }
+ break;
+
+ case 1: // Switch
+ if (myScriptPane->isDefined()) {
+ SUPERV_INode aEndNode;
+ SUPERV_SNode aStartNode = aMain->getDataflow()->SNode(myScriptPane->getFuncName().latin1(),
+ (myScriptPane->getFunction()).in(),
+ aEndNode);
+ if (CORBA::is_nil(aStartNode) || CORBA::is_nil(aEndNode)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
+ aStartNode->Coords(myX, myY);
+ aEndNode->Coords(myX + LABEL_WIDTH*2, myY);
+ myX += NODE_DX;
+ myY += NODE_DY;
+ aMain->addControlNode(SUPERV::CNode::_narrow(aStartNode), SUPERV::CNode::_narrow(aEndNode), true);
+ }
+ break;
+
+ case 2: // Loop
+ {
+ SUPERV_INode aEndNode;
+ SUPERV_LNode aStartNode = aMain->getDataflow()->LNode(myInitPane->getFuncName().latin1(), (myInitPane->getFunction()).in(),
+ myMorePane->getFuncName().latin1(), (myMorePane->getFunction()).in(),
+ myNextPane->getFuncName().latin1(), (myNextPane->getFunction()).in(),
+ aEndNode);
+ if (CORBA::is_nil(aStartNode) || CORBA::is_nil(aEndNode)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
+ aStartNode->Coords(myX, myY);
+ aEndNode->Coords(myX + LABEL_WIDTH*2, myY);
+ myX += NODE_DX;
+ myY += NODE_DY;
+ aMain->addControlNode(SUPERV::CNode::_narrow(aStartNode), SUPERV::CNode::_narrow(aEndNode), true);
+ }
+ break;
+
+ case 3: // GoTo
+ {
+ SUPERV_GNode aGotoNode;
+ if (myScriptPane->isDefined())
+ aGotoNode = aMain->getDataflow()->GNode(myScriptPane->getFuncName().latin1(),
+ (myScriptPane->getFunction()).in(), "");
+ else
+ aGotoNode = aMain->getDataflow()->GNode("GoTo", (myScriptPane->getFunction()).in(), "");
+ if (CORBA::is_nil(aGotoNode)) {
+ QMessageBox::warning(0, tr("ERROR"), tr("MSG_CANT_CREATE_NODE"));
+ return;
+ }
+ aGotoNode->Coords(myX, myY);
+ myX += NODE_DX;
+ myY += NODE_DY;
+ aMain->addGOTONode(SUPERV::GNode::_narrow(aGotoNode));
+ }
+ break;
+ }
+ }
+}
+
+
+
+void SUPERVGUI_Service::typeNodeSelected(int theRow) {
+ if (theRow == 2)
+ myStackWidget->raiseWidget(myLoopId);
+ else
+ myStackWidget->raiseWidget(myOtherId);
+}
+
+
+
+void SUPERVGUI_Service::choose() {
+ Trace("SUPERVGUI_Service::choose")
+ show();
+ raise();
+}
+
+
+void SUPERVGUI_Service::showEvent(QShowEvent* theEvent) {
+ SUPERVGUI_Main* aMain = Supervision.getMain();
+ if (aMain && (!aMain->isArrayShown())) {
+ aMain->getGraph()->viewportToContents(0, 0, myX, myY);
+ }
+ QDialog::showEvent(theEvent);
+}
+
+
+void SUPERVGUI_Service::tabChanged(QWidget* theWidget) {
+ myIsInline = (myTabPane->currentPageIndex() == 1);
+}
+
+
+
+//*****************************************************
+// Pane for Python script editing
+//*****************************************************
+SUPERVGUI_PythonEditPane::SUPERVGUI_PythonEditPane(QWidget* theParent)
+ : QFrame(theParent),
+ myIStream(0)
+{
+ QGridLayout* aEditLayout = new QGridLayout(this, 2, 4);
+
+ // First row
+ QPushButton* aLoadBtn = new QPushButton(tr("BUT_LOAD"), this);
+ connect(aLoadBtn, SIGNAL(clicked()), this, SLOT(loadFile()));
+
+ aEditLayout->addWidget(aLoadBtn, 0, 2);
+
+ myNextBtn = new QPushButton(tr("BUT_NEXT"), this);
+ myNextBtn->setEnabled(false);
+ connect(myNextBtn, SIGNAL(clicked()), this, SLOT(readFunction()));
+
+ aEditLayout->addWidget(myNextBtn, 0, 3);
+
+ //Second row
+ myText = new QTextEdit(this);
+ myText->setWordWrap(QTextEdit::FixedColumnWidth);
+ myText->setWrapColumnOrWidth(80);
+
+ aEditLayout->addMultiCellWidget(myText, 1, 1, 0, 3);
+}
+
+
+/**
+ * Load existing Python script
+ */
+void SUPERVGUI_PythonEditPane::loadFile() {
+ QString aFileName = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
+ "",
+ "*.py",
+ tr("TIT_LOADSCRIPT"),
+ true);
+ if (aFileName.isEmpty()) return;
+
+ myFile = new QFile(aFileName);
+ if (!myFile->open(IO_ReadOnly)) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"),
+ tr("MSG_CANT_LOADSCRIPT"));
+ return;
+ }
+ myIStream = new QTextStream(myFile);
+
+ if (myIStream->atEnd()) {
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"),
+ tr("MSG_EMTY_FILE"));
+ myNextBtn->setEnabled(false);
+ delete myIStream;
+ myIStream = 0;
+ myFile->close();
+ delete myFile;
+ return;
+ }
+ myNextBtn->setEnabled(true);
+ readFunction();
+}
+
+
+/**
+ * Finds and Reads a function from current position in the opened file
+ */
+void SUPERVGUI_PythonEditPane::readFunction() {
+ if (!myIStream) return;
+
+ while (!myIStream->atEnd()) {
+ QString aLine = myIStream->readLine();
+ if (aLine.isNull()) return;
+
+ // find first function
+ int aDefPos = aLine.find("def");
+ if (aDefPos == 0) { // only not a class members
+ myText->clear();
+ // find name
+ /*int aStart = aLine.find(" ", aDefPos);
+ int aEnd = aLine.find("(", aStart);
+ QString aName = aLine.mid(aStart, (aEnd-aStart));
+ aName = aName.stripWhiteSpace();
+ myNameEdt->setText(aName);*/
+
+ // find input params
+ /*aStart = aEnd+1;
+ aEnd = aLine.find(")", aStart);
+ QString aParams = aLine.mid(aStart, (aEnd-aStart));
+ aParams = aParams.stripWhiteSpace();
+ myParamEdt->setText(aParams);*/
+
+ myText->append(aLine);
+ // read body
+ QString aBodyLine = myIStream->readLine();
+ while ((!aBodyLine.isNull()) && aBodyLine[0].isSpace()) {
+ myText->append(aBodyLine);
+ aBodyLine = myIStream->readLine();
+ }
+ return;
+ }
+ }
+ QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"),
+ tr("MSG_NOMORE_FUNCTIONS"));
+ delete myIStream;
+ myIStream = 0;
+ myNextBtn->setEnabled(false);
+ myFile->close();
+ delete myFile;
+}
+
+
+QString SUPERVGUI_PythonEditPane::getFuncName() {
+ QString aName("");
+ for (int i=0; i < myText->paragraphs(); i++) {
+ QString aLine = myText->text(i);
+ int aDefPos = aLine.find("def");
+ if (aDefPos == 0) {
+ int aStart = aLine.find(" ", aDefPos);
+ int aEnd = aLine.find("(", aStart);
+ QString aName = aLine.mid(aStart, (aEnd-aStart));
+ return aName.stripWhiteSpace();
+ }
+ }
+ return aName;
+}
+
+
+SUPERV_Strings SUPERVGUI_PythonEditPane::getFunction() {
+ SUPERV_Strings aStrings = new SUPERV::ListOfStrings();
+ aStrings->length(myText->paragraphs());
+ for (int i=0; i < myText->paragraphs(); i++) {
+ aStrings[i] = CORBA::string_dup(myText->text(i).latin1());
+ }
+ return aStrings._retn();
+}
+
+
+void SUPERVGUI_PythonEditPane::setFunction(SUPERV_Strings theStr) {
+ int aLen = theStr->length();
+ for (int i=0; i < aLen; i++)
+ myText->append(QString(theStr[i]));
+}
+
+
+
+/*!
+ * Edit Python dialog
+ */
+SUPERVGUI_EditPythonDlg::SUPERVGUI_EditPythonDlg(bool isLoop)
+ :QDialog(QAD_Application::getDesktop(), 0, true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
+{
+ setSizeGripEnabled( true );
+ setCaption(tr("TIT_FUNC_PYTHON"));
+ resize( 500, 250 );
+ QVBoxLayout* aMainLayout = new QVBoxLayout(this, 7, 4);
+ if (isLoop) {
+ QTabWidget* aLoopTabPane = new QTabWidget(this);
+ myInitPane = new SUPERVGUI_PythonEditPane(this);
+ aLoopTabPane->addTab(myInitPane, "Init");
+
+ myMorePane = new SUPERVGUI_PythonEditPane(this);
+ aLoopTabPane->addTab(myMorePane, "More");
+
+ myNextPane = new SUPERVGUI_PythonEditPane(this);
+ aLoopTabPane->addTab(myNextPane, "Next");
+
+ aMainLayout->addWidget(aLoopTabPane);
+ } else {
+ myEditPane = new SUPERVGUI_PythonEditPane(this);
+ aMainLayout->addWidget(myEditPane);
+ }
+ QGroupBox* aBtnBox = new QGroupBox( this );
+ aBtnBox->setColumnLayout( 0, Qt::Vertical );
+ aBtnBox->layout()->setSpacing( 0 ); aBtnBox->layout()->setMargin( 0 );
+ QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox->layout() );
+ aBtnLayout->setAlignment( Qt::AlignTop );
+ aBtnLayout->setSpacing( 6 ); aBtnLayout->setMargin( 11 );
+
+ QPushButton* aOKBtn = new QPushButton( tr( "BUT_OK" ), aBtnBox );
+ connect( aOKBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ aBtnLayout->addWidget( aOKBtn );
+
+ aBtnLayout->addStretch();
+
+ QPushButton* aCancelBtn = new QPushButton( tr("BUT_CANCEL"), aBtnBox );
+ connect( aCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ aBtnLayout->addWidget( aCancelBtn );
+
+ aMainLayout->addWidget(aBtnBox);
+}
--- /dev/null
+// File : SUPERVGUI_Service.h
+// Created : 7 / 11 / 2001
+// Author : Francis KLOSS
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : CEA
+
+#ifndef SUPERVGUI_Service_H
+#define SUPERVGUI_Service_H
+
+using namespace std;
+#include "SUPERVGUI_Def.h"
+#include <qtabwidget.h>
+#include <qhgroupbox.h>
+#include <qwidgetstack.h>
+
+
+//*****************************************************
+// Pane for Python script editing
+//*****************************************************
+class SUPERVGUI_PythonEditPane: public QFrame {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_PythonEditPane(QWidget* theParent);
+ ~SUPERVGUI_PythonEditPane() {};
+
+ QString getFuncName();
+
+ bool isDefined()
+ { return (myText->paragraphs() > 1); }
+
+ SUPERV_Strings getFunction();
+ void setFunction(SUPERV_Strings theStr);
+
+ public slots:
+ void loadFile();
+ void readFunction();
+
+ private:
+
+ //QLineEdit* myNameEdt;
+ //QLineEdit* myParamEdt;
+ QTextEdit* myText;
+ //QLineEdit* myOutParamEdt;
+ QPushButton* myNextBtn;
+
+ QTextStream* myIStream;
+ QFile* myFile;
+};
+
+
+//*****************************************************
+// Dialog box for node creation
+//*****************************************************
+
+class SUPERVGUI_Service: public QDialog {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_Service(SALOME_NamingService* ns);
+ ~SUPERVGUI_Service();
+
+ void choose();
+
+ protected:
+ void showEvent(QShowEvent* theEvent);
+
+ private:
+ void initialise();
+
+ private slots:
+ void tabChanged(QWidget *);
+ void addComputeNode();
+ void addFactoryNode();
+ void addInlineNode();
+ void typeNodeSelected(int theRow);
+
+ private:
+ QListView* components;
+ SALOME_NamingService* naming;
+ int myX, myY;
+ QWidgetStack* myStackWidget;
+ int myLoopId;
+ int myOtherId;
+
+ SUPERVGUI_PythonEditPane* myScriptPane;
+
+ SUPERVGUI_PythonEditPane* myInitPane;
+ SUPERVGUI_PythonEditPane* myMorePane;
+ SUPERVGUI_PythonEditPane* myNextPane;
+
+ QTabWidget* myTabPane;
+ bool myIsInline;
+
+ QComboBox* myTypeCombo;
+};
+
+/*!
+ * Edit Python dialog
+ */
+class SUPERVGUI_EditPythonDlg: public QDialog {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_EditPythonDlg(bool isLoop = false);
+ ~SUPERVGUI_EditPythonDlg() {};
+
+ // Not Loop functions
+ QString getFuncName()
+ { return myEditPane->getFuncName(); }
+
+ bool isDefined()
+ { return myEditPane->isDefined(); }
+
+ SUPERV_Strings getFunction()
+ { return myEditPane->getFunction(); }
+
+ void setFunction(SUPERV_Strings theStr)
+ { myEditPane->setFunction(theStr); }
+
+ // Init functions
+ QString getInitFuncName()
+ { return myInitPane->getFuncName(); }
+
+ SUPERV_Strings getInitFunction()
+ { return myInitPane->getFunction(); }
+
+ void setInitFunction(SUPERV_Strings theStr)
+ { myInitPane->setFunction(theStr); }
+
+ // More functions
+ QString getMoreFuncName()
+ { return myMorePane->getFuncName(); }
+
+ SUPERV_Strings getMoreFunction()
+ { return myMorePane->getFunction(); }
+
+ void setMoreFunction(SUPERV_Strings theStr)
+ { myMorePane->setFunction(theStr); }
+
+ // Next functions
+ QString getNextFuncName()
+ { return myNextPane->getFuncName(); }
+
+ SUPERV_Strings getNextFunction()
+ { return myNextPane->getFunction(); }
+
+ void setNextFunction(SUPERV_Strings theStr)
+ { myNextPane->setFunction(theStr); }
+
+ private:
+ SUPERVGUI_PythonEditPane* myEditPane;
+ SUPERVGUI_PythonEditPane* myInitPane;
+ SUPERVGUI_PythonEditPane* myMorePane;
+ SUPERVGUI_PythonEditPane* myNextPane;
+};
+
+#endif
--- /dev/null
+using namespace std;
+// File : SUPERVGUI_View.cxx
+// Created : 24 / 10 / 2002
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#include "SUPERVGUI_View.h"
+#include "SUPERVGUI_Main.h"
+#include "QAD_Config.h"
+
+
+
+#if QT_VERSION >= 0x030005
+QCursor panCursor(Qt::SizeAllCursor);
+#else
+QCursor panCursor(SizeAllCursor);
+#endif
+
+SUPERVGUI_View::SUPERVGUI_View(SUPERVGUI_Main* theMain):
+ QScrollView(theMain, 0, Qt::WRepaintNoErase),
+ main(theMain)
+{
+ myIsPanActivated = false;
+ myAddStudyItem = 0;
+ myDx = 0;
+ myDx = 0;
+ myLastX = 0;
+ myLastY = 0;
+ myIsDragging = false;
+ myCursor = cursor();
+
+// myLastMinVisX = horizontalScrollBar()->value(); //viewport()->x();
+// myLastMinVisY = verticalScrollBar()->value(); //viewport()->y();
+
+ myPopup = new QPopupMenu(viewport());
+
+ if (main->isEditable()) {
+ myPopup->insertItem(tr("MSG_ADD_NODE"), main, SLOT(addNode()));
+ myPopup->insertItem(tr("MSG_INS_FILE"), main, SLOT(insertFile()));
+ myPopup->insertSeparator();
+ }
+
+ myViewPopup = new QPopupMenu(viewport());
+ myViewPopup->insertItem(tr("POP_FULLVIEW"), main, SLOT(showFullGraph()));
+ myViewPopup->insertItem(tr("POP_CONTROLVIEW"), main, SLOT(showContolFlow()));
+ myViewPopup->insertItem(tr("POP_TABLEVIEW"), main, SLOT(showTable()));
+
+ myPopup->insertItem(tr("POP_VIEW"), myViewPopup);
+ myPopup->insertSeparator();
+
+ myAddStudyItem = myPopup->insertItem(tr("MSG_ADD_STUDY"), this, SLOT(addToStudy()));
+ myPopup->insertItem(tr("MSG_CHANGE_INFO"), main, SLOT(changeInformation()));
+ myPopup->insertSeparator();
+
+ myPopup->insertItem(tr("MSG_COPY_DATAFLOW"), main, SLOT(copy()));
+ myPopup->insertItem(tr("MSG_FILTER_NOTIFY"), main, SLOT(filterNotification()));
+
+ QString aRed = QAD_CONFIG->getSetting("SUPERVGraph:BackgroundColorRed");
+ QString aGreen = QAD_CONFIG->getSetting("SUPERVGraph:BackgroundColorGreen");
+ QString aBlue = QAD_CONFIG->getSetting("SUPERVGraph:BackgroundColorBlue");
+
+ if( (!aRed.isEmpty()) && (!aGreen.isEmpty()) && (!aBlue.isEmpty()) ) {
+ QColor aColor(aRed.toInt(), aGreen.toInt(), aBlue.toInt());
+ setPaletteBackgroundColor(QColor(aRed.toInt(), aGreen.toInt(), aBlue.toInt()));
+ } else
+ setPaletteBackgroundColor(MAIN_COLOR);
+}
+
+
+SUPERVGUI_View::~SUPERVGUI_View()
+{
+}
+
+void SUPERVGUI_View::viewportMousePressEvent(QMouseEvent* theEvent)
+{
+ myIsDragging = true;
+ myLastX = theEvent->globalX();
+ myLastY = theEvent->globalY();
+
+ if (((theEvent->button() == Qt::MidButton)&&(theEvent->state() == Qt::ControlButton)) || myIsPanActivated) {
+ myCursor = cursor();
+ setCursor(panCursor);
+ return;
+ }
+ QScrollView::viewportMousePressEvent(theEvent);
+}
+
+void SUPERVGUI_View::viewportMouseMoveEvent(QMouseEvent* theEvent)
+{
+ if (myIsDragging && ((theEvent->state() == (Qt::ControlButton|Qt::MidButton)) || myIsPanActivated)) {
+ myDx = theEvent->globalX() - myLastX;
+ myDy = theEvent->globalY() - myLastY;
+
+ myLastX = theEvent->globalX();
+ myLastY = theEvent->globalY();
+
+ scrollBy(-myDx, -myDy);
+ return;
+ }
+ QScrollView::viewportMouseMoveEvent(theEvent);
+}
+
+
+
+void SUPERVGUI_View::viewportMouseReleaseEvent(QMouseEvent* theEvent)
+{
+ myDx = 0;
+ myDx = 0;
+ myIsDragging = false;
+ myIsPanActivated = false;
+ setCursor(myCursor);
+ QScrollView::viewportMouseReleaseEvent(theEvent);
+}
+
+
+void SUPERVGUI_View::ActivatePanning()
+{
+ myIsPanActivated = true;
+}
+
+
+void SUPERVGUI_View::ResetView()
+{
+ setContentsPos(0,0);
+}
+
+
+void SUPERVGUI_View::setAsFromStudy(bool theToStudy) {
+ if (myAddStudyItem != 0) {
+ myPopup->setItemEnabled(myAddStudyItem, !theToStudy);
+ }
+}
+
+void SUPERVGUI_View::addToStudy() {
+ if (main->addStudy()) main->setAsFromStudy(true);
+}
+
+void SUPERVGUI_View::setPaletteBackgroundColor(const QColor& color) {
+ viewport()->setPaletteBackgroundColor(color);
+ QScrollView::setPaletteBackgroundColor(color.light());
+ repaintContents();
+}
+
+void SUPERVGUI_View::ResizeGraph ( QWidget * theChild, int theX, int theY ) {
+
+ int aGraphWidth = contentsWidth();
+ int aGraphHeight = contentsHeight();
+ if (theX > (contentsWidth() - theChild->width())) {
+ myLastX = theX;
+ myDx = theChild->width();
+ aGraphWidth = theX + theChild->width();
+ }
+ if (theY > (contentsHeight() - theChild->height())) {
+ myLastY = theY;
+ myDy = theChild->height();
+ aGraphHeight = theY + theChild->height();
+ }
+
+ setMaximumWidth(aGraphWidth);
+ setMaximumHeight(aGraphHeight);
+
+ resizeContents(aGraphWidth, aGraphHeight);
+}
+
+int SUPERVGUI_View::getLastX() {
+ return myLastX;
+}
+
+int SUPERVGUI_View::getLastY() {
+ return myLastY;
+}
--- /dev/null
+// File : SUPERVGUI_View.h
+// Created : 24 / 10 / 2002
+// Author : Vitaly SMETANNIKOV
+// Project : SALOME
+// Module : SUPERVGUI
+// Copyright : Open CASCADE
+
+
+#ifndef SUPERVGUI_View_H
+#define SUPERVGUI_View_H
+
+//#include "SUPERVGUI.h"
+#include <qpopupmenu.h>
+#include <qscrollview.h>
+
+//VRV: porting on Qt 3.0.5
+#if QT_VERSION >= 0x030005
+#include <qcursor.h>
+#endif
+//VRV: porting on Qt 3.0.5
+
+class SUPERVGUI_Main;
+
+class SUPERVGUI_View: public QScrollView {
+ Q_OBJECT
+
+ public:
+ SUPERVGUI_View(SUPERVGUI_Main* theMain);
+ virtual ~SUPERVGUI_View();
+
+ SUPERVGUI_Main* getMain() { return main; };
+
+ virtual void ActivatePanning();
+ virtual void ResetView();
+ virtual void setAsFromStudy(bool theToStudy);
+
+ void setPaletteBackgroundColor(const QColor& color);
+
+ void ResizeGraph( QWidget * theChild, int theX, int theY );
+
+ int getLastX();
+ int getLastY();
+
+ public slots:
+ void addToStudy();
+
+ protected:
+ void viewportMouseMoveEvent(QMouseEvent* theEvent);
+ void viewportMouseReleaseEvent(QMouseEvent* theEvent);
+ void viewportMousePressEvent(QMouseEvent* theEvent);
+
+ SUPERVGUI_Main* main;
+ QPopupMenu* myPopup;
+ QPopupMenu* myViewPopup;
+ bool myIsPanActivated;
+ int myAddStudyItem;
+
+ private:
+ int myDx;
+ int myDy;
+ int myLastX;
+ int myLastY;
+ bool myIsDragging;
+ QCursor myCursor;
+
+
+};
+
+#endif
--- /dev/null
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. "Foo::Bar"
+# would be translated to "Pub", not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-09-11 12:08:44 PM CEST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: QAD_ObjectBrowser.cxx:140
+msgid "ICON_OBJBROWSER_Supervision"
+msgstr "Superv_tree_superv.png"
\ No newline at end of file
--- /dev/null
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. "Foo::Bar"
+# would be translated to "Pub", not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-09-11 12:08:44 PM CEST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#Title of error messages
+msgid "ERROR"
+msgstr "Error"
+
+#:SUPERVGUI_Main.cxx:246
+msgid "MSG_FILE_EXIST"
+msgstr "File '%1' exists.\nReplace?"
+
+#:SUPERVGUI_Main.cxx:252
+msgid "MSG_BAD_WRITING"
+msgstr "Bad Writing File"
+
+#:SUPERVGUI_Main.cxx:242
+msgid "TTL_EXPORT_DATAFLOW"
+msgstr "Export Dataflow As..."
+
+#:SUPERVGUI_Main.cxx:41
+msgid "MSG_ACCESS_BAD_IOR"
+msgstr "Can't Access Dataflow: bad IOR"
+
+#:SUPERVGUI_Main.cxx:47
+msgid "MSG_NOACCESS_BY_IOR"
+msgstr "Can't Access Dataflow by IOR"
+
+#:SUPERVGUI_Main.cxx:53
+msgid "MSG_CANT_CREATE_DF"
+msgstr "Can't Create a New Dataflow"
+
+#:SUPERVGUI_Main.cxx:72
+msgid "MSG_BAD_FILE"
+msgstr "Bad File: %1"
+
+#:SUPERVGUI_Main.cxx:86
+msgid "MSG_CANT_COPY"
+msgstr "Can't Copy Dataflow"
+
+#:SUPERVGUI_Main.cxx:102
+msgid "MSG_DEL_LAST_PNT"
+msgstr "Delete Last Point"
+
+#:SUPERVGUI_Main.cxx:103
+msgid "MSG_DEL_LINK"
+msgstr "Delete Link"
+
+#:SUPERVGUI_Main.cxx:104
+msgid "MSG_ORTHO_LINE"
+msgstr "Ortho Mode"
+
+#:SUPERVGUI_Main.cxx:146
+msgid "WARNING"
+msgstr "Supervision Warning"
+
+#:SUPERVGUI_Main.cxx:147
+msgid "MSG_DF_RUNNING"
+msgstr "Dataflow Is Currently Running"
+
+#:SUPERVGUI_Main.cxx:148
+msgid "MSG_DF_EXECUTION"
+msgstr "Background Execution"
+
+#:SUPERVGUI_Main.cxx:149
+msgid "MSG_DF_KILL"
+msgstr "Kill Execution"
+
+#:SUPERVGUI_Main.cxx:185
+msgid "GRAPH_TITLE"
+msgstr "Supervision: "
+
+#:SUPERVGUI_Main.cxx:195
+msgid "MSG_GRAPH_STARTED"
+msgstr "===> Dataflow Execution is started"
+
+#:SUPERVGUI_Main.cxx:191
+msgid "MSG_GRAPH_READONLY"
+msgstr "===> Dataflow is Read Only"
+
+#:SUPERVGUI_Main.cxx:191
+msgid "MSG_GRAPH_EDITING"
+msgstr "===> Dataflow is Modifiable"
+
+#:SUPERVGUI_Main.cxx:200
+msgid "MSG_GRAPH_SUSPENDED"
+msgstr "===> Dataflow Execution is Suspended"
+
+#:SUPERVGUI_Main.cxx:204
+msgid "MSG_GRAPH_FINISHED"
+msgstr "===> Dataflow Execution is Finished"
+
+#:SUPERVGUI_Main.cxx:208
+msgid "MSG_GRAPH_ABORTED"
+msgstr "===> Dataflow Execution is Aborted"
+
+#:SUPERVGUI_Main.cxx:212
+msgid "MSG_GRAPH_KILLED"
+msgstr "===> Dataflow Execution is Killed"
+
+#:SUPERVGUI_Main.cxx:265
+msgid "MSG_GRAPH_INSERT"
+msgstr "Insert a Dataflow"
+
+#:SUPERVGUI_Main.cxx:285
+msgid "MSG_DF_NOTVALID"
+msgstr "Dataflow Not Valid"
+
+#:SUPERVGUI_Main.cxx:287
+msgid "MSG_DF_NOTEXECUTABLE"
+msgstr "Dataflow Not Executable"
+
+#:SUPERVGUI_Main.cxx:289
+msgid "MSG_DF_BADEXECUTE"
+msgstr "Dataflow Bad Execute"
+
+#:SUPERVGUI_Main.cxx:301
+msgid "MSG_DF_NOTRUNNING"
+msgstr "Dataflow Is Not Running"
+
+#:SUPERVGUI_Main.cxx:305
+msgid "MSG_CANTKILL_DF"
+msgstr "Can't Kill Dataflow"
+
+#:SUPERVGUI_Main.cxx:315
+msgid "MSG_DF_RESUMED"
+msgstr "===> Dataflow Execution is Resumed"
+
+#:SUPERVGUI_Main.cxx:318
+msgid "MSG_CANT_RESUME"
+msgstr "Can't Resume Dataflow"
+
+#:SUPERVGUI_Main.cxx:324
+msgid "MSG_CANT_SUSPEND"
+msgstr "Can't Suspend Dataflow"
+
+#:SUPERVGUI_Main.cxx:335
+msgid "MSG_DF_RESTARTED"
+msgstr "===> Dataflow Execution is Restarted"
+
+#:SUPERVGUI_Main.cxx:338
+msgid "MSG_CANT_RESTART"
+msgstr "Can't Restart Dataflow"
+
+#:SUPERVGUI_Main.cxx:344
+msgid "MSG_CANT_STOP"
+msgstr "Can't Stop Dataflow"
+
+#:SUPERVGUI_Main.cxx:477
+msgid "MSG_CHOOSE_OUTPUT"
+msgstr "Choose an Output Port"
+
+#:SUPERVGUI_Main.cxx:477
+msgid "MSG_CHOOSE_INPUT"
+msgstr "Choose an Input Port"
+
+#:SUPERVGUI_Main.cxx:486
+msgid "MSG_CANT_CREATE_LINK"
+msgstr "Can't Create This Link"
+
+#:SUPERVGUI_Main.cxx:508
+msgid "MSG_CANT_CREATE_POINT"
+msgstr "Can't Create Point(s) For This Link"
+
+#:SUPERVGUI_Main.cxx:541
+msgid "MSG_RIGHTLINE"
+msgstr "Right Line"
+
+#:SUPERVGUI_Main.cxx:541
+msgid "MSG_FREEPOINT"
+msgstr "Free Point"
+
+#:SUPERVGUI_Main.cxx:627
+msgid "MSG_CHOOSE_DATA"
+msgstr "Choose a Data in Study"
+
+#:SUPERVGUI_Main.cxx:170
+msgid "MSG_GRAPH_DISPLAYED"
+msgstr "The DataFlow %1 \nis already displayed. Open again?"
+
+#:SUPERVGUI_Main.cxx:627
+msgid "MSG_NOTHING_COPY"
+msgstr "Nothing to copy."
+
+msgid "MSG_CANT_CHANGELINK"
+msgstr "Can't Change Point Coordinates For a Link"
+
+msgid "MSG_CANT_CHANGE_COORDLINK"
+msgstr "Can't Change Coordinates For a Link"
+
+msgid "MSG_CANT_DEL_POINT"
+msgstr "Can't Delete this Point"
+
+msgid "MSG_CANT_ADD_POINT"
+msgstr "Can't Add this Point"
+
+msgid "MSG_CANT_GET_LNKCOORD"
+msgstr "Can't Get Coordinates From a Link"
+
+msgid "MSG_NOT_IMPLEMENTED"
+msgstr "Not Yet Implemented"
+
+msgid "MSG_CANT_STOPNODE"
+msgstr "Can't Stop Node"
+
+msgid "MSG_CANT_RESTARTNODE"
+msgstr "Can't Restart Node"
+
+msgid "MSG_CANT_KILLNODE"
+msgstr "Can't Kill Node"
+
+msgid "MSG_CANT_SUSPENDNODE"
+msgstr "Can't Suspend Node"
+
+msgid "MSG_CANT_RESUMENODE"
+msgstr "Can't Resume Node"
+
+msgid "MSG_CANT_RENAMENODE"
+msgstr "Can't Rename this Node"
+
+msgid "MSG_CHANGE_NODENAME"
+msgstr "Change the Name of a Node"
+
+msgid "MSG_ENTER_NODENAME"
+msgstr "Please, Enter a Node Name"
+
+msgid "MSG_STOP"
+msgstr "Stop"
+
+msgid "MSG_RESTART"
+msgstr "Restart"
+
+msgid "MSG_SUSPEND"
+msgstr "Suspend"
+
+msgid "MSG_RESUME"
+msgstr "Resume"
+
+msgid "MSG_KILL"
+msgstr "Kill"
+
+msgid "MSG_DELETE"
+msgstr "Delete"
+
+msgid "MSG_RENAME"
+msgstr "Rename"
+
+msgid "MSG_CONFIGURE"
+msgstr "Configure"
+
+msgid "MSG_CHANGE_INFO"
+msgstr "Change Informations"
+
+msgid "MSG_SHOW_PYTHON"
+msgstr "Show Python"
+
+msgid "MSG_ADD_BEFORE"
+msgstr "Add Before"
+
+msgid "MSG_ADD_AFTER"
+msgstr "Add After"
+
+msgid "MSG_DEL_POINT"
+msgstr "Delete Point"
+
+msgid "MSG_NONODE_TOADD"
+msgstr "No Node to Add in Dataflow"
+
+msgid "MSG_CANT_CHOOSE_SERVICE"
+msgstr "Can't Choose a Service in a Component"
+
+msgid "MSG_NO_SUPERVISION_WINDOW"
+msgstr "No Supervision Window Selected to Add Nodes in a Dataflow"
+
+msgid "MSG_SKETCH_LINK"
+msgstr "Sketch Link"
+
+msgid "MSG_FROMSTUDY"
+msgstr "Set From Study"
+
+msgid "MSG_SETVALUE"
+msgstr "Set Value"
+
+msgid "MSG_BROWSE"
+msgstr "Browse"
+
+msgid "MSG_DELLINK"
+msgstr "Delete Link"
+
+msgid "MSG_CANT_SETVAL"
+msgstr "Can't Set Input Value"
+
+msgid "TIT_INPUT_PORT"
+msgstr "Constant for Input Port"
+
+msgid "MSG_ENTER_VALUE"
+msgstr "Please, Enter a Value"
+
+msgid "MSG_IPORT_VAL"
+msgstr "Input Port Value : "
+
+msgid "MSG_OPORT_VAL"
+msgstr "Output Port Value : "
+
+msgid "MSG_INFO"
+msgstr "Information"
+
+msgid "MSG_TERMINATE"
+msgstr "Terminate"
+
+msgid "MSG_SHOWDATA"
+msgstr "Show Data"
+
+msgid "MSG_CALL_DATASHOW"
+msgstr "Call data show as soon ..."
+
+msgid "MSG_PUT_INSTUDY"
+msgstr "Put in Study"
+
+msgid "MSG_NOT_INSTUDY"
+msgstr "Not in Study"
+
+msgid "MSG_GRAPH_ISRUN"
+msgstr "Dataflow is still executing. Kill it?"
+
+msgid "MSG_NOWINDOW_TO_SUSPEND"
+msgstr "No Supervision Window Selected to Suspend or Resume a Dataflow"
+
+msgid "MSG_NOWINDOW_TO_ADD"
+msgstr "No Supervision Window Selected to add new components"
+
+msgid "MSG_NOWINDOW_TO_EXPORT"
+msgstr "No Supervision Window Selected to Export a Dataflow"
+
+msgid "MSG_CANT_LOAD_SUPERV"
+msgstr "Cannot Find or Load Supervision Component"
+
+msgid "MSG_CANT_NARROW_SUPERV"
+msgstr "Cannot _narrow Supervision Component"
+
+msgid "MSG_NOWINDOW_TO_RELOAD"
+msgstr "No Supervision Window Selected to Reload a Dataflow"
+
+msgid "MSG_NOWINDOW_TO_RUN"
+msgstr "No Supervision Window Selected to Run a Dataflow"
+
+msgid "MSG_NOWINDOW_TO_KILL"
+msgstr "No Supervision Window Selected to Kill a Dataflow"
+
+msgid "MSG_IMPORT"
+msgstr "Import Dataflow"
+
+msgid "MSG_NOTEDITABLE"
+msgstr "Current Dataflow is not editable"
+
+msgid "MSG_ADD_STUDY"
+msgstr "Add in Study"
+
+msgid "MSG_NO_DELLINK"
+msgstr "No Link to Delete"
+
+msgid "MSG_NO_LINK_ADDPNT"
+msgstr "No Link to Add a Point"
+
+msgid "MSG_ADD_NODE"
+msgstr "Add Node"
+
+msgid "MSG_ADD_POINT"
+msgstr "Add Point"
+
+msgid "MSG_INS_FILE"
+msgstr "Insert File"
+
+msgid "MSG_COPY_DATAFLOW"
+msgstr "Copy Dataflow"
+
+msgid "MSG_SWITCH_ARRAY"
+msgstr "Switch Array"
+
+msgid "MSG_FILTER_NOTIFY"
+msgstr "Filter Notification"
+
+msgid "MSG_SWITCH_GRAPH"
+msgstr "Switch Graph"
+
+msgid "MSG_COPY_PREFIX"
+msgstr "Copy%1_Of"
+
+msgid "TIT_RENAME"
+msgstr "Rename Dataflow"
+
+msgid "TLT_INFORMATIONS"
+msgstr "Informations"
+
+msgid "NAME_LBL"
+msgstr "Name:"
+
+msgid "AUTHOR_LBL"
+msgstr "Author:"
+
+msgid "CONTAINER_LBL"
+msgstr "Container:"
+
+msgid "DATE_CREATION_LBL"
+msgstr "Created:"
+
+msgid "DATE_MODIFICATION_LBL"
+msgstr "Updated:"
+
+msgid "COMMENT_LBL"
+msgstr "Comment:"
+
+msgid "BUT_OK"
+msgstr "&OK"
+
+msgid "BUT_CANCEL"
+msgstr "&Cancel"
+
+msgid "MSG_CANT_CHANGE_INFO"
+msgstr "Can't Change Informations"
+
+msgid "MSG_ASK_DELETE"
+msgstr "Selected object and its subobjects will be deleted.\nContinue?"
+
+msgid "POP_VIEW"
+msgstr "View"
+
+msgid "POP_FULLVIEW"
+msgstr "Full"
+
+msgid "POP_CONTROLVIEW"
+msgstr "Control"
+
+msgid "POP_TABLEVIEW"
+msgstr "Table"
+
+msgid "POP_SHOW"
+msgstr "Show"
+
+msgid "POP_SHOWTITLES"
+msgstr "Comment"
+
+msgid "POP_SHOWPORTS"
+msgstr "Ports"
+
+msgid "TIT_BROWSENODE"
+msgstr "Browse Node "
+
+msgid "BUT_APPLY"
+msgstr "Ok"
+
+msgid "BUT_CLOSE"
+msgstr "Close"
+
+msgid "TIT_SETVALUE_PORT"
+msgstr "Set Value"
+
+msgid "ENTER_OR_SELECT_LBL"
+msgstr "Enter value or select any object from the study"
+
+msgid "TIT_SERVICES"
+msgstr "Add Node"
+
+msgid "TLT_FILTER_NOTIFY"
+msgstr "Filter Notification"
+
+msgid "COL_COMPONENTS"
+msgstr "Components and services"
+
+msgid "NOTIFICATION_LOGGING_LBL"
+msgstr "Notification Logging"
+
+msgid "SAVE_LOG_LBL"
+msgstr "Save in File"
+
+msgid "FILTER_LOG_LBL"
+msgstr "Filtered File"
+
+msgid "BUT_BROWSE"
+msgstr "Browse"
+
+msgid "ALL_FILES"
+msgstr "All files (*.*)"
+
+msgid "CHOOSE_LOG_FILES_TLT"
+msgstr "Select log file"
+
+msgid "ERR_CANT_OPEN_LOG_FILE"
+msgstr "Can't Open Log file"
+
+msgid "COL_PORTTYPE"
+msgstr "Port type"
+
+msgid "COL_PORTWAY"
+msgstr "Port way"
+
+msgid "TIT_ADDNODE"
+msgstr "Add Node"
+
+msgid "TIT_ADDCNODE"
+msgstr "Add Compute Node"
+
+msgid "TIT_ADDFNODE"
+msgstr "Add Factory Node"
+
+msgid "BTN_FACTORYNODE"
+msgstr "Factory"
+
+msgid "BTN_SWITCHNODE"
+msgstr "Switch"
+
+msgid "BTN_LOOPNODE"
+msgstr "Loop"
+
+msgid "MODULES_PANE"
+msgstr "Factory"
+
+msgid "INLINE_PANE"
+msgstr "Inline"
+
+msgid "ENDNODE_PREFIX"
+msgstr "EndOf"
+
+msgid "BUT_LOAD"
+msgstr "Load from file..."
+
+msgid "BUT_NEXT"
+msgstr "Next Function"
+
+msgid "TIT_LOADSCRIPT"
+msgstr "Load Script"
+
+msgid "MSG_CANT_LOADSCRIPT"
+msgstr "Can't open file"
+
+msgid "MSG_EMTY_FILE"
+msgstr "File is empty"
+
+msgid "MSG_NOMORE_FUNCTIONS"
+msgstr "No more functions in this file"
+
+msgid "MSG_SCRIPTTIP"
+msgstr "Define Name, Input and Output parameters, and body of function\nin fields below accordingly"
+
+msgid "POP_HIDEPORTS"
+msgstr "Hide Ports"
+
+msgid "COMMENT_FROM"
+msgstr " from "
+
+msgid "COMMENT_PYTHON"
+msgstr "Python function"
+
+msgid "COMMENT_CNODE"
+msgstr "Compute Node"
+
+msgid "TIT_FUNC_PYTHON"
+msgstr "Edit function"
+
+msgid "LBL_NODETYPE"
+msgstr "Node type"
+
+msgid "ITM_DEL_PORT"
+msgstr "Delete"
+
+msgid "MSG_CANT_CREATE_NODE"
+msgstr "Can't create node"
+
+msgid "MSG_PORT_EXIST"
+msgstr "Port with such name already exists"
+
--- /dev/null
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. "Foo::Bar"
+# would be translated to "Pub", not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-09-11 12:08:44 PM CEST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#Title of error messages
+msgid "ERROR"
+msgstr "Supervision Error"
+
+#:SUPERVGUI_Main.cxx:246
+msgid "MSG_FILE_EXIST"
+msgstr "File '%1' exists.\nReplace?"
+
+#:SUPERVGUI_Main.cxx:252
+msgid "MSG_BAD_WRITING"
+msgstr "Bad Writing File"
+
+#:SUPERVGUI_Main.cxx:242
+msgid "TTL_EXPORT_DATAFLOW"
+msgstr "Export Dataflow As..."
+
+#:SUPERVGUI_Main.cxx:41
+msgid "MSG_ACCESS_BAD_IOR"
+msgstr "Can't Access Dataflow: bad IOR"
+
+#:SUPERVGUI_Main.cxx:47
+msgid "MSG_NOACCESS_BY_IOR"
+msgstr "Can't Access Dataflow by IOR"
+
+#:SUPERVGUI_Main.cxx:53
+msgid "MSG_CANT_CREATE_DF"
+msgstr "Can't Create a New Dataflow"
+
+#:SUPERVGUI_Main.cxx:72
+msgid "MSG_BAD_FILE"
+msgstr "Bad File"
+
+#:SUPERVGUI_Main.cxx:86
+msgid "MSG_CANT_COPY"
+msgstr "Can't Copy Dataflow"
+
+#:SUPERVGUI_Main.cxx:102
+msgid "MSG_DEL_LAST_PNT"
+msgstr "Delete Last Point"
+
+#:SUPERVGUI_Main.cxx:103
+msgid "MSG_DEL_LINK"
+msgstr "Delete Link"
+
+#:SUPERVGUI_Main.cxx:104
+msgid "MSG_ORTHO_LINE"
+msgstr "Ortho Mode"
+
+#:SUPERVGUI_Main.cxx:146
+msgid "WARNING"
+msgstr "Supervision Warning"
+
+#:SUPERVGUI_Main.cxx:147
+msgid "MSG_DF_RUNNING"
+msgstr "Dataflow Is Currently Running"
+
+#:SUPERVGUI_Main.cxx:148
+msgid "MSG_DF_EXECUTION"
+msgstr "Background Execution"
+
+#:SUPERVGUI_Main.cxx:149
+msgid "MSG_DF_KILL"
+msgstr "Kill Execution"
+
+#:SUPERVGUI_Main.cxx:185
+msgid "GRAPH_TITLE"
+msgstr "Supervision: "
+
+#:SUPERVGUI_Main.cxx:195
+msgid "MSG_GRAPH_STARTED"
+msgstr "===> Dataflow Execution is started"
+
+#:SUPERVGUI_Main.cxx:191
+msgid "MSG_GRAPH_READONLY"
+msgstr "===> Dataflow is Read Only"
+
+#:SUPERVGUI_Main.cxx:191
+msgid "MSG_GRAPH_EDITING"
+msgstr "===> Dataflow is Modifiable"
+
+#:SUPERVGUI_Main.cxx:200
+msgid "MSG_GRAPH_SUSPENDED"
+msgstr "===> Dataflow Execution is Suspended"
+
+#:SUPERVGUI_Main.cxx:204
+msgid "MSG_GRAPH_FINISHED"
+msgstr "===> Dataflow Execution is Finished"
+
+#:SUPERVGUI_Main.cxx:208
+msgid "MSG_GRAPH_ABORTED"
+msgstr "===> Dataflow Execution is Aborted"
+
+#:SUPERVGUI_Main.cxx:212
+msgid "MSG_GRAPH_KILLED"
+msgstr "===> Dataflow Execution is Killed"
+
+#:SUPERVGUI_Main.cxx:265
+msgid "MSG_GRAPH_INSERT"
+msgstr "Insert a Dataflow"
+
+#:SUPERVGUI_Main.cxx:285
+msgid "MSG_DF_NOTVALID"
+msgstr "Dataflow Not Valid"
+
+#:SUPERVGUI_Main.cxx:287
+msgid "MSG_DF_NOTEXECUTABLE"
+msgstr "Dataflow Not Executable"
+
+#:SUPERVGUI_Main.cxx:289
+msgid "MSG_DF_BADEXECUTE"
+msgstr "Dataflow Bad Execute"
+
+#:SUPERVGUI_Main.cxx:301
+msgid "MSG_DF_NOTRUNNING"
+msgstr "Dataflow Is Not Running"
+
+#:SUPERVGUI_Main.cxx:305
+msgid "MSG_CANTKILL_DF"
+msgstr "Can't Kill Dataflow"
+
+#:SUPERVGUI_Main.cxx:315
+msgid "MSG_DF_RESUMED"
+msgstr "===> Dataflow Execution is Resumed"
+
+#:SUPERVGUI_Main.cxx:318
+msgid "MSG_CANT_RESUME"
+msgstr "Can't Resume Dataflow"
+
+#:SUPERVGUI_Main.cxx:324
+msgid "MSG_CANT_SUSPEND"
+msgstr "Can't Suspend Dataflow"
+
+#:SUPERVGUI_Main.cxx:335
+msgid "MSG_DF_RESTARTED"
+msgstr "===> Dataflow Execution is Restarted"
+
+#:SUPERVGUI_Main.cxx:338
+msgid "MSG_CANT_RESTART"
+msgstr "Can't Restart Dataflow"
+
+#:SUPERVGUI_Main.cxx:344
+msgid "MSG_CANT_STOP"
+msgstr "Can't Stop Dataflow"
+
+#:SUPERVGUI_Main.cxx:477
+msgid "MSG_CHOOSE_OUTPUT"
+msgstr "Choose an Output Port"
+
+#:SUPERVGUI_Main.cxx:477
+msgid "MSG_CHOOSE_INPUT"
+msgstr "Choose an Input Port"
+
+#:SUPERVGUI_Main.cxx:486
+msgid "MSG_CANT_CREATE_LINK"
+msgstr "Can't Create This Link"
+
+#:SUPERVGUI_Main.cxx:508
+msgid "MSG_CANT_CREATE_POINT"
+msgstr "Can't Create Point(s) For This Link"
+
+#:SUPERVGUI_Main.cxx:541
+msgid "MSG_RIGHTLINE"
+msgstr "Right Line"
+
+#:SUPERVGUI_Main.cxx:541
+msgid "MSG_FREEPOINT"
+msgstr "Free Point"
+
+#:SUPERVGUI_Main.cxx:627
+msgid "MSG_CHOOSE_DATA"
+msgstr "Choose a Data in Study"
+
+#:SUPERVGUI_Main.cxx:170
+msgid "MSG_GRAPH_DISPLAYED"
+msgstr "The DataFlow %1 \nis already displayed. Open again?"
+
+#:SUPERVGUI_Main.cxx:627
+msgid "MSG_NOTHING_COPY"
+msgstr "Nothing to copy."
+
+msgid "MSG_CANT_CHANGELINK"
+msgstr "Can't Change Point Coordinates For a Link"
+
+msgid "MSG_CANT_CHANGE_COORDLINK"
+msgstr "Can't Change Coordinates For a Link"
+
+msgid "MSG_CANT_DEL_POINT"
+msgstr "Can't Delete this Point"
+
+msgid "MSG_CANT_ADD_POINT"
+msgstr "Can't Add this Point"
+
+msgid "MSG_CANT_GET_LNKCOORD"
+msgstr "Can't Get Coordinates From a Link"
+
+msgid "MSG_NOT_IMPLEMENTED"
+msgstr "Not Yet Implemented"
+
+msgid "MSG_CANT_STOPNODE"
+msgstr "Can't Stop Node"
+
+msgid "MSG_CANT_RESTARTNODE"
+msgstr "Can't Restart Node"
+
+msgid "MSG_CANT_KILLNODE"
+msgstr "Can't Kill Node"
+
+msgid "MSG_CANT_SUSPENDNODE"
+msgstr "Can't Suspend Node"
+
+msgid "MSG_CANT_RESUMENODE"
+msgstr "Can't Resume Node"
+
+msgid "MSG_CANT_RENAMENODE"
+msgstr "Can't Rename this Node"
+
+msgid "MSG_CHANGE_NODENAME"
+msgstr "Change the Name of a Node"
+
+msgid "MSG_ENTER_NODENAME"
+msgstr "Please, Enter a Node Name"
+
+msgid "MSG_STOP"
+msgstr "Stop"
+
+msgid "MSG_RESTART"
+msgstr "Restart"
+
+msgid "MSG_SUSPEND"
+msgstr "Suspend"
+
+msgid "MSG_RESUME"
+msgstr "Resume"
+
+msgid "MSG_KILL"
+msgstr "Kill"
+
+msgid "MSG_DELETE"
+msgstr "Delete"
+
+msgid "MSG_RENAME"
+msgstr "Rename"
+
+msgid "MSG_CONFIGURE"
+msgstr "Configure"
+
+msgid "MSG_CHANGE_INFO"
+msgstr "Change Informations"
+
+msgid "MSG_SHOW_PYTHON"
+msgstr "Show Python"
+
+msgid "MSG_ADD_BEFORE"
+msgstr "Add Before"
+
+msgid "MSG_ADD_AFTER"
+msgstr "Add After"
+
+msgid "MSG_DEL_POINT"
+msgstr "Delete Point"
+
+msgid "MSG_NONODE_TOADD"
+msgstr "No Node to Add in Dataflow"
+
+msgid "MSG_CANT_CHOOSE_SERVICE"
+msgstr "Can't Choose a Service in a Component"
+
+msgid "MSG_NO_SUPERVISION_WINDOW"
+msgstr "No Supervision Window Selected to Add Nodes in a Dataflow"
+
+msgid "MSG_SKETCH_LINK"
+msgstr "Sketch Link"
+
+msgid "MSG_FROMSTUDY"
+msgstr "Set From Study"
+
+msgid "MSG_SETVALUE"
+msgstr "Set Value"
+
+msgid "MSG_BROWSE"
+msgstr "Browse"
+
+msgid "MSG_DELLINK"
+msgstr "Delete Link"
+
+msgid "MSG_CANT_SETVAL"
+msgstr "Can't Set Input Value"
+
+msgid "TIT_INPUT_PORT"
+msgstr "Constant for Input Port"
+
+msgid "MSG_ENTER_VALUE"
+msgstr "Please, Enter a Value"
+
+msgid "MSG_IPORT_VAL"
+msgstr "Input Port Value : "
+
+msgid "MSG_OPORT_VAL"
+msgstr "Output Port Value : "
+
+msgid "MSG_INFO"
+msgstr "Supervision Information"
+
+msgid "MSG_TERMINATE"
+msgstr "Terminate"
+
+msgid "MSG_SHOWDATA"
+msgstr "Show Data"
+
+msgid "MSG_CALL_DATASHOW"
+msgstr "Call data show as soon ..."
+
+msgid "MSG_PUT_INSTUDY"
+msgstr "Put in Study"
+
+msgid "MSG_NOT_INSTUDY"
+msgstr "Not in Study"
+
+msgid "MSG_GRAPH_ISRUN"
+msgstr "Dataflow is still executing. Kill it?"
+
+msgid "MSG_NOWINDOW_TO_SUSPEND"
+msgstr "No Supervision Window Selected to Suspend or Resume a Dataflow"
+
+msgid "MSG_NOWINDOW_TO_ADD"
+msgstr "No Supervision Window Selected to add new components"
+
+msgid "MSG_NOWINDOW_TO_EXPORT"
+msgstr "No Supervision Window Selected to Export a Dataflow"
+
+msgid "MSG_CANT_LOAD_SUPERV"
+msgstr "Cannot Find or Load Supervision Component"
+
+msgid "MSG_CANT_NARROW_SUPERV"
+msgstr "Cannot _narrow Supervision Component"
+
+msgid "MSG_NOWINDOW_TO_RELOAD"
+msgstr "No Supervision Window Selected to Reload a Dataflow"
+
+msgid "MSG_NOWINDOW_TO_RUN"
+msgstr "No Supervision Window Selected to Run a Dataflow"
+
+msgid "MSG_NOWINDOW_TO_KILL"
+msgstr "No Supervision Window Selected to Kill a Dataflow"
+
+msgid "MSG_IMPORT"
+msgstr "Import Dataflow"
+
+msgid "MSG_NOTEDITABLE"
+msgstr "Current Dataflow is not editable"
+
+msgid "MSG_ADD_STUDY"
+msgstr "Add in Study"
+
+msgid "MSG_NO_DELLINK"
+msgstr "No Link to Delete"
+
+msgid "MSG_NO_LINK_ADDPNT"
+msgstr "No Link to Add a Point"
+
+msgid "MSG_ADD_NODE"
+msgstr "Add Node"
+
+msgid "MSG_ADD_POINT"
+msgstr "Add Point"
+
+msgid "MSG_INS_FILE"
+msgstr "Insert File"
+
+msgid "MSG_COPY_DATAFLOW"
+msgstr "Copy Dataflow"
+
+msgid "MSG_SWITCH_ARRAY"
+msgstr "Switch Array"
+
+msgid "MSG_FILTER_NOTIFY"
+msgstr "Filter Notification"
+
+msgid "MSG_SWITCH_GRAPH"
+msgstr "Switch Graph"
+
+msgid "MSG_COPY_PREFIX"
+msgstr "Copy%1_Of"
+
+msgid "TIT_RENAME"
+msgstr "Rename Dataflow"
+
+msgid "MSG_ASK_DELETE"
+msgstr "Selected object and its subobjects will be deleted.\nContinue?"
+
+msgid "POP_VIEW"
+msgstr "View"
+
+msgid "POP_FULLVIEW"
+msgstr "Full"
+
+msgid "POP_CONTROLVIEW"
+msgstr "Control"
+
+msgid "POP_TABLEVIEW"
+msgstr "Table"
+
+msgid "POP_SHOW"
+msgstr "Show"
+
+msgid "POP_SHOWTITLES"
+msgstr "Titles"
+
+msgid "POP_SHOWPORTS"
+msgstr "Ports"
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : CNode_Impl.cxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "Graph_Impl.hxx"
+
+#include "CNode_Impl.hxx"
+
+#include "Port_Impl.hxx"
+
+CNode_Impl::CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ const char *aDataFlowName ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+// MESSAGE("CNode_Impl::CNode_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+// _thisObj = this ;
+// _id = _poa->activate_object(_thisObj);
+ MESSAGE( "CNode_Impl::CNode_Impl " << aDataFlowName << " " );
+ beginService( "CNode_Impl::CNode_Impl" );
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _DataFlowNode = NULL ;
+ _IsNode = false ;
+ endService( "CNode_Impl::CNode_Impl" );
+}
+
+CNode_Impl::CNode_Impl() {
+}
+
+CNode_Impl::CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const SALOME_ModuleCatalog::Service &NodeService ,
+ const char * NodeName ,
+ const SUPERV::KindOfNode NodeKindOfNode ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ beginService( "CNode_Impl::CNode_Impl" );
+ if ( FuncName && NodeName ) {
+ cout << "CNode_Impl::CNode_Impl " << (void *) NodeName << " " << NodeName
+ << " " << strlen(NodeName) << " " << (void *) FuncName << " " << FuncName
+ << " " << strlen( FuncName ) << endl ;
+ }
+ if ( NodeKindOfNode == SUPERV::ComputingNode ) {
+ MESSAGE( "CNode_Impl::CNode_Impl " << FuncName << " _poa->activate_object" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _DataFlowEditor = DataFlowEditor ;
+ GraphBase::ListOfFuncName aFuncName ;
+ GraphBase::ListOfPythonFunctions aPythonFunction ;
+ if ( FuncName ) {
+ aFuncName.resize(1) ;
+ aFuncName[0] = my_strdup( FuncName ) ;
+ aPythonFunction.resize(1) ;
+ aPythonFunction[0] = &PythonFunction ;
+ }
+ _DataFlowNode = _DataFlowEditor->AddNode( NodeService , "" , "" , NodeName ,
+ NodeKindOfNode ,
+ aFuncName ,
+ aPythonFunction ) ;
+ _IsNode = true ;
+ endService( "CNode_Impl::CNode_Impl" );
+}
+
+CNode_Impl::CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const SALOME_ModuleCatalog::Service &NodeService ,
+ const char * NodeName ,
+ const SUPERV::KindOfNode NodeKindOfNode ,
+ const GraphBase::ListOfFuncName & aFuncName ,
+ const GraphBase::ListOfPythonFunctions & aPythonFunction ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ MESSAGE( NodeName << " " );
+ beginService( "CNode_Impl::CNode_Impl" );
+ if ( NodeName ) {
+ MESSAGE("CNode_Impl::CNode_Impl " << NodeName << " " << strlen( NodeName ) ) ;
+ }
+ if ( NodeKindOfNode == SUPERV::ComputingNode ) {
+ MESSAGE( "CNode_Impl::CNode_Impl " << aFuncName[0] << " _poa->activate_object" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _DataFlowEditor = DataFlowEditor ;
+ _DataFlowNode = _DataFlowEditor->AddNode( NodeService , "" , "" , NodeName ,
+ NodeKindOfNode ,
+ aFuncName ,
+ aPythonFunction ) ;
+ _IsNode = true ;
+ endService( "CNode_Impl::CNode_Impl" );
+}
+
+CNode_Impl::CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ MESSAGE( DataFlowNode->Name() << " " );
+ beginService( "CNode_Impl::CNode_Impl" );
+ if ( DataFlowNode->IsComputingNode() ) {
+ MESSAGE( "CNode_Impl::CNode_Impl _poa->activate_object" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _DataFlowEditor = DataFlowEditor ;
+ _DataFlowNode = DataFlowNode ;
+ _IsNode = true ;
+ endService( "CNode_Impl::CNode_Impl" );
+}
+
+CNode_Impl::~CNode_Impl() {
+ beginService( "CNode_Impl::~CNode_Impl" );
+ endService( "CNode_Impl::~CNode_Impl" );
+}
+
+void CNode_Impl::destroy() {
+ beginService( "CNode_Impl::Destroy" );
+ if ( _DataFlowEditor->IsEditing() ) {
+ if ( Delete() ) {
+ _DataFlowNode = NULL ;
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "CNode_Impl::Destroy" );
+}
+
+bool CNode_Impl::Delete() {
+ beginService( "CNode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( _DataFlowEditor->IsEditing() ) {
+ RetVal = _DataFlowEditor->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = _DataFlowEditor->IsValid() ;
+ }
+ endService( "CNode_Impl::Delete" );
+ return RetVal ;
+}
+
+SALOME_ModuleCatalog::Service * CNode_Impl::Service() {
+// beginService( "CNode_Impl::Service" );
+ SALOME_ModuleCatalog::Service * RetVal ;
+ if ( _IsNode ) {
+ RetVal = new SALOME_ModuleCatalog::Service( *_DataFlowNode->GetService() ) ;
+ }
+ else {
+ RetVal = new SALOME_ModuleCatalog::Service( *_DataFlowEditor->GetService() ) ;
+ }
+// endService( "CNode_Impl::Service" );
+ return RetVal ;
+}
+
+char * CNode_Impl::Name() {
+// beginService( "CNode_Impl::Name" );
+ char * RetVal = NULL ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->Name() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->Name() ;
+ }
+// endService( "CNode_Impl::Name" );
+ return CORBA::string_dup( RetVal );
+}
+bool CNode_Impl::SetName( const char * aDataFlowName ) {
+// beginService( "CNode_Impl::SetName" );
+ bool RetVal = false ;
+ if ( _DataFlowEditor->IsEditing() ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowEditor->ReNameNode( _DataFlowNode->Name() ,
+ aDataFlowName ) ;
+ }
+ else {
+ RetVal = _DataFlowEditor->Name( aDataFlowName ) ;
+ }
+ }
+// endService( "CNode_Impl::SetName" );
+ return RetVal ;
+}
+SUPERV::KindOfNode CNode_Impl::Kind() {
+// beginService( "CNode_Impl::Kind" );
+ SUPERV::KindOfNode RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->Kind() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->Kind() ;
+ }
+// endService( "CNode_Impl::Kind" );
+ return RetVal ;
+}
+bool CNode_Impl::IsGraph() {
+// beginService( "CNode_Impl::IsGraph" );
+ bool RetVal = false ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsDataFlowNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsDataFlowNode() ;
+ }
+// endService( "CNode_Impl::IsGraph" );
+ return RetVal ;
+}
+bool CNode_Impl::IsComputing() {
+// beginService( "CNode_Impl::IsComputing" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsComputingNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsComputingNode() ;
+ }
+// endService( "CNode_Impl::IsComputing" );
+ return RetVal ;
+}
+bool CNode_Impl::IsFactory() {
+// beginService( "CNode_Impl::IsFactory" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsFactoryNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsFactoryNode() ;
+ }
+// endService( "CNode_Impl::IsFactory" );
+ return RetVal ;
+}
+bool CNode_Impl::IsInLine() {
+// beginService( "CNode_Impl::IsInLine" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsInLineNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsInLineNode() ;
+ }
+// endService( "CNode_Impl::IsInLine" );
+ return RetVal ;
+}
+bool CNode_Impl::IsGOTO() {
+// beginService( "CNode_Impl::IsGOTO" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsGOTONode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsGOTONode() ;
+ }
+// endService( "CNode_Impl::IsGOTO" );
+ return RetVal ;
+}
+bool CNode_Impl::IsLoop() {
+// beginService( "CNode_Impl::IsLoop" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsLoopNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsLoopNode() ;
+ }
+// endService( "CNode_Impl::IsLoop" );
+ return RetVal ;
+}
+bool CNode_Impl::IsEndLoop() {
+// beginService( "CNode_Impl::IsEndLoop" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsEndLoopNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsEndLoopNode() ;
+ }
+// endService( "CNode_Impl::IsEndLoop" );
+ return RetVal ;
+}
+bool CNode_Impl::IsSwitch() {
+// beginService( "CNode_Impl::IsSwitch" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsSwitchNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsSwitchNode() ;
+ }
+// endService( "CNode_Impl::IsSwitch" );
+ return RetVal ;
+}
+bool CNode_Impl::IsEndSwitch() {
+// beginService( "CNode_Impl::IsEndSwitch" );
+ bool RetVal = SUPERV::UnknownNode ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->IsEndSwitchNode() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->IsEndSwitchNode() ;
+ }
+// endService( "CNode_Impl::IsEndSwitch" );
+ return RetVal ;
+}
+
+SUPERV::SDate CNode_Impl::CreationDate() {
+// beginService( "CNode_Impl::CreationDate" );
+ SUPERV::SDate_var RetVal ;
+ if ( _IsNode ) {
+ RetVal = new SUPERV::SDate( _DataFlowNode->FirstCreation() ) ;
+ }
+ else {
+// cout << " CNode_Impl::CreationDate " << _DataFlowEditor->FirstCreation()
+// << endl ;
+ RetVal = new SUPERV::SDate( _DataFlowEditor->FirstCreation() ) ;
+ }
+// endService( "CNode_Impl::CreationDate" );
+ return (RetVal._retn()) ;
+}
+SUPERV::SDate CNode_Impl::LastUpdateDate() {
+// beginService( "CNode_Impl::LastUpdateDate" );
+ SUPERV::SDate_var RetVal ;
+ if ( _IsNode ) {
+ RetVal = new SUPERV::SDate( _DataFlowNode->LastModification() ) ;
+ }
+ else {
+ RetVal = new SUPERV::SDate( _DataFlowEditor->LastModification() ) ;
+ }
+// endService( "CNode_Impl::LastUpdateDate" );
+ return (RetVal._retn()) ;
+}
+char * CNode_Impl::Version() {
+// beginService( "CNode_Impl::Version" );
+ char * RetVal ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->EditorRelease() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->EditorRelease() ;
+ }
+// endService( "CNode_Impl::Version" );
+ return CORBA::string_dup( RetVal ) ;
+}
+char * CNode_Impl::Author() {
+// beginService( "CNode_Impl::Author" );
+ char * RetVal ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->Author() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->Author() ;
+ }
+// endService( "CNode_Impl::Author" );
+ return CORBA::string_dup( RetVal ) ;
+}
+bool CNode_Impl::SetAuthor( const char * aDataFlowAuthor ) {
+// beginService( "CNode_Impl::SetAuthor" );
+ bool RetVal = false ;
+ if ( _DataFlowEditor->IsEditing() ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->Author( aDataFlowAuthor ) ;
+ }
+ else {
+ RetVal = _DataFlowEditor->Author( aDataFlowAuthor ) ;
+ }
+ }
+// endService( "CNode_Impl::SetAuthor" );
+ return RetVal ;
+}
+char * CNode_Impl::Comment() {
+// beginService( "CNode_Impl::Comment" );
+ char * RetVal ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->Comment() ;
+ }
+ else {
+ RetVal = _DataFlowEditor->Comment() ;
+ }
+// endService( "CNode_Impl::Comment" );
+ return CORBA::string_dup( RetVal ) ;
+}
+bool CNode_Impl::SetComment( const char * aDataFlowComment ) {
+// beginService( "CNode_Impl::SetComment" );
+ bool RetVal = false ;
+ if ( _DataFlowEditor->IsEditing() ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->Comment( aDataFlowComment ) ;
+ }
+ else {
+ RetVal = _DataFlowEditor->Comment( aDataFlowComment ) ;
+ }
+ }
+// endService( "CNode_Impl::SetComment" );
+ return RetVal ;
+}
+
+SUPERV::ListOfLinks * CNode_Impl::Links() {
+ beginService( "CNode_Impl::Links" ) ;
+ SUPERV::ListOfLinks_var RetVal = new SUPERV::ListOfLinks ;
+ if ( _DataFlowNode ) {
+ RetVal = DataFlowEditor()->ObjImpl()->Links( _DataFlowNode->ComputingNode() , NULL ) ;
+ }
+ endService( "CNode_Impl::Links" ) ;
+ return ( RetVal._retn() ) ;
+}
+
+void CNode_Impl::Coords(long X , long Y ) {
+// beginService( "CNode_Impl::Coords" );
+ if ( _DataFlowEditor->IsEditing() ) {
+ if ( _IsNode ) {
+ ((GraphEditor::InNode *) _DataFlowNode)->Coordinates( X , Y ) ;
+ }
+ else {
+ _DataFlowEditor->Coordinates( X , Y ) ;
+ }
+ }
+// endService( "CNode_Impl::Coords" );
+}
+long CNode_Impl::X() {
+// beginService( "CNode_Impl::X" );
+ long RetVal ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->XCoordinate() ;
+ }
+ else {
+// RetVal = _DataFlowEditor->XCoordinate() ;
+ RetVal = 0 ;
+ }
+// endService( "CNode_Impl::X" );
+ return RetVal ;
+}
+long CNode_Impl::Y() {
+// beginService( "CNode_Impl::Y" );
+ long RetVal ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->YCoordinate() ;
+ }
+ else {
+// RetVal = _DataFlowEditor->YCoordinate() ;
+ RetVal = 0 ;
+ }
+// endService( "CNode_Impl::Y" );
+ return RetVal ;
+}
+
+#if 0
+SUPERV::Link_ptr CNode_Impl::Link( const char * ToServiceParameterName ,
+ const SUPERV::Value_ptr aValue ) {
+ beginService( "CNode_Impl::Link" );
+ Link_Impl * myLink = new Link_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+ ToServiceParameterName ,
+ aValue ) ;
+ PortableServer::ObjectId * id = myLink->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Link_var iobject ;
+ iobject = SUPERV::Link::_narrow(obj) ;
+ endService( "CNode_Impl::Link" );
+ return SUPERV::Link::_duplicate( iobject ) ;
+}
+#endif
+
+SUPERV::Port_ptr CNode_Impl::Port( const char * ServiceParameterName ) {
+ bool begin = true ;
+ Port_Impl * myPort = NULL ;
+ SUPERV::Port_var iobject = SUPERV::Port::_nil() ;
+ bool aninport ;
+ if ( _IsNode ) {
+ aninport = _DataFlowNode->GetInPort( ServiceParameterName ) ;
+ }
+ else {
+ aninport = _DataFlowEditor->GetInPort( ServiceParameterName ) ;
+ }
+ bool anoutport ;
+ if ( _IsNode ) {
+ anoutport = _DataFlowNode->GetOutPort( ServiceParameterName ) ;
+ }
+ else {
+ anoutport = _DataFlowEditor->GetOutPort( ServiceParameterName ) ;
+ }
+ if ( aninport ) {
+ GraphBase::InPort * anInPort ;
+ if ( _IsNode ) {
+ anInPort = _DataFlowNode->GetChangeInPort( ServiceParameterName ) ;
+ }
+ else {
+ anInPort = _DataFlowEditor->GetChangeInPort( ServiceParameterName ) ;
+ }
+ if ( CORBA::is_nil( anInPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Port" );
+ begin = false ;
+ }
+ bool hasinput ;
+ if ( _IsNode ) {
+ hasinput = _DataFlowNode->HasInput( anInPort->PortName() ) ;
+ }
+ else {
+ hasinput = _DataFlowEditor->HasInput( anInPort->PortName() ) ;
+ }
+ if ( hasinput ) {
+ const CORBA::Any * anAny = anInPort->GetOutPort()->Value() ;
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// ServiceParameterName ,
+ (GraphBase::Port * ) anInPort ,
+ true ,
+ anAny ) ;
+ }
+ else {
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// ServiceParameterName ) ;
+ (GraphBase::Port * ) anInPort ,
+ true ) ;
+ }
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Port::_narrow(obj) ;
+ anInPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = anInPort->ObjRef() ;
+ }
+ }
+ else if ( anoutport ) {
+ GraphBase::OutPort * anOutPort ;
+ if ( _IsNode ) {
+ anOutPort = _DataFlowNode->GetChangeOutPort( ServiceParameterName ) ;
+ }
+ else {
+ anOutPort = _DataFlowEditor->GetChangeOutPort( ServiceParameterName ) ;
+ }
+ if ( CORBA::is_nil( anOutPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Port" );
+ begin = false ;
+ }
+ const CORBA::Any * anAny = anOutPort->Value() ;
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// ServiceParameterName ,
+ (GraphBase::Port * ) anOutPort ,
+ false ,
+ anAny ) ;
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Port::_narrow(obj) ;
+ anOutPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = anOutPort->ObjRef() ;
+ }
+ }
+ if ( !begin ) {
+ endService( "CNode_Impl::Port" );
+ }
+ return SUPERV::Port::_duplicate( iobject ) ;
+}
+
+SUPERV::Port_ptr CNode_Impl::Input( const char * ToServiceParameterName ,
+ const SUPERV::Value_ptr aValue ) {
+ bool begin = true ;
+ SUPERV::Port_var iobject = SUPERV::Port::_nil() ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowEditor->IsEditing() ) {
+ bool sts = false ;
+ GraphBase::InPort * anInPort ;
+ if ( _IsNode ) {
+ sts = _DataFlowEditor->AddInputData( _DataFlowNode->Name() ,
+ ToServiceParameterName ,
+ *aValue->ToAny() ) ;
+ anInPort = _DataFlowNode->GetChangeInPort( ToServiceParameterName ) ;
+ }
+ else {
+ sts = _DataFlowEditor->AddInputData( _DataFlowEditor->Name() ,
+ ToServiceParameterName ,
+ *aValue->ToAny() ) ;
+ anInPort = _DataFlowEditor->GetChangeInPort( ToServiceParameterName ) ;
+ }
+ if ( sts && anInPort ) {
+ if ( CORBA::is_nil( anInPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Input" );
+ begin = false ;
+ }
+ Port_Impl * myPort ;
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// ToServiceParameterName ,
+ (GraphBase::Port * ) anInPort ,
+ true ,
+ aValue->ToAny() ) ;
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Port::_narrow(obj) ;
+ anInPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = anInPort->ObjRef() ;
+ }
+ }
+ }
+ else if ( _DataFlowExecutor ) {
+ bool sts = false ;
+ GraphBase::InPort * anInPort ;
+ if ( _IsNode ) {
+ sts = _DataFlowExecutor->ChangeInputData( _DataFlowEditor->Name() ,
+ ToServiceParameterName ,
+ *aValue->ToAny() ) ;
+ anInPort = _DataFlowNode->GetChangeInPort( ToServiceParameterName ) ;
+ }
+ else {
+ sts = _DataFlowExecutor->ChangeInputData( _DataFlowEditor->Name() ,
+ ToServiceParameterName ,
+ *aValue->ToAny() ) ;
+ anInPort = _DataFlowEditor->GetChangeInPort( ToServiceParameterName ) ;
+ }
+ if ( sts && anInPort ) {
+ if ( CORBA::is_nil( anInPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Input" );
+ begin = false ;
+ }
+ Port_Impl * myPort ;
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// ToServiceParameterName ,
+ (GraphBase::Port * ) anInPort ,
+ true ,
+ aValue->ToAny() ) ;
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Port::_narrow(obj) ;
+ anInPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = anInPort->ObjRef() ;
+ }
+ }
+ }
+ if ( !begin ) {
+ endService( "CNode_Impl::Input" );
+ }
+ return SUPERV::Port::_duplicate( iobject ) ;
+}
+
+SUPERV::ListOfPorts * CNode_Impl::Ports() {
+ bool begin = true ;
+ SUPERV::ListOfPorts_var RetVal = new SUPERV::ListOfPorts ;
+// if ( !_DataFlowNode->IsDataFlowNode() ) {
+ if ( _IsNode ) {
+ int i , j ;
+ RetVal->length( _DataFlowNode->GetNodeInPortsSize() +
+ _DataFlowNode->GetNodeOutPortsSize() ) ;
+ for ( i = 0 ; i < _DataFlowNode->GetNodeInPortsSize() ; i++ ) {
+ GraphBase::InPort * anInPort = _DataFlowNode->GetChangeNodeInPort( i ) ;
+ if ( CORBA::is_nil( anInPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Ports" );
+ begin = false ;
+ }
+ Port_Impl * myPort ;
+ if ( _DataFlowNode->HasInput( anInPort->PortName() ) ) {
+ const CORBA::Any * anAny = anInPort->GetOutPort()->Value() ;
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// anInPort->PortName() ,
+ (GraphBase::Port * ) anInPort ,
+ true ,
+ anAny ) ;
+ }
+ else {
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// anInPort->PortName() ) ;
+ (GraphBase::Port * ) anInPort ,
+ true ) ;
+ }
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Port_var iobject ;
+ iobject = SUPERV::Port::_narrow(obj) ;
+ RetVal[ i ] = SUPERV::Port::_duplicate( iobject ) ;
+ anInPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ RetVal[ i ] = SUPERV::Port::_duplicate( anInPort->ObjRef() ) ;
+ }
+ }
+ for ( i = 0 ; i < _DataFlowNode->GetNodeOutPortsSize() ; i++ ) {
+ GraphBase::OutPort * anOutPort = _DataFlowNode->GetChangeNodeOutPort( i ) ;
+ if ( CORBA::is_nil( anOutPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Ports" );
+ begin = false ;
+ }
+ const CORBA::Any * anAny = anOutPort->Value() ;
+ Port_Impl * myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// anOutPort->PortName() ,
+ (GraphBase::Port * ) anOutPort ,
+ false ,
+ anAny ) ;
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Port_var iobject ;
+ iobject = SUPERV::Port::_narrow(obj) ;
+ RetVal[ _DataFlowNode->GetNodeInPortsSize() + i ] = SUPERV::Port::_duplicate( iobject ) ;
+ anOutPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ RetVal[ _DataFlowNode->GetNodeInPortsSize() + i ] = SUPERV::Port::_duplicate( anOutPort->ObjRef() ) ;
+ }
+ }
+ }
+ else {
+ if ( _DataFlowEditor->IsValid() ) {
+ int i , j ;
+ RetVal->length( _DataFlowEditor->GetNodeInDataNodePortsSize() +
+ _DataFlowEditor->GetNodeOutDataNodePortsSize() ) ;
+ for ( i = 0 ; i < _DataFlowEditor->GetNodeInDataNodePortsSize() ; i++ ) {
+ GraphBase::OutPort * anOutPort = _DataFlowEditor->GetChangeNodeInDataNodePort(i) ;
+ if ( CORBA::is_nil( anOutPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Ports" );
+ begin = false ;
+ }
+ Port_Impl * myPort ;
+ if ( anOutPort->IsDataConnected() ) {
+ const CORBA::Any * anAny = anOutPort->Value() ;
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// anOutPort->PortName() ,
+ (GraphBase::Port * ) anOutPort ,
+ true ,
+ anAny ) ;
+ }
+ else {
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// anOutPort->PortName() ) ;
+ (GraphBase::Port * ) anOutPort ,
+ true ) ;
+ }
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Port_var iobject ;
+ iobject = SUPERV::Port::_narrow(obj) ;
+ RetVal[ i ] = SUPERV::Port::_duplicate( iobject ) ;
+ anOutPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ RetVal[ i ] = SUPERV::Port::_duplicate( anOutPort->ObjRef() ) ;
+ }
+ }
+ j = _DataFlowEditor->GetNodeInDataNodePortsSize() ;
+ for ( i = 0 ; i < _DataFlowEditor->GetNodeOutDataNodePortsSize() ; i++ ) {
+ GraphBase::InPort * anInPort = _DataFlowEditor->GetChangeNodeOutDataNodePort(i) ;
+ if ( CORBA::is_nil( anInPort->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::Ports" );
+ begin = false ;
+ }
+ Port_Impl * myPort ;
+ if ( anInPort->IsDataConnected() ) {
+ const CORBA::Any * anAny = anInPort->GetOutPort()->Value() ;
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// anInPort->PortName() ,
+ (GraphBase::Port * ) anInPort ,
+ false ,
+ anAny ) ;
+ }
+ else {
+ myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// anInPort->PortName() ) ;
+ anInPort ,
+ false ) ;
+ }
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Port_var iobject ;
+ iobject = SUPERV::Port::_narrow(obj) ;
+ RetVal[ j + i ] = SUPERV::Port::_duplicate( iobject ) ;
+ anInPort->ObjRef( SUPERV::Port::_duplicate( iobject ) ) ;
+ }
+ else {
+ RetVal[ j + i ] = SUPERV::Port::_duplicate( anInPort->ObjRef() ) ;
+ }
+ }
+ }
+ }
+ if ( !begin ) {
+ endService( "CNode_Impl::Ports" );
+ }
+ return ( RetVal._retn() ) ;
+}
+
+SUPERV::Link_ptr CNode_Impl::GetLink(const char * ToServiceParameterName ) {
+ bool begin = true ;
+ SUPERV::Link_var iobject = SUPERV::Link::_nil() ;
+ char* FromNodeName ;
+ char* FromServiceParameterName ;
+ bool status = _DataFlowEditor->GetLink( _DataFlowNode->Name() ,
+ ToServiceParameterName ,
+ & FromNodeName ,
+ & FromServiceParameterName ) ;
+ if ( status ) {
+ GraphBase::InPort * anInPort = _DataFlowNode->GetChangeInPort( ToServiceParameterName ) ;
+ if ( anInPort->GetOutPort() ) {
+ GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
+ if ( CORBA::is_nil( anOutPort->InPortObjRef( anInPort ) ) ) {
+ if ( begin ) {
+ beginService( "CNode_Impl::GetLink" );
+ begin = false ;
+ }
+ Link_Impl * myLink = new Link_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+ ToServiceParameterName ,
+ (GraphEditor::InNode *) _DataFlowEditor->GetChangeGraphNode( FromNodeName )->GetInNode() ,
+ FromServiceParameterName ,
+ true ) ;
+ PortableServer::ObjectId * id = myLink->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Link::_narrow(obj) ;
+ anOutPort->AddInPortObjRef( anInPort , SUPERV::Link::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = anOutPort->InPortObjRef( anInPort ) ;
+ }
+ }
+ }
+ if ( !begin ) {
+ endService( "CNode_Impl::GetLink" );
+ }
+ return SUPERV::Link::_duplicate( iobject ) ;
+}
+
+long CNode_Impl::SubGraph() {
+// beginService( "CNode_Impl::SubGraph" );
+ long RetVal = 0 ;
+ if ( _IsNode ) {
+ RetVal = _DataFlowNode->SubGraph() ;
+ }
+// endService( "CNode_Impl::SubGraph" );
+ return RetVal ;
+}
+
+bool CNode_Impl::IsLinked(const char * ServiceParameterName ) {
+// beginService( "CNode_Impl::IsLinked" );
+ bool RetVal = _DataFlowNode->IsLinked( ServiceParameterName ) ;
+// endService( "CNode_Impl::IsLinked" );
+ return RetVal ;
+}
+
+bool CNode_Impl::HasInput(const char * ServiceParameterName ) {
+// beginService( "CNode_Impl::HasInput" );
+ bool RetVal = _DataFlowNode->HasInput( ServiceParameterName ) ;
+// endService( "CNode_Impl::HasInput" );
+ return RetVal ;
+}
+
+SUPERV::GraphState CNode_Impl::State() {
+// beginService( "CNode_Impl::State" );
+ SUPERV::GraphState RetVal = SUPERV::EditingState ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->State( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->State() ;
+ }
+ }
+// endService( "CNode_Impl::State" );
+ return RetVal ;
+}
+long CNode_Impl::Thread() {
+// beginService( "CNode_Impl::Thread" );
+ long RetVal = 0 ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Thread( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->Thread() ;
+ }
+ }
+// endService( "CNode_Impl::Thread" );
+ return RetVal ;
+}
+SUPERV::AutomatonState CNode_Impl::AutoState() {
+// beginService( "CNode_Impl::AutoState" );
+ SUPERV::AutomatonState RetVal = SUPERV::UnKnownState ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->AutomatonState( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->AutomatonState() ;
+ }
+ }
+// endService( "CNode_Impl::AutoState" );
+ return RetVal ;
+}
+SUPERV::ControlState CNode_Impl::Control() {
+// beginService( "CNode_Impl::Control" );
+ SUPERV::ControlState RetVal = SUPERV::VoidState ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->ControlState( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->ControlState() ;
+ }
+ }
+// endService( "CNode_Impl::Control" );
+ return RetVal ;
+}
+void CNode_Impl::ControlClear() {
+// beginService( "CNode_Impl::ControlClear" );
+ SUPERV::ControlState RetVal = SUPERV::VoidState ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ _DataFlowExecutor->ControlClear( Name() ) ;
+ }
+ else {
+ _DataFlowExecutor->ControlClear() ;
+ }
+ }
+// endService( "CNode_Impl::ControlClear" );
+ return ;
+}
+
+bool CNode_Impl::IsReady() {
+// beginService( "CNode_Impl::IsReady" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->IsReady( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->IsReady() ;
+ }
+ }
+// endService( "CNode_Impl::IsReady" );
+ return RetVal ;
+}
+
+bool CNode_Impl::IsWaiting() {
+// beginService( "CNode_Impl::IsWaiting" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->IsWaiting( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->IsWaiting() ;
+ }
+ }
+// endService( "CNode_Impl::IsWaiting" );
+ return RetVal ;
+}
+
+bool CNode_Impl::IsRunning() {
+// beginService( "CNode_Impl::IsRunning" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->IsRunning( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->IsRunning() ;
+ }
+ }
+// endService( "CNode_Impl::IsRunning" );
+ return RetVal ;
+}
+
+bool CNode_Impl::IsDone() {
+// beginService( "CNode_Impl::IsDone" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->IsDone( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->IsDone() ;
+ }
+ }
+// endService( "CNode_Impl::IsDone" );
+ return RetVal ;
+}
+
+bool CNode_Impl::IsSuspended() {
+// beginService( "CNode_Impl::IsSuspended" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->IsSuspended( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->IsSuspended() ;
+ }
+ }
+// endService( "CNode_Impl::IsSuspended" );
+ return RetVal ;
+}
+
+bool CNode_Impl::ReadyW() {
+// beginService( "CNode_Impl::ReadyW" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->ReadyWait( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->ReadyWait() ;
+ }
+ }
+// endService( "CNode_Impl::ReadyW" );
+ return RetVal ;
+}
+
+bool CNode_Impl::RunningW() {
+// beginService( "CNode_Impl::RunningW" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->RunningWait( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->RunningWait() ;
+ }
+ }
+// endService( "CNode_Impl::RunningW" );
+ return RetVal ;
+}
+
+bool CNode_Impl::DoneW() {
+// beginService( "CNode_Impl::DoneW" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->DoneWait( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->DoneWait() ;
+ }
+ }
+// endService( "CNode_Impl::DoneW" );
+ return RetVal ;
+}
+
+bool CNode_Impl::SuspendedW() {
+// beginService( "CNode_Impl::SuspendedW" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->SuspendedWait( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->SuspendedWait() ;
+ }
+ }
+// endService( "CNode_Impl::SuspendedW" );
+ return RetVal ;
+}
+
+void CNode_Impl::ping() {
+// beginService( "CNode_Impl::ping" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Ping( Name() ) ;
+ }
+ else {
+ RetVal = false ;
+ }
+ }
+// endService( "CNode_Impl::ping" );
+ return ;
+}
+
+bool CNode_Impl::ContainerKill() {
+ beginService( "CNode_Impl::ContainerKill" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor && _DataFlowEditor->IsExecuting() ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->ContainerKill( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->ContainerKill() ;
+ }
+ }
+ endService( "CNode_Impl::ContainerKill" );
+ return RetVal ;
+}
+bool CNode_Impl::Kill() {
+// beginService( "CNode_Impl::Kill" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Kill( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->Kill() ;
+ }
+ }
+// endService( "CNode_Impl::Kill" );
+ return RetVal ;
+}
+bool CNode_Impl::KillDone() {
+// beginService( "CNode_Impl::KillDone" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->KillDone( Name() ) ;
+ }
+ }
+// endService( "CNode_Impl::KillDone" );
+ return RetVal ;
+}
+bool CNode_Impl::Stop() {
+// beginService( "CNode_Impl::Stop" );
+ bool RetVal ; // = _DataFlowExecutor->Stop() ;
+// endService( "CNode_Impl::Stop" );
+ return RetVal ;
+}
+bool CNode_Impl::Suspend() {
+// beginService( "CNode_Impl::Suspend" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Suspend( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->Suspend() ;
+ }
+ }
+// endService( "CNode_Impl::Suspend" );
+ return RetVal ;
+}
+bool CNode_Impl::SuspendDone() {
+// beginService( "CNode_Impl::SuspendDone" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->SuspendDone( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->SuspendDone() ;
+ }
+ }
+// endService( "CNode_Impl::SuspendDone" );
+ return RetVal ;
+}
+bool CNode_Impl::Resume() {
+// beginService( "CNode_Impl::Resume" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Resume( Name() ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->Resume() ;
+ }
+ }
+// endService( "CNode_Impl::Resume" );
+ return RetVal ;
+}
+
+bool CNode_Impl::ReRun() {
+ beginService( "CNode_Impl::ReRun" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Run( Name() , Name() , false ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->Run( false ) ;
+ }
+ }
+ endService( "CNode_Impl::ReRun" );
+ return RetVal ;
+}
+
+bool CNode_Impl::ReRunAt( const char * aNodeName ) {
+ beginService( "CNode_Impl::ReRunAt" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Run( Name() , aNodeName , false ) ;
+ }
+ }
+ endService( "CNode_Impl::ReRunAt" );
+ return RetVal ;
+}
+
+bool CNode_Impl::ReStart() {
+ beginService( "CNode_Impl::ReStart" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Run( Name() , Name() , true ) ;
+ }
+ else {
+ RetVal = _DataFlowExecutor->Run( true ) ;
+ }
+ }
+ endService( "CNode_Impl::ReStart" );
+ return RetVal ;
+}
+
+bool CNode_Impl::ReStartAt( const char * aNodeName ) {
+ beginService( "CNode_Impl::ReStartAt" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ if ( _IsNode ) {
+ RetVal = _DataFlowExecutor->Run( Name() , aNodeName , true ) ;
+ }
+ }
+ endService( "CNode_Impl::ReStartAt" );
+ return RetVal ;
+}
+
--- /dev/null
+//=============================================================================
+// File : CNode_Impl.hxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA
+// $Header:
+//=============================================================================
+
+#ifndef _CNODE_IMPL_HXX_
+#define _CNODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class CNode_Impl : public POA_SUPERV::CNode ,
+ public Engines_Component_i {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ GraphEditor::DataFlow * _DataFlowEditor ;
+ GraphEditor::InNode * _DataFlowNode ;
+ bool _IsNode ;
+
+ public:
+ CNode_Impl();
+ CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ const char *aDataFlowName ) ;
+ CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const SALOME_ModuleCatalog::Service &NodeService ,
+ const char * NodeName = NULL ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::ComputingNode ,
+ const char * aFuncName = NULL ,
+ const SUPERV::ListOfStrings & aPythonFunction = SUPERV::ListOfStrings() ) ;
+ CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const SALOME_ModuleCatalog::Service &NodeService ,
+ const char * NodeName = NULL ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::InLineNode ,
+ const GraphBase::ListOfFuncName & aFuncName = GraphBase::ListOfFuncName() ,
+ const GraphBase::ListOfPythonFunctions & aPythonFunction = GraphBase::ListOfPythonFunctions() ) ;
+ CNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~CNode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual void DataFlowEditor( GraphEditor::DataFlow * DataFlowEditor ) {
+ _DataFlowEditor = DataFlowEditor ; } ;
+ virtual GraphEditor::DataFlow * DataFlowEditor() {
+ return _DataFlowEditor ; } ;
+ virtual void DataFlowNode( GraphEditor::InNode * DataFlowNode ) {
+ _DataFlowNode = DataFlowNode ; } ;
+ virtual GraphEditor::InNode * DataFlowNode() {
+ return _DataFlowNode ; } ;
+
+ virtual char * Name() ;
+ virtual bool SetName( const char * aDataFlowName ) ;
+ virtual SALOME_ModuleCatalog::Service * Service() ;
+ virtual SUPERV::KindOfNode Kind() ;
+ virtual SUPERV::SDate CreationDate() ;
+ virtual SUPERV::SDate LastUpdateDate() ;
+ virtual char * Version() ;
+ virtual char * Author() ;
+ virtual bool SetAuthor( const char * aDataFlowAuthor ) ;
+ virtual char * Comment() ;
+ virtual bool SetComment( const char * aDataFlowComment ) ;
+
+ virtual GraphEditor::InNode * DataFlowNode() const {
+ return _DataFlowNode ; } ;
+ virtual GraphBase::ComputingNode * BaseNode() {
+ return _DataFlowNode->ComputingNode() ; } ;
+
+ virtual SUPERV::CNode_var ObjRef() {
+ SUPERV::CNode_var iobject = SUPERV::GNode::_nil() ;
+ if ( _DataFlowNode && _IsNode ) {
+ iobject = SUPERV::CNode::_narrow( _DataFlowNode->ObjRef() ) ;
+ }
+ else {
+ iobject = SUPERV::CNode::_narrow( _DataFlowEditor->ObjRef() ) ;
+ }
+ return iobject ; } ;
+ virtual void SetObjRef(SUPERV::CNode_var aNode ) {
+ if ( _DataFlowNode && _IsNode ) {
+ _DataFlowNode->SetObjRef( aNode ) ;
+ }
+ else {
+ _DataFlowEditor->SetObjRef( SUPERV::Graph::_narrow( aNode ) ) ;
+ } } ;
+
+ virtual void Coords( const long X , const long Y ) ;
+ virtual long X() ;
+ virtual long Y() ;
+
+ virtual SUPERV::Port_ptr Port( const char * aParameterName ) ;
+
+// virtual bool BusPorts( const char * InputParameterName ,
+// const char * InputParameterType ,
+// const char * OutputParameterName ,
+// const char * OutputParameterType ,
+// SUPERV::Port_out InputPort ,
+// SUPERV::Port_out OutputPort ) ;
+
+// virtual SUPERV::Link_ptr Link( const char * ToServiceParameterName ,
+// const SUPERV::Value_ptr aValue ) ;
+
+ virtual SUPERV::Port_ptr Input( const char * ToServiceParameterName ,
+ const SUPERV::Value_ptr aValue ) ;
+
+ virtual SUPERV::ListOfPorts * Ports() ;
+
+ virtual SUPERV::ListOfLinks * Links() ;
+
+ virtual SUPERV::Link_ptr GetLink( const char * ToServiceParameterName ) ;
+
+ virtual bool IsGraph() ;
+ virtual bool IsComputing() ;
+ virtual bool IsFactory() ;
+ virtual bool IsInLine() ;
+ virtual bool IsGOTO() ;
+ virtual bool IsLoop() ;
+ virtual bool IsEndLoop() ;
+ virtual bool IsSwitch() ;
+ virtual bool IsEndSwitch() ;
+
+ virtual long SubGraph() ;
+
+ virtual bool IsLinked(const char * ToServiceParameterName ) ;
+ virtual bool HasInput(const char * ToServiceParameterName ) ;
+
+// virtual SUPERV::Link_ptr GetLink(const char * ToServiceParameterName ) ;
+// virtual SUPERV::Value_ptr GetValue(const char * FromServiceParameterName ) ;
+
+ virtual bool IsReady() ;
+ virtual bool IsWaiting() ;
+ virtual bool IsRunning() ;
+ virtual bool IsDone() ;
+ virtual bool IsSuspended() ;
+
+ virtual SUPERV::GraphState State() ;
+ virtual SUPERV::ControlState Control() ;
+ virtual void ControlClear() ;
+
+ virtual long Thread() ;
+
+ virtual SUPERV::AutomatonState AutoState() ;
+
+ virtual bool ReadyW() ;
+ virtual bool RunningW() ;
+ virtual bool DoneW() ;
+ virtual bool SuspendedW() ;
+
+ virtual void ping() ;
+ virtual bool ContainerKill() ;
+
+ virtual bool Kill() ;
+ virtual bool KillDone() ;
+ virtual bool Stop() ;
+ virtual bool Suspend() ;
+ virtual bool SuspendDone() ;
+ virtual bool Resume() ;
+
+ virtual bool ReRun() ;
+ virtual bool ReRunAt( const char * aNodeName ) ;
+ virtual bool ReStart() ;
+ virtual bool ReStartAt( const char * aNodeName ) ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : ELNode_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "ELNode_Impl.hxx"
+
+ELNode_Impl::ELNode_Impl() {
+}
+
+ELNode_Impl::ELNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ const char * EndName ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , EndName , SUPERV::ListOfStrings() , NodeKindOfNode ) {
+// MESSAGE( NodeName << " " );
+ beginService( "ELNode_Impl::ELNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode( DataFlowEditor()->AddNode( InitFunction , MoreFunction , NextFunction ,
+// NodeName , NodeKindOfNode ) ) ;
+// DataFlowNode( DataFlowEditor()->AddNode( SALOME_ModuleCatalog::Service() ,
+// "" , "" , "" ,
+// NodeKindOfNode ) ) ;
+ endService( "ELNode_Impl::ELNode_Impl" );
+}
+
+ELNode_Impl::ELNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphEditor::InNode * aDataFlowNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , aDataFlowNode ) {
+ MESSAGE( DataFlowNode()->Name() << " " );
+ beginService( "ELNode_Impl::ELNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "ELNode_Impl::ELNode_Impl" );
+}
+
+ELNode_Impl::~ELNode_Impl() {
+ beginService( "ELNode_Impl::~ELNode_Impl" );
+ endService( "ELNode_Impl::~ELNode_Impl" );
+}
+
+void ELNode_Impl::destroy() {
+ beginService( "ELNode_Impl::Destroy" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( Delete() ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "ELNode_Impl::Destroy" );
+}
+
+bool ELNode_Impl::Delete() {
+// beginService( "ELNode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = DataFlowEditor()->IsValid() ;
+ }
+// endService( "ELNode_Impl::Delete" );
+ return RetVal ;
+}
--- /dev/null
+//=============================================================================
+// File : ELNode_Impl.hxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA
+// $Header:
+//=============================================================================
+
+#ifndef _ELNODE_IMPL_HXX_
+#define _ELNODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "GNode_Impl.hxx"
+
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class ELNode_Impl : public GNode_Impl ,
+ public POA_SUPERV::ELNode {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ public:
+ ELNode_Impl();
+ ELNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const char * EndName ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::EndLoopNode ) ;
+ ELNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~ELNode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual GraphBase::EndOfLoopNode * BaseNode() {
+ return DataFlowNode()->EndOfLoopNode() ; } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : ESNode_Impl.cxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "ESNode_Impl.hxx"
+
+ESNode_Impl::ESNode_Impl() {
+}
+
+ESNode_Impl::ESNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , FuncName , SUPERV::ListOfStrings() , NodeKindOfNode ) {
+// MESSAGE( NodeName << " " );
+ beginService( "ESNode_Impl::ESNode_Impl" );
+ if ( FuncName ) {
+ cout << "ESNode_Impl::GNode_Impl " << (void *) FuncName << " " << FuncName
+ << " " << strlen( FuncName ) << endl ;
+ }
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode( DataFlowEditor()->AddNode( NodeService , NodeComponentName ,
+// NodeInterfaceName , NodeName ,
+// NodeKindOfNode ) ) ;
+// DataFlowNode( DataFlowEditor()->AddNode( SALOME_ModuleCatalog::Service() ,
+// "" , "" , "" ,
+// NodeKindOfNode ) ) ;
+ endService( "ESNode_Impl::ESNode_Impl" );
+}
+
+ESNode_Impl::ESNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphEditor::InNode * aDataFlowNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , aDataFlowNode ) {
+ MESSAGE( DataFlowNode()->Name() << " " );
+ beginService( "ESNode_Impl::ESNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "ESNode_Impl::ESNode_Impl" );
+}
+
+ESNode_Impl::~ESNode_Impl() {
+ beginService( "ESNode_Impl::~ESNode_Impl" );
+ endService( "ESNode_Impl::~ESNode_Impl" );
+}
+
+void ESNode_Impl::destroy() {
+ beginService( "ESNode_Impl::Destroy" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( Delete() ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "ESNode_Impl::Destroy" );
+}
+
+bool ESNode_Impl::Delete() {
+// beginService( "ESNode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = DataFlowEditor()->IsValid() ;
+ }
+// endService( "ESNode_Impl::Delete" );
+ return RetVal ;
+}
+
--- /dev/null
+//=============================================================================
+// File : ESNode_Impl.hxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2003
+// $Header:
+//=============================================================================
+
+#ifndef _ESNODE_IMPL_HXX_
+#define _ESNODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "GNode_Impl.hxx"
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class ESNode_Impl : public GNode_Impl ,
+ public POA_SUPERV::ESNode {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ public:
+ ESNode_Impl();
+ ESNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::EndSwitchNode ) ;
+ ESNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~ESNode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual GraphBase::EndOfSwitchNode * BaseNode() {
+ return DataFlowNode()->EndOfSwitchNode() ; } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : FNode_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "FNode_Impl.hxx"
+
+FNode_Impl::FNode_Impl() {
+}
+
+FNode_Impl::FNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ const SALOME_ModuleCatalog::Service &NodeService ,
+ const char * NodeComponentName ,
+ const char * NodeInterfaceName ,
+ const char * NodeName ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ CNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , NodeService , NodeName , NodeKindOfNode , (char * ) NULL ) {
+ MESSAGE( NodeName << " " );
+ beginService( "FNode_Impl::FNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode( DataFlowEditor()->AddNode( NodeService , NodeComponentName ,
+// NodeInterfaceName , NodeName ,
+// NodeKindOfNode ) ) ;
+ DataFlowNode()->ComponentName( NodeComponentName ) ;
+ DataFlowNode()->InterfaceName( NodeInterfaceName ) ;
+ endService( "FNode_Impl::FNode_Impl" );
+}
+
+FNode_Impl::FNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphEditor::InNode * aDataFlowNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ CNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , aDataFlowNode ) {
+ MESSAGE( DataFlowNode()->Name() << " " );
+ beginService( "FNode_Impl::FNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "FNode_Impl::FNode_Impl" );
+}
+
+FNode_Impl::~FNode_Impl() {
+ beginService( "FNode_Impl::~Node_Impl" );
+ endService( "FNode_Impl::~Node_Impl" );
+}
+
+void FNode_Impl::destroy() {
+ beginService( "FNode_Impl::Destroy" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( Delete() ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "FNode_Impl::Destroy" );
+}
+
+bool FNode_Impl::Delete() {
+// beginService( "FNode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = DataFlowEditor()->IsValid() ;
+ }
+// endService( "FNode_Impl::Delete" );
+ return RetVal ;
+}
+
+char * FNode_Impl::GetComponentName() {
+// beginService( "FNode_Impl::GetComponentName" );
+ char * RetVal = DataFlowNode()->ComponentName() ;
+// endService( "FNode_Impl::GetComponentName" );
+ return CORBA::string_dup( RetVal );
+}
+bool FNode_Impl::SetComponentName( const char * aComponentName ) {
+// beginService( "FNode_Impl::SetComponentName" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowNode()->ComponentName( aComponentName ) ;
+ }
+// endService( "FNode_Impl::SetComponentName" );
+ return RetVal ;
+}
+char * FNode_Impl::GetInterfaceName() {
+// beginService( "FNode_Impl::GetInterfaceName" );
+ char * RetVal = DataFlowNode()->InterfaceName() ;
+// endService( "FNode_Impl::GetInterfaceName" );
+ return CORBA::string_dup( RetVal );
+}
+bool FNode_Impl::SetInterfaceName( const char * anInterfaceName ) {
+// beginService( "FNode_Impl::SetInterfaceName" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowNode()->InterfaceName( anInterfaceName ) ;
+ }
+// endService( "FNode_Impl::SetInterfaceName" );
+ return RetVal ;
+}
+char * FNode_Impl::GetContainer() {
+// beginService( "FNode_Impl::GetContainer" );
+ char * RetVal = DataFlowNode()->Computer() ;
+// endService( "FNode_Impl::GetContainer" );
+ return CORBA::string_dup( RetVal ) ;
+}
+bool FNode_Impl::SetContainer( const char * aDataFlowContainer ) {
+// beginService( "FNode_Impl::SetContainer" );
+ bool RetVal = false ;
+ GraphExecutor::DataFlow * _DataFlowExecutor = DataFlowEditor()->Executor() ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowNode()->Computer( aDataFlowContainer ) ;
+ }
+ else if ( _DataFlowExecutor && ( _DataFlowExecutor->IsSuspended() ||
+ _DataFlowExecutor->IsSuspended( DataFlowNode()->Name() ) ) ) {
+ if ( _DataFlowExecutor->GetChangeGraphNode( DataFlowNode()->Name() ) ) {
+ RetVal = ((GraphEditor::InNode * ) _DataFlowExecutor->GetChangeGraphNode( DataFlowNode()->Name() )->GetInNode())->Computer( aDataFlowContainer ) ;
+ }
+ }
+// endService( "FNode_Impl::SetContainer" );
+ return RetVal ;
+}
+
--- /dev/null
+//=============================================================================
+// File : FNode_Impl.hxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2001
+// $Header:
+//=============================================================================
+
+#ifndef _FNODE_IMPL_HXX_
+#define _FNODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "CNode_Impl.hxx"
+
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class FNode_Impl : public CNode_Impl ,
+ public POA_SUPERV::FNode {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ public:
+ FNode_Impl();
+ FNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ const char *aDataFlowName ) ;
+ FNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const SALOME_ModuleCatalog::Service &NodeService ,
+ const char * NodeComponentName ,
+ const char * NodeInterfaceName ,
+ const char * NodeName = NULL ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::FactoryNode ) ;
+ FNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~FNode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual char * GetComponentName() ;
+ virtual bool SetComponentName(const char *) ;
+ virtual char * GetInterfaceName() ;
+ virtual bool SetInterfaceName(const char *) ;
+ virtual char * GetContainer() ;
+ virtual bool SetContainer( const char * aDataFlowContainer ) ;
+
+ virtual GraphBase::FactoryNode * BaseNode() {
+ return DataFlowNode()->FactoryNode() ; } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : GNode_Impl.cxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "GNode_Impl.hxx"
+
+GNode_Impl::GNode_Impl() {
+}
+
+GNode_Impl::GNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ INode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , FuncName , PythonFunction , NodeKindOfNode ) {
+// MESSAGE( NodeName << " " );
+ beginService( "GNode_Impl::GNode_Impl" );
+ if ( FuncName ) {
+ cout << "GNode_Impl::GNode_Impl " << (void *) FuncName << " " << FuncName
+ << " " << strlen( FuncName ) << endl ;
+ }
+ if ( NodeKindOfNode == SUPERV::GOTONode ) {
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode( DataFlowEditor()->AddNode( NodeService , NodeComponentName ,
+// NodeInterfaceName , NodeName ,
+// NodeKindOfNode ) );
+// DataFlowNode( DataFlowEditor()->AddNode( SALOME_ModuleCatalog::Service() ,
+// "" , "" , "" ,
+// NodeKindOfNode ) ) ;
+ endService( "GNode_Impl::GNode_Impl" );
+}
+
+GNode_Impl::GNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphBase::ListOfFuncName FuncNameList ,
+ GraphBase::ListOfPythonFunctions PythonFunctionList ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ INode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , FuncNameList , PythonFunctionList , NodeKindOfNode ) {
+// MESSAGE( NodeName << " " );
+ beginService( "GNode_Impl::GNode_Impl" );
+ if ( NodeKindOfNode == SUPERV::GOTONode ) {
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode( DataFlowEditor()->AddNode( NodeService , NodeComponentName ,
+// NodeInterfaceName , NodeName ,
+// NodeKindOfNode ) );
+// DataFlowNode( DataFlowEditor()->AddNode( SALOME_ModuleCatalog::Service() ,
+// "" , "" , "" ,
+// NodeKindOfNode ) ) ;
+ endService( "GNode_Impl::GNode_Impl" );
+}
+
+GNode_Impl::GNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphEditor::InNode * aDataFlowNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ INode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , aDataFlowNode ) {
+ MESSAGE( DataFlowNode()->Name() << " " );
+ beginService( "GNode_Impl::GNode_Impl" );
+ if ( DataFlowNode()->IsGOTONode() ) {
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "GNode_Impl::GNode_Impl" );
+}
+
+GNode_Impl::~GNode_Impl() {
+ beginService( "GNode_Impl::~GNode_Impl" );
+ endService( "GNode_Impl::~GNode_Impl" );
+}
+
+void GNode_Impl::destroy() {
+ beginService( "GNode_Impl::Destroy" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( Delete() ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "GNode_Impl::Destroy" );
+}
+
+bool GNode_Impl::Delete() {
+// beginService( "GNode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = DataFlowEditor()->IsValid() ;
+ }
+// endService( "GNode_Impl::Delete" );
+ return RetVal ;
+}
+
+SUPERV::INode_ptr GNode_Impl::Coupled() {
+ beginService( "GNode_Impl::Coupled" );
+ SUPERV::INode_var iobject = SUPERV::INode::_nil() ;
+ if ( DataFlowNode()->CoupledNode() ) {
+ if ( CORBA::is_nil( DataFlowNode()->CoupledNode()->ObjRef() ) ) {
+ INode_Impl * myNode = new INode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode *) DataFlowNode()->CoupledNode()->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::INode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::INode::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = SUPERV::INode::_narrow( DataFlowNode()->CoupledNode()->ObjRef() ) ;
+ }
+ }
+ endService( "GNode_Impl::Coupled" );
+ return SUPERV::INode::_duplicate( iobject ) ;
+}
+
--- /dev/null
+//=============================================================================
+// File : GNode_Impl.hxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2003
+// $Header:
+//=============================================================================
+
+#ifndef _GNODE_IMPL_HXX_
+#define _GNODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "INode_Impl.hxx"
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class GNode_Impl : public INode_Impl ,
+ public POA_SUPERV::GNode {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ public:
+ GNode_Impl();
+ GNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::GOTONode ) ;
+ GNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphBase::ListOfFuncName FuncNameList ,
+ GraphBase::ListOfPythonFunctions PythonFunctionList ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::GOTONode ) ;
+ GNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~GNode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual bool SetCoupled( const char * anInLineNode ) {
+ GraphBase::InLineNode * CoupledINode = (GraphBase::InLineNode * ) DataFlowEditor()->GetGraphNode( anInLineNode ) ;
+ cout << Name() << ".SetCoupled " << anInLineNode << endl ;
+ if ( CoupledINode && ( IsGOTO() &&
+ ( CoupledINode->IsInLineNode() || CoupledINode->IsLoopNode() ||
+ CoupledINode->IsSwitchNode() ) ) ||
+ ( !IsGOTO() && ( IsLoop() || IsSwitch() ||
+ IsEndLoop() || IsEndSwitch() ) ) ) {
+ DataFlowNode()->CoupledNode( CoupledINode ) ;
+ if ( IsSwitch() ) {
+ DataFlowEditor()->AddLink( Name() , "Default" ,
+ CoupledINode->Name() , "Default" ) ;
+ }
+ else if ( IsLoop() || IsEndLoop() ) {
+ DataFlowEditor()->AddLink( Name() , "DoLoop" ,
+ CoupledINode->Name() , "DoLoop" ) ;
+ }
+ else if ( IsGOTO() ) {
+ DataFlowEditor()->AddLink( Name() , "OutGate" ,
+ CoupledINode->Name() , "InGate" ) ;
+ }
+ cout << "SetCoupled " << CoupledINode->Name() << endl ;
+ return true ;
+ }
+ cout << Name() << ".SetCoupled ERROR " << anInLineNode << " " << CoupledINode
+ << " of " << Kind() ;
+ if ( CoupledINode ) {
+ cout << " kinfOkCoupled " << CoupledINode->Kind() ;
+ }
+ cout << endl ;
+ return false ; } ;
+ virtual SUPERV::INode_ptr Coupled() ;
+
+ virtual GraphBase::GOTONode * BaseNode() {
+ return DataFlowNode()->GOTONode() ; } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : Graph_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "Graph_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+
+Graph_Impl::Graph_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ const char *aDataFlowName ) :
+ INode_Impl(orb, poa, contId, instanceName, interfaceName, aDataFlowName) {
+// MESSAGE("Graph_Impl::Graph_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+ beginService( "Graph_Impl::Graph_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _ExecNumber = 0 ;
+
+ string dbgfile = "/tmp/" ;
+ dbgfile += instanceName ;
+ dbgfile += "_" ;
+ int lenname = strlen( aDataFlowName ) ;
+ char * theDataFlowName = new char [ lenname+1 ] ;
+ strcpy( theDataFlowName , aDataFlowName ) ;
+ if ( aDataFlowName ) {
+ if ( lenname > 4 && !strcmp( &aDataFlowName[ lenname - 4 ] , ".xml" ) ) {
+ strncpy( theDataFlowName , &aDataFlowName[ 0 ] , lenname-4 ) ;
+ theDataFlowName[ lenname-4 ] = '\0' ;
+ int i ;
+ for ( i = lenname - 5 ; i >= 0 ; i-- ) {
+ if ( aDataFlowName[ i ] == '/' ) {
+ strncpy( theDataFlowName , &aDataFlowName[ i + 1 ] , lenname-5-i ) ;
+ theDataFlowName[ lenname-5-i ] = '\0' ;
+ break ;
+ }
+ }
+ }
+ else {
+ strcpy( theDataFlowName , &aDataFlowName[ 0 ] ) ;
+ }
+ dbgfile += theDataFlowName ;
+ }
+ dbgfile += ".log" ;
+ _DebugFileName = new char[ strlen( dbgfile.c_str() )+1 ] ;
+ strcpy( _DebugFileName , dbgfile.c_str() ) ;
+
+ _NamingService = new SALOME_NamingService(orb);
+// _DataFlowEditor = new SALOME_DataFlowEditor_impl( NS ) ;
+ GraphEditor::DataFlow * aDataFlowEditor = new GraphEditor::DataFlow(
+ _Orb , _NamingService ,
+ theDataFlowName ,
+ _DebugFileName ) ;
+ DataFlowEditor( aDataFlowEditor ) ;
+ DataFlowEditor()->SetObjImpl( this ) ;
+ _DataFlowExecutor = NULL ;
+// _DataFlowDataNode = DataFlowEditor() ;
+ delete [] theDataFlowName ;
+ endService( "Graph_Impl::Graph_Impl" );
+}
+
+Graph_Impl::Graph_Impl() {
+}
+
+Graph_Impl::~Graph_Impl() {
+ beginService( "Graph_Impl::~Graph_Impl" );
+ endService( "Graph_Impl::~Graph_Impl" );
+}
+
+void Graph_Impl::destroy() {
+ beginService( "Graph_Impl::destroy" );
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ endService( "Graph_Impl::destroy" );
+}
+
+char* Graph_Impl::getIOR() {
+ if (CORBA::is_nil(myServant)) {
+ PortableServer::ObjectId* id = getId();
+ CORBA::Object_var obj;
+ obj = _poa->id_to_reference(*id);
+ myServant = SUPERV::Graph::_narrow(obj);
+ }
+ return(CORBA::string_dup(_Orb->object_to_string(myServant)));
+}
+
+SUPERV::Graph_ptr Graph_Impl::Copy() {
+ beginService( "Graph_Impl::Copy" );
+ Graph_Impl * myGraph ;
+ myGraph = new Graph_Impl( _Orb , _Poa, _ContId,
+ instanceName() , interfaceName() ,
+ Name() ) ;
+ PortableServer::ObjectId * id = myGraph->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Graph_var iobject ;
+ iobject = SUPERV::Graph::_narrow(obj) ;
+// GraphBase::SGraph * aSGraph = aGraph->GetGraph() ;
+ GraphBase::SGraph * aSGraph = GetGraph() ;
+ myGraph->LoadGraph( aSGraph ) ;
+ endService( "Graph_Impl::Copy" );
+ return SUPERV::Graph::_duplicate(iobject) ;
+}
+
+void Graph_Impl::ReadOnly() {
+ DataFlowEditor()->ReadOnly() ;
+}
+
+SUPERV::INode_ptr Graph_Impl::GetNode() {
+// beginService( "Graph_Impl::GetNode" );
+ PortableServer::ObjectId * id = getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Graph_var iobject ;
+ iobject = SUPERV::Graph::_narrow(obj) ;
+// endService( "Graph_Impl::GetNode" );
+ return SUPERV::Graph::_duplicate(iobject) ;
+}
+
+GraphBase::SGraph * Graph_Impl::GetGraph() {
+ return DataFlowEditor()->GetDataFlow() ;
+}
+
+#if 0
+char * Graph_Impl::DataFlowInfo() {
+ beginService( "Graph_Impl::DataFlowInfo" );
+ char * RetVal = DataFlowEditor()->DataFlowInfo() ;
+ endService( "Graph_Impl::DataFlowInfo" );
+ return CORBA::string_dup( RetVal ) ;
+}
+
+char * Graph_Impl::DataNodeInfo() {
+ beginService( "Graph_Impl::DataNodeInfo" );
+ char * RetVal = DataFlowEditor()->DataNodeInfo() ;
+ endService( "Graph_Impl::DataNodeInfo" );
+ return CORBA::string_dup( RetVal ) ;
+}
+
+char * Graph_Impl::NodeInfo( const char * aNodeName ) {
+ beginService( "Graph_Impl::NodeInfo" );
+ char * RetVal = DataFlowEditor()->NodeInfo( aNodeName ) ;
+ endService( "Graph_Impl::NodeInfo" );
+ return CORBA::string_dup( RetVal ) ;
+}
+#endif
+
+bool Graph_Impl::LoadGraph(const GraphBase::SGraph * aDataFlow ) {
+// beginService( "Graph_Impl::LoadGraph" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->LoadDataFlow( aDataFlow ) ;
+ }
+// endService( "Graph_Impl::LoadGraph" );
+ return RetVal ;
+}
+
+bool Graph_Impl::Import(const char * aXmlFile ) {
+// beginService( "Graph_Impl::Import" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->LoadXml( aXmlFile ) ;
+ }
+// endService( "Graph_Impl::Import" );
+ return RetVal ;
+}
+
+bool Graph_Impl::Export(const char * anXmlFile ) {
+// beginService( "Graph_Impl::Export" );
+ char * aFile = new char [ strlen( anXmlFile ) + 5 ] ;
+ strcpy( aFile , anXmlFile ) ;
+ int len = strlen( aFile ) ;
+ if ( !strcmp( &aFile[ len - 4 ] , ".xml" ) ) {
+ }
+ else if ( !strcmp( &aFile[ len - 3 ] , ".py" ) ) {
+ strcpy( &aFile[ len - 3 ] , ".xml" ) ;
+ len = strlen( aFile ) ;
+ }
+ else {
+ strcat( aFile , ".xml" ) ;
+ len = strlen( aFile ) ;
+ }
+ bool RetVal = DataFlowEditor()->SaveXml( aFile ) ;
+ if ( RetVal ) {
+ strcpy( &aFile[ len - 4 ] , ".py" ) ;
+ RetVal = DataFlowEditor()->SavePy( aFile ) ;
+ }
+ delete [] aFile ;
+// endService( "Graph_Impl::Export" );
+ return RetVal ;
+}
+
+#if 0
+GraphBase::ListOfNodes * Graph_Impl::GetNodes() {
+// beginService( "Graph_Impl::GetNodes" );
+ GraphBase::ListOfNodes * RetVal = DataFlowEditor()->GetNodes() ;
+// endService( "Graph_Impl::GetNodes" );
+ return RetVal ;
+}
+GraphBase::ListOfLinks * Graph_Impl::GetLinks() {
+// beginService( "Graph_Impl::GetLinks" );
+ GraphBase::ListOfLinks * RetVal = DataFlowEditor()->GetLinks() ;
+// endService( "Graph_Impl::GetLinks" );
+ return RetVal ;
+}
+GraphBase::ListOfLinks * Graph_Impl::GetDatas() {
+// beginService( "Graph_Impl::GetDatas" );
+ GraphBase::ListOfLinks * RetVal = DataFlowEditor()->GetDatas() ;
+// endService( "Graph_Impl::GetDatas" );
+ return RetVal ;
+}
+#endif
+
+SUPERV::CNode_ptr Graph_Impl::CNode(
+ const SALOME_ModuleCatalog::Service &NodeService ) {
+ beginService( "Graph_Impl::CNode" );
+ SUPERV::CNode_var iobject = SUPERV::CNode::_nil() ;
+ if ( DataFlowEditor()->IsEditing() && !DataFlowEditor()->IsReadOnly() ) {
+ CNode_Impl * myNode = new CNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ NodeService , (char * ) NULL ,
+ SUPERV::ComputingNode , (char * ) NULL ) ;
+ if ( myNode->DataFlowNode() ) {
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::CNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::CNode::_duplicate( iobject ) ) ;
+ }
+ }
+ endService( "Graph_Impl::CNode" );
+ return SUPERV::CNode::_duplicate( iobject ) ;
+}
+
+SUPERV::FNode_ptr Graph_Impl::FNode(
+ const char * NodeComponentName ,
+ const char * NodeInterfaceName ,
+ const SALOME_ModuleCatalog::Service &NodeService ) {
+ beginService( "Graph_Impl::Node" );
+ SUPERV::FNode_var iobject = SUPERV::FNode::_nil() ;
+ if ( DataFlowEditor()->IsEditing() && !DataFlowEditor()->IsReadOnly() ) {
+ FNode_Impl * myNode = new FNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ NodeService ,
+ NodeComponentName ,
+ NodeInterfaceName ) ;
+ if ( myNode->DataFlowNode() ) {
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::FNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::FNode::_duplicate( iobject ) ) ;
+ }
+ }
+ endService( "Graph_Impl::Node" );
+ return SUPERV::FNode::_duplicate( iobject ) ;
+}
+
+SUPERV::INode_ptr Graph_Impl::INode( const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFuntion ) {
+ beginService( "Graph_Impl::INode" );
+ SUPERV::INode_var iobject = SUPERV::INode::_nil() ;
+ if ( DataFlowEditor()->IsEditing() && !DataFlowEditor()->IsReadOnly() ) {
+ INode_Impl * myNode = new INode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ FuncName , PythonFuntion ,
+ SUPERV::InLineNode ) ;
+ if ( myNode->DataFlowNode() ) {
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::INode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::INode::_duplicate( iobject ) ) ;
+ }
+ }
+ endService( "Graph_Impl::INode" );
+ return SUPERV::INode::_duplicate( iobject ) ;
+}
+
+
+SUPERV::GNode_ptr Graph_Impl::GNode( const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFuntion ,
+ const char * anInLineNode ) {
+ beginService( "Graph_Impl::GNode" );
+ SUPERV::GNode_var iobject = SUPERV::GNode::_nil() ;
+ if ( DataFlowEditor()->IsEditing() && !DataFlowEditor()->IsReadOnly() ) {
+ GNode_Impl * myNode = new GNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ FuncName , PythonFuntion ,
+ SUPERV::GOTONode ) ;
+ if ( myNode->DataFlowNode() ) {
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::GNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::GNode::_duplicate( iobject ) ) ;
+ if ( strlen( anInLineNode ) ) {
+ GraphBase::InLineNode * CoupledINode = (GraphBase::InLineNode * ) DataFlowEditor()->GetGraphNode( anInLineNode ) ;
+ if ( anInLineNode ) {
+ myNode->SetCoupled( anInLineNode ) ;
+ Link( myNode->Port( "OutGate" ) , CoupledINode->ObjRef()->Port( "InGate" ) ) ;
+ }
+ }
+ }
+ }
+ endService( "Graph_Impl::GNode" );
+ return SUPERV::GNode::_duplicate( iobject ) ;
+}
+
+SUPERV::LNode_ptr Graph_Impl::LNode(
+ const char * InitName ,
+ const SUPERV::ListOfStrings & InitFunction ,
+ const char * MoreName ,
+ const SUPERV::ListOfStrings & MoreFunction ,
+ const char * NextName ,
+ const SUPERV::ListOfStrings & NextFunction ,
+ SUPERV::INode_out anEndOfLoop ) {
+ beginService( "Graph_Impl::LNode" );
+ SUPERV::LNode_var iobject = SUPERV::LNode::_nil() ;
+ SUPERV::ELNode_var iendobject = SUPERV::ELNode::_nil() ;
+ if ( DataFlowEditor()->IsEditing() && !DataFlowEditor()->IsReadOnly() ) {
+ GraphBase::ListOfFuncName FuncNameList ;
+ FuncNameList.resize(3) ;
+ FuncNameList[0] = InitName ;
+ FuncNameList[1] = MoreName ;
+ FuncNameList[2] = NextName ;
+ GraphBase::ListOfPythonFunctions PythonFunctionList ;
+ PythonFunctionList.resize(3) ;
+ PythonFunctionList[0] = &InitFunction ;
+ PythonFunctionList[1] = &MoreFunction ;
+ PythonFunctionList[2] = &NextFunction ;
+ LNode_Impl * myNode = new LNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ FuncNameList , PythonFunctionList ,
+// InitName , InitFunction ,
+// MoreName , MoreFunction ,
+// NextName , NextFunction ,
+ SUPERV::LoopNode ) ;
+ if ( myNode->DataFlowNode() ) {
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::LNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::LNode::_duplicate( iobject ) ) ;
+
+ SALOME_ModuleCatalog::Service aVoidService = SALOME_ModuleCatalog::Service() ;
+ char * anEndName ;
+ if ( strlen( InitName ) ) {
+ anEndName = new char( 3 + strlen( InitName ) + 1 ) ;
+ strcpy( anEndName , "End" ) ;
+ strcat( anEndName , InitName ) ;
+ }
+ else {
+ anEndName = new char( 3 + strlen( "Loop" ) + 1 ) ;
+ strcpy( anEndName , "EndLoop" ) ;
+ }
+ ELNode_Impl * myEndNode = new ELNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ anEndName ,
+ SUPERV::EndLoopNode ) ;
+ PortableServer::ObjectId * endid = myEndNode->getId() ;
+ CORBA::Object_var endobj = _poa->id_to_reference(*endid);
+ iendobject = SUPERV::ELNode::_narrow(endobj) ;
+ myEndNode->SetObjRef( SUPERV::ELNode::_duplicate( iendobject ) ) ;
+ myNode->SetCoupled( myEndNode->BaseNode()->Name() ) ;
+ myEndNode->SetCoupled( myNode->BaseNode()->Name() ) ;
+ Link( myNode->Port( "DoLoop" ) , myEndNode->Port( "DoLoop" ) ) ;
+ Link( myEndNode->Port( "DoLoop" ) , myNode->Port( "InitLoop" ) ) ;
+ }
+ }
+ anEndOfLoop = SUPERV::ELNode::_duplicate( iendobject ) ;
+ endService( "Graph_Impl::LNode" );
+ return SUPERV::LNode::_duplicate( iobject ) ;
+}
+
+SUPERV::SNode_ptr Graph_Impl::SNode(
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ SUPERV::INode_out anEndOfSwitch ) {
+ beginService( "Graph_Impl::SNode" );
+ SUPERV::SNode_var iobject = SUPERV::SNode::_nil() ;
+ SUPERV::ESNode_var iendobject = SUPERV::ESNode::_nil() ;
+ if ( DataFlowEditor()->IsEditing() && !DataFlowEditor()->IsReadOnly() ) {
+ SNode_Impl * myNode = new SNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ FuncName , PythonFunction ,
+ SUPERV::SwitchNode ) ;
+ if ( myNode->DataFlowNode() ) {
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::SNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::SNode::_duplicate( iobject ) ) ;
+
+ string anEndName = "End" ;
+ if ( strlen( FuncName ) ) {
+ anEndName += FuncName ;
+ }
+ else {
+ anEndName += "Switch" ;
+ }
+ cout << "Graph_Impl::SNode anEndName " << (void *) FuncName << " " << FuncName
+ << " " << strlen(FuncName) << " " << (void *) anEndName.c_str() << " "
+ << anEndName.c_str() << endl ;
+ ESNode_Impl * myEndNode = new ESNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ anEndName.c_str() ,
+ SUPERV::EndSwitchNode ) ;
+ cout << "Graph_Impl::SNode returned anEndName " << (void *) FuncName << " "
+ << FuncName << " " << strlen(FuncName) << " " << (void *) anEndName.c_str()
+ << " " << anEndName.c_str() << endl ;
+ PortableServer::ObjectId * endid = myEndNode->getId() ;
+ CORBA::Object_var endobj = _poa->id_to_reference(*endid);
+ iendobject = SUPERV::ESNode::_narrow(endobj) ;
+ myEndNode->SetObjRef( SUPERV::ESNode::_duplicate( iendobject ) ) ;
+ myNode->SetCoupled( myEndNode->BaseNode()->Name() ) ;
+ myEndNode->SetCoupled( myNode->BaseNode()->Name() ) ;
+ if ( !Link( myNode->Port( "Default" ) , myEndNode->Port( "Default" ) ) ) {
+ iobject = SUPERV::SNode::_nil() ;
+ iendobject = SUPERV::ESNode::_nil() ;
+ }
+ }
+ }
+ anEndOfSwitch = SUPERV::ESNode::_duplicate( iendobject ) ;
+ endService( "Graph_Impl::SNode" );
+ return SUPERV::SNode::_duplicate( iobject ) ;
+}
+
+
+SUPERV::CNode_ptr Graph_Impl::GetNode(char const * aNodeName ) {
+// beginService( "Graph_Impl::GetNode" );
+ SUPERV::CNode_var iobject = SUPERV::CNode::_nil() ;
+ if ( CORBA::is_nil( DataFlowEditor()->GetNode( aNodeName )->ObjRef() ) ) {
+ CNode_Impl * myNode = new CNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ DataFlowEditor()->GetNode( aNodeName ) ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::CNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::CNode::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = DataFlowEditor()->GetNode( aNodeName )->ObjRef() ;
+ }
+// endService( "Graph_Impl::GetNode" );
+ return SUPERV::CNode::_duplicate( iobject ) ;
+}
+
+SUPERV::Link_ptr Graph_Impl::Link( SUPERV::Port_ptr OutPort ,
+ SUPERV::Port_ptr InPort ) {
+ beginService( "Graph_Impl::Link" );
+ SUPERV::Link_var iobject = SUPERV::Link::_nil() ;
+ if ( DataFlowEditor()->IsEditing() &&
+ !DataFlowEditor()->IsReadOnly() ) {
+ const char * DataFlowOutNodeName = OutPort->Node()->Name() ;
+ GraphEditor::InNode * DataFlowOutNode = DataFlowEditor()->GetNode( DataFlowOutNodeName ) ;
+ const char * DataFlowInNodeName = InPort->Node()->Name() ;
+ GraphEditor::InNode * DataFlowInNode = DataFlowEditor()->GetNode( DataFlowInNodeName ) ;
+ if ( DataFlowOutNode && DataFlowInNode ) {
+ Link_Impl * myLink = new Link_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ DataFlowInNode ,
+ InPort->Name() ,
+ DataFlowOutNode ,
+ OutPort->Name() ,
+ true ) ;
+ PortableServer::ObjectId * id = myLink->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Link::_narrow(obj) ;
+// iobject = InPort->Link() ;
+ }
+ }
+ endService( "Graph_Impl::Link" );
+ return SUPERV::Link::_duplicate( iobject ) ;
+}
+
+SUPERV::ListOfNodes_var Graph_Impl::SetNode( SUPERV::ListOfNodes_var RetVal ,
+ GraphBase::ComputingNode * aNode ) {
+ int index = 0 ;
+ MESSAGE("Graph_Impl::SetNode " << aNode->Name() << " " << aNode->Kind() ) ;
+ if ( aNode->IsComputingNode() ) {
+ index = RetVal->CNodes.length() ;
+ RetVal->CNodes.length( index+1 );
+ }
+ else if ( aNode->IsFactoryNode() ) {
+ index = RetVal->FNodes.length() ;
+ RetVal->FNodes.length( index+1 );
+ }
+ else if ( aNode->IsInLineNode() ) {
+ index = RetVal->INodes.length() ;
+ RetVal->INodes.length( index+1 );
+ }
+ else if ( aNode->IsGOTONode() ) {
+ index = RetVal->GNodes.length() ;
+ RetVal->GNodes.length( index+1 );
+ }
+ else if ( aNode->IsLoopNode() ) {
+ index = RetVal->LNodes.length() ;
+ RetVal->LNodes.length( index+1 );
+ }
+ else if ( aNode->IsEndLoopNode() ) {
+ index = RetVal->ELNodes.length() ;
+ RetVal->ELNodes.length( index+1 );
+ }
+ else if ( aNode->IsSwitchNode() ) {
+ index = RetVal->SNodes.length() ;
+ RetVal->SNodes.length( index+1 );
+ }
+ else if ( aNode->IsEndSwitchNode() ) {
+ index = RetVal->ESNodes.length() ;
+ RetVal->ESNodes.length( index+1 );
+ }
+ if ( CORBA::is_nil( aNode->ObjRef() ) ) {
+ if ( aNode->IsComputingNode() ) {
+ CNode_Impl * myNode = new CNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::CNode_var iobject ;
+ iobject = SUPERV::CNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::CNode::_duplicate( iobject ) ) ;
+ RetVal->CNodes[index] = SUPERV::CNode::_duplicate( iobject ) ;
+ }
+ else if ( aNode->IsFactoryNode() ) {
+ FNode_Impl * myNode = new FNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::FNode_var iobject ;
+ iobject = SUPERV::FNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::FNode::_duplicate( iobject ) ) ;
+ RetVal->FNodes[index] = SUPERV::FNode::_duplicate( iobject ) ;
+ }
+ else if ( aNode->IsInLineNode() ) {
+ INode_Impl * myNode = new INode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::INode_var iobject ;
+ iobject = SUPERV::INode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::INode::_duplicate( iobject ) ) ;
+ RetVal->INodes[index] = SUPERV::INode::_duplicate( iobject ) ;
+ }
+ else if ( aNode->IsGOTONode() ) {
+ GNode_Impl * myNode = new GNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::GNode_var iobject ;
+ iobject = SUPERV::GNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::GNode::_duplicate( iobject ) ) ;
+ RetVal->GNodes[index] = SUPERV::GNode::_duplicate( iobject ) ;
+ }
+ else if ( aNode->IsLoopNode() ) {
+ LNode_Impl * myNode = new LNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::LNode_var iobject ;
+ iobject = SUPERV::LNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::LNode::_duplicate( iobject ) ) ;
+ RetVal->LNodes[index] = SUPERV::LNode::_duplicate( iobject ) ;
+ }
+ else if ( aNode->IsEndLoopNode() ) {
+ ELNode_Impl * myNode = new ELNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::ELNode_var iobject ;
+ iobject = SUPERV::ELNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::ELNode::_duplicate( iobject ) ) ;
+ RetVal->ELNodes[index] = SUPERV::ELNode::_duplicate( iobject ) ;
+ }
+ else if ( aNode->IsSwitchNode() ) {
+ SNode_Impl * myNode = new SNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::SNode_var iobject ;
+ iobject = SUPERV::SNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::SNode::_duplicate( iobject ) ) ;
+ RetVal->SNodes[index] = SUPERV::SNode::_duplicate( iobject ) ;
+ }
+ else if ( aNode->IsEndSwitchNode() ) {
+ ESNode_Impl * myNode = new ESNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ (GraphEditor::InNode * ) aNode->GetInNode() ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::ESNode_var iobject ;
+ iobject = SUPERV::ESNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::ESNode::_duplicate( iobject ) ) ;
+ RetVal->ESNodes[index] = SUPERV::ESNode::_duplicate( iobject ) ;
+ }
+ }
+ else if ( aNode->IsComputingNode() ) {
+ RetVal->CNodes[index] = SUPERV::CNode::_duplicate( aNode->ObjRef() ) ;
+ }
+ else if ( aNode->IsFactoryNode() ) {
+ RetVal->FNodes[index] = SUPERV::FNode::_duplicate( SUPERV::FNode::_narrow( aNode->ObjRef() ) ) ;
+ }
+ else if ( aNode->IsInLineNode() ) {
+ RetVal->INodes[index] = SUPERV::INode::_duplicate( SUPERV::INode::_narrow( aNode->ObjRef() ) ) ;
+ }
+ else if ( aNode->IsGOTONode() ) {
+ RetVal->GNodes[index] = SUPERV::GNode::_duplicate( SUPERV::GNode::_narrow( aNode->ObjRef() ) ) ;
+ }
+ else if ( aNode->IsLoopNode() ) {
+ RetVal->LNodes[index] = SUPERV::LNode::_duplicate( SUPERV::LNode::_narrow( aNode->ObjRef() ) ) ;
+ }
+ else if ( aNode->IsEndLoopNode() ) {
+ RetVal->ELNodes[index] = SUPERV::ELNode::_duplicate( SUPERV::ELNode::_narrow( aNode->ObjRef() ) ) ;
+ }
+ else if ( aNode->IsSwitchNode() ) {
+ RetVal->SNodes[index] = SUPERV::SNode::_duplicate( SUPERV::SNode::_narrow( aNode->ObjRef() ) ) ;
+ }
+ else if ( aNode->IsEndSwitchNode() ) {
+ RetVal->ESNodes[index] = SUPERV::ESNode::_duplicate( SUPERV::ESNode::_narrow( aNode->ObjRef() ) ) ;
+ }
+ return ( RetVal._retn() ) ;
+}
+
+SUPERV::ListOfNodes * Graph_Impl::Nodes() {
+ SUPERV::ListOfNodes_var RetVal = new SUPERV::ListOfNodes;
+ beginService( "Graph_Impl::Nodes" );
+ RetVal->CNodes.length(0) ;
+ RetVal->FNodes.length(0) ;
+ RetVal->INodes.length(0) ;
+ RetVal->LNodes.length(0) ;
+ RetVal->SNodes.length(0) ;
+ RetVal->GNodes.length(0) ;
+ int i ;
+ for ( i = 0 ; i < DataFlowEditor()->GraphNodesSize() ; i++ ) {
+ GraphBase::ComputingNode * aNode = DataFlowEditor()->GraphNodes( i ) ;
+ RetVal = SetNode( RetVal , aNode ) ;
+ }
+ MESSAGE("Graph_Impl::Nodes CNodes " << RetVal->CNodes.length()
+ << " FNodes " << RetVal->FNodes.length()
+ << " INodes " << RetVal->INodes.length()
+ << " GNodes " << RetVal->GNodes.length()
+ << " LNodes " << RetVal->LNodes.length()
+ << " ELNodes " << RetVal->ELNodes.length()
+ << " SNodes " << RetVal->SNodes.length()
+ << " ESNodes " << RetVal->ESNodes.length() ) ;
+ endService( "Graph_Impl::Nodes" );
+ return ( RetVal._retn() ) ;
+}
+
+SUPERV::ListOfLinks * Graph_Impl::GLinks() {
+ return Links( NULL , NULL ) ;
+}
+
+SUPERV::ListOfLinks * Graph_Impl::Links( GraphBase::ComputingNode * theNode ,
+ const char * anInputParam ) {
+ bool begin = true ;
+ SUPERV::ListOfLinks_var RetVal = new SUPERV::ListOfLinks ;
+ int i , j , countlink ;
+ countlink = 0 ;
+ for ( i = 0 ; i < DataFlowEditor()->GraphNodesSize() ; i++ ) {
+ GraphEditor::InNode * aNode = NULL ;
+ aNode = (GraphEditor::InNode * ) DataFlowEditor()->GraphNodes( i )->GetInNode() ;
+ bool ToProcess = false ;
+ if ( theNode == NULL ) {
+ ToProcess = true ;
+ }
+ else {
+ if ( !strcmp( theNode->Name() , aNode->Name() ) ) {
+ if ( !theNode->IsEndSwitchNode() ) {
+ ToProcess = true ;
+ }
+ }
+ else if ( theNode->IsEndSwitchNode() ) {
+ ToProcess = true ;
+ }
+ }
+ if ( ToProcess ) {
+ for ( j = 0 ; j < aNode->GetNodeInPortsSize() ; j++ ) {
+ GraphBase::InPort * anInPort = NULL ;
+ anInPort = aNode->GetChangeNodeInPort( j ) ;
+ if ( anInputParam == NULL ||
+ !strcmp( anInPort->PortName() , anInputParam ) ) {
+ if ( anInPort->GetOutPort() ) {
+ GraphBase::OutPort * anOutPort = NULL ;
+ anOutPort = anInPort->GetOutPort() ;
+ if ( strcmp( anOutPort->NodeName() , Name() ) ) {
+ MESSAGE("Graph_Impl::Links " << anOutPort->NodeName() << "("
+ << anOutPort->PortName() << ") --> " << aNode->Name() << "("
+ << anInPort->PortName() << ")" ) ;
+ if ( theNode == NULL ||
+ ( theNode != NULL && theNode->IsEndSwitchNode() &&
+ !strcmp( theNode->Name() , aNode->Name() ) ) ) {
+ if ( CORBA::is_nil( anOutPort->InPortObjRef( anInPort ) ) ) {
+ if ( begin ) {
+ beginService( "Graph_Impl::ListOfLinks" );
+ begin = false ;
+ }
+ GraphEditor::InNode * anOutNode = NULL ;
+ anOutNode = (GraphEditor::InNode * ) DataFlowEditor()->GetChangeGraphNode( anOutPort->NodeName() )->GetInNode() ;
+ if ( anOutNode ) {
+ Link_Impl * myLink = new Link_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ aNode ,
+ anInPort->PortName() ,
+ anOutNode ,
+ anOutPort->PortName() ,
+ false ) ;
+ PortableServer::ObjectId * id = myLink->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Link_var iobject ;
+ iobject = SUPERV::Link::_narrow(obj) ;
+ RetVal->length( countlink + 1 ) ;
+ RetVal[ countlink++ ] = SUPERV::Link::_duplicate( iobject ) ;
+ anOutPort->AddInPortObjRef( anInPort , SUPERV::Link::_duplicate( iobject ) ) ;
+ }
+ }
+ else {
+ RetVal->length( countlink + 1 ) ;
+ RetVal[ countlink++ ] = SUPERV::Link::_duplicate( anOutPort->InPortObjRef( anInPort ) ) ;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ for ( j = 0 ; j < aNode->GetNodeOutPortsSize() ; j++ ) {
+ GraphBase::OutPort * anOutPort = aNode->GetChangeNodeOutPort( j ) ;
+ int k ;
+ for ( k = 0 ; k < anOutPort->InPortsSize() ; k++ ) {
+ GraphBase::InPort * anInPort = anOutPort->ChangeInPorts( k ) ;
+ GraphEditor::InNode * toNode = (GraphEditor::InNode * ) DataFlowEditor()->GetChangeGraphNode( anInPort->NodeName() )->GetInNode() ;
+ if ( theNode == NULL ||
+ !strcmp( theNode->Name() , toNode->Name() ) ||
+ !strcmp( theNode->Name() , aNode->Name() ) ) {
+ if ( theNode || ( toNode->IsEndSwitchNode() && !aNode->IsSwitchNode() ) ) {
+ if ( anInputParam == NULL ||
+ !strcmp( anInPort->PortName() , anInputParam ) ) {
+ if ( CORBA::is_nil( anOutPort->InPortObjRef( anInPort ) ) ) {
+ if ( begin ) {
+ beginService( "Graph_Impl::ListOfLinks" );
+ begin = false ;
+ }
+ Link_Impl * myLink = new Link_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ toNode ,
+ anInPort->PortName() ,
+ aNode ,
+ anOutPort->PortName() ,
+ false ) ;
+ PortableServer::ObjectId * id = myLink->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Link_var iobject ;
+ iobject = SUPERV::Link::_narrow(obj) ;
+ RetVal->length( countlink + 1 ) ;
+ RetVal[ countlink++ ] = SUPERV::Link::_duplicate( iobject ) ;
+ anOutPort->AddInPortObjRef( anInPort , SUPERV::Link::_duplicate( iobject ) ) ;
+ }
+ else {
+ RetVal->length( countlink + 1 ) ;
+ RetVal[ countlink++ ] = SUPERV::Link::_duplicate( anOutPort->InPortObjRef( anInPort ) ) ;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if ( !begin ) {
+ endService( "Graph_Impl::ListOfLinks" );
+ }
+ return ( RetVal._retn() ) ;
+}
+
+SUPERV::ListOfGraphs * Graph_Impl::Graphs() {
+// beginService( "Graph_Impl::ListOfGraphs" );
+ SUPERV::ListOfGraphs_var RetVal = new SUPERV::ListOfGraphs ;
+ MESSAGE( "Graph_Impl::Graphs not yet implemented" );
+// endService( "Graph_Impl::ListOfGraphs" );
+ return ( RetVal._retn() ) ;
+}
+
+Engines::Component_ptr Graph_Impl::ComponentRef( const char * aComputerContainer ,
+ const char * aComponentName ) {
+ Engines::Container_var myContainer ;
+ Engines::Component_var objComponent ;
+ DataFlowEditor()->StartComponent( 0 , aComputerContainer , aComponentName ,
+ myContainer , objComponent ) ;
+ return Engines::Component::_duplicate( objComponent ) ;
+}
+
+bool Graph_Impl::IsValid() {
+// beginService( "Graph_Impl::IsValid" );
+ bool RetVal = DataFlowEditor()->IsValid() ;
+// endService( "Graph_Impl::IsValid" );
+ return RetVal ;
+}
+bool Graph_Impl::IsExecutable() {
+// beginService( "Graph_Impl::IsExecutable" );
+ bool RetVal = DataFlowEditor()->IsExecutable() ;
+// endService( "Graph_Impl::IsExecutable" );
+ return RetVal ;
+}
+bool Graph_Impl::IsDataFlow() {
+// beginService( "Graph_Impl::IsDataFlow" );
+ bool RetVal = false ; // = DataFlowEditor()->IsDataFlow() ;
+// endService( "Graph_Impl::IsDataFlow" );
+ return RetVal ;
+}
+
+bool Graph_Impl::IsEditing() {
+// beginService( "Graph_Impl::IsEditing" );
+ bool RetVal = DataFlowEditor()->IsEditing() ;
+// endService( "Graph_Impl::IsEditing" );
+ return RetVal ;
+}
+bool Graph_Impl::IsExecuting() {
+// beginService( "Graph_Impl::IsExecuting" );
+ bool RetVal = !DataFlowEditor()->IsEditing() ;
+// endService( "Graph_Impl::IsExecuting" );
+ return RetVal ;
+}
+
+bool Graph_Impl::IsReadOnly() {
+// beginService( "Graph_Impl::IsExecuting" );
+ bool RetVal = DataFlowEditor()->IsReadOnly() ;
+// endService( "Graph_Impl::IsExecuting" );
+ return RetVal ;
+}
+
+long Graph_Impl::LevelMax() {
+// beginService( "Graph_Impl::LevelMax" );
+ long RetVal = DataFlowEditor()->LevelMax() ;
+// endService( "Graph_Impl::LevelMax" );
+ return RetVal ;
+}
+SUPERV::ListOfNodes * Graph_Impl::LevelNodes(long aLevel ) {
+// beginService( "Graph_Impl::LevelNodes" );
+ SUPERV::ListOfNodes_var RetVal = new SUPERV::ListOfNodes;
+ int i ;
+ SUPERV::ListOfStrings_var Nodes = DataFlowEditor()->LevelNodes( aLevel ) ;
+// RetVal->length( Nodes->length() );
+ for ( i = 0 ; i < Nodes->length() ; i++ ) {
+// char * aNode = Nodes[ i ] ;
+ GraphBase::ComputingNode * aNode = DataFlowEditor()->GetChangeGraphNode( Nodes[ i ] ) ;
+ RetVal = SetNode( RetVal , aNode ) ;
+// cout << "Graph_Impl::LevelNodes( " << aLevel << " ) " << aNode->Name() << endl ;
+// CNode_Impl * myNode = new CNode_Impl( _Orb , _Poa , _ContId ,
+// instanceName() , interfaceName() ,
+// DataFlowEditor() ,
+// (GraphEditor::InNode * ) DataFlowEditor()->GetChangeGraphNode( aNode )->GetInNode() ) ;
+// PortableServer::ObjectId * id = myNode->getId() ;
+// CORBA::Object_var obj = _poa->id_to_reference(*id);
+// SUPERV::CNode_var iobject ;
+// iobject = SUPERV::CNode::_narrow(obj) ;
+// RetVal[i] = SUPERV::CNode::_duplicate( iobject ) ;
+ }
+// endService( "Graph_Impl::LevelNodes" );
+ return ( RetVal._retn() ) ;
+}
+long Graph_Impl::ThreadsMax() {
+// beginService( "Graph_Impl::ThreadsMax" );
+ long RetVal = DataFlowEditor()->ThreadsMax() ;
+// endService( "Graph_Impl::ThreadsMax" );
+ return RetVal ;
+}
+long Graph_Impl::GraphsNumber() {
+// beginService( "Graph_Impl::GraphsNumber" );
+ long RetVal = DataFlowEditor()->GraphsNumber() ;
+// endService( "Graph_Impl::GraphsNumber" );
+ return RetVal ;
+}
+long Graph_Impl::Threads() {
+// beginService( "Node_Impl::Threads" );
+ long RetVal = _DataFlowExecutor->Threads() ;
+// endService( "Node_Impl::Threads" );
+ return RetVal ;
+}
+long Graph_Impl::SuspendedThreads() {
+// beginService( "Node_Impl::SuspendedThreads" );
+ long RetVal = _DataFlowExecutor->SuspendedThreads() ;
+// endService( "Node_Impl::SuspendedThreads" );
+ return RetVal ;
+}
+
+bool Graph_Impl::Begin() {
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( _DataFlowExecutor ) {
+ MESSAGE( "Graph_Impl::Begin " << _DataFlowExecutor->Threads() << " threads" )
+ if ( _DataFlowExecutor->Threads() ) {
+ _DataFlowExecutor->JoinedWait() ;
+ }
+ delete _DataFlowExecutor ;
+ _DataFlowExecutor = NULL ;
+ DataFlowEditor()->Executor( NULL ) ;
+ }
+ _ExecNumber += 1 ;
+ char ExecNumber[30] ;
+ sprintf( ExecNumber , "_%d" , _ExecNumber ) ;
+ int len = strlen( _DebugFileName ) ;
+ char * DebugFileName = new char [ len + strlen( ExecNumber ) + 6 ] ;
+ strncpy( DebugFileName , _DebugFileName , len - 4 ) ;
+ DebugFileName[ len - 4 ] = '\0' ;
+ strcat( DebugFileName , ExecNumber ) ;
+ strcat( DebugFileName , "_Exec.log" ) ;
+ GraphBase::SGraph * myGraph = DataFlowEditor()->GetDataFlow() ;
+ _DataFlowExecutor = new GraphExecutor::DataFlow( _Orb , _NamingService ,
+ myGraph->Info.theName.c_str() ,
+ DebugFileName ) ;
+ MESSAGE( "Graph_Impl::Begin : DataFlowExecutor created" );
+ RetVal = _DataFlowExecutor->LoadDataFlow( *myGraph ) ;
+ if ( RetVal ) {
+ DataFlowEditor()->Executor( _DataFlowExecutor ) ;
+ }
+ }
+ return RetVal ;
+}
+bool Graph_Impl::Run() {
+ beginService( "Graph_Impl::Run" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = Begin() ;
+ }
+ else {
+ RetVal = true ;
+ }
+ if ( RetVal ) {
+ MESSAGE( "Graph_Impl::(Re)Run " );
+ RetVal = ReRun() ;
+ }
+ endService( "Graph_Impl::Run" );
+ return RetVal ;
+}
+bool Graph_Impl::Start() {
+ beginService( "Graph_Impl::Start" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = Begin() ;
+ }
+ else {
+ RetVal = true ;
+ }
+ if ( RetVal ) {
+ MESSAGE( "Graph_Impl::(Re)Start " );
+ RetVal = ReStart() ;
+ }
+ endService( "Graph_Impl::Start" );
+ return RetVal ;
+}
+
+bool Graph_Impl::EventNoW( SUPERV::CNode_out aNode ,
+ SUPERV::GraphEvent & anEvent ,
+ SUPERV::GraphState & aState ) {
+ bool RetVal = false ;
+ char * aNodeName = NULL ;
+ SUPERV::GraphEvent theEvent = SUPERV::UndefinedEvent ;
+ SUPERV::GraphState theState = SUPERV::UndefinedState ;
+ if ( !DataFlowEditor()->IsEditing() ) {
+ RetVal = _DataFlowExecutor->Event( & aNodeName , theEvent , theState , false ) ;
+// endService( "Graph_Impl::Event" );
+ if ( strlen( aNodeName ) ) {
+ if ( strcmp( aNodeName , Name() ) ) {
+ aNode = GetNode( aNodeName ) ;
+ }
+ else {
+ aNode = GetNode() ;
+ }
+ }
+ else {
+ aNode = SUPERV::Graph::_duplicate( NULL ) ;
+ }
+ }
+ anEvent = theEvent ;
+ aState = theState ;
+ return RetVal ;
+}
+
+bool Graph_Impl::Event( SUPERV::CNode_out aNode ,
+ SUPERV::GraphEvent & anEvent ,
+ SUPERV::GraphState & aState ) {
+// beginService( "Graph_Impl::Event" );
+ bool RetVal = false ;
+ char * aNodeName = NULL ;
+ SUPERV::GraphEvent theEvent = SUPERV::UndefinedEvent ;
+ SUPERV::GraphState theState = SUPERV::UndefinedState ;
+ if ( !DataFlowEditor()->IsEditing() ) {
+ RetVal = _DataFlowExecutor->Event( & aNodeName , theEvent , theState ) ;
+// endService( "Graph_Impl::Event" );
+ if ( strlen( aNodeName ) ) {
+ if ( strcmp( aNodeName , Name() ) ) {
+ aNode = GetNode( aNodeName ) ;
+ }
+ else {
+ aNode = GetNode() ;
+ }
+ }
+ else {
+ aNode = SUPERV::Graph::_duplicate( SUPERV::Graph::_nil() ) ;
+ }
+ }
+ anEvent = theEvent ;
+ aState = theState ;
+ return RetVal ;
+}
+
+bool Graph_Impl::EventW( SUPERV::CNode_out aNode ,
+ SUPERV::GraphEvent & anEvent ,
+ SUPERV::GraphState & aState ) {
+// beginService( "Graph_Impl::EventW" );
+ bool RetVal = false ;
+ char * aNodeName = NULL ;
+ SUPERV::GraphEvent theEvent = SUPERV::UndefinedEvent ;
+ SUPERV::GraphState theState = SUPERV::UndefinedState ;
+ if ( !DataFlowEditor()->IsEditing() ) {
+ RetVal = _DataFlowExecutor->EventW( & aNodeName , theEvent , theState ) ;
+ if ( RetVal && strcmp( aNodeName , Name() ) ) {
+ aNode = GetNode( aNodeName ) ;
+ }
+ else {
+ aNode = GetNode() ;
+ }
+ }
+ anEvent = theEvent ;
+ aState = theState ;
+// endService( "Graph_Impl::EventW" );
+ return RetVal ;
+}
+
+long Graph_Impl::LastLevelDone() {
+// beginService( "Graph_Impl::LastLevelDone" );
+ long RetVal = _DataFlowExecutor->LastLevelDone() ;
+// endService( "Graph_Impl::LastLevelDone" );
+ return RetVal ;
+}
+
+bool Graph_Impl::Merge(const SUPERV::Graph_ptr aGraph ) {
+// beginService( "Graph_Impl::Merge" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ SUPERV::ListOfNodes * aGraphNodes = aGraph->Nodes() ;
+ SUPERV::ListOfLinks * aGraphLinks = aGraph->Links() ;
+ SUPERV::ListOfPorts * aGraphPorts = aGraph->Ports() ;
+
+ int i ;
+ map< string , int > aMapOfNodes ;
+ for ( i = 0 ; i < aGraphNodes->CNodes.length() ; i++ ) {
+ SUPERV::CNode_var aNode = (aGraphNodes->CNodes)[ i ] ;
+ GraphEditor::InNode * myNode ;
+ GraphBase::ListOfFuncName aFuncName = GraphBase::ListOfFuncName() ;
+ GraphBase::ListOfPythonFunctions aPythonFunction = GraphBase::ListOfPythonFunctions() ;
+ myNode = DataFlowEditor()->AddNode( *(aNode->Service()) ,
+ "" ,
+ "" ,
+ NULL ,
+ SUPERV::ComputingNode ,
+ aFuncName ,
+ aPythonFunction ,
+ aNode->CreationDate() ,
+ aNode->LastUpdateDate() ,
+ aNode->Version() ,
+ aNode->Author() ,
+ "" ,
+ aNode->Comment() ,
+ aNode->X() ,
+ aNode->Y() ) ;
+ if ( myNode ) {
+ string * aNodetheName = new string( aNode->Name() ) ;
+ aMapOfNodes[ *aNodetheName ] = DataFlowEditor()->GetGraphNodeIndex( myNode->Name() ) ;
+ delete aNodetheName ;
+ RetVal = true ;
+ }
+ else {
+ RetVal = false ;
+ break ;
+ }
+ }
+ for ( i = 0 ; i < aGraphNodes->FNodes.length() ; i++ ) {
+ SUPERV::FNode_var aNode = (aGraphNodes->FNodes)[ i ] ;
+ GraphEditor::InNode * myNode ;
+ GraphBase::ListOfFuncName aFuncName = GraphBase::ListOfFuncName() ;
+ GraphBase::ListOfPythonFunctions aPythonFunction = GraphBase::ListOfPythonFunctions() ;
+ myNode = DataFlowEditor()->AddNode( *(aNode->Service()) ,
+ aNode->GetComponentName() ,
+ aNode->GetInterfaceName() ,
+ NULL ,
+ SUPERV::ComputingNode ,
+ aFuncName ,
+ aPythonFunction ,
+ aNode->CreationDate() ,
+ aNode->LastUpdateDate() ,
+ aNode->Version() ,
+ aNode->Author() ,
+ aNode->GetContainer() ,
+ aNode->Comment() ,
+ aNode->X() ,
+ aNode->Y() ) ;
+ if ( myNode ) {
+ string * aNodetheName = new string( aNode->Name() ) ;
+ aMapOfNodes[ *aNodetheName ] = DataFlowEditor()->GetGraphNodeIndex( myNode->Name() ) ;
+ delete aNodetheName ;
+ RetVal = true ;
+ }
+ else {
+ RetVal = false ;
+ break ;
+ }
+ }
+ if ( RetVal ) {
+ for ( i = 0 ; i < aGraphLinks->length() ; i++ ) {
+ SUPERV::Link_var aLink = (*aGraphLinks)[ i ] ;
+ SUPERV::Port_var OutPort = aLink->OutPort() ;
+ SUPERV::Port_var InPort = aLink->InPort() ;
+ string * aLinkFromNodeName = new string( OutPort->Node()->Name() ) ;
+ string * aLinkToNodeName = new string( InPort->Node()->Name() ) ;
+ RetVal = DataFlowEditor()->AddLink( DataFlowEditor()->GetGraphNode( aMapOfNodes[ aLinkFromNodeName->c_str() ] )->Name() ,
+ OutPort->Name() ,
+ DataFlowEditor()->GetGraphNode( aMapOfNodes[ aLinkToNodeName->c_str() ] )->Name() ,
+ InPort->Name() ) ;
+ delete aLinkFromNodeName ;
+ delete aLinkToNodeName ;
+ if ( !RetVal )
+ break ;
+ int j ;
+ for ( j = 1 ; j <= aLink->CoordsSize() ; j++ ) {
+ long X , Y ;
+ RetVal = aLink->Coords( j , X , Y ) ;
+ if ( !RetVal )
+ break ;
+ RetVal = DataFlowEditor()->AddLinkCoord( DataFlowEditor()->GetGraphNode( aMapOfNodes[ aLinkFromNodeName->c_str() ] )->Name() ,
+ OutPort->Name() ,
+ DataFlowEditor()->GetGraphNode( aMapOfNodes[ aLinkToNodeName->c_str() ] )->Name() ,
+ InPort->Name() ,
+ j , X , Y ) ;
+ if ( !RetVal )
+ break ;
+ }
+ }
+ if ( RetVal ) {
+ for ( i = 0 ; i < aGraphPorts->length() ; i++ ) {
+ SUPERV::Port_var aPort = (*aGraphPorts)[ i ] ;
+ if ( aPort->HasInput() ) {
+ char * aNode = new char[ strlen( aPort->Name() + 1 ) ] ;
+ strcpy( aNode , aPort->Name() ) ;
+ char * thePort = strchr( aNode , '\\' ) ;
+ thePort[ 0 ] = '\0' ;
+ RetVal = DataFlowEditor()->AddInputData( DataFlowEditor()->GetGraphNode( aMapOfNodes[ aNode ] )->Name() ,
+ thePort + 1 ,
+ *(aPort->ToAny()) ) ;
+ delete aNode ;
+ if ( !RetVal )
+ break ;
+ }
+ }
+ }
+ }
+ }
+// endService( "Graph_Impl::Merge" );
+ return RetVal ;
+}
+
--- /dev/null
+//=============================================================================
+// File : Graph_Impl.hxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2001
+// $Header:
+//=============================================================================
+
+#ifndef _GRAPH_IMPL_HXX_
+#define _GRAPH_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "Link_Impl.hxx"
+#include "FNode_Impl.hxx"
+#include "GNode_Impl.hxx"
+#include "LNode_Impl.hxx"
+#include "ELNode_Impl.hxx"
+#include "SNode_Impl.hxx"
+#include "ESNode_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class Graph_Impl :public INode_Impl ,
+ public POA_SUPERV::Graph {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ SALOME_NamingService * _NamingService ;
+ char * _DebugFileName ;
+
+ GraphExecutor::DataFlow * _DataFlowExecutor ;
+
+ int _ExecNumber ;
+ SUPERV::Graph_var myServant; // mpv 23.12.2002: store servant of graph to get constant IOR
+
+ public:
+ Graph_Impl();
+ Graph_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ const char *aDataFlowName ) ;
+ virtual SUPERV::Graph_ptr Copy() ;
+
+ virtual ~Graph_Impl() ;
+ virtual void destroy() ;
+
+ virtual char* getIOR();
+
+ virtual void ReadOnly() ;
+
+ virtual SUPERV::INode_ptr GetNode() ;
+
+// virtual char * DataFlowInfo() ;
+// virtual char * DataNodeInfo() ;
+// virtual char * NodeInfo( const char * aNodeName ) ;
+
+ virtual GraphBase::SGraph * GetGraph() ;
+
+ virtual bool LoadGraph(const GraphBase::SGraph *aGraph ) ;
+ virtual bool Import(const char * aXmlFile ) ;
+
+ virtual bool Export(const char * aXmlFile ) ;
+
+#if 0
+ virtual GraphBase::ListOfNodes * GetNodes() ;
+ virtual GraphBase::ListOfLinks * GetLinks() ;
+ virtual GraphBase::ListOfLinks * GetDatas() ;
+#endif
+
+ virtual SUPERV::CNode_ptr CNode(
+ const SALOME_ModuleCatalog::Service &NodeService ) ;
+ virtual SUPERV::FNode_ptr FNode(
+ const char * NodeComponentName ,
+ const char * InterfaceName ,
+ const SALOME_ModuleCatalog::Service &NodeService ) ;
+ virtual SUPERV::INode_ptr INode(
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ) ;
+ virtual SUPERV::GNode_ptr GNode(
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const char * anInLineNode ) ;
+ virtual SUPERV::LNode_ptr LNode(
+ const char * InitName ,
+ const SUPERV::ListOfStrings & InitFunction ,
+ const char * MoreName ,
+ const SUPERV::ListOfStrings & MoreFunction ,
+ const char * NextName ,
+ const SUPERV::ListOfStrings & NextFunction ,
+ SUPERV::INode_out anEndOfLoop ) ;
+ virtual SUPERV::SNode_ptr SNode(
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ SUPERV::INode_out anEndOfSwitch ) ;
+
+ virtual SUPERV::CNode_ptr GetNode( const char * NodeName );
+
+ virtual SUPERV::Link_ptr Link( SUPERV::Port_ptr OutPort ,
+ SUPERV::Port_ptr InPort ) ;
+
+ virtual SUPERV::ListOfNodes_var Graph_Impl::SetNode( SUPERV::ListOfNodes_var RetVal ,
+ GraphBase::ComputingNode * aNode ) ;
+ virtual SUPERV::ListOfNodes * Nodes() ;
+ virtual SUPERV::ListOfLinks * GLinks() ;
+ virtual SUPERV::ListOfLinks * Links( GraphBase::ComputingNode * aNode ,
+ const char * anInputParam ) ;
+ virtual SUPERV::ListOfGraphs * Graphs() ;
+
+ virtual Engines::Component_ptr ComponentRef( const char * aComputerContainer ,
+ const char * aComponentName ) ;
+
+ virtual bool IsValid() ;
+ virtual bool IsExecutable() ;
+ virtual bool IsDataFlow() ;
+
+ virtual bool IsEditing() ;
+ virtual bool IsExecuting() ;
+
+ virtual bool IsReadOnly() ;
+
+ virtual long LevelMax() ;
+ virtual SUPERV::ListOfNodes * LevelNodes(long aLevel ) ;
+ virtual long ThreadsMax() ;
+ virtual long GraphsNumber() ;
+ virtual long Threads() ;
+ virtual long SuspendedThreads() ;
+
+ virtual bool Begin() ;
+ virtual bool Run() ;
+ virtual bool Start() ;
+ virtual long LastLevelDone() ;
+
+ virtual bool EventNoW( SUPERV::CNode_out aNode ,
+ SUPERV::GraphEvent & anEvent ,
+ SUPERV::GraphState & aState ) ;
+ virtual bool Event( SUPERV::CNode_out aNode ,
+ SUPERV::GraphEvent & anEvent ,
+ SUPERV::GraphState & aState ) ;
+ virtual bool EventW( SUPERV::CNode_out aNode ,
+ SUPERV::GraphEvent & anEvent ,
+ SUPERV::GraphState & aState ) ;
+
+ virtual bool Merge(const SUPERV::Graph_ptr aGraph ) ;
+
+};
+
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : INode_Impl.cxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "LNode_Impl.hxx"
+
+INode_Impl::INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ const char *aDataFlowName ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ CNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowName ) {
+// MESSAGE("INode_Impl::INode_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+// _thisObj = this ;
+// _id = _poa->activate_object(_thisObj);
+ MESSAGE( "INode_Impl::INode_Impl " << aDataFlowName );
+ beginService( "INode_Impl::INode_Impl" );
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "INode_Impl::INode_Impl" );
+}
+
+INode_Impl::INode_Impl() {
+}
+
+INode_Impl::INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & aPythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ CNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , SALOME_ModuleCatalog::Service() , FuncName , NodeKindOfNode , FuncName , aPythonFunction ) {
+ beginService( "INode_Impl::INode_Impl" );
+ if ( FuncName ) {
+ cout << "INode_Impl::CNode_Impl " << (void *) FuncName << " " << FuncName
+ << " " << strlen( FuncName ) << endl ;
+ }
+ if ( NodeKindOfNode == SUPERV::InLineNode ) {
+ MESSAGE( "INode_Impl::INode_Impl " << FuncName << " _poa->activate_object" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ MESSAGE("INode_Impl::INode_Impl " << FuncName << " " << strlen( FuncName ) ) ;
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode()->SetPythonFunction( FuncName , aPythonFunction ) ;
+ endService( "INode_Impl::INode_Impl" );
+}
+
+INode_Impl::INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ const GraphBase::ListOfFuncName FuncName ,
+ const GraphBase::ListOfPythonFunctions aPythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ CNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , SALOME_ModuleCatalog::Service() , FuncName[0].c_str() , NodeKindOfNode , FuncName , aPythonFunction ) {
+ beginService( "INode_Impl::INode_Impl" );
+ if ( NodeKindOfNode == SUPERV::InLineNode ) {
+ MESSAGE( "INode_Impl::INode_Impl " << FuncName[0] << " _poa->activate_object" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ MESSAGE("INode_Impl::INode_Impl " << FuncName[0].c_str() << " " << strlen( FuncName[0].c_str() ) ) ;
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode()->SetPythonFunction( FuncName , aPythonFunction ) ;
+ endService( "INode_Impl::INode_Impl" );
+}
+
+INode_Impl::INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphEditor::InNode * aDataFlowNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ CNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , aDataFlowNode ) {
+ MESSAGE( DataFlowNode()->Name() << " " );
+ beginService( "INode_Impl::INode_Impl" );
+ if ( DataFlowNode()->IsInLineNode() ) {
+ MESSAGE( "INode_Impl::INode_Impl " << DataFlowNode()->PyFuncName()
+ << " _poa->activate_object" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "INode_Impl::INode_Impl" );
+}
+
+INode_Impl::~INode_Impl() {
+ beginService( "INode_Impl::~INode_Impl" );
+ endService( "INode_Impl::~INode_Impl" );
+}
+
+void INode_Impl::destroy() {
+ beginService( "INode_Impl::Destroy" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( Delete() ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "INode_Impl::Destroy" );
+}
+
+bool INode_Impl::Delete() {
+// beginService( "INode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = DataFlowEditor()->IsValid() ;
+ }
+// endService( "INode_Impl::Delete" );
+ return RetVal ;
+}
+
+void INode_Impl::SetPyFunction( const char * FuncName ,
+ const SUPERV::ListOfStrings & aPyFunction ) {
+ beginService( "INode_Impl::SetPyFunction" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ DataFlowNode()->SetPythonFunction( FuncName , aPyFunction ) ;
+ }
+ endService( "INode_Impl::SetPyFunction" );
+ return ;
+}
+
+SUPERV::ListOfStrings * INode_Impl::PyFunction() {
+ beginService( "INode_Impl::PyFunction" );
+ SUPERV::ListOfStrings * aPyFunc = NULL ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ aPyFunc = new SUPERV::ListOfStrings( *DataFlowNode()->PythonFunction() ) ;
+ }
+ else {
+ aPyFunc = new SUPERV::ListOfStrings() ;
+ }
+ endService( "INode_Impl::PyFunction" );
+ return aPyFunc ;
+}
+
+char * INode_Impl::PyFuncName() {
+ return CORBA::string_dup( DataFlowNode()->PyFuncName() ) ;
+}
+
+SUPERV::Port_ptr INode_Impl::InPort( const char *aParameterName ,
+ const char *aParameterType ) {
+ SUPERV::Port_ptr Inobject = SUPERV::Port::_nil() ;
+ SUPERV::Port_ptr Outobject = SUPERV::Port::_nil() ;
+ SUPERV::Port_ptr InEndobject = SUPERV::Port::_nil() ;
+ Port_Impl * myInPort = NULL ;
+ bool InPortCreated = false ;
+ GraphBase::InPort * anInPort = DataFlowNode()->GetChangeInPort( aParameterName ) ;
+ if ( anInPort == NULL && DataFlowNode()->IsOneOfInLineNodes() ) {
+ anInPort = DataFlowNode()->AddInPort( aParameterName , aParameterType ) ;
+ InPortCreated = true ;
+ }
+ if ( anInPort ) {
+ Inobject = anInPort->ObjRef() ;
+ if ( CORBA::is_nil( Inobject ) ) {
+ myInPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ DataFlowNode() ,
+ (GraphBase::Port * ) anInPort ,
+ true ) ;
+ if ( myInPort ) {
+ PortableServer::ObjectId * id = myInPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id) ;
+ Inobject = SUPERV::Port::_narrow(obj) ;
+ }
+ }
+ }
+
+ if ( !CORBA::is_nil( Inobject ) && InPortCreated &&
+ ( DataFlowNode()->IsLoopNode() || DataFlowNode()->IsEndLoopNode() ||
+ DataFlowNode()->IsEndSwitchNode() ) ) {
+ Outobject = OutPort( aParameterName , aParameterType ) ;
+ if ( DataFlowNode()->IsLoopNode() ) {
+ LNode_Impl * myLoopNode = (LNode_Impl * ) this ;
+ InEndobject = myLoopNode->Coupled()->InPort( aParameterName , aParameterType ) ;
+ DataFlowEditor()->AddLink( Outobject->Node()->Name() , Outobject->Name() ,
+ InEndobject->Node()->Name() , InEndobject->Name() ) ;
+ }
+ }
+ DataFlowEditor()->UnValid() ;
+ return SUPERV::Port::_duplicate( Inobject ) ;
+}
+
+SUPERV::Port_ptr INode_Impl::OutPort( const char *aParameterName ,
+ const char *aParameterType ) {
+ Port_Impl * myOutPort = NULL ;
+ SUPERV::Port_ptr Outobject = SUPERV::Port::_nil() ;
+ GraphBase::OutPort * anOutPort = DataFlowNode()->GetChangeOutPort( aParameterName ) ;
+ if ( anOutPort == NULL && DataFlowNode()->IsOneOfInLineNodes() ) {
+ anOutPort = DataFlowNode()->AddOutPort( aParameterName , aParameterType ) ;
+ }
+ if ( anOutPort ) {
+ Outobject = anOutPort->ObjRef() ;
+ if ( CORBA::is_nil( Outobject ) ) {
+ const CORBA::Any * anAny = anOutPort->Value() ;
+ myOutPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ DataFlowNode() ,
+ (GraphBase::Port * ) anOutPort ,
+ false ,
+ anAny ) ;
+ if ( myOutPort ) {
+ PortableServer::ObjectId * id = myOutPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id) ;
+ Outobject = SUPERV::Port::_narrow(obj) ;
+ }
+ }
+ }
+ DataFlowEditor()->UnValid() ;
+ return SUPERV::Port::_duplicate( Outobject );
+}
+
+#if 0
+bool INode_Impl::BusPort( const char * InOutParameterName ,
+ const char * InOutParameterType ,
+ SUPERV::Port_out InputPort ,
+ SUPERV::Port_out OutputPort ) {
+ return BusPorts( InOutParameterName , InOutParameterType ,
+ InOutParameterName , InOutParameterType ,
+ InputPort , OutputPort ) ;
+}
+
+bool INode_Impl::BusPorts( const char * InputParameterName ,
+ const char * InputParameterType ,
+ const char * OutputParameterName ,
+ const char * OutputParameterType ,
+ SUPERV::Port_out InputPort ,
+ SUPERV::Port_out OutputPort ) {
+ beginService( "INode_Impl::BusPorts" );
+ bool RetVal = false ;
+ Port_Impl * myInPort = NULL ;
+ Port_Impl * myOutPort = NULL ;
+ SUPERV::Port_var Inobject = SUPERV::Port::_nil() ;
+ SUPERV::Port_var Outobject = SUPERV::Port::_nil() ;
+// if ( DataFlowNode()->GetInPort( InputParameterName ) ||
+// DataFlowNode()->GetOutPort( OutputParameterName ) ) {
+// }
+// else {
+ GraphBase::InPort * anInPort = DataFlowNode()->AddInPort( InputParameterName ,
+ InputParameterType ) ;
+ if ( anInPort ) {
+ myInPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ DataFlowNode() ,
+// InputParameterName ) ;
+ (GraphBase::Port * ) anInPort ,
+ true ) ;
+ GraphBase::OutPort * anOutPort = DataFlowNode()->AddOutPort( OutputParameterName ,
+ OutputParameterType ) ;
+ if ( anOutPort ) {
+ const CORBA::Any * anAny = anOutPort->Value() ;
+ myOutPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ DataFlowEditor() ,
+ DataFlowNode() ,
+// OutputParameterName ,
+ (GraphBase::Port * ) anOutPort ,
+ false ,
+ anAny ) ;
+ DataFlowNode()->InOutPort( anInPort , anOutPort ) ;
+ RetVal = true ;
+ }
+ }
+// }
+ if ( RetVal && myInPort && myOutPort ) {
+ if ( DataFlowNode()->CoupledNode() ) {
+ GraphBase::InPort * anInPort ;
+ anInPort = DataFlowNode()->CoupledNode()->AddInPort( OutputParameterName ,
+ OutputParameterType ) ;
+ GraphBase::OutPort * anOutPort ;
+ anOutPort = DataFlowNode()->CoupledNode()->AddOutPort( InputParameterName ,
+ InputParameterType ) ;
+ DataFlowNode()->CoupledNode()->InOutPort( anInPort , anOutPort ) ;
+ }
+ PortableServer::ObjectId * id = myInPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id) ;
+ Inobject = SUPERV::Port::_narrow(obj) ;
+ InputPort = SUPERV::Port::_duplicate( Inobject ) ;
+ id = myOutPort->getId() ;
+ obj = _poa->id_to_reference(*id);
+ Outobject = SUPERV::Port::_narrow(obj) ;
+ OutputPort = SUPERV::Port::_duplicate( Outobject ) ;
+ }
+ endService( "INode_Impl::BusPorts" );
+ return RetVal ;
+}
+#endif
+
--- /dev/null
+//=============================================================================
+// File : INode_Impl.hxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA
+// $Header:
+//=============================================================================
+
+#ifndef _INODE_IMPL_HXX_
+#define _INODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "CNode_Impl.hxx"
+
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class INode_Impl : public CNode_Impl ,
+ public POA_SUPERV::INode {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ public:
+ INode_Impl();
+ INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ const char *aDataFlowName ) ;
+ INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::InLineNode ) ;
+ INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const GraphBase::ListOfFuncName FuncName ,
+ const GraphBase::ListOfPythonFunctions PythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::InLineNode ) ;
+ INode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~INode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual void SetPyFunction( const char * FuncName ,
+ const SUPERV::ListOfStrings & aPyFunction ) ;
+ virtual SUPERV::ListOfStrings * PyFunction() ;
+ virtual char * PyFuncName() ;
+
+ virtual SUPERV::Port_ptr InPort( const char * aParameterName ,
+ const char * aParameterType ) ;
+ virtual SUPERV::Port_ptr OutPort( const char * aParameterName ,
+ const char * aParameterType ) ;
+
+ virtual GraphBase::InLineNode * BaseNode() {
+ return DataFlowNode()->InLineNode() ; } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : LNode_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "LNode_Impl.hxx"
+
+LNode_Impl::LNode_Impl() {
+}
+
+LNode_Impl::LNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphBase::ListOfFuncName FuncNameList ,
+ GraphBase::ListOfPythonFunctions PythonFunctionList ,
+// const char * InitName ,
+// const SUPERV::ListOfStrings & anInitPythonFunction ,
+// const char * MoreName ,
+// const SUPERV::ListOfStrings & aMorePythonFunction ,
+// const char * NextName ,
+// const SUPERV::ListOfStrings & aNextPythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+// GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , InitName , anInitPythonFunction , NodeKindOfNode ) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , FuncNameList , PythonFunctionList , NodeKindOfNode ) {
+// MESSAGE( NodeName << " " );
+ beginService( "LNode_Impl::LNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode()->SetPyMorePythonFunction( MoreName , aMorePythonFunction ) ;
+// DataFlowNode()->SetPyNextPythonFunction( NextName , aNextPythonFunction ) ;
+ endService( "LNode_Impl::LNode_Impl" );
+}
+
+LNode_Impl::LNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphEditor::InNode * aDataFlowNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , aDataFlowNode ) {
+ MESSAGE( DataFlowNode()->Name() << " " );
+ beginService( "LNode_Impl::LNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "LNode_Impl::LNode_Impl" );
+}
+
+LNode_Impl::~LNode_Impl() {
+ beginService( "LNode_Impl::~LNode_Impl" );
+ endService( "LNode_Impl::~LNode_Impl" );
+}
+
+void LNode_Impl::destroy() {
+ beginService( "LNode_Impl::Destroy" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( Delete() ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "LNode_Impl::Destroy" );
+}
+
+bool LNode_Impl::Delete() {
+// beginService( "LNode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = DataFlowEditor()->IsValid() ;
+ }
+// endService( "LNode_Impl::Delete" );
+ return RetVal ;
+}
+
+void LNode_Impl::SetPyInit( const char * InitName ,
+ const SUPERV::ListOfStrings & aPyInit ) {
+ beginService( "LNode_Impl::SetPyInit" );
+ SetPyFunction( InitName , aPyInit ) ;
+ endService( "LNode_Impl::SetPyInit" );
+ return ;
+}
+
+SUPERV::ListOfStrings * LNode_Impl::PyInit() {
+ SUPERV::ListOfStrings * aPythonFunction ;
+ beginService( "LNode_Impl::PyInit" );
+ aPythonFunction = PyFunction() ;
+ endService( "LNode_Impl::PyInit" );
+ return aPythonFunction ;
+}
+
+char * LNode_Impl::PyInitName() {
+ beginService( "LNode_Impl::PyInitName" );
+ char * RetVal = PyFuncName() ;
+ endService( "LNode_Impl::PyInitName" );
+ return CORBA::string_dup( RetVal ) ;
+}
+
+void LNode_Impl::SetPyMore( const char * MoreName ,
+ const SUPERV::ListOfStrings & aPyMore ) {
+ beginService( "LNode_Impl::SetPyMore" );
+ DataFlowNode()->SetPyMorePythonFunction( MoreName , aPyMore ) ;
+ endService( "LNode_Impl::SetPyMore" );
+ return ;
+}
+
+SUPERV::ListOfStrings * LNode_Impl::PyMore() {
+ SUPERV::ListOfStrings * aPythonFunction ;
+ beginService( "LNode_Impl::PyMore" );
+ aPythonFunction = DataFlowNode()->PyMorePythonFunction() ;
+ endService( "LNode_Impl::PyMore" );
+ return aPythonFunction ;
+}
+
+char * LNode_Impl::PyMoreName() {
+ beginService( "LNode_Impl::PyMoreName" );
+ char * RetVal = DataFlowNode()->PyMoreName() ;
+ endService( "LNode_Impl::PyMoreName" );
+ return CORBA::string_dup( RetVal ) ;
+}
+
+void LNode_Impl::SetPyNext( const char * NextName ,
+ const SUPERV::ListOfStrings & aPyNext ) {
+ beginService( "LNode_Impl::SetPyNext" );
+ DataFlowNode()->SetPyNextPythonFunction( NextName , aPyNext ) ;
+ endService( "LNode_Impl::SetPyNext" );
+ return ;
+}
+
+SUPERV::ListOfStrings * LNode_Impl::PyNext() {
+ SUPERV::ListOfStrings * aPythonFunction ;
+ beginService( "LNode_Impl::PyNext" );
+ aPythonFunction = DataFlowNode()->PyNextPythonFunction() ;
+ endService( "LNode_Impl::PyNext" );
+ return aPythonFunction ;
+}
+
+char * LNode_Impl::PyNextName() {
+ beginService( "LNode_Impl::PyNextName" );
+ char * RetVal = DataFlowNode()->PyNextName() ;
+ endService( "LNode_Impl::PyNextName" );
+ return CORBA::string_dup( RetVal );
+}
+
+
--- /dev/null
+//=============================================================================
+// File : LNode_Impl.hxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA
+// $Header:
+//=============================================================================
+
+#ifndef _LNODE_IMPL_HXX_
+#define _LNODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "GNode_Impl.hxx"
+
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class LNode_Impl : public GNode_Impl ,
+ public POA_SUPERV::LNode {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ public:
+ LNode_Impl();
+ LNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphBase::ListOfFuncName FuncName ,
+ GraphBase::ListOfPythonFunctions PythonFunction ,
+// const char * InitName ,
+// const SUPERV::ListOfStrings & InitFunction ,
+// const char * MoreName ,
+// const SUPERV::ListOfStrings & MoreFunction ,
+// const char * NextName ,
+// const SUPERV::ListOfStrings & NextFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::LoopNode ) ;
+ LNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~LNode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual void SetPyInit( const char * InitName ,
+ const SUPERV::ListOfStrings & aPyMoreFunction ) ;
+ virtual SUPERV::ListOfStrings * PyInit() ;
+ virtual char * PyInitName() ;
+
+ virtual void SetPyMore( const char * MoreName ,
+ const SUPERV::ListOfStrings & aPyMoreFunction ) ;
+ virtual SUPERV::ListOfStrings * PyMore() ;
+ virtual char * PyMoreName() ;
+
+ virtual void SetPyNext( const char * NextName ,
+ const SUPERV::ListOfStrings & aPyNextFunction ) ;
+ virtual SUPERV::ListOfStrings * PyNext() ;
+ virtual char * PyNextName() ;
+
+ virtual GraphBase::LoopNode * BaseNode() {
+ return DataFlowNode()->LoopNode() ; } ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : Link_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "Link_Impl.hxx"
+
+Link_Impl::Link_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ const char *InputParameterName ,
+ GraphEditor::InNode * DataFlowOutNode ,
+ const char *OutputParameterName ,
+ const bool Create ) :
+// const SUPERV::Value_ptr aValue ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+// MESSAGE("Link_Impl::Link_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+ bool linksts ;
+ beginService( "Link_Impl::Link_Impl" );
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _DataFlowEditor = DataFlowEditor ;
+ _DataFlowNode = DataFlowNode ;
+ _DataFlowNodeName = DataFlowNode->Name() ;
+ _InputParameterName = new char[ strlen( InputParameterName ) + 1 ] ;
+ strcpy( _InputParameterName , InputParameterName ) ;
+ _DataFlowOutNode = DataFlowOutNode ;
+ _DataFlowOutNodeName = DataFlowOutNode->Name() ;
+ _OutputParameterName = new char[ strlen( OutputParameterName ) + 1 ] ;
+ strcpy( _OutputParameterName , OutputParameterName ) ;
+ if ( Create ) {
+ linksts = _DataFlowEditor->AddLink( _DataFlowOutNode->Name() ,
+ _OutputParameterName ,
+ _DataFlowNode->Name() ,
+ _InputParameterName ) ;
+ }
+ else {
+ char * DataFlowOutNodeName = NULL ;
+ char * OutParamName = NULL ;
+ linksts = _DataFlowEditor->GetLink( _DataFlowNode->Name() ,
+ _InputParameterName ,
+ &DataFlowOutNodeName ,
+ &OutParamName ) ;
+ }
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ endService( "Link_Impl::Link_Impl" );
+}
+
+Link_Impl::Link_Impl() {
+}
+
+Link_Impl::~Link_Impl() {
+ beginService( "Link_Impl::~Link_Impl" );
+ endService( "Link_Impl::~Link_Impl" );
+}
+
+void Link_Impl::destroy() {
+ beginService( "Link_Impl::destroy" );
+ Delete() ;
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ endService( "Link_Impl::destroy" );
+}
+
+bool Link_Impl::Delete() {
+// beginService( "Link_Impl::Delete" ) ;
+ bool RetVal = _DataFlowEditor->RemoveLink( _DataFlowOutNode->Name() ,
+ _OutputParameterName ,
+ _DataFlowNode->Name() ,
+ _InputParameterName ) ;
+// endService( "Link_Impl::Delete" );
+ return RetVal ;
+}
+
+SUPERV::Port_ptr Link_Impl::InPort() {
+// beginService( "Link_Impl::InPort" );
+ GraphBase::InPort * anInPort = _DataFlowNode->GetChangeInPort( _InputParameterName ) ;
+ Port_Impl * myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+// _InputParameterName ) ;
+ (GraphBase::Port * ) anInPort ,
+ true ) ;
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Port_var iobject ;
+ iobject = SUPERV::Port::_narrow(obj) ;
+// endService( "Link_Impl::InPort" );
+ return SUPERV::Port::_duplicate( iobject ) ;
+}
+
+SUPERV::Port_ptr Link_Impl::OutPort() {
+// beginService( "Link_Impl::OutPort" );
+ GraphBase::OutPort * anOutPort = _DataFlowOutNode->GetChangeOutPort( _OutputParameterName ) ;
+ Port_Impl * myPort = new Port_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowOutNode ,
+// _OutputParameterName ) ;
+ (GraphBase::Port * ) anOutPort ,
+ false ) ;
+ PortableServer::ObjectId * id = myPort->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Port_var iobject ;
+ iobject = SUPERV::Port::_narrow(obj) ;
+// endService( "Link_Impl::OutPort" );
+ return SUPERV::Port::_duplicate( iobject ) ;
+}
+
+GraphBase::SLink * Link_Impl::Info() {
+// beginService( "Link_Impl::Info" );
+ char* FromNodeName ;
+ char* FromServiceParameterName ;
+ GraphBase::SLink * RetVal = _DataFlowEditor->GetLink( _DataFlowNode->ComputingNode() ,
+ _InputParameterName ) ;
+// endService( "Link_Impl::Info" );
+ return RetVal ;
+}
+
+long Link_Impl::CoordsSize() {
+// beginService( "Link_Impl::CoordsSize" ) ;
+ long RetVal = _DataFlowEditor->GetLinkCoordSize( _DataFlowOutNode->Name() ,
+ _OutputParameterName ,
+ _DataFlowNode->Name() ,
+ _InputParameterName ) ;
+// endService( "Link_Impl::CoordsSize" );
+ return RetVal ;
+}
+bool Link_Impl::AddCoord( const long index ,
+ const long X ,
+ const long Y ) {
+// beginService( "Link_Impl::AddCoord" ) ;
+ bool RetVal = _DataFlowEditor->AddLinkCoord( _DataFlowOutNode->Name() ,
+ _OutputParameterName ,
+ _DataFlowNode->Name() ,
+ _InputParameterName,
+ index , X , Y ) ;
+// endService( "Link_Impl::AddCoord" );
+ return RetVal ;
+}
+bool Link_Impl::ChangeCoord( const long index ,
+ const long X ,
+ const long Y ) {
+// beginService( "Link_Impl::ChangeCoord" ) ;
+ bool RetVal = _DataFlowEditor->ChangeLinkCoord( _DataFlowOutNode->Name() ,
+ _OutputParameterName ,
+ _DataFlowNode->Name() ,
+ _InputParameterName,
+ index , X , Y ) ;
+// endService( "Link_Impl::ChangeCoord" );
+ return RetVal ;
+}
+bool Link_Impl::RemoveCoord( const long index ) {
+// beginService( "Link_Impl::RemoveCoord" ) ;
+ bool RetVal = _DataFlowEditor->RemoveLinkCoord( _DataFlowOutNode->Name() ,
+ _OutputParameterName ,
+ _DataFlowNode->Name() ,
+ _InputParameterName,
+ index ) ;
+// endService( "Link_Impl::RemoveCoord" );
+ return RetVal ;
+}
+bool Link_Impl::Coords( const long index , long & X , long & Y ) {
+// beginService( "Link_Impl::Coords" ) ;
+ bool RetVal = _DataFlowEditor->GetLinkCoord( _DataFlowOutNode->Name() ,
+ _OutputParameterName ,
+ _DataFlowNode->Name() ,
+ _InputParameterName,
+ index , X , Y ) ;
+// endService( "Link_Impl::Coords" );
+ return RetVal ;
+}
+
--- /dev/null
+//=============================================================================
+// File : Link_Impl.hxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2001
+// $Header:
+//=============================================================================
+
+#ifndef _LINK_IMPL_HXX_
+#define _LINK_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "Value_Impl.hxx"
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+
+class Link_Impl : public POA_SUPERV::Link ,
+ public Engines_Component_i {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ GraphEditor::DataFlow * _DataFlowEditor ;
+ GraphEditor::InNode * _DataFlowNode ;
+ char * _DataFlowNodeName ;
+ char * _InputParameterName ;
+ GraphEditor::InNode * _DataFlowOutNode ;
+ char * _DataFlowOutNodeName ;
+ char * _OutputParameterName ;
+
+ public:
+ Link_Impl();
+ Link_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ const char *InputParameterName ,
+ GraphEditor::InNode * DataFlowOutNode ,
+ const char *OutputParameterName ,
+ const bool Create ) ;
+
+ virtual ~Link_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ SUPERV::Port_ptr OutPort() ;
+ SUPERV::Port_ptr InPort() ;
+
+ virtual GraphBase::SLink * Info() ;
+
+ virtual long CoordsSize() ;
+ virtual bool AddCoord( const long index ,
+ const long X ,
+ const long Y ) ;
+ virtual bool ChangeCoord( const long index ,
+ const long X ,
+ const long Y ) ;
+ virtual bool RemoveCoord( const long index ) ;
+ virtual bool Coords( const long index , long & X , long & Y ) ;
+
+
+} ;
+
+#endif
--- /dev/null
+#==============================================================================
+# File : Makefile.in
+# Created : aug 21 2001
+# Author : , CEA
+# Project : SALOME
+# Copyright : CEA 2001
+# $Header:
+#==============================================================================
+
+# source path
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
+
+
+@COMMENCE@
+
+EXPORT_PYSCRIPTS = SuperV.py batchmode_SuperV.py
+
+EXPORT_HEADERS = \
+ SuperV_Impl.hxx \
+ Graph_Impl.hxx \
+ CNode_Impl.hxx \
+ FNode_Impl.hxx \
+ INode_Impl.hxx \
+ GNode_Impl.hxx \
+ LNode_Impl.hxx \
+ ELNode_Impl.hxx \
+ SNode_Impl.hxx \
+ ESNode_Impl.hxx \
+ Link_Impl.hxx \
+ Value_Impl.hxx \
+ Port_Impl.hxx
+# Input_Impl.hxx \
+
+# Libraries targets
+LIB = libSUPERVEngine.la
+LIB_SRC = Value_Impl.cxx \
+ Port_Impl.cxx \
+ Link_Impl.cxx \
+ CNode_Impl.cxx \
+ FNode_Impl.cxx \
+ INode_Impl.cxx \
+ GNode_Impl.cxx \
+ LNode_Impl.cxx \
+ ELNode_Impl.cxx \
+ SNode_Impl.cxx \
+ ESNode_Impl.cxx \
+ Graph_Impl.cxx \
+ SuperV_Impl.cxx
+# Input_Impl.cxx \
+
+LIB_CLIENT_IDL = SALOME_ModuleCatalog.idl \
+ SALOME_Component.idl \
+ SALOMEDS.idl \
+ SUPERV.idl \
+ SALOME_Exception.idl
+
+# Executables targets
+#BIN = SuperV_CheckOfUndefined
+BIN_SRC =
+BIN_SERVER_IDL =
+
+CPPFLAGS+= $(PYTHON_INCLUDES) $(QT_MT_INCLUDES) $(VTK_INCLUDES) \
+ $(OGL_INCLUDES) $(OCC_INCLUDES) \
+ -I${KERNEL_ROOT_DIR}/include/salome
+CXXFLAGS= -g -D_DEBUG_ -D__x86__ -D__linux__ -ftemplate-depth-42 \
+ -I${KERNEL_ROOT_DIR}/include/salome
+LDFLAGS+= -lSalomeSuperVisionEditor -lSalomeSuperVisionExecutor -lSalomeSuperVisionBase \
+ -lSalomeContainer -lSalomeNotification -lSalomeDS -lSalomeNS -lSalomeLifeCycleCORBA \
+ -lOpUtil -lRegistry -lSalomeHDFPersist -lSalomeLoggerServer \
+ $(QT_MT_LIBS) $(OGL_LIBS) $(HDF5_LIBS) \
+ -L${KERNEL_ROOT_DIR}/lib/salome
+
+#LDFLAGS+= -lSalomeSuperVisionEditor -lSalomeSuperVisionExecutor -lSalomeSuperVisionBase -lSalomeContainer -lSalomeNotification -lSalomeNS -lSalomeLifeCycleCORBA -lOpUtil -lRegistry -lSalomeHDFPersist -lSalomeLoggerServer $(QT_MT_LIBS) $(OGL_LIBS) $(HDF5_LIBS)
+
+@CONCLUDE@
+
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : Port_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "Graph_Impl.hxx"
+#include "Port_Impl.hxx"
+
+Port_Impl::Port_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+// const char *ParameterName ,
+ GraphBase::Port * DataFlowPort ,
+ bool InputPort ,
+ const CORBA::Any * anAny ) :
+// const SUPERV::Value_ptr aValue ) :
+ Value_Impl(orb, poa, contId, instanceName, interfaceName,
+// DataFlowEditor , DataFlowNode , ParameterName, aValue->ToAny() ,
+ DataFlowEditor , DataFlowNode , DataFlowPort->PortName(), anAny ,
+ false ) {
+// MESSAGE("Value_Impl::Value_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _DataFlowEditor = DataFlowEditor ;
+ _DataFlowNode = DataFlowNode ;
+// _DataFlowPort = _DataFlowNode->GetChangeInPort( ParameterName ) ;
+ _DataFlowPort = DataFlowPort ;
+// _InputPort = true ;
+ _InputPort = InputPort ;
+// if ( _DataFlowPort == NULL ) {
+// _DataFlowPort = _DataFlowNode->GetChangeOutPort( ParameterName ) ;
+// _InputPort = false ;
+// }
+ InPort( _InputPort ) ;
+}
+
+Port_Impl::Port_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+// const char *ParameterName ) :
+ GraphBase::Port * DataFlowPort ,
+ bool InputPort ) :
+ Value_Impl(orb, poa, contId, instanceName, interfaceName,
+ DataFlowEditor , DataFlowNode , DataFlowPort->PortName() , false ) {
+// DataFlowEditor , DataFlowNode , ParameterName , false ) {
+// MESSAGE("Value_Impl::Value_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _DataFlowEditor = DataFlowEditor ;
+ _DataFlowNode = DataFlowNode ;
+// _DataFlowPort = _DataFlowNode->GetChangeInPort( ParameterName ) ;
+ _DataFlowPort = DataFlowPort ;
+// _InputPort = true ;
+ _InputPort = InputPort ;
+// if ( _DataFlowPort == NULL ) {
+// _DataFlowPort = _DataFlowNode->GetChangeOutPort( ParameterName ) ;
+// _InputPort = false ;
+// }
+ InPort( _InputPort ) ;
+}
+
+Port_Impl::Port_Impl() {
+}
+
+Port_Impl::~Port_Impl() {
+ beginService( "Port_Impl::~Port_Impl" );
+ endService( "Port_Impl::~Port_Impl" );
+}
+
+void Port_Impl::destroy() {
+ beginService( "Port_Impl::destroy" );
+ bool destroyed = false ;
+ if ( _DataFlowNode->IsOneOfInLineNodes() ) {
+ if ( _InputPort ) {
+ GraphBase::InPort * anInPort = (GraphBase::InPort * ) _DataFlowPort ;
+ if ( anInPort->GetOutPort() ) {
+ anInPort->GetOutPort()->RemoveInPort( anInPort ) ;
+ }
+ _DataFlowNode->DelInPort( _DataFlowPort->PortName() ) ;
+ if ( _DataFlowNode->IsLoopNode() ) {
+ _DataFlowNode->DelOutPort( _DataFlowPort->PortName() ) ;
+ _DataFlowNode->CoupledNode()->DelInPort( _DataFlowPort->PortName() ) ;
+ _DataFlowNode->CoupledNode()->DelOutPort( _DataFlowPort->PortName() ) ;
+ }
+ destroyed = true ;
+ }
+ else if ( !_DataFlowNode->IsLoopNode() ) {
+ _DataFlowNode->DelOutPort( _DataFlowPort->PortName() ) ;
+ destroyed = true ;
+ }
+ if ( destroyed ) {
+ _DataFlowEditor->UnValid() ;
+// _DataFlowEditor->IsValid() ;
+ }
+ }
+ if ( destroyed ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ endService( "Port_Impl::destroy" );
+}
+
+bool Port_Impl::Input( const SUPERV::Value_ptr aValue ) {
+ return Input( aValue->ToAny() ) ;
+}
+
+bool Port_Impl::Input( const CORBA::Any * anAny ) {
+ beginService( "Port_Impl::Input" );
+ bool RetVal = false ;
+ if ( _InputPort && _DataFlowEditor->IsEditing() ) {
+ RetVal = true ;
+ Value_Impl::Input( anAny ) ;
+ RetVal = _DataFlowEditor->AddInputData( _DataFlowNode->Name() ,
+ _DataFlowPort->PortName() ,
+ *anAny ) ;
+ }
+ else if ( _DataFlowEditor->IsExecuting() ) {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+// if ( _DataFlowExecutor && ( _DataFlowExecutor->IsSuspended() ||
+// _DataFlowExecutor->IsSuspended( _DataFlowNode->Name() ) ) ) {
+ if ( _DataFlowExecutor ) {
+ RetVal = _DataFlowExecutor->ChangeInputData( _DataFlowNode->Name() ,
+ _DataFlowPort->PortName() ,
+ *anAny ) ;
+ }
+ }
+ endService( "Port_Impl::Input" );
+ return RetVal ;
+}
+
+char * Port_Impl::Name() {
+// beginService( "Port_Impl::Name" ) ;
+ const char * RetVal = _DataFlowPort->PortName() ;
+// endService( "Port_Impl::Name" ) ;
+ return CORBA::string_dup( RetVal ) ;
+}
+
+char * Port_Impl::Type() {
+// beginService( "Port_Impl::Type" ) ;
+ const char * RetVal = _DataFlowPort->PortType() ;
+// endService( "Port_Impl::Type" ) ;
+ return CORBA::string_dup( RetVal ) ;
+}
+
+SUPERV::CNode_ptr Port_Impl::Node() {
+ bool begin = true ;
+ SUPERV::CNode_var iobject = SUPERV::CNode::_nil() ;
+ if ( CORBA::is_nil( _DataFlowNode->ObjRef() ) ) {
+ if ( begin ) {
+ beginService( "Port_Impl::Node" ) ;
+ begin = false ;
+ }
+ CNode_Impl * myNode = new CNode_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ) ;
+ PortableServer::ObjectId * id = myNode->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::CNode_var iobject ;
+ iobject = SUPERV::CNode::_narrow(obj) ;
+ myNode->SetObjRef( SUPERV::CNode::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = _DataFlowNode->ObjRef() ;
+ }
+ if ( !begin ) {
+ endService( "Port_Impl::Node" ) ;
+ }
+ return SUPERV::CNode::_duplicate( iobject ) ;
+}
+
+SUPERV::ListOfLinks * Port_Impl::Links() {
+ beginService( "Port_Impl::Links" ) ;
+ SUPERV::ListOfLinks_var RetVal = new SUPERV::ListOfLinks ;
+ RetVal = _DataFlowEditor->ObjImpl()->Links( _DataFlowNode->ComputingNode() ,
+ _DataFlowPort->PortName() ) ;
+ endService( "Port_Impl::Links" ) ;
+ return ( RetVal._retn() ) ;
+}
+
+SUPERV::Link_ptr Port_Impl::Link() {
+ bool begin = true ;
+ SUPERV::Link_var iobject = SUPERV::Link::_nil() ;
+ if ( _DataFlowNode->IsEndSwitchNode() ) {
+ beginService( "Port_Impl::Link" ) ;
+ begin = false ;
+ SUPERV::ListOfLinks_var Links = new SUPERV::ListOfLinks ;
+ cout << "Port_Impl::Link " << _DataFlowNode->Name() << " "
+ << _DataFlowPort->PortName() << endl ;
+ Links = _DataFlowEditor->ObjImpl()->Links(
+ _DataFlowNode->ComputingNode() ,
+ _DataFlowPort->PortName() ) ;
+ if ( Links->length() ) {
+ iobject = Links[ 0 ] ;
+ }
+ }
+ else {
+ char * FromNodeName = NULL ;
+ char * FromServiceParameterName = NULL ;
+ bool status = _DataFlowEditor->GetLink( _DataFlowNode->Name() ,
+ _DataFlowPort->PortName() ,
+ & FromNodeName ,
+ & FromServiceParameterName ) ;
+ if ( status ) {
+// cout << "Port_Impl::Link " << FromNodeName << "("
+// << FromServiceParameterName << ") --> " << _DataFlowNode->Name()
+// << "(" << _DataFlowPort->PortName() << ")" << endl ;
+// SUPERV::Port_ptr theOutPort = Port( FromServiceParameterName ) ;
+
+ GraphBase::InPort * anInPort = _DataFlowNode->GetChangeInPort( _DataFlowPort->PortName() ) ;
+ if ( anInPort->GetOutPort() ) {
+ GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
+ if ( CORBA::is_nil( anOutPort->InPortObjRef( anInPort ) ) ) {
+ if ( begin ) {
+ beginService( "Port_Impl::Link" ) ;
+ begin = false ;
+ }
+ Link_Impl * myLink = new Link_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ _DataFlowEditor ,
+ _DataFlowNode ,
+ _DataFlowPort->PortName() ,
+ (GraphEditor::InNode * ) _DataFlowEditor->GetChangeGraphNode( FromNodeName )->GetInNode() ,
+ FromServiceParameterName ,
+ false ) ;
+ PortableServer::ObjectId * id = myLink->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Link::_narrow(obj) ;
+ anOutPort->AddInPortObjRef( anInPort , SUPERV::Link::_duplicate( iobject ) ) ;
+ }
+ else {
+ iobject = anOutPort->InPortObjRef( anInPort ) ;
+ }
+ }
+ }
+ }
+ if ( !begin ) {
+ endService( "Port_Impl::Link" ) ;
+ }
+ return SUPERV::Link::_duplicate( iobject ) ;
+}
+
+bool Port_Impl::IsInput() {
+// beginService( "Port_Impl::IsInput" ) ;
+ bool RetVal = _InputPort ;
+// endService( "Port_Impl::IsInput" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::IsLinked() {
+// beginService( "Port_Impl::IsLinked" ) ;
+ bool RetVal = true ;
+#if 0
+ if ( _DataFlowNode->IsEndSwitchNode() && _DataFlowPort->IsBus() ) {
+ }
+ else {
+#endif
+ RetVal = _DataFlowNode->IsLinked( _DataFlowPort->PortName() ) ;
+#if 0
+ }
+#endif
+// endService( "Port_Impl::IsLinked" ) ;
+ return RetVal ;
+}
+
+SUPERV::KindOfPort Port_Impl::Kind() {
+// beginService( "Port_Impl::Kind" ) ;
+ SUPERV::KindOfPort RetVal = _DataFlowPort->Kind() ;
+// endService( "Port_Impl::Kind" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::IsParam() {
+// beginService( "Port_Impl::IsParam" ) ;
+ bool RetVal = _DataFlowPort->IsParam() ;
+// endService( "Port_Impl::IsParam" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::IsGate() {
+// beginService( "Port_Impl::IsGate" ) ;
+ bool RetVal = _DataFlowPort->IsGate() ;
+// endService( "Port_Impl::IsGate" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::IsInLine() {
+// beginService( "Port_Impl::IsInLine" ) ;
+// bool RetVal = _DataFlowPort->IsBus() ;
+ bool RetVal = _DataFlowPort->IsInLine() ;
+// endService( "Port_Impl::IsInLine" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::IsLoop() {
+// beginService( "Port_Impl::IsLoop" ) ;
+ bool RetVal = _DataFlowPort->IsLoop() ;
+// endService( "Port_Impl::IsLoop" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::IsSwitch() {
+// beginService( "Port_Impl::IsSwitch" ) ;
+ bool RetVal = _DataFlowPort->IsSwitch() ;
+// endService( "Port_Impl::IsSwitch" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::IsEndSwitch() {
+// beginService( "Port_Impl::IsEndSwitch" ) ;
+ bool RetVal = _DataFlowPort->IsEndSwitch() ;
+// endService( "Port_Impl::IsEndSwitch" ) ;
+ return RetVal ;
+}
+
+bool Port_Impl::HasInput() {
+// beginService( "Port_Impl::" ) ;
+ bool RetVal = _DataFlowNode->HasInput( _DataFlowPort->PortName() ) ;
+// endService( "Port_Impl::" ) ;
+ return RetVal ;
+}
+
+SUPERV::GraphState Port_Impl::State() {
+// beginService( "Port_Impl::State" );
+ SUPERV::GraphState RetVal = SUPERV::EditingState ;
+ if ( _DataFlowEditor ) {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ RetVal = _DataFlowExecutor->State( _DataFlowPort->NodeName() ,
+ _DataFlowPort->PortName() ) ;
+ }
+ }
+// endService( "Port_Impl::State" );
+ return RetVal ;
+}
+
+bool Port_Impl::IsDone() {
+// beginService( "Port_Impl::IsDone" );
+ bool RetVal = false ;
+ if ( _DataFlowEditor ) {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ RetVal = _DataFlowExecutor->IsDone( _DataFlowPort->NodeName() ,
+ _DataFlowPort->PortName() ) ;
+ }
+ }
+// endService( "Port_Impl::IsDone" );
+ return RetVal ;
+}
--- /dev/null
+//=============================================================================
+// File : Port_Impl.hxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2001
+// $Header:
+//=============================================================================
+
+#ifndef _PORT_IMPL_HXX_
+#define _PORT_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "Value_Impl.hxx"
+#include "Link_Impl.hxx"
+#include "FNode_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+
+class Port_Impl : public Value_Impl ,
+ public POA_SUPERV::Port {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ GraphEditor::DataFlow * _DataFlowEditor ;
+ GraphEditor::InNode * _DataFlowNode ;
+ GraphBase::Port * _DataFlowPort ;
+ bool _InputPort ;
+
+ public:
+ Port_Impl();
+ Port_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ GraphBase::Port * DataFlowPort ,
+ bool InputPort ,
+// const char *ParameterName ,
+ const CORBA::Any * anAny ) ;
+ Port_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ GraphBase::Port * DataFlowPort ,
+ bool InputPort ) ;
+// const char *ParameterName ) ;
+ virtual ~Port_Impl() ;
+ virtual void destroy() ;
+
+ virtual bool Input( const SUPERV::Value_ptr aValue ) ;
+ virtual bool Input( const CORBA::Any * anAny ) ;
+
+ virtual char * Name() ;
+ virtual char * Type() ;
+
+ virtual SUPERV::CNode_ptr Node() ;
+
+ virtual SUPERV::Link_ptr Link() ;
+ virtual SUPERV::ListOfLinks * Links() ;
+
+ virtual bool IsInput() ;
+ virtual bool IsLinked() ;
+ virtual bool HasInput() ;
+
+ virtual SUPERV::KindOfPort Kind() ;
+ virtual bool IsParam() ;
+ virtual bool IsGate() ;
+ virtual bool IsInLine() ;
+ virtual bool IsLoop() ;
+ virtual bool IsSwitch() ;
+ virtual bool IsEndSwitch() ;
+
+ virtual SUPERV::GraphState State() ;
+ virtual bool IsDone() ;
+
+} ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : SNode_Impl.cxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "SNode_Impl.hxx"
+
+SNode_Impl::SNode_Impl() {
+}
+
+SNode_Impl::SNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , FuncName , PythonFunction , NodeKindOfNode ) {
+// MESSAGE( NodeName << " " );
+ beginService( "SNode_Impl::SNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+// DataFlowNode( DataFlowEditor()->AddNode( NodeService , NodeComponentName ,
+// NodeInterfaceName , NodeName ,
+// NodeKindOfNode ) ) ;
+// DataFlowNode( DataFlowEditor()->AddNode( SALOME_ModuleCatalog::Service() ,
+// "" , "" , "" ,
+// NodeKindOfNode ) ) ;
+ endService( "SNode_Impl::SNode_Impl" );
+}
+
+SNode_Impl::SNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * aDataFlowEditor ,
+ GraphEditor::InNode * aDataFlowNode ) :
+// Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ GNode_Impl( orb , poa , contId , instanceName , interfaceName , aDataFlowEditor , aDataFlowNode ) {
+ MESSAGE( DataFlowNode()->Name() << " " );
+ beginService( "SNode_Impl::SNode_Impl" );
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ endService( "SNode_Impl::SNode_Impl" );
+}
+
+SNode_Impl::~SNode_Impl() {
+ beginService( "SNode_Impl::~SNode_Impl" );
+ endService( "SNode_Impl::~SNode_Impl" );
+}
+
+void SNode_Impl::destroy() {
+ beginService( "SNode_Impl::Destroy" );
+ if ( DataFlowEditor()->IsEditing() ) {
+ if ( Delete() ) {
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ }
+ }
+ endService( "SNode_Impl::Destroy" );
+}
+
+bool SNode_Impl::Delete() {
+// beginService( "SNode_Impl::Delete" );
+ bool RetVal = false ;
+ if ( DataFlowEditor()->IsEditing() ) {
+ RetVal = DataFlowEditor()->RemoveNode( Name() ) ;
+ if ( RetVal )
+ RetVal = DataFlowEditor()->IsValid() ;
+ }
+// endService( "SNode_Impl::Delete" );
+ return RetVal ;
+}
+
--- /dev/null
+//=============================================================================
+// File : SNode_Impl.hxx
+// Created : 2003
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2003
+// $Header:
+//=============================================================================
+
+#ifndef _SNODE_IMPL_HXX_
+#define _SNODE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "GNode_Impl.hxx"
+#include "Port_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+
+class SNode_Impl : public GNode_Impl ,
+ public POA_SUPERV::SNode {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ public:
+ SNode_Impl();
+ SNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ const char * FuncName ,
+ const SUPERV::ListOfStrings & PythonFunction ,
+ const SUPERV::KindOfNode NodeKindOfNode = SUPERV::SwitchNode ) ;
+ SNode_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ) ;
+ virtual ~SNode_Impl() ;
+ virtual void destroy() ;
+ virtual bool Delete() ;
+
+ virtual GraphBase::SwitchNode * BaseNode() {
+ return DataFlowNode()->SwitchNode() ; } ;
+
+} ;
+
+#endif
--- /dev/null
+#! /usr/bin/env python
+
+try :
+ from salome import orb
+ from salome import lcc
+ from salome import naming_service
+ from salome import CORBA
+ from salome import sg
+except :
+ import curses
+ from LifeCycleCORBA import *
+ from SALOME_NamingServicePy import *
+ import SUPERV
+ import SUPERV_idl
+# try :
+# from libSuperVision_Swig import SuperV_Swig
+# print 'SuperV_Swig imported'
+# except :
+# SuperV_Swig = None
+ orb = CORBA.ORB_init([''], CORBA.ORB_ID)
+ lcc = LifeCycleCORBA(orb)
+ naming_service = SALOME_NamingServicePy_i(orb)
+
+import os
+import re
+from types import *
+
+#try :
+# SuperVision = SuperV_Swig( len(sys.argv) , sys.argv )
+# SuperVision.Swig = 1
+# print 'SuperV_Swig created'
+#except :
+# SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
+# SuperVision.Swig = 0
+# print 'Supervision Component loaded'
+
+SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
+SuperVision.Swig = 0
+
+modulecatalog = naming_service.Resolve("/Kernel/ModulCatalog")
+
+
+
+def PortInputFloat(obj, x):
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_double, x)))
+
+def PortInputLong(obj, x):
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_long, x)))
+
+def PortInputObject(obj, x):
+ try:
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_Object, x)))
+ except:
+ return obj.Input( SuperVision.AnyValue( x ) )
+
+def PortInputString(obj, x):
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_string, x)))
+
+def InputFloat(obj, nodein_port, x):
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_double, x)))
+
+def InputLong(obj, nodein_port, x):
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_long, x)))
+
+def InputObject(obj, nodein_port, x):
+ try:
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_Object, x)))
+ except:
+ return obj.Input(nodein_port, SuperVision.AnyValue( x ) )
+
+def InputString(obj, nodein_port, x):
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_string, x)))
+
+
+
+typestring = re.compile(r"_[^_]+_([^_]+)_.*")
+
+def getRealArgs(self,args):
+ types = []
+ realargs = []
+
+ try:
+ t = self.this
+ types.append(typestring.match(self).group(1))
+ realargs.append(t)
+ except:
+ types.append(type(self))
+ realargs.append(self)
+ for a in args:
+ try:
+ t = a.this
+ types.append(typestring.match(a).group(1))
+ realargs.append(t)
+ except:
+ types.append(type(a))
+ realargs.append(a)
+
+ return tuple(types), tuple(realargs)
+
+bs_AddInput_valuedict = {
+ (InstanceType, FloatType) : PortInputFloat,
+ (InstanceType, IntType) : PortInputLong,
+ (InstanceType, StringType) : PortInputString,
+ (InstanceType, InstanceType) : PortInputObject,
+ (InstanceType, StringType, FloatType) : InputFloat,
+ (InstanceType, StringType, IntType) : InputLong,
+ (InstanceType, StringType, StringType) : InputString,
+ (InstanceType, StringType, InstanceType) : InputObject,
+ (InstanceType, StringType, ListType) : InputObject,
+}
+
+
+def Args( aService , aNodeName , verbose ):
+ lenin = len( aService.ServiceinParameter )
+ infos = aNodeName + 'info = "'
+ infos = infos + 'NodeName : ' + aNodeName + '\\n'
+ infos = infos + 'ServiceName : ' + aService.ServiceName + '\\n'
+ infos = infos + 'PortNames : \\n'
+ defnames = aNodeName + " = " + "'" + aNodeName + "' ; "
+ i = 0
+ while i < lenin :
+ argname = aNodeName + aService.ServiceinParameter[ i ].Parametername
+ valname = aNodeName + "\\\\"
+ valname = valname + aService.ServiceinParameter[ i ].Parametername
+ defnames = defnames + argname + " = " + "'" + valname + "' ; "
+ infos = infos + str(i) + '. ' + argname + ' : Input'
+ infos = infos + str(i) + ' '
+ infos = infos + aService.ServiceinParameter[ i ].Parametername + ' '
+ infos = infos + aService.ServiceinParameter[ i ].Parametertype + '\\n'
+ i = i + 1
+ lenout = len( aService.ServiceoutParameter )
+ i = 0
+ while i < lenout :
+ argname = aNodeName + aService.ServiceoutParameter[ i ].Parametername
+ valname = aNodeName + "\\\\"
+ valname = valname + aService.ServiceoutParameter[ i ].Parametername
+ defnames = defnames + argname + " = " + "'" + valname + "' ; "
+ infos = infos + str(lenin+i) + '. ' + argname + ' : Output'
+ infos = infos + str(i) + ' '
+ infos = infos + aService.ServiceoutParameter[ i ].Parametername + ' '
+ infos = infos + aService.ServiceoutParameter[ i ].Parametertype + '\\n'
+ i = i + 1
+ infos = infos + '"'
+ defnames = defnames + infos
+ if verbose :
+ defnames = defnames + " ; print " + aNodeName + "info"
+ return defnames
+
+def Service_Swig( aCatalogService ) :
+ aService = SuperVision.Service()
+ aService.ServiceName = aCatalogService.ServiceName
+ i = 0
+ while i < len( aCatalogService.ServiceinParameter ) :
+ p = SuperVision.ServicesParameter( aCatalogService.ServiceinParameter[i].Parametertype , aCatalogService.ServiceinParameter[i].Parametername )
+ SuperVision.AddInParameter( aService , p )
+ i = i + 1
+ i = 0
+ while i < len( aCatalogService.ServiceoutParameter ) :
+ p = SuperVision.ServicesParameter( aCatalogService.ServiceoutParameter[i].Parametertype , aCatalogService.ServiceoutParameter[i].Parametername )
+ SuperVision.AddOutParameter( aService , p )
+ i = i + 1
+ return aService
+
+##########################################################
+class CNode:
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def Name( self ):
+ return self.N.Name()
+ def Service( self ):
+ return self.N.Service()
+ def Kind( self ):
+ return self.N.Kind()
+ def CreationDate( self ):
+ return self.N.CreationDate()
+ def LastUpdateDate( self ):
+ return self.N.LastUpdateDate()
+ def Version( self ):
+ return self.N.Version()
+ def Author( self ):
+ return self.N.Author()
+ def Comment( self ):
+ return self.N.Comment()
+
+ def SetName( self , aNewName ):
+ return self.N.SetName( aNewName )
+ def SetAuthor( self , anAuthor ):
+ return self.N.SetAuthor( anAuthor )
+ def SetComment( self , aComment ):
+ return self.N.SetComment( aComment )
+
+ def Print( self ):
+ print "Name ",self.N.Name()
+ if self.N.IsFactory() :
+ print "ComponentName ",self.N.GetComponentName()
+ print "InterfaceName ",self.N.GetInterfaceName()
+ aService = self.N.Service()
+ print "Service Name ",aService.ServiceName
+ lenin = len( aService.ServiceinParameter )
+ print " ",lenin," input argument(s) :"
+ i = 0
+ while i < lenin :
+ print " ",i,". ",aService.ServiceinParameter[ i ].Parametername," ",aService.ServiceinParameter[ i ].Parametertype
+ i = i + 1
+ lenout = len( aService.ServiceoutParameter )
+ print " ",lenout," output argument(s) :"
+ i = 0
+ while i < lenout :
+ print " ",i,". ",aService.ServiceoutParameter[ i ].Parametername," ",aService.ServiceoutParameter[ i ].Parametertype
+ i = i + 1
+ aKind = self.N.Kind()
+ print "KindOfNode",aKind
+ aFirstCreation = self.N.CreationDate()
+ print "Creation Date ",aFirstCreation.Day,"-",aFirstCreation.Month,"-",aFirstCreation.Year," ",aFirstCreation.Hour,":",aFirstCreation.Minute,":",aFirstCreation.Second
+ aLastModification = self.N.LastUpdateDate()
+ print "Update Date ",aLastModification.Day,"-",aLastModification.Month,"-",aLastModification.Year," ",aLastModification.Hour,":",aLastModification.Minute,":",aLastModification.Second
+ print "Version ",self.N.Version()
+ print "Author ",self.N.Author()
+ if self.N.IsFactory() :
+ print "Container ",self.N.GetContainer()
+ print "Comment ",self.N.Comment()
+ print "Coords ",self.N.X()," ",self.N.Y()
+ def Port( self , aPortName ):
+ aPort = self.N.Port( aPortName )
+ if aPort != None :
+ myPort = Port( aPort , self.N.Verbose )
+ return myPort
+ if self.N.Verbose :
+ print "Error while creating the Port : ",aPortName
+ return None
+ def Input( self , *args ):
+ types, realargs = getRealArgs(self.N,args)
+ fn = bs_AddInput_valuedict[types]
+ anInput = apply( fn, realargs)
+ if anInput != None :
+ myInput = Port( anInput , self.N.Verbose )
+ return myInput
+ ErrMsg = "Failed to create the Input"
+ if self.N.Verbose :
+ print ErrMsg
+ return anInput
+# def BusPort( self , InOutParameterName , InOutParameterType ):
+# sts,inp,outp = self.N.BusPort( InOutParameterName ,
+# InOutParameterType )
+# inp = Port( inp , self.N.Verbose )
+# outp = Port( outp , self.N.Verbose )
+# return sts,inp,outp
+# def BusPorts( self , InputParameterName , InputParameterType ,
+# OutputParameterName , OutputParameterType ):
+# sts,inp,outp = self.N.BusPorts( InputParameterName ,
+# InputParameterType ,
+# OutputParameterName ,
+# OutputParameterType )
+# inp = Port( inp , self.N.Verbose )
+# outp = Port( outp , self.N.Verbose )
+# return sts,inp,outp
+ def Ports( self ):
+ ports = self.N.Ports()
+ i = 0
+ while i < len( ports ) :
+ ports[ i ] = Port( ports[i] , self.N.Verbose )
+ i = i + 1
+ return ports
+ def ListPorts( self , *args ):
+ if len( args ) == 0 :
+ aName = self.N.Name()
+ else :
+ aName = args[ 0 ]
+ ports = self.N.Ports()
+ listofports = ""
+ if len( ports ) :
+ portsname = ports[ 0 ].Name()
+ bs = portsname.find('\\')
+ if bs != -1 :
+ portsname1,portsname2 = portsname.split('\\')
+ portsname = portsname1 + portsname2
+ if ports[ 0 ].IsInput():
+ listofports = aName + 'In' + portsname
+ else :
+ listofports = aName + 'Out' + portsname
+ i = 1
+ while i < len( ports ) :
+ portsname = ports[ i ].Name()
+ bs = portsname.find('\\')
+ if bs != -1 :
+ portsname1,portsname2 = portsname.split('\\')
+ portsname = portsname1 + portsname2
+ if ports[ i ].IsInput():
+ listofports = listofports + ',' + aName + 'In' + portsname
+ else :
+ listofports = listofports + ',' + aName + 'Out' + portsname
+ i = i + 1
+ print listofports
+ if len( ports ) == 1 :
+ listofports = "[" + listofports + "] = " + aName + ".Ports()"
+ else :
+ listofports = listofports + " = " + aName + ".Ports()"
+ return listofports
+ def PrintPorts( self ):
+ ports = self.N.Ports()
+ i = 0
+ while i < len( ports ) :
+ Direction = "Out"
+ if ports[ i ].IsInput() :
+ Direction = "In"
+ print Direction,self.N.Name(),'(',ports[ i ].Name(),ports[ i ].Kind(),ports[ i ].Type(),') = ',ports[ i ].ToString()
+ i = i + 1
+ def Links( self ) :
+ links = self.N.Links()
+ i = 0
+ while i < len( links ) :
+ links[ i ] = Link( links[i] , self.N.Verbose )
+ i = i + 1
+ return links
+ def PrintLinks( self ):
+ links = self.Links()
+ i = 0
+ while i < len( links ) :
+ links[i].Print()
+ i = i + 1
+ def IsGraph( self ):
+ return self.N.IsGraph()
+ def IsComputing( self ):
+ return self.N.IsComputing()
+ def IsFactory( self ):
+ return self.N.IsFactory()
+ def IsInLine( self ):
+ return self.N.IsInLine()
+ def IsGOTO( self ):
+ return self.N.IsGOTO()
+ def IsLoop( self ):
+ return self.N.IsLoop()
+ def IsEndLoop( self ):
+ return self.N.IsEndLoop()
+ def IsSwitch( self ):
+ return self.N.IsSwitch()
+ def IsEndSwitch( self ):
+ return self.N.IsEndSwitch()
+ def SubGraph( self ):
+ return self.N.SubGraph()
+ def Thread( self ):
+ return self.N.Thread()
+ def IsWaiting( self ):
+ return self.N.IsWaiting()
+ def IsRunning( self ):
+ return self.N.IsRunning()
+ def IsDone( self ):
+ return self.N.IsDone()
+ def IsSuspended( self ):
+ return self.N.IsSuspended()
+ def State( self ):
+ return self.N.State()
+ def Control( self ):
+ return self.N.Control()
+ def ControlClear( self ):
+ return self.N.ControlClear()
+ def AutoState( self ):
+ return self.N.AutoState()
+ def ReadyW( self ):
+ return self.N.ReadyW()
+ def RunningW( self ):
+ return self.N.RunningW()
+ def DoneW( self ):
+ return self.N.DoneW()
+ def SuspendedW( self ):
+ return self.N.SuspendedW()
+ def ReRun( self ):
+ return self.N.ReRun()
+ def ReStart( self ):
+ return self.N.ReStart()
+ def ReRunAt( self , aNodeName ):
+ return self.N.ReRunAt( aNodeName )
+ def ReStartAt( self , aNodeName ):
+ return self.N.ReStartAt( aNodeName )
+ def Ping( self ):
+ return self.N.ping()
+ def Kill( self ):
+ return self.N.Kill()
+ def KillDone( self ):
+ return self.N.KillDone()
+ def Suspend( self ):
+ return self.N.Suspend()
+ def SuspendDone( self ):
+ return self.N.SuspendDone()
+ def Resume( self ):
+ return self.N.Resume()
+ def Stop( self ):
+ return self.N.Stop()
+ def Coords( self , X , Y ):
+ return self.N.Coords( X , Y )
+ def X( self ):
+ return self.N.X()
+ def Y( self ):
+ return self.N.Y()
+ def destroy( self ):
+ self.N.destroy()
+
+##########################################################
+class FNode(CNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def GetComponentName( self ):
+ return self.N.GetComponentName()
+ def GetInterfaceName( self ):
+ return self.N._get_interfaceName()
+ def GetContainer( self ):
+ return self.N.GetContainer()
+ def SetComponentName( self , aComponentName ):
+ return self.N.SetComponentName( aComponentName )
+ def SetInterfaceName( self , anInterfaceName ):
+ return self.N.SetInterfaceName( anInterfaceName )
+ def SetContainer( self , aComputer ):
+ return self.N.SetContainer( aComputer )
+
+##########################################################
+class INode(CNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def Edit( self , FuncName , PyFunc ) :
+ file = '/tmp/' + FuncName + '.py'
+ i = 0
+ try :
+ fd = os.open( file , os.O_CREAT | os.O_WRONLY | os.O_TRUNC )
+ while ( i < len( PyFunc ) ) :
+ os.write( fd , PyFunc[ i ] + '\n' )
+ i = i + 1
+ edit = '${EDITOR} ' + file
+ os.system( edit )
+ fd = os.open( file , os.O_RDONLY )
+ line = os.read( fd , 132 )
+ res = ''
+ while len( line ) :
+ res = res + line
+ line = os.read( fd , 132 )
+ PyFunc = res.splitlines()
+ i = 0
+ while i < len( PyFunc ) :
+ print PyFunc[i]
+ i = i + 1
+ except :
+ print "Open of",file,"failed."
+ return PyFunc
+ def SetPyFunction( self , FuncName , aPyFunction ):
+ return self.N.SetPyFunction( FuncName , aPyFunction )
+ def PyFunction( self ):
+ return self.N.PyFunction()
+ def PyFuncName( self ):
+ return self.N.PyFuncName()
+ def EPyFunc( self ):
+ PyFunc = self.N.PyFunction()
+ PyFunc = self.Edit( self.N.PyFuncName() , PyFunc )
+ self.N.SetPyFunction( self.N.PyFuncName() , PyFunc )
+ def InPort( self , aParameterName , aParameterType ):
+ aPort = self.N.InPort( aParameterName ,
+ aParameterType )
+ if aPort != None :
+ myPort = Port( aPort , self.N.Verbose )
+ return myPort
+ if self.N.Verbose :
+ print "Error while creating the Port : ",aParameterName
+ return None
+ def OutPort( self , aParameterName , aParameterType ):
+ aPort = self.N.OutPort( aParameterName ,
+ aParameterType )
+ if aPort != None :
+ myPort = Port( aPort , self.N.Verbose )
+ return myPort
+ if self.N.Verbose :
+ print "Error while creating the Port : ",aParameterName
+ return None
+
+##########################################################
+class GNode(INode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def SetCoupled( self , anInLineNode ):
+ if self.N.IsGOTO() :
+ node = self.N.SetCoupled( anInLineNode )
+ else :
+ node = None
+ return node
+ def Coupled( self ):
+ node = self.N.Coupled()
+ if node != None :
+ if node.IsInLine() :
+ node = INode( node , self.N.Verbose )
+ elif node.IsLoop() :
+ node = LNode( node , self.N.Verbose )
+ elif node.IsEndLoop() :
+ node = ELNode( node , self.N.Verbose )
+ elif node.IsSwitch() :
+ node = SNode( node , self.N.Verbose )
+ elif node.IsEndSwitch() :
+ node = ESNode( node , self.N.Verbose )
+ return node
+
+##########################################################
+class LNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def SetPyInit( self , InitName , aPyFunction ):
+ return self.N.SetPyInit( InitName , aPyFunction )
+ def PyInit( self ):
+ return self.N.PyInit()
+ def PyInitName( self ) :
+ return self.N.PyInitName()
+ def EPyInit( self ):
+ PyFunc = self.N.PyFunction()
+ PyFunc = self.Edit( self.N.PyFuncName() , PyFunc )
+ self.N.SetPyFunction( self.N.PyFuncName() , PyFunc )
+ def SetPyMore( self , MoreName , aPyFunction ):
+ return self.N.SetPyMore( MoreName , aPyFunction )
+ def PyMore( self ):
+ return self.N.PyMore()
+ def PyMoreName( self ) :
+ return self.N.PyMoreName()
+ def EPyMore( self ):
+ PyMore = self.N.PyMore()
+ PyMore = self.Edit( self.N.PyMoreName() , PyMore )
+ self.N.SetPyMore( self.N.PyMoreName() , PyMore )
+ def SetPyNext( self , NextName , aPyFunction ):
+ return self.N.SetPyNext( NextName , aPyFunction )
+ def PyNext( self ):
+ return self.N.PyNext()
+ def PyNextName( self ) :
+ return self.N.PyNextName()
+ def EPyNext( self ):
+ PyNext = self.N.PyNext()
+ PyNext = self.Edit( self.N.PyNextName() , PyNext )
+ self.N.SetPyNext( self.N.PyNextName() , PyNext )
+
+##########################################################
+class ELNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+
+##########################################################
+class SNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+
+##########################################################
+class ESNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+
+##########################################################
+#class ServicesParameter_Swig :
+##########################################################
+# def __init__( self , aServicesParameter ):
+# self.Parametertype = aServicesParameter.Parametertype
+# self.Parametername = aServicesParameter.Parametername
+
+##########################################################
+class Graph(INode):
+##########################################################
+ def __init__( self , aName ):
+ try:
+ graph = SuperVision.Graph( aName )
+ except:
+ try:
+ graph = aName.G.Copy()
+ except:
+ graph = None
+ if graph != None :
+ self.G = graph
+ self.G.Verbose = 1
+ self.N = graph
+ self.N.Verbose = 1
+ else :
+ print "Graph creation failed"
+ def CNode( self , *args ):
+ if len( args ) == 1 :
+ aService = args[ 0 ]
+ else :
+ aComponent = args[ 0 ]
+ anInterface = args[ 1 ]
+ aService = args[ 2 ]
+ NodeComponent = modulecatalog.GetComponent( aComponent )
+ aService = NodeComponent.GetService( anInterface , aService )
+ aNode = self.G.CNode( aService )
+ if aNode != None :
+ myNode = CNode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def Node( self , aComponent , anInterface , aService ):
+ if SuperVision.Swig :
+ aService = Service_Swig( aService )
+ return self.FNode( aComponent , anInterface , aService )
+ def FNode( self , aComponent , anInterface , aService ):
+ NodeComponent = modulecatalog.GetComponent( aComponent )
+ aService = NodeComponent.GetService( anInterface , aService )
+ if SuperVision.Swig :
+ aService = Service_Swig( aService )
+ aNode = self.G.FNode( aComponent , anInterface , aService )
+ if aNode != None :
+ myNode = FNode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def INode( self , FuncName , aPythonFunction ):
+ aNode = self.G.INode( FuncName , aPythonFunction )
+ if aNode != None :
+ myNode = INode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node"
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def GNode( self , FuncName , aPythonFunction , anINode ):
+ aNode = self.G.GNode( FuncName , aPythonFunction , anINode )
+ if aNode != None :
+ myNode = GNode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node"
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def LNode( self , InitName , InitFunction , MoreName , MoreFunction , NextName , NextFunction ):
+ aNode,anEndOfLoop = self.G.LNode( InitName , InitFunction , MoreName , MoreFunction , NextName , NextFunction )
+ if aNode != None :
+ myNode = LNode( aNode , self.G.Verbose )
+ myEndOfLoop = INode( anEndOfLoop , self.G.Verbose )
+ return myNode,myEndOfLoop
+ ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def SNode( self , FuncName , aPythonFunction ):
+ aNode,anEndOfSwitch = self.G.SNode( FuncName , aPythonFunction )
+ if aNode != None :
+ myNode = SNode( aNode , self.G.Verbose )
+ myEndOfSwitch = INode( anEndOfSwitch , self.G.Verbose )
+ return myNode,myEndOfSwitch
+ ErrMsg = "Failed to create a Node"
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+# def LoopNode( self , aComponent , anInterface , aService , aNodeName ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode,anEndNode = self.G.LoopNode( aComponent , anInterface , aService , aNodeName )
+# myNode = aNode
+# myEndNode = anEndNode
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# if anEndNode != None :
+# myEndNode = Node( anEndNode , self.G.Verbose )
+# if ( aNode != None ) & ( anEndNode != None ) :
+# return myNode,myEndNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode,anEndNode
+# def SwitchNode( self , aComponent , anInterface , aService , aNodeName ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode,anEndNode = self.G.SwitchNode( aComponent , anInterface , aService , aNodeName )
+# myNode = aNode
+# myEndNode = anEndNode
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# if anEndNode != None :
+# myEndNode = Node( anEndNode , self.G.Verbose )
+# if ( aNode != None ) & ( anEndNode != None ) :
+# return myNode,myEndNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode,anEndNode
+# def LNode( self , aNodeName ):
+# aNode = self.G.LNode( aNodeName )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+# def LService( self , aComponent , anInterface , aService ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode = self.G.LService( aComponent , anInterface , aService )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+# def CNode( self , aNodeName ):
+# aNode = self.G.CNode( aNodeName )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+# def CService( self , aComponent , anInterface , aService ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode = self.G.CService( aComponent , anInterface , aService )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+ def PrintService( self , aComponent , anInterface , aService ):
+ NodeComponent = modulecatalog.GetComponent( aComponent )
+ aService = NodeComponent.GetService( anInterface , aService )
+ print "ServiceName ",aService.ServiceName," :"
+ lenin = len( aService.ServiceinParameter )
+ print " ",lenin," input argument(s) :"
+ i = 0
+ while i < lenin :
+ print " ",i,". ",aService.ServiceinParameter[ i ].Parametername," ",aService.ServiceinParameter[ i ].Parametertype
+ i = i + 1
+ lenout = len( aService.ServiceoutParameter )
+ print " ",lenout," output argument(s) :"
+ i = 0
+ while i < lenout :
+ print " ",i,". ",aService.ServiceoutParameter[ i ].Parametername," ",aService.ServiceoutParameter[ i ].Parametertype
+ i = i + 1
+ def Link( self , aFromNodePort , aToNodePort ):
+ aLink = self.G.Link( aFromNodePort.P , aToNodePort.P )
+ if aLink != None :
+ myLink = Link( aLink , self.G.Verbose )
+ return myLink
+ ErrMsg = "Failed to create a Link from " + aFromNodePort.Node().Name() + "(" + aFromNodePort.Name() + ") to " + aToNodePort.Node().Name() + "(" + aToNodePort.Name() + ")"
+ if self.G.Verbose :
+ print ErrMsg
+ return aLink
+ def Import( self , anXmlFileName ):
+ return self.G.Import( anXmlFileName )
+ def Export( self , anXmlFileName ):
+ return self.G.Export( anXmlFileName )
+ def IsReadOnly( self ) :
+ return self.G.IsReadOnly()
+ def ComponentRef( self , aFactoryServer , aComponent ) :
+ return self.G.ComponentRef( aFactoryServer , aComponent )
+ def IsValid( self ):
+ return self.G.IsValid()
+ def IsExecutable( self ):
+ return self.G.IsExecutable()
+ def IsEditing( self ):
+ return self.G.IsEditing()
+ def IsExecuting( self ):
+ return self.G.IsExecuting()
+ def LevelMax( self ):
+ return self.G.LevelMax()
+ def ThreadsMax( self ):
+ return self.G.ThreadsMax()
+ def GraphsNumber( self ):
+ return self.G.GraphsNumber()
+ def LevelNodes( self , aLevel ):
+ nodes = self.G.LevelNodes( aLevel )
+ return self.nodesTuple( nodes )
+ def Run( self , *args ):
+ self.S = -1
+ aService = self.Service()
+ nargs = len( args )
+ i = 0
+ while nargs > 0 :
+ print aService.ServiceinParameter[ i ].Parametername," = ",args[i]
+ self.Input( aService.ServiceinParameter[ i ].Parametername , args[i] )
+ i = i + 1
+ nargs = nargs - 1
+ return self.G.Run()
+ def Start( self , *args ):
+ self.S = -1
+ aService = self.Service()
+ nargs = len( args )
+ i = 0
+ while nargs > 0 :
+ print aService.ServiceinParameter[ i ].Parametername," = ",args[i]
+ self.Input( aService.ServiceinParameter[ i ].Parametername , args[i] )
+ i = i + 1
+ nargs = nargs - 1
+ return self.G.Start()
+ def Event( self ):
+ sts,aNode,anEvent,aState = self.G.Event()
+ self.S = sts
+ return sts,aNode,anEvent,aState
+ def EventNoW( self ):
+ sts,aNode,anEvent,aState = self.G.EventNoW()
+ self.S = sts
+ return sts,aNode,anEvent,aState
+ def EventW( self ):
+ sts,aNode,anEvent,aState = self.G.EventW()
+ self.S = sts
+ return sts,aNode,anEvent,aState
+ def NextW( self ):
+ if self.S != 0 :
+ sts,aNode,anEvent,aState = self.G.EventW()
+ self.S = sts
+ print sts,aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
+ return sts
+ def Threads( self ):
+ return self.G.Threads()
+ def SuspendedThreads( self ):
+ return self.G.SuspendedThreads()
+ def LastLevelDone( self ):
+ return self.G.LastLevelDone()
+ def Verbose( self , verbose ):
+ preverbose = self.G.Verbose
+ self.G.Verbose = verbose
+ return preverbose
+ def Nodes( self ):
+ nodes = self.G.Nodes()
+ return self.nodesTuple( nodes )
+ def nodesTuple( self , nodes ) :
+ n = len( nodes.CNodes )
+ i = 0
+ j = 0
+ pynodes = []
+ while i < n :
+ pynodes.append( CNode( nodes.CNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.FNodes )
+ i = 0
+ while i < n :
+ pynodes.append( FNode( nodes.FNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.INodes )
+ i = 0
+ while i < n :
+ pynodes.append( INode( nodes.INodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.GNodes )
+ i = 0
+ while i < n :
+ pynodes.append( GNode( nodes.GNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.LNodes )
+ i = 0
+ while i < n :
+ pynodes.append( LNode( nodes.LNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.ELNodes )
+ i = 0
+ while i < n :
+ pynodes.append( GNode( nodes.ELNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.SNodes )
+ i = 0
+ while i < n :
+ pynodes.append( SNode( nodes.SNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.ESNodes )
+ i = 0
+ while i < n :
+ pynodes.append( GNode( nodes.ESNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ return pynodes
+ def ListNodes( self , *args ):
+ nodes = self.Nodes()
+ listofnodes = ""
+ if len( nodes ) :
+ listofnodes = nodes[ 0 ].Name()
+ i = 1
+ while i < len( nodes ) :
+ listofnodes = listofnodes + ',' + nodes[ i ].Name()
+ i = i + 1
+ print listofnodes
+ if len( args ) == 0 :
+ aName = self.N.Name()
+ else :
+ aName = args[ 0 ]
+ if len( nodes ) == 1 :
+ listofnodes = "[" + listofnodes + "] = " + aName + ".Nodes()"
+ else :
+ listofnodes = listofnodes + " = " + aName + ".Nodes()"
+ return listofnodes
+ def PrintNodes( self ):
+ nodes = self.Nodes()
+ n = len( nodes )
+ i = 0
+ while i < n :
+ print ' '
+ nodes[ i ].Print()
+ i = i + 1
+ def PrintThreads( self ):
+ nodes = self.Nodes()
+ i = 0
+ while i < len( nodes ) :
+ print nodes[i].Name(),nodes[i].Thread(),nodes[i].State(),nodes[i].Control(),nodes[i].AutoState()
+ i = i + 1
+ def GLinks( self ):
+ links = self.G.GLinks()
+ i = 0
+ while i < len( links ) :
+ links[ i ] = Link( links[i] , self.G.Verbose )
+ i = i + 1
+ return links
+ def ListLinks( self , *args ):
+ links = self.G.GLinks()
+ if len( links ) :
+ listoflinks = links[ 0 ].InPort().Node().Name()
+ listoflinks = listoflinks + links[ 0 ].InPort().Name()
+ i = 1
+ while i < len( links ) :
+ listoflinks = listoflinks + ',' + links[ i ].InPort().Node().Name()
+ listoflinks = listoflinks + links[ i ].InPort().Name()
+ i = i + 1
+ print listoflinks
+ if len( args ) == 0 :
+ aName = self.N.Name()
+ else :
+ aName = args[ 0 ]
+ if len( links ) == 1 :
+ listoflinks = "[" + listoflinks + "] = " + aName + ".GLinks()"
+ else :
+ listoflinks = listoflinks + " = " + aName + ".GLinks()"
+ return listoflinks
+ def PrintLinks( self ):
+ links = self.G.GLinks()
+ i = 0
+ while i < len( links ) :
+ Link( links[ i ] , self.G.Verbose ).Print()
+ i = i + 1
+ def Graphs( self ):
+ graphs = self.G.Graphs()
+ outgraphs = graphs
+ i = 0
+ while i < len( graphs ) :
+ outgraphs[ i ] = Graph( graphs[i].Name() , self.G.Verbose )
+ outgraphs[ i ].Merge( graphs[i] )
+ i = i + 1
+ return outgraphs
+ def Copy( self ):
+ aCopy = self.G.Copy()
+ if aCopy != None:
+ myCopy = Graph( aCopy )
+ return myCopy
+ ErrMsg = "Failed to get a Copy of " + self.G.Name()
+ if self.G.Verbose :
+ print ErrMsg
+ return aCopy
+ def Merge( self , aGraph ):
+ return self.G.Merge( aGraph.G )
+ def Destroy( self ):
+ self.N.destroy()
+
+##########################################################
+class GraphE(Graph):
+##########################################################
+ def __init__( self , aName ):
+ graph = SuperVision.GraphE( aName )
+ self.G = graph
+ self.G.Verbose = 1
+ self.N = graph
+ self.N.Verbose = 1
+
+##########################################################
+class Value:
+##########################################################
+ def __init__( self , aValue , Verbose ):
+ self.V = aValue
+ self.V.Verbose = Verbose
+ def ToString( self ):
+ return self.V.ToString()
+ def ToAny( self ):
+ return self.V.ToAny()
+ def Destroy( self ):
+ self.N.destroy()
+
+##########################################################
+class Port:
+##########################################################
+ def __init__( self , aPort , Verbose ):
+ self.P = aPort
+ self.P.Verbose = Verbose
+ def Input( self , *args ):
+ types, realargs = getRealArgs(self.P,args)
+ fn = bs_AddInput_valuedict[types]
+ anInput = apply( fn, realargs)
+ return anInput
+ def Node( self ):
+ aNode = self.P.Node()
+ if aNode != None :
+ if aNode.IsComputing() :
+ myNode = CNode( aNode , self.P.Verbose )
+ elif aNode.IsFactory() :
+ myNode = FNode( aNode , self.P.Verbose )
+ elif aNode.IsInLine() :
+ myNode = INode( aNode , self.P.Verbose )
+ elif aNode.IsGOTO() :
+ myNode = GNode( aNode , self.P.Verbose )
+ elif aNode.IsLoop() :
+ myNode = LNode( aNode , self.P.Verbose )
+ elif aNode.IsEndLoop() :
+ myNode = ELNode( aNode , self.P.Verbose )
+ elif aNode.IsSwitch() :
+ myNode = SNode( aNode , self.P.Verbose )
+ elif aNode.IsEndSwitch() :
+ myNode = ESNode( aNode , self.P.Verbose )
+ else :
+ myNode = None
+ return myNode
+ return aNode
+ def Name( self ):
+ return self.P.Name()
+ def Type( self ):
+ return self.P.Type()
+ def Link( self ):
+ aLink = self.P.Link()
+ if aLink != None :
+ myLink = Link( aLink , self.P.Verbose )
+ return myLink
+ ErrMsg = "Failed to get a Link to " + self.P.Node().Name() + "(" + self.P.Name() + ")"
+ if self.P.Verbose :
+ print ErrMsg
+ return aLink
+ def Links( self ):
+ links = self.P.Links()
+ i = 0
+ while i < len( links ) :
+ links[ i ] = Link( links[i] , self.P.Verbose )
+ i = i + 1
+ return links
+ def PrintLinks( self ):
+ links = self.P.Links()
+ i = 0
+ while i < len( links ) :
+ Link( links[ i ] , self.P.Verbose ).Print()
+ i = i + 1
+ def IsInput( self ):
+ return self.P.IsInput()
+ def IsLinked( self ):
+ return self.P.IsLinked()
+ def HasInput( self ):
+ return self.P.HasInput()
+ def Kind( self ) :
+ return self.P.Kind()
+ def IsParam( self ):
+ return self.P.IsParam()
+ def IsGate( self ):
+ return self.P.IsGate()
+ def IsLoop( self ):
+ return self.P.IsLoop()
+ def IsInLine( self ):
+ return self.P.IsInLine()
+ def IsSwitch( self ):
+ return self.P.IsSwitch()
+ def IsEndSwitch( self ):
+ return self.P.IsEndSwitch()
+# def IsBus( self ):
+# return self.P.IsBus()
+ def Done( self ):
+ return self.P.Done()
+ def State( self ):
+ return self.P.State()
+ def ToString( self ):
+ return self.P.ToString()
+ def ToAny( self ):
+ return self.P.ToAny()
+ def Print( self ):
+ if self.P.IsInput() :
+ if self.P.IsLinked() :
+ print "In",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString(),' from ',self.Link().OutPort().Print()
+ else :
+ print "In",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString()
+ else :
+ print "Out",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString()
+ def Destroy( self ):
+ self.P.destroy()
+
+##########################################################
+class Link:
+##########################################################
+ def __init__( self , aLink , Verbose ):
+ self.L = aLink
+ self.L.Verbose = Verbose
+ def OutPort( self ):
+ aPort = self.L.OutPort()
+ if aPort != None :
+ myPort = Port( aPort , self.L.Verbose )
+ return myPort
+ if self.L.Verbose :
+ print "Error while getting the Port : "
+ return None
+ def InPort( self ):
+ aPort = self.L.InPort()
+ if aPort != None :
+ myPort = Port( aPort , self.L.Verbose )
+ return myPort
+ if self.L.Verbose :
+ print "Error while getting the Port : "
+ return None
+ def Print( self ):
+ anOutPort = self.L.OutPort()
+ anInPort = self.L.InPort()
+ print anOutPort.Node().Name(),'(',anOutPort.Name(),' ',anOutPort.Kind(),') =',anOutPort.ToString(),' --> ',anInPort.Node().Name(),'(',anInPort.Name(),')',' ',anInPort.Kind()
+ def CoordsSize( self ):
+ return self.L.CoordsSize()
+ def AddCoord( self , index , X , Y ):
+ return self.L.AddCoord( index , X , Y )
+ def ChangeCoord( self , index , X , Y ):
+ return self.L.ChangeCoord( index , X , Y )
+ def RemoveCoord( self , index ):
+ return self.L.RemoveCoord( index )
+ def Coords( self , index ):
+ return self.L.Coords( index )
+ def destroy( self ):
+ self.L.destroy()
+
+
--- /dev/null
+using namespace std;
+#include <iostream>
+#include <fstream>
+#include <unistd.h>
+
+#include <Python.h>
+
+#include "DataFlowBase_Base.hxx"
+#include "DataFlowBase_Graph.hxx"
+#include "DataFlowExecutor_InNode.hxx"
+#include "DataFlowExecutor_OutNode.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.lxx"
+#include "DataFlowEditor_InNode.hxx"
+#include "DataFlowEditor_OutNode.hxx"
+#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowEditor_DataFlow.lxx"
+
+static PyMethodDef MethodPyVoidMethod[] = {
+ { NULL, NULL }
+};
+
+int main(int argc, char **argv) {
+ Py_Initialize() ;
+ Py_InitModule( "InitPyRunMethod" , MethodPyVoidMethod ) ;
+ return 0;
+}
+
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : SuperV_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header$
+//=============================================================================
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "Python.h"
+
+#include "utilities.h"
+
+#include "SALOME_Container_i.hxx"
+
+#include "SuperV_Impl.hxx"
+
+#include "SALOMEDS_Attributes.hh"
+#include <TCollection_AsciiString.hxx>
+#include <TColStd_SequenceOfAsciiString.hxx>
+#include "SALOMEDS_Tool.hxx"
+
+#include "Utils_CorbaException.hxx"
+
+#define STUDY_SUPERVISION "Supervision"
+
+SuperV_Impl::SuperV_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName
+// , int argc ,
+// char ** argv
+ ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ MESSAGE("SuperV_Impl::SuperV_Impl activate object instanceName("
+ << instanceName << ") interfaceName(" << interfaceName << ") --> "
+ << hex << (void *) this << dec )
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+}
+
+SuperV_Impl::SuperV_Impl() {
+}
+
+SuperV_Impl::~SuperV_Impl() {
+ beginService( "SuperV_Impl::~SuperV_Impl" );
+ endService( "SuperV_Impl::~SuperV_Impl" );
+}
+
+void SuperV_Impl::Destroy() {
+ beginService( "SuperV_Impl::Destroy" );
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ Py_Finalize();
+ endService( "SuperV_Impl::Destroy" );
+}
+
+// void SuperV_Impl::Save(const char *IORSComponent, const char *aUrlOfFile) {
+SALOMEDS::TMPFile* SuperV_Impl::Save(SALOMEDS::SComponent_ptr theComponent,
+ const char* theURL,
+ bool isMultiFile) {
+ SALOMEDS::TMPFile_var aStreamFile;
+ // Get a temporary directory to store a file
+ TCollection_AsciiString aTmpDir("");
+ // Create a list to store names of created files
+ SALOMEDS::ListOfFileNames_var aSeq = new SALOMEDS::ListOfFileNames;
+
+ CORBA::String_var myStudyName = strdup(SALOMEDS_Tool::GetNameFromPath(theComponent->GetStudy()->URL()));
+
+ SALOMEDS::ChildIterator_var anIter = theComponent->GetStudy()->NewChildIterator(theComponent);
+ TColStd_SequenceOfAsciiString aFileNames;
+ TCollection_AsciiString aName;
+
+ for(; anIter->More(); anIter->Next()) {
+ SALOMEDS::SObject_var aSO = anIter->Value();
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (aSO->FindAttribute(anAttr,"AttributeIOR")) {
+ aName = TCollection_AsciiString(myStudyName) +
+ TCollection_AsciiString("_SUPERVISION_") +
+ TCollection_AsciiString(aSO->Tag()) +
+ TCollection_AsciiString(".xml");
+ aFileNames.Append(aName);
+
+ // save to the file
+ CORBA::Object_var anObj = _orb->string_to_object(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value()) ;
+ SUPERV::Graph_var graph = SUPERV::Graph::_narrow(anObj);
+ if (aTmpDir.Length() == 0)
+ aTmpDir = (isMultiFile)?TCollection_AsciiString((char*)theURL):SALOMEDS_Tool::GetTmpDir();
+ graph->Export((aTmpDir + aName).ToCString());
+ }
+ }
+
+ if (aFileNames.Length() == 0) return new SALOMEDS::TMPFile(0);
+
+ aSeq->length(aFileNames.Length());
+ int aCounter;
+ for(aCounter = aFileNames.Length(); aCounter > 0; aCounter--)
+ aSeq[aCounter-1] = CORBA::string_dup(aFileNames.Value(aCounter).ToCString());
+
+ // Conver a file to the byte stream
+ aStreamFile = SALOMEDS_Tool::PutFilesToStream(aTmpDir.ToCString(), aSeq.in(), isMultiFile);
+ // Remove the created file and tmp directory
+ if (!isMultiFile) SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.ToCString(), aSeq.in(), true);
+
+ // Add python files to the temporary files sequence
+ SALOMEDS::ListOfFileNames_var aPySeq = new SALOMEDS::ListOfFileNames;
+ aPySeq->length(aSeq->length());
+ for(aCounter = aSeq->length(); aCounter > 0; aCounter--) {
+ char* aCName = CORBA::string_dup(aSeq[aCounter-1]);
+ int a = strlen(aCName);
+ aCName[a-3] = 'p';aCName[a-2] = 'y';aCName[a-1] = 0;
+ aPySeq[aCounter-1] = aCName;
+ }
+ // Remove the created file and tmp directory
+ SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.ToCString(), aPySeq.in(), true);
+ // Return the created byte stream
+ return aStreamFile._retn();
+}
+
+// void SuperV_Impl::Load(const char* IORSComponent, const char* aUrlOfFile) {
+CORBA::Boolean SuperV_Impl::Load(SALOMEDS::SComponent_ptr theComponent,
+ const SALOMEDS::TMPFile& theStream,
+ const char* theURL,
+ bool isMultiFile) {
+ // MESSAGE("SuperV_Impl::Load : IOR = " << IORSComponent << " , Url = " << aUrlOfFile);
+ // Get a temporary directory for a file
+ if (theStream.length() != 0) {
+ TCollection_AsciiString aTmpDir = (isMultiFile)?TCollection_AsciiString((char*)theURL):SALOMEDS_Tool::GetTmpDir();
+ myStrURL = strdup(aTmpDir.ToCString());
+ SALOMEDS_Tool::PutStreamToFiles(theStream, myStrURL, isMultiFile);
+ }
+ return true;
+}
+
+void SuperV_Impl::Close(SALOMEDS::SComponent_ptr theComponent) {
+// mpv 06.03.2003: bug SAL1508 - graphs will be destructed at the GUI-level at the supervision frame closing
+
+// SALOMEDS::ChildIterator_var anIter = theComponent->GetStudy()->NewChildIterator(theComponent);
+// for(; anIter->More(); anIter->Next()) {
+// SALOMEDS::SObject_var aSO = anIter->Value();
+// SALOMEDS::GenericAttribute_var anAttr;
+// if (aSO->FindAttribute(anAttr,"AttributeIOR")) {
+// CORBA::Object_var anObj = _orb->string_to_object(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value()) ;
+// SUPERV::Graph_var graph = SUPERV::Graph::_narrow(anObj);
+// graph->destroy();
+// }
+// }
+}
+
+char* SuperV_Impl::ComponentDataType() {
+ return(strdup("Supervision"));
+}
+
+char* SuperV_Impl::IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
+ const char* IORString,
+ CORBA::Boolean isMultiFile) {
+ MESSAGE("SuperV_Impl::IORToLocalPersistentID: IOR:"<<IORString);
+
+ try {
+ CORBA::Object_var anObj = _orb->string_to_object(IORString) ;
+ if (CORBA::is_nil(anObj)) return CORBA::string_dup(IORString);
+ SUPERV::Graph_var aGraph = SUPERV::Graph::_narrow(anObj);
+ if (aGraph->_is_nil()) return CORBA::string_dup(IORString);
+ } catch (...) {
+ return CORBA::string_dup(IORString);
+ }
+
+// sprintf(aName, "%s_SUPERVISION_tmp_%d.xml",myStudyName,myCounter);
+ CORBA::String_var myStudyName = strdup(SALOMEDS_Tool::GetNameFromPath(theSObject->GetStudy()->URL()));
+ TCollection_AsciiString aName = TCollection_AsciiString(myStudyName) +
+ TCollection_AsciiString("_SUPERVISION_") +
+ TCollection_AsciiString(theSObject->Tag()) +
+ TCollection_AsciiString(".xml");
+ return CORBA::string_dup(aName.ToCString());
+}
+
+char* SuperV_Impl::LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
+ const char* aLocalPersistentID,
+ CORBA::Boolean isMultiFile)
+ throw(SALOME::SALOME_Exception)
+{
+ MESSAGE("SuperV_Impl::LocalPersistentIDToIOR : IOR = " << aLocalPersistentID);
+ CORBA::String_var aFatherID = theSObject->GetFather()->GetID();
+ CORBA::String_var aComponentID = theSObject->GetFatherComponent()->GetID();
+ if (strcmp(aFatherID, aComponentID)) return CORBA::string_dup(aLocalPersistentID);
+
+ string aStr(myStrURL);
+ aStr += string(aLocalPersistentID);
+ SUPERV::Graph_ptr graph = Graph(aStr.c_str());
+
+ if (graph->_is_nil())
+ THROW_SALOME_CORBA_EXCEPTION("Unable to find graph in the file",SALOME::BAD_PARAM);
+
+ SALOMEDS::ListOfFileNames_var aSeq = new SALOMEDS::ListOfFileNames;
+ aSeq->length(1);
+ aSeq[0]=aLocalPersistentID;
+ if (!isMultiFile) SALOMEDS_Tool::RemoveTemporaryFiles(myStrURL, aSeq.in(), true);
+
+ return _Orb->object_to_string(graph);
+}
+
+bool SuperV_Impl::CanPublishInStudy(CORBA::Object_ptr theIOR) {
+ SUPERV::Graph_var aGraph = SUPERV::Graph::_narrow(theIOR);
+ return !(aGraph->_is_nil());
+}
+
+SALOMEDS::SObject_ptr SuperV_Impl::PublishInStudy(SALOMEDS::Study_ptr theStudy,
+ SALOMEDS::SObject_ptr theSObject,
+ CORBA::Object_ptr theObject,
+ const char* theName) throw (SALOME::SALOME_Exception) {
+ SALOMEDS::SObject_var aResultSO;
+
+ if(CORBA::is_nil(theObject)) return aResultSO._retn();;
+
+ if(theStudy->_is_nil()) return aResultSO._retn();;
+
+ SALOMEDS::StudyBuilder_var aBuilder = theStudy->NewBuilder();
+ SALOMEDS::GenericAttribute_var anAttr;
+ SALOMEDS::AttributeName_var aName;
+ SALOMEDS::AttributeIOR_var anIOR;
+ SALOMEDS::AttributePixMap_var aPixmap;
+ SALOMEDS::SComponent_var aFather = theStudy->FindComponent(STUDY_SUPERVISION);
+
+ if (aFather->_is_nil()) {
+ aFather = aBuilder->NewComponent(STUDY_SUPERVISION);
+ anAttr = aBuilder->FindOrCreateAttribute(aFather, "AttributeName");
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ aName->SetValue(STUDY_SUPERVISION);
+
+ anAttr = aBuilder->FindOrCreateAttribute(aFather, "AttributePixMap");
+ aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+ aPixmap->SetPixMap( "ICON_OBJBROWSER_Supervision" );
+
+ aBuilder->DefineComponentInstance(aFather, SuperG::_this());
+ }
+
+ SALOMEDS::SObject_var dataflowI;
+ SALOMEDS::ChildIterator_var dataflowS = theStudy->NewChildIterator(aFather);
+
+ SUPERV::Graph_var aGraph = SUPERV::Graph::_narrow(theObject);
+
+ const char* name = aGraph->Name();
+
+ if (CORBA::is_nil(theSObject)) { // if SObject is null, then searching for exist graph SObject
+ for (; dataflowS->More(); dataflowS->Next()) {
+ dataflowI = dataflowS->Value();
+ if (dataflowI->FindAttribute(anAttr, "AttributeName")) {
+ aName = SALOMEDS::AttributeName::_narrow(anAttr);
+ if (strcmp(aName->Value(), name) == 0) {
+ aResultSO = dataflowI;
+ break;
+ }
+ }
+ }
+ } else { // else searching for referenced SObject
+ if (!theSObject->ReferencedObject(aResultSO))
+ THROW_SALOME_CORBA_EXCEPTION("Publish in study supervision graph error",SALOME::BAD_PARAM);
+ }
+
+ if (strlen(theName) != 0) name = theName;
+ if (CORBA::is_nil(aResultSO)) aResultSO = aBuilder->NewObject(aFather);
+
+ aName = SALOMEDS::AttributeName::_narrow(aBuilder->FindOrCreateAttribute(aResultSO, "AttributeName"));
+ aName->SetValue(name);
+ anIOR = SALOMEDS::AttributeIOR::_narrow(aBuilder->FindOrCreateAttribute(aResultSO, "AttributeIOR"));
+ anIOR->SetValue(aGraph->getIOR());
+// aBuilder->Addreference(theSObject, aResultSO);
+ return aResultSO._retn();
+}
+
+CORBA::Boolean SuperV_Impl::CanCopy(SALOMEDS::SObject_ptr theObject) {
+ // Try to retrieve known by SUPERVISION component Graph by given IOR
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (!theObject->FindAttribute(anAttr, "AttributeIOR")) return false;
+ try {
+ CORBA::Object_var anObj = _orb->string_to_object(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value());
+ if (CORBA::is_nil(anObj)) return false;
+ else {
+ SUPERV::Graph_var aGraph = SUPERV::Graph::_narrow(anObj);
+ if (aGraph->_is_nil()) return false;
+ }
+ } catch (...) {
+ return false;
+ }
+ return true;
+}
+
+SALOMEDS::TMPFile* SuperV_Impl::CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID) {
+ // Declare a sequence of the byte to store the copied object
+ SALOMEDS::TMPFile_var aStreamFile;
+
+ // Try to get GEOM_Shape object by given SObject
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (!theObject->FindAttribute(anAttr, "AttributeIOR")) return aStreamFile._retn();
+ CORBA::String_var anIOR = strdup(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value());
+
+ bool isGraph = true;
+ SUPERV::Graph_var aGraph;
+ try {
+ CORBA::Object_var anObj = _orb->string_to_object(anIOR) ;
+ if (CORBA::is_nil(anObj)) isGraph = false;
+ else {
+ aGraph = SUPERV::Graph::_narrow(anObj);
+ if (aGraph->_is_nil()) isGraph = false;
+ }
+ } catch (...) {
+ isGraph = false;
+ }
+
+ if (!isGraph) { // it's just a value, stored in the IOR attribute
+ int aLen = strlen(anIOR);
+ CORBA::Octet* anOctetBuf = (CORBA::Octet*)strdup(anIOR);
+ aStreamFile = SALOMEDS::TMPFile_var(new SALOMEDS::TMPFile(aLen, aLen, anOctetBuf, 1));
+ return aStreamFile._retn();
+ }
+
+ // Get a temporary directory to store a temporary file
+ CORBA::String_var aTmpDir = SALOMEDS_Tool::GetTmpDir();
+ // Create a list to store names of created files
+ SALOMEDS::ListOfFileNames_var aSeq = new SALOMEDS::ListOfFileNames;
+ aSeq->length(1);
+ aSeq[0] = strdup("_SUPERVISION_tmp.xml");
+ char* aFullName = new char[strlen(aTmpDir)+strlen(aSeq[0])+1];
+ strcpy(aFullName, aTmpDir);
+ strcpy(aFullName+strlen(aTmpDir), aSeq[0]);
+ aGraph->Export(strdup(aFullName));
+ delete(aFullName);
+
+ aStreamFile = SALOMEDS_Tool::PutFilesToStream(aTmpDir, aSeq.in(), false);
+ SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir, aSeq.in(), true);
+
+ // Assign an ID = 1 the the type SUPERV::Graph
+ theObjectID = 1;
+
+ return aStreamFile._retn();
+}
+
+CORBA::Boolean SuperV_Impl::CanPaste(const char* theComponentName, CORBA::Long theObjectID) {
+ // The Supervision component can paste only objects copied by Supervision component
+ // and with the object type = 1
+ if (strcmp(theComponentName, ComponentDataType()) != 0 || theObjectID != 1) return false;
+ return true;
+}
+
+SALOMEDS::SObject_ptr SuperV_Impl::PasteInto(const SALOMEDS::TMPFile& theStream,
+ CORBA::Long theObjectID,
+ SALOMEDS::SObject_ptr theObject) {
+ SALOMEDS::SObject_var aResultSO;
+
+ SALOMEDS::StudyBuilder_var aBuilder = theObject->GetStudy()->NewBuilder();
+
+ bool isGraph = (strcmp(theObject->GetFatherComponent()->GetID(),theObject->GetID()) == 0);
+
+ if (!isGraph) {
+ SALOMEDS::AttributeIOR_var anIOR =
+ SALOMEDS::AttributeIOR::_narrow(aBuilder->FindOrCreateAttribute(theObject, "AttributeIOR"));
+ anIOR->SetValue((char*)theStream.NP_data());
+ return SALOMEDS::SObject_var(theObject)._retn();
+ }
+ if(CORBA::is_nil(theObject)) return aResultSO._retn();
+
+ CORBA::String_var aTmpDir = strdup(SALOMEDS_Tool::GetTmpDir());
+ SALOMEDS::ListOfFileNames_var aSeq = SALOMEDS_Tool::PutStreamToFiles(theStream, aTmpDir, false);
+ char* aFullName = new char[strlen(aTmpDir)+strlen(aSeq[0])+1];
+ strcpy(aFullName, aTmpDir);
+ strcpy(aFullName+strlen(aTmpDir), aSeq[0]);
+ SUPERV::Graph_ptr aGraph = Graph(strdup(aFullName));
+ delete(aFullName);
+
+ SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir, aSeq.in(), true);
+
+ if (isGraph) {
+ aResultSO = aBuilder->NewObject(theObject);
+ } else {
+ aResultSO = theObject;
+ }
+
+ SALOMEDS::AttributeIOR_var anIOR =
+ SALOMEDS::AttributeIOR::_narrow(aBuilder->FindOrCreateAttribute(aResultSO, "AttributeIOR"));
+ anIOR->SetValue(aGraph->getIOR());
+
+ return aResultSO._retn();
+}
+
+SUPERV::Value_ptr SuperV_Impl::StringValue( const char * aStrIOR ) {
+// beginService( "Super_Impl::StringValue" );
+ CORBA::Any * anAny = new CORBA::Any() ;
+
+ try {
+ CORBA::Object_ptr obj = _Orb->string_to_object( aStrIOR ) ;
+ if ( obj ) {
+ *anAny <<= obj ;
+// return(anAny);
+ }
+ }
+ catch ( CORBA::BAD_PARAM ) {
+
+ long l;
+ double d;
+ if ( strchr( aStrIOR , '.' ) != NULL &&
+ sscanf( aStrIOR , "%lf%*n", &d)) {
+ *anAny <<= d;
+// MESSAGE( "Value( " << aStrIOR << " ) --> double " << d );
+// return(anAny);
+ }
+ else if (sscanf( aStrIOR , "%ld%*n", &l)) {
+ *anAny <<= l;
+// MESSAGE( "Value( " << aStrIOR << " ) --> long " << l );
+// return(anAny);
+ }
+ else {
+ *anAny <<= aStrIOR ;
+// MESSAGE( "Value( " << aStrIOR << " ) --> string " << aStrIOR );
+ }
+ }
+
+// endService( "SuperV_Impl::StringValue" );
+ return Value( anAny ) ;
+}
+
+SUPERV::Value_ptr SuperV_Impl::AnyValue( const CORBA::Any & anAny ) {
+// beginService( "Super_Impl::AnyValue" );
+ CORBA::Any * aAny = new CORBA::Any( anAny ) ;
+// endService( "SuperV_Impl::AnyValue" );
+ return Value( aAny ) ;
+}
+
+SUPERV::Value_ptr SuperV_Impl::Value( CORBA::Any * anAny ) {
+// beginService( "Super_Impl::Value" );
+ Value_Impl * myValue = new Value_Impl( _Orb , _Poa , _ContId ,
+ instanceName() , interfaceName() ,
+ NULL , NULL , NULL , anAny , true ) ;
+ PortableServer::ObjectId * id = myValue->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ SUPERV::Value_var iobject ;
+ iobject = SUPERV::Value::_narrow(obj) ;
+// endService( "SuperV_Impl::Value" );
+ return SUPERV::Value::_duplicate( iobject ) ;
+}
+
+SUPERV::Graph_ptr SuperV_Impl::Graph(const char * aGraphName ) {
+ beginService( "SuperV_Impl::Graph" );
+ bool created = true ;
+ Graph_Impl * myGraph ;
+ myGraph = new Graph_Impl( _Orb , _Poa, _ContId,
+ instanceName() , interfaceName() , aGraphName ) ;
+ int lenname = strlen( aGraphName ) ;
+ if ( lenname > 4 && !strcmp( &aGraphName[ lenname - 4 ] , ".xml" ) ) {
+ created = myGraph->Import( aGraphName ) ;
+ }
+ else {
+ myGraph->Import( (char * ) NULL ) ;
+ }
+ SUPERV::Graph_var iobject = SUPERV::Graph::_nil() ;
+ if ( created ) {
+ PortableServer::ObjectId * id = myGraph->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Graph::_narrow(obj) ;
+ myGraph->SetObjRef( SUPERV::Graph::_duplicate( iobject ) ) ;
+ }
+ endService( "SuperV_Impl::Graph" );
+ return SUPERV::Graph::_duplicate(iobject) ;
+}
+
+SUPERV::Graph_ptr SuperV_Impl::GraphE(const char * aGraphName ) {
+ beginService( "SuperV_Impl::GraphE" );
+ bool created = true ;
+ Graph_Impl * myGraph ;
+ myGraph = new Graph_Impl( _Orb , _Poa, _ContId,
+ instanceName() , interfaceName() , aGraphName ) ;
+ int lenname = strlen( aGraphName ) ;
+ if ( lenname > 4 && !strcmp( &aGraphName[ lenname - 4 ] , ".xml" ) ) {
+ created = myGraph->Import( aGraphName ) ;
+ }
+ else {
+ myGraph->Import( (char * ) NULL ) ;
+ }
+ SUPERV::Graph_var iobject = SUPERV::Graph::_nil() ;
+ if ( created ) {
+ PortableServer::ObjectId * id = myGraph->getId() ;
+ CORBA::Object_var obj = _poa->id_to_reference(*id);
+ iobject = SUPERV::Graph::_narrow(obj) ;
+ myGraph->SetObjRef( SUPERV::Graph::_duplicate( iobject ) ) ;
+ }
+ myGraph->ReadOnly() ;
+ endService( "SuperV_Impl::GraphE" );
+ return SUPERV::Graph::_duplicate(iobject) ;
+}
+
+SUPERV::Graph_ptr SuperV_Impl::getGraph(const char* ior) {
+ SUPERV::Graph_var iobject = (SUPERV::Graph_var)NULL;
+ try {
+ CORBA::Object_ptr obj = _Orb->string_to_object(ior);
+ iobject = SUPERV::Graph::_narrow(obj);
+ } catch ( ... ) {
+ SUPERV::Graph_var iobject = (SUPERV::Graph_var)NULL;
+ };
+ return(SUPERV::Graph::_duplicate(iobject));
+}
+
+PortableServer::ObjectId * SupervisionEngine_factory (
+ CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName
+// , int argc ,
+// char ** argv
+ ) {
+ MESSAGE("SuperV_factory SuperV ("
+ << instanceName << "," << interfaceName << ")");
+ SuperV_Impl * mySuperV = new SuperV_Impl( orb , poa , contId ,
+ instanceName, interfaceName
+// , argc , argv
+ );
+ return mySuperV->getId() ;
+}
--- /dev/null
+//=============================================================================
+// File : SuperV_Impl.hxx
+// Created : jeu jui 30 12:28:30 CEST 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2001
+// $Header$
+//=============================================================================
+
+#ifndef _SUPERV_IMPL_HXX_
+#define _SUPERV_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOMEDS)
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "Graph_Impl.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+
+class SuperV_Impl : public POA_SUPERV::SuperG ,
+ public Engines_Component_i {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+ char *myStrURL;
+
+ public:
+ SuperV_Impl();
+ SuperV_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName
+// , int argc ,
+// char ** argv
+ ) ;
+
+ virtual ~SuperV_Impl() ;
+ virtual void Destroy() ;
+
+// void Save(const char* IORSComponent, const char* aUrlOfFile);
+// void Load(const char* IORSComponent, const char* aUrlOfFile);
+ SALOMEDS::TMPFile* Save(SALOMEDS::SComponent_ptr theComponent,
+ const char* theURL,
+ bool isMultiFile);
+ CORBA::Boolean Load(SALOMEDS::SComponent_ptr theComponent,
+ const SALOMEDS::TMPFile& theStream,
+ const char* theURL,
+ bool isMultiFile);
+
+ void Close(SALOMEDS::SComponent_ptr theComponent);
+ char* ComponentDataType();
+
+ char* IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
+ const char* IORString,
+ CORBA::Boolean isMultiFile);
+ char* LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
+ const char* aLocalPersistentID,
+ CORBA::Boolean isMultiFile)
+ throw(SALOME::SALOME_Exception);
+
+ char* IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject, CORBA::Boolean isMultiFile);
+ char* LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject, CORBA::Boolean isMultiFile);
+
+ bool CanPublishInStudy(CORBA::Object_ptr theIOR);
+ SALOMEDS::SObject_ptr PublishInStudy(SALOMEDS::Study_ptr theStudy,
+ SALOMEDS::SObject_ptr theSObject,
+ CORBA::Object_ptr theObject,
+ const char* theName) throw (SALOME::SALOME_Exception) ;
+
+ CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject);
+ SALOMEDS::TMPFile* CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID);
+ CORBA::Boolean CanPaste(const char* theComponentName, CORBA::Long theObjectID);
+ SALOMEDS::SObject_ptr PasteInto(const SALOMEDS::TMPFile& theStream,
+ CORBA::Long theObjectID,
+ SALOMEDS::SObject_ptr theObject);
+
+ virtual SUPERV::Value_ptr StringValue( const char * aStrIOR ) ;
+ virtual SUPERV::Value_ptr AnyValue( const CORBA::Any & anAny ) ;
+ virtual SUPERV::Value_ptr Value( CORBA::Any * anAny ) ;
+
+ virtual SUPERV::Graph_ptr Graph( const char * aDataFlowName ) ;
+
+ virtual SUPERV::Graph_ptr GraphE( const char * aDataFlowName ) ;
+
+ virtual SUPERV::Graph_ptr getGraph(const char* ior);
+
+};
+
+extern "C"
+ PortableServer::ObjectId * SupervisionEngine_factory
+ ( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName
+// , int argc ,
+// char ** argv
+ ) ;
+
+#endif
--- /dev/null
+using namespace std;
+//=============================================================================
+// File : Value_Impl.cxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// $Header:
+//=============================================================================
+
+#include <stdio.h>
+#include <fstream>
+#include <strstream>
+#include <string>
+
+#include "utilities.h"
+
+#include "Value_Impl.hxx"
+
+Value_Impl::Value_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ const char *ParameterName ,
+ const CORBA::Any * anAny ,
+ const bool activate ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ if ( activate ) {
+// MESSAGE("Value_Impl::Value_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _DataFlowEditor = DataFlowEditor ;
+ _DataFlowNode = DataFlowNode ;
+ if ( ParameterName != NULL ) {
+ _ParameterName = new char[ strlen( ParameterName ) + 1 ] ;
+ strcpy( _ParameterName , ParameterName ) ;
+ }
+ else {
+ _ParameterName = NULL ;
+ }
+ _InputValue = false ;
+ _Any = new CORBA::Any( *anAny ) ;
+}
+
+Value_Impl::Value_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ const char *ParameterName ,
+ const bool activate ) :
+ Engines_Component_i(orb, poa, contId, instanceName, interfaceName, false, false) {
+ if ( activate ) {
+// MESSAGE("Value_Impl::Value_Impl activate object instanceName("
+// << instanceName << ") interfaceName(" << interfaceName << ") --> "
+// << hex << (void *) this << dec )
+ _thisObj = this ;
+ _id = _poa->activate_object(_thisObj);
+ }
+ _Orb = CORBA::ORB::_duplicate(orb);
+ _Poa = poa ;
+ _ContId = contId ;
+ _DataFlowEditor = DataFlowEditor ;
+ _DataFlowNode = DataFlowNode ;
+ if ( ParameterName != NULL ) {
+ _ParameterName = new char[ strlen( ParameterName ) + 1 ] ;
+ strcpy( _ParameterName , ParameterName ) ;
+ }
+ else {
+ _ParameterName = NULL ;
+ }
+ _InputValue = false ;
+ _Any = new CORBA::Any() ;
+}
+
+Value_Impl::Value_Impl() {
+}
+
+Value_Impl::~Value_Impl() {
+ beginService( "Value_Impl::~Value_Impl" );
+ endService( "Value_Impl::~Value_Impl" );
+}
+
+void Value_Impl::destroy() {
+ beginService( "Value_Impl::destroy" );
+ _poa->deactivate_object(*_id) ;
+ CORBA::release(_poa) ;
+ delete(_id) ;
+ _thisObj->_remove_ref();
+ endService( "Value_Impl::destroy" );
+}
+
+void Value_Impl::InPort( bool anInput ) {
+ _InputPort = anInput ;
+}
+
+bool Value_Impl::Input( const CORBA::Any * anAny ) {
+// _DataFlowEditor->AddInputData( _DataFlowNode->Name() ,
+// _ParameterName ,
+// *anAny ) ;
+ delete _Any ;
+ _Any = new CORBA::Any( *anAny ) ;
+ _InputValue = true ;
+ return true ;
+}
+
+CORBA::Any * Value_Impl::ToAny() {
+ CORBA::Any * anAny ;
+ if ( _DataFlowEditor ) {
+ char * name ;
+ if ( _DataFlowNode ) {
+ name = _DataFlowNode->Name() ;
+ }
+ else {
+ name = _DataFlowEditor->Name() ;
+ }
+ if ( _InputPort ) {
+ if ( _DataFlowNode ) {
+ _InputValue = _DataFlowNode->HasInput( _ParameterName ) ;
+ }
+ else {
+ _InputValue = _DataFlowEditor->HasInput( _ParameterName ) ;
+ }
+ if ( _InputValue && _DataFlowEditor->IsEditing() ) {
+ anAny = new CORBA::Any( * _DataFlowEditor->GetInData( name ,
+ _ParameterName ) ) ;
+ }
+ else {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ anAny = new CORBA::Any( * _DataFlowExecutor->GetInData( name ,
+ _ParameterName ) ) ;
+ }
+ else {
+ anAny = new CORBA::Any( *_Any ) ;
+ }
+ }
+ }
+ else {
+ if ( _InputValue && _DataFlowEditor->IsEditing() ) {
+ anAny = new CORBA::Any( * _DataFlowEditor->GetOutData( name ,
+ _ParameterName ) ) ;
+ }
+ else {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ anAny = new CORBA::Any( * _DataFlowExecutor->GetOutData( name ,
+ _ParameterName ) ) ;
+ }
+ else {
+ anAny = new CORBA::Any( *_Any ) ;
+ }
+ }
+ }
+ }
+ else {
+ anAny = new CORBA::Any( *_Any ) ;
+ }
+ return anAny ;
+}
+
+char * Value_Impl::ToString() {
+// beginService( "Value_Impl::ToString" );
+ CORBA::Any anAny = *ToAny() ;
+// cout << "Value_Impl::ToString " << _DataFlowNode->Name() << " "
+// << _ParameterName << " " ;
+ if ( _DataFlowEditor ) {
+ char * name ;
+ if ( _DataFlowNode ) {
+ name = _DataFlowNode->Name() ;
+ }
+ else {
+ name = _DataFlowEditor->Name() ;
+ }
+ if ( _InputPort ) {
+ if ( _DataFlowNode ) {
+ _InputValue = _DataFlowNode->HasInput( _ParameterName ) ;
+ }
+ else {
+ _InputValue = _DataFlowEditor->HasInput( _ParameterName ) ;
+ }
+ if ( _InputValue && _DataFlowEditor->IsEditing() ) {
+ anAny = * _DataFlowEditor->GetInData( name ,
+ _ParameterName ) ;
+ }
+ else {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ anAny = * _DataFlowExecutor->GetInData( name ,
+ _ParameterName ) ;
+ }
+ }
+ }
+ else {
+ if ( _InputValue && _DataFlowEditor->IsEditing() ) {
+ anAny = * _DataFlowEditor->GetOutData( name ,
+ _ParameterName ) ;
+ }
+ else {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ anAny = * _DataFlowExecutor->GetOutData( name ,
+ _ParameterName ) ;
+ }
+ }
+ }
+ }
+ char* retstr ;
+ switch (anAny.type()->kind()) {
+ case CORBA::tk_string: {
+ anAny >>= retstr;
+// MESSAGE( "ToString( string ) " << retstr );
+ break ;
+ }
+ case CORBA::tk_double: {
+ double d;
+ anAny >>= d;
+ retstr = new char[13];
+ snprintf(retstr, 13, "%lf", d);
+// MESSAGE( "ToString( double ) " << retstr );
+ break ;
+ }
+ case CORBA::tk_long: {
+ long l;
+ anAny >>= l;
+ retstr = new char[13];
+ snprintf(retstr, 13, "%ld", l);
+// MESSAGE( "ToString( long ) " << retstr );
+ break ;
+ }
+ case CORBA::tk_objref: {
+ CORBA::Object_ptr obj ;
+ try {
+ anAny >>= obj ;
+ retstr = _Orb->object_to_string(obj );
+// MESSAGE( "ToString( object ) " << retstr );
+ }
+ catch ( ... ) {
+ retstr = "Unknown CORBA::Any Type" ;
+ }
+ break ;
+ }
+ default: {
+ retstr = "Unknown CORBA::Any Type" ;
+// MESSAGE( retstr );
+ break ;
+ }
+ }
+// endService( "Value_Impl::ToString" );
+ return CORBA::string_dup( retstr ) ;
+}
+
+bool Value_Impl::IsIOR() {
+ CORBA::Any anAny = *ToAny() ;
+ if ( _DataFlowEditor ) {
+ char * name ;
+ if ( _DataFlowNode ) {
+ name = _DataFlowNode->Name() ;
+ }
+ else {
+ name = _DataFlowEditor->Name() ;
+ }
+ if ( _InputPort ) {
+ if ( _DataFlowNode ) {
+ _InputValue = _DataFlowNode->HasInput( _ParameterName ) ;
+ }
+ else {
+ _InputValue = _DataFlowEditor->HasInput( _ParameterName ) ;
+ }
+ if ( _InputValue && _DataFlowEditor->IsEditing() ) {
+ anAny = * _DataFlowEditor->GetInData( name ,
+ _ParameterName ) ;
+ }
+ else {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ anAny = * _DataFlowExecutor->GetInData( name ,
+ _ParameterName ) ;
+ }
+ }
+ }
+ else {
+ if ( _InputValue && _DataFlowEditor->IsEditing() ) {
+ anAny = * _DataFlowEditor->GetOutData( name ,
+ _ParameterName ) ;
+ }
+ else {
+ GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
+ if ( _DataFlowExecutor ) {
+ anAny = * _DataFlowExecutor->GetOutData( name ,
+ _ParameterName ) ;
+ }
+ }
+ }
+ }
+ return(anAny.type()->kind() == CORBA::tk_objref);
+}
+
+char* Value_Impl::ComponentDataType() {
+ GraphExecutor::DataFlow* _DataFlowExecutor = _DataFlowEditor->Executor();
+ const GraphBase::ComputingNode* node = _DataFlowExecutor->GetGraphNode(_DataFlowNode->Name());
+ if ( node->IsFactoryNode() ) {
+ Engines::Component_var compo = ((GraphBase::FactoryNode * ) node )->Component();
+ if ( CORBA::is_nil( compo ) ) {
+ return ( strdup( "UnknownComponent" ) ) ;
+ }
+ else {
+ return ( strdup( compo->instanceName() ) ) ;
+ }
+ }
+ return ( strdup ( "UnknownComponent" ) ) ;
+}
--- /dev/null
+//=============================================================================
+// File : Value_Impl.hxx
+// Created : Nov 2001
+// Author : Jean Rahuel
+// Project : SALOME
+// Copyright : CEA 2001
+// $Header:
+//=============================================================================
+
+#ifndef _VALUE_IMPL_HXX_
+#define _VALUE_IMPL_HXX_
+
+#include <iostream.h>
+
+#include "CORBA.h"
+
+#include <SALOMEconfig.h>
+#include "SALOME_Component_i.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+#include "DataFlowEditor_DataFlow.hxx"
+
+class Value_Impl : public POA_SUPERV::Value ,
+ public Engines_Component_i {
+ private:
+
+ CORBA::ORB_ptr _Orb ;
+ PortableServer::POA_ptr _Poa ;
+ PortableServer::ObjectId * _ContId ;
+
+ GraphEditor::DataFlow * _DataFlowEditor ;
+ GraphEditor::InNode * _DataFlowNode ;
+ char * _ParameterName ;
+ bool _InputPort ;
+ bool _InputValue ;
+ CORBA::Any * _Any ;
+
+ public:
+ Value_Impl();
+ Value_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ const char *ParameterName ,
+ const CORBA::Any * anAny ,
+ const bool activate ) ;
+ Value_Impl( CORBA::ORB_ptr orb ,
+ PortableServer::POA_ptr poa ,
+ PortableServer::ObjectId * contId ,
+ const char *instanceName ,
+ const char *interfaceName ,
+ GraphEditor::DataFlow * DataFlowEditor ,
+ GraphEditor::InNode * DataFlowNode ,
+ const char *ParameterName ,
+ const bool activate ) ;
+
+ virtual ~Value_Impl() ;
+ virtual void destroy() ;
+
+ virtual void InPort( bool anInput ) ;
+
+ virtual bool Input( const CORBA::Any * anAny ) ;
+
+ virtual CORBA::Any * ToAny() ;
+ virtual char * ToString() ;
+ virtual bool IsIOR() ;
+ virtual char* ComponentDataType() ;
+
+} ;
+
+#endif
--- /dev/null
+#! /usr/bin/env python
+
+try :
+ from batchmode_salome import orb
+ from batchmode_salome import lcc
+ from batchmode_salome import naming_service
+ from batchmode_salome import CORBA
+ from batchmode_salome import myStudy
+except :
+ import curses
+ from LifeCycleCORBA import *
+ from SALOME_NamingServicePy import *
+ import SUPERV
+ import SUPERV_idl
+ from batchmode_salome import *
+# try :
+# from libSuperVision_Swig import SuperV_Swig
+# print 'SuperV_Swig imported'
+# except :
+# SuperV_Swig = None
+ orb = CORBA.ORB_init([''], CORBA.ORB_ID)
+ lcc = LifeCycleCORBA(orb)
+ naming_service = SALOME_NamingServicePy_i(orb)
+
+import re
+from types import *
+import SALOMEDS
+
+#try :
+# SuperVision = SuperV_Swig( len(sys.argv) , sys.argv )
+# SuperVision.Swig = 1
+# print 'SuperV_Swig created'
+#except :
+# SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
+# SuperVision.Swig = 0
+# print 'Supervision Component loaded'
+
+SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
+SuperVision.Swig = 0
+
+modulecatalog = naming_service.Resolve("/Kernel/ModulCatalog")
+
+myBuilder = myStudy.NewBuilder()
+father = myStudy.FindComponent("SUPERV")
+if father is None:
+ father = myBuilder.NewComponent("SUPERV")
+ A1 = myBuilder.FindOrCreateAttribute(father, "AttributeName");
+ FName = A1._narrow(SALOMEDS.AttributeName)
+ FName.SetValue("Supervision")
+ A2 = myBuilder.FindOrCreateAttribute(father, "AttributePixMap");
+ aPixmap = A2._narrow(SALOMEDS.AttributePixMap);
+ aPixmap.SetPixMap( "ICON_OBJBROWSER_Supervision" );
+ myBuilder.DefineComponentInstance(father,SuperVision)
+
+
+def PortInputFloat(obj, x):
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_double, x)))
+
+def PortInputLong(obj, x):
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_long, x)))
+
+def PortInputObject(obj, x):
+ try:
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_Object, x)))
+ except:
+ return obj.Input( SuperVision.AnyValue( x ) )
+
+def PortInputString(obj, x):
+ return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_string, x)))
+
+def InputFloat(obj, nodein_port, x):
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_double, x)))
+
+def InputLong(obj, nodein_port, x):
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_long, x)))
+
+def InputObject(obj, nodein_port, x):
+ try:
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_Object, x)))
+ except:
+ return obj.Input(nodein_port, SuperVision.AnyValue( x ) )
+
+def InputString(obj, nodein_port, x):
+ return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_string, x)))
+
+
+def addStudy(ior):
+ dataflow = SuperVision.getGraph(ior)
+ name=dataflow.Name()
+ itr = myStudy.NewChildIterator(father)
+ while itr.More():
+ item=itr.Value()
+ res,A=item.FindAttribute("AttributeName")
+ if res:
+ aName = A._narrow(SALOMEDS.AttributeName)
+ if aName.Value() == name :
+ res, A = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
+ anIOR = A._narrow(SALOMEDS.AttributeIOR);
+ anIOR.SetValue(dataflow.getIOR())
+ return
+ itr.Next()
+ obj = myBuilder.NewObject(father)
+ A=myBuilder.FindOrCreateAttribute(obj, "AttributeName")
+ aName=A._narrow(SALOMEDS.AttributeName)
+ aName.SetValue(name)
+ A=myBuilder.FindOrCreateAttribute(obj, "AttributeIOR")
+ anIOR = A._narrow(SALOMEDS.AttributeIOR)
+ anIOR.SetValue(dataflow.getIOR())
+
+typestring = re.compile(r"_[^_]+_([^_]+)_.*")
+
+def getRealArgs(self,args):
+ types = []
+ realargs = []
+
+ try:
+ t = self.this
+ types.append(typestring.match(self).group(1))
+ realargs.append(t)
+ except:
+ types.append(type(self))
+ realargs.append(self)
+ for a in args:
+ try:
+ t = a.this
+ types.append(typestring.match(a).group(1))
+ realargs.append(t)
+ except:
+ types.append(type(a))
+ realargs.append(a)
+
+ return tuple(types), tuple(realargs)
+
+bs_AddInput_valuedict = {
+ (InstanceType, FloatType) : PortInputFloat,
+ (InstanceType, IntType) : PortInputLong,
+ (InstanceType, StringType) : PortInputString,
+ (InstanceType, InstanceType) : PortInputObject,
+ (InstanceType, StringType, FloatType) : InputFloat,
+ (InstanceType, StringType, IntType) : InputLong,
+ (InstanceType, StringType, StringType) : InputString,
+ (InstanceType, StringType, InstanceType) : InputObject,
+ (InstanceType, StringType, ListType) : InputObject,
+}
+
+
+def Args( aService , aNodeName , verbose ):
+ lenin = len( aService.ServiceinParameter )
+ infos = aNodeName + 'info = "'
+ infos = infos + 'NodeName : ' + aNodeName + '\\n'
+ infos = infos + 'ServiceName : ' + aService.ServiceName + '\\n'
+ infos = infos + 'PortNames : \\n'
+ defnames = aNodeName + " = " + "'" + aNodeName + "' ; "
+ i = 0
+ while i < lenin :
+ argname = aNodeName + aService.ServiceinParameter[ i ].Parametername
+ valname = aNodeName + "\\\\"
+ valname = valname + aService.ServiceinParameter[ i ].Parametername
+ defnames = defnames + argname + " = " + "'" + valname + "' ; "
+ infos = infos + str(i) + '. ' + argname + ' : Input'
+ infos = infos + str(i) + ' '
+ infos = infos + aService.ServiceinParameter[ i ].Parametername + ' '
+ infos = infos + aService.ServiceinParameter[ i ].Parametertype + '\\n'
+ i = i + 1
+ lenout = len( aService.ServiceoutParameter )
+ i = 0
+ while i < lenout :
+ argname = aNodeName + aService.ServiceoutParameter[ i ].Parametername
+ valname = aNodeName + "\\\\"
+ valname = valname + aService.ServiceoutParameter[ i ].Parametername
+ defnames = defnames + argname + " = " + "'" + valname + "' ; "
+ infos = infos + str(lenin+i) + '. ' + argname + ' : Output'
+ infos = infos + str(i) + ' '
+ infos = infos + aService.ServiceoutParameter[ i ].Parametername + ' '
+ infos = infos + aService.ServiceoutParameter[ i ].Parametertype + '\\n'
+ i = i + 1
+ infos = infos + '"'
+ defnames = defnames + infos
+ if verbose :
+ defnames = defnames + " ; print " + aNodeName + "info"
+ return defnames
+
+def Service_Swig( aCatalogService ) :
+ aService = SuperVision.Service()
+ aService.ServiceName = aCatalogService.ServiceName
+ i = 0
+ while i < len( aCatalogService.ServiceinParameter ) :
+ p = SuperVision.ServicesParameter( aCatalogService.ServiceinParameter[i].Parametertype , aCatalogService.ServiceinParameter[i].Parametername )
+ SuperVision.AddInParameter( aService , p )
+ i = i + 1
+ i = 0
+ while i < len( aCatalogService.ServiceoutParameter ) :
+ p = SuperVision.ServicesParameter( aCatalogService.ServiceoutParameter[i].Parametertype , aCatalogService.ServiceoutParameter[i].Parametername )
+ SuperVision.AddOutParameter( aService , p )
+ i = i + 1
+ return aService
+
+##########################################################
+class CNode:
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def Name( self ):
+ return self.N.Name()
+ def Service( self ):
+ return self.N.Service()
+ def Kind( self ):
+ return self.N.Kind()
+ def CreationDate( self ):
+ return self.N.CreationDate()
+ def LastUpdateDate( self ):
+ return self.N.LastUpdateDate()
+ def Version( self ):
+ return self.N.Version()
+ def Author( self ):
+ return self.N.Author()
+ def Comment( self ):
+ return self.N.Comment()
+
+ def SetName( self , aNewName ):
+ return self.N.SetName( aNewName )
+ def SetAuthor( self , anAuthor ):
+ return self.N.SetAuthor( anAuthor )
+ def SetComment( self , aComment ):
+ return self.N.SetComment( aComment )
+
+ def Print( self ):
+ print "Name ",self.N.Name()
+ if self.N.IsFactory() :
+ print "ComponentName ",self.N.GetComponentName()
+ print "InterfaceName ",self.N.GetInterfaceName()
+ aService = self.N.Service()
+ print "Service Name ",aService.ServiceName
+ lenin = len( aService.ServiceinParameter )
+ print " ",lenin," input argument(s) :"
+ i = 0
+ while i < lenin :
+ print " ",i,". ",aService.ServiceinParameter[ i ].Parametername," ",aService.ServiceinParameter[ i ].Parametertype
+ i = i + 1
+ lenout = len( aService.ServiceoutParameter )
+ print " ",lenout," output argument(s) :"
+ i = 0
+ while i < lenout :
+ print " ",i,". ",aService.ServiceoutParameter[ i ].Parametername," ",aService.ServiceoutParameter[ i ].Parametertype
+ i = i + 1
+ aKind = self.N.Kind()
+ print "KindOfNode",aKind
+ aFirstCreation = self.N.CreationDate()
+ print "Creation Date ",aFirstCreation.Day,"-",aFirstCreation.Month,"-",aFirstCreation.Year," ",aFirstCreation.Hour,":",aFirstCreation.Minute,":",aFirstCreation.Second
+ aLastModification = self.N.LastUpdateDate()
+ print "Update Date ",aLastModification.Day,"-",aLastModification.Month,"-",aLastModification.Year," ",aLastModification.Hour,":",aLastModification.Minute,":",aLastModification.Second
+ print "Version ",self.N.Version()
+ print "Author ",self.N.Author()
+ if self.N.IsFactory() :
+ print "Container ",self.N.GetContainer()
+ print "Comment ",self.N.Comment()
+ print "Coords ",self.N.X()," ",self.N.Y()
+ def Port( self , aPortName ):
+ aPort = self.N.Port( aPortName )
+ if aPort != None :
+ myPort = Port( aPort , self.N.Verbose )
+ return myPort
+ if self.N.Verbose :
+ print "Error while creating the Port : ",aPortName
+ return None
+ def Input( self , *args ):
+ types, realargs = getRealArgs(self.N,args)
+ fn = bs_AddInput_valuedict[types]
+ anInput = apply( fn, realargs)
+ if anInput != None :
+ myInput = Port( anInput , self.N.Verbose )
+ return myInput
+ ErrMsg = "Failed to create the Input"
+ if self.N.Verbose :
+ print ErrMsg
+ return anInput
+# def BusPort( self , InOutParameterName , InOutParameterType ):
+# sts,inp,outp = self.N.BusPort( InOutParameterName ,
+# InOutParameterType )
+# inp = Port( inp , self.N.Verbose )
+# outp = Port( outp , self.N.Verbose )
+# return sts,inp,outp
+# def BusPorts( self , InputParameterName , InputParameterType ,
+# OutputParameterName , OutputParameterType ):
+# sts,inp,outp = self.N.BusPorts( InputParameterName ,
+# InputParameterType ,
+# OutputParameterName ,
+# OutputParameterType )
+# inp = Port( inp , self.N.Verbose )
+# outp = Port( outp , self.N.Verbose )
+# return sts,inp,outp
+ def Ports( self ):
+ ports = self.N.Ports()
+ i = 0
+ while i < len( ports ) :
+ ports[ i ] = Port( ports[i] , self.N.Verbose )
+ i = i + 1
+ return ports
+ def ListPorts( self , *args ):
+ if len( args ) == 0 :
+ aName = self.N.Name()
+ else :
+ aName = args[ 0 ]
+ ports = self.N.Ports()
+ listofports = ""
+ if len( ports ) :
+ portsname = ports[ 0 ].Name()
+ bs = portsname.find('\\')
+ if bs != -1 :
+ portsname1,portsname2 = portsname.split('\\')
+ portsname = portsname1 + portsname2
+ listofports = aName + portsname
+ i = 1
+ while i < len( ports ) :
+ portsname = ports[ i ].Name()
+ bs = portsname.find('\\')
+ if bs != -1 :
+ portsname1,portsname2 = portsname.split('\\')
+ portsname = portsname1 + portsname2
+ listofports = listofports + ',' + aName + portsname
+ i = i + 1
+ print listofports
+ if len( ports ) == 1 :
+ listofports = "[" + listofports + "] = " + aName + ".Ports()"
+ else :
+ listofports = listofports + " = " + aName + ".Ports()"
+ return listofports
+ def PrintPorts( self ):
+ ports = self.N.Ports()
+ i = 0
+ while i < len( ports ) :
+ Direction = "Out"
+ if ports[ i ].IsInput() :
+ Direction = "In"
+ print Direction,self.N.Name(),'(',ports[ i ].Name(),ports[ i ].Kind(),ports[ i ].Type(),') = ',ports[ i ].ToString()
+ i = i + 1
+ def Links( self ) :
+ links = self.N.Links()
+ i = 0
+ while i < len( links ) :
+ links[ i ] = Link( links[i] , self.N.Verbose )
+ i = i + 1
+ return links
+ def PrintLinks( self ):
+ links = self.Links()
+ i = 0
+ while i < len( links ) :
+ links[i].Print()
+ i = i + 1
+ def IsGraph( self ):
+ return self.N.IsGraph()
+ def IsComputing( self ):
+ return self.N.IsComputing()
+ def IsFactory( self ):
+ return self.N.IsFactory()
+ def IsInLine( self ):
+ return self.N.IsInLine()
+ def IsGOTO( self ):
+ return self.N.IsGOTO()
+ def IsLoop( self ):
+ return self.N.IsLoop()
+ def IsEndLoop( self ):
+ return self.N.IsEndLoop()
+ def IsSwitch( self ):
+ return self.N.IsSwitch()
+ def IsEndSwitch( self ):
+ return self.N.IsEndSwitch()
+ def SubGraph( self ):
+ return self.N.SubGraph()
+ def Thread( self ):
+ return self.N.Thread()
+ def IsWaiting( self ):
+ return self.N.IsWaiting()
+ def IsRunning( self ):
+ return self.N.IsRunning()
+ def IsDone( self ):
+ return self.N.IsDone()
+ def IsSuspended( self ):
+ return self.N.IsSuspended()
+ def State( self ):
+ return self.N.State()
+ def Control( self ):
+ return self.N.Control()
+ def ControlClear( self ):
+ return self.N.ControlClear()
+ def AutoState( self ):
+ return self.N.AutoState()
+ def ReadyW( self ):
+ return self.N.ReadyW()
+ def RunningW( self ):
+ return self.N.RunningW()
+ def DoneW( self ):
+ return self.N.DoneW()
+ def SuspendedW( self ):
+ return self.N.SuspendedW()
+ def ReRun( self ):
+ return self.N.ReRun()
+ def ReStart( self ):
+ return self.N.ReStart()
+ def ReRunAt( self , aNodeName ):
+ return self.N.ReRunAt( aNodeName )
+ def ReStartAt( self , aNodeName ):
+ return self.N.ReStartAt( aNodeName )
+ def Ping( self ):
+ return self.N.ping()
+ def Kill( self ):
+ return self.N.Kill()
+ def KillDone( self ):
+ return self.N.KillDone()
+ def Suspend( self ):
+ return self.N.Suspend()
+ def SuspendDone( self ):
+ return self.N.SuspendDone()
+ def Resume( self ):
+ return self.N.Resume()
+ def Stop( self ):
+ return self.N.Stop()
+ def Coords( self , X , Y ):
+ return self.N.Coords( X , Y )
+ def X( self ):
+ return self.N.X()
+ def Y( self ):
+ return self.N.Y()
+ def destroy( self ):
+ self.N.destroy()
+
+##########################################################
+class FNode(CNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def GetComponentName( self ):
+ return self.N.ComponentName()
+ def GetInterfaceName( self ):
+ return self.N._get_interfaceName()
+ def GetContainer( self ):
+ return self.N.Container()
+ def SetComponentName( self , aComponentName ):
+ return self.N.SetComponentName( aComponentName )
+ def SetInterfaceName( self , anInterfaceName ):
+ return self.N.SetInterfaceName( anInterfaceName )
+ def SetContainer( self , aComputer ):
+ return self.N.SetContainer( aComputer )
+
+##########################################################
+class INode(CNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def Edit( self , FuncName , PyFunc ) :
+ file = '/tmp/' + FuncName + '.py'
+ i = 0
+ fd = os.open( file , os.O_CREAT | os.O_WRONLY | os.O_TRUNC )
+ while ( i < len( PyFunc ) ) :
+ os.write( fd , PyFunc[ i ] + '\n' )
+ i = i + 1
+ edit = '${EDITOR} ' + file
+ os.system( edit )
+ fd = os.open( file , os.O_RDONLY )
+ line = os.read( fd , 132 )
+ res = ''
+ while len( line ) :
+ res = res + line
+ line = os.read( fd , 132 )
+ PyFunc = res.splitlines()
+ i = 0
+ while i < len( PyFunc ) :
+ print PyFunc[i]
+ i = i + 1
+ return PyFunc
+ def SetPyFunction( self , FuncName , aPyFunction ):
+ return self.N.SetPyFunction( FuncName , aPyFunction )
+ def PyFunction( self ):
+ return self.N.PyFunction()
+ def PyFuncName( self ):
+ return self.N.PyFuncName()
+ def EPyFunc( self ):
+ PyFunc = self.N.PyFunction()
+ PyFunc = self.Edit( self.N.PyFuncName() , PyFunc )
+ self.N.SetPyFunction( self.N.PyFuncName() , PyFunc )
+ def InPort( self , aParameterName , aParameterType ):
+ aPort = self.N.InPort( aParameterName ,
+ aParameterType )
+ if aPort != None :
+ myPort = Port( aPort , self.N.Verbose )
+ return myPort
+ if self.N.Verbose :
+ print "Error while creating the Port : ",aParameterName
+ return None
+ def OutPort( self , aParameterName , aParameterType ):
+ aPort = self.N.OutPort( aParameterName ,
+ aParameterType )
+ if aPort != None :
+ myPort = Port( aPort , self.N.Verbose )
+ return myPort
+ if self.N.Verbose :
+ print "Error while creating the Port : ",aParameterName
+ return None
+
+##########################################################
+class GNode(INode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def SetCoupled( self , anInLineNode ):
+ if self.N.IsGOTO() :
+ node = self.N.SetCoupled( anInLineNode )
+ else :
+ node = None
+ return node
+ def Coupled( self ):
+ node = self.N.Coupled()
+ if node != None :
+ if node.IsInLine() :
+ node = INode( node , self.N.Verbose )
+ elif node.IsLoop() :
+ node = LNode( node , self.N.Verbose )
+ elif node.IsEndLoop() :
+ node = ELNode( node , self.N.Verbose )
+ elif node.IsSwitch() :
+ node = SNode( node , self.N.Verbose )
+ elif node.IsEndSwitch() :
+ node = ESNode( node , self.N.Verbose )
+ return node
+
+##########################################################
+class LNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+ def SetPyInit( self , InitName , aPyFunction ):
+ return self.N.SetPyInit( InitName , aPyFunction )
+ def PyInit( self ):
+ return self.N.PyInit()
+ def PyInitName( self ) :
+ return self.N.PyInitName()
+ def EPyInit( self ):
+ PyFunc = self.N.PyFunction()
+ PyFunc = self.Edit( self.N.PyFuncName() , PyFunc )
+ self.N.SetPyFunction( self.N.PyFuncName() , PyFunc )
+ def SetPyMore( self , MoreName , aPyFunction ):
+ return self.N.SetPyMore( MoreName , aPyFunction )
+ def PyMore( self ):
+ return self.N.PyMore()
+ def PyMoreName( self ) :
+ return self.N.PyMoreName()
+ def EPyMore( self ):
+ PyMore = self.N.PyMore()
+ PyMore = self.Edit( self.N.PyMoreName() , PyMore )
+ self.N.SetPyMore( self.N.PyMoreName() , PyMore )
+ def SetPyNext( self , NextName , aPyFunction ):
+ return self.N.SetPyNext( NextName , aPyFunction )
+ def PyNext( self ):
+ return self.N.PyNext()
+ def PyNextName( self ) :
+ return self.N.PyNextName()
+ def EPyNext( self ):
+ PyNext = self.N.PyNext()
+ PyNext = self.Edit( self.N.PyNextName() , PyNext )
+ self.N.SetPyNext( self.N.PyNextName() , PyNext )
+
+##########################################################
+class ELNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+
+##########################################################
+class SNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+
+##########################################################
+class ESNode(GNode):
+##########################################################
+ def __init__( self , aNode , Verbose ):
+ self.N = aNode
+ self.N.Verbose = Verbose
+
+##########################################################
+#class ServicesParameter_Swig :
+##########################################################
+# def __init__( self , aServicesParameter ):
+# self.Parametertype = aServicesParameter.Parametertype
+# self.Parametername = aServicesParameter.Parametername
+
+##########################################################
+class Graph(INode):
+##########################################################
+ def __init__( self , aName ):
+ try:
+ graph = SuperVision.Graph( aName )
+ except:
+ try:
+ graph = aName.G.Copy()
+ except:
+ graph = None
+ if graph != None :
+ self.G = graph
+ self.G.Verbose = 1
+ self.N = graph
+ self.N.Verbose = 1
+ else :
+ print "Graph creation failed"
+ def CNode( self , *args ):
+ if len( args ) == 1 :
+ aService = args[ 0 ]
+ else :
+ aComponent = args[ 0 ]
+ anInterface = args[ 1 ]
+ aService = args[ 2 ]
+ NodeComponent = modulecatalog.GetComponent( aComponent )
+ aService = NodeComponent.GetService( anInterface , aService )
+ aNode = self.G.CNode( aService )
+ if aNode != None :
+ myNode = CNode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def Node( self , aComponent , anInterface , aService ):
+ if SuperVision.Swig :
+ aService = Service_Swig( aService )
+ return self.FNode( aComponent , anInterface , aService )
+ def FNode( self , aComponent , anInterface , aService ):
+ NodeComponent = modulecatalog.GetComponent( aComponent )
+ aService = NodeComponent.GetService( anInterface , aService )
+ if SuperVision.Swig :
+ aService = Service_Swig( aService )
+ aNode = self.G.FNode( aComponent , anInterface , aService )
+ if aNode != None :
+ myNode = FNode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def INode( self , FuncName , aPythonFunction ):
+ aNode = self.G.INode( FuncName , aPythonFunction )
+ if aNode != None :
+ myNode = INode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node"
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def GNode( self , FuncName , aPythonFunction , anINode ):
+ aNode = self.G.GNode( FuncName , aPythonFunction , anINode )
+ if aNode != None :
+ myNode = GNode( aNode , self.G.Verbose )
+ return myNode
+ ErrMsg = "Failed to create a Node"
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def LNode( self , InitName , InitFunction , MoreName , MoreFunction , NextName , NextFunction ):
+ aNode,anEndOfLoop = self.G.LNode( InitName , InitFunction , MoreName , MoreFunction , NextName , NextFunction )
+ if aNode != None :
+ myNode = LNode( aNode , self.G.Verbose )
+ myEndOfLoop = INode( anEndOfLoop , self.G.Verbose )
+ return myNode,myEndOfLoop
+ ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+ def SNode( self , FuncName , aPythonFunction ):
+ aNode,anEndOfSwitch = self.G.SNode( FuncName , aPythonFunction )
+ if aNode != None :
+ myNode = SNode( aNode , self.G.Verbose )
+ myEndOfSwitch = INode( anEndOfSwitch , self.G.Verbose )
+ return myNode,myEndOfSwitch
+ ErrMsg = "Failed to create a Node"
+ if self.G.Verbose :
+ print ErrMsg
+ return aNode
+# def LoopNode( self , aComponent , anInterface , aService , aNodeName ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode,anEndNode = self.G.LoopNode( aComponent , anInterface , aService , aNodeName )
+# myNode = aNode
+# myEndNode = anEndNode
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# if anEndNode != None :
+# myEndNode = Node( anEndNode , self.G.Verbose )
+# if ( aNode != None ) & ( anEndNode != None ) :
+# return myNode,myEndNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode,anEndNode
+# def SwitchNode( self , aComponent , anInterface , aService , aNodeName ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode,anEndNode = self.G.SwitchNode( aComponent , anInterface , aService , aNodeName )
+# myNode = aNode
+# myEndNode = anEndNode
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# if anEndNode != None :
+# myEndNode = Node( anEndNode , self.G.Verbose )
+# if ( aNode != None ) & ( anEndNode != None ) :
+# return myNode,myEndNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode,anEndNode
+# def LNode( self , aNodeName ):
+# aNode = self.G.LNode( aNodeName )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+# def LService( self , aComponent , anInterface , aService ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode = self.G.LService( aComponent , anInterface , aService )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+# def CNode( self , aNodeName ):
+# aNode = self.G.CNode( aNodeName )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+# def CService( self , aComponent , anInterface , aService ):
+# NodeComponent = modulecatalog.GetComponent( aComponent )
+# aService = NodeComponent.GetService( anInterface , aService )
+# aNode = self.G.CService( aComponent , anInterface , aService )
+# if aNode != None :
+# myNode = Node( aNode , self.G.Verbose )
+# return myNode
+# ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
+# if self.G.Verbose :
+# print ErrMsg
+# return aNode
+ def PrintService( self , aComponent , anInterface , aService ):
+ NodeComponent = modulecatalog.GetComponent( aComponent )
+ aService = NodeComponent.GetService( anInterface , aService )
+ print "ServiceName ",aService.ServiceName," :"
+ lenin = len( aService.ServiceinParameter )
+ print " ",lenin," input argument(s) :"
+ i = 0
+ while i < lenin :
+ print " ",i,". ",aService.ServiceinParameter[ i ].Parametername," ",aService.ServiceinParameter[ i ].Parametertype
+ i = i + 1
+ lenout = len( aService.ServiceoutParameter )
+ print " ",lenout," output argument(s) :"
+ i = 0
+ while i < lenout :
+ print " ",i,". ",aService.ServiceoutParameter[ i ].Parametername," ",aService.ServiceoutParameter[ i ].Parametertype
+ i = i + 1
+ def Link( self , aFromNodePort , aToNodePort ):
+ aLink = self.G.Link( aFromNodePort.P , aToNodePort.P )
+ if aLink != None :
+ myLink = Link( aLink , self.G.Verbose )
+ return myLink
+ ErrMsg = "Failed to create a Link from " + aFromNodePort.Node().Name() + "(" + aFromNodePort.Name() + ") to " + aToNodePort.Node().Name() + "(" + aToNodePort.Name() + ")"
+ if self.G.Verbose :
+ print ErrMsg
+ return aLink
+ def Import( self , anXmlFileName ):
+ return self.G.Import( anXmlFileName )
+ def Export( self , anXmlFileName ):
+ return self.G.Export( anXmlFileName )
+ def IsReadOnly( self ) :
+ return self.G.IsReadOnly()
+ def ComponentRef( self , aFactoryServer , aComponent ) :
+ return self.G.ComponentRef( aFactoryServer , aComponent )
+ def IsValid( self ):
+ return self.G.IsValid()
+ def IsExecutable( self ):
+ return self.G.IsExecutable()
+ def IsEditing( self ):
+ return self.G.IsEditing()
+ def IsExecuting( self ):
+ return self.G.IsExecuting()
+ def LevelMax( self ):
+ return self.G.LevelMax()
+ def ThreadsMax( self ):
+ return self.G.ThreadsMax()
+ def GraphsNumber( self ):
+ return self.G.GraphsNumber()
+ def LevelNodes( self , aLevel ):
+ nodes = self.G.LevelNodes( aLevel )
+ return self.nodesTuple( nodes )
+ def Run( self , *args ):
+ self.S = -1
+ aService = self.Service()
+ nargs = len( args )
+ i = 0
+ while nargs > 0 :
+ print aService.ServiceinParameter[ i ].Parametername," = ",args[i]
+ self.Input( aService.ServiceinParameter[ i ].Parametername , args[i] )
+ i = i + 1
+ nargs = nargs - 1
+ return self.G.Run()
+ def Start( self , *args ):
+ self.S = -1
+ aService = self.Service()
+ nargs = len( args )
+ i = 0
+ while nargs > 0 :
+ print aService.ServiceinParameter[ i ].Parametername," = ",args[i]
+ self.Input( aService.ServiceinParameter[ i ].Parametername , args[i] )
+ i = i + 1
+ nargs = nargs - 1
+ return self.G.Start()
+ def Event( self ):
+ sts,aNode,anEvent,aState = self.G.Event()
+ self.S = sts
+ return sts,aNode,anEvent,aState
+ def EventW( self ):
+ sts,aNode,anEvent,aState = self.G.EventW()
+ self.S = sts
+ return sts,aNode,anEvent,aState
+ def NextW( self ):
+ if self.S != 0 :
+ sts,aNode,anEvent,aState = self.G.EventW()
+ self.S = sts
+ print sts,aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
+ return sts
+ def Threads( self ):
+ return self.G.Threads()
+ def SuspendedThreads( self ):
+ return self.G.SuspendedThreads()
+ def LastLevelDone( self ):
+ return self.G.LastLevelDone()
+ def Verbose( self , verbose ):
+ preverbose = self.G.Verbose
+ self.G.Verbose = verbose
+ return preverbose
+ def Nodes( self ):
+ nodes = self.G.Nodes()
+ return self.nodesTuple( nodes )
+ def nodesTuple( self , nodes ) :
+ n = len( nodes.CNodes )
+ i = 0
+ j = 0
+ pynodes = []
+ while i < n :
+ pynodes.append( CNode( nodes.CNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.FNodes )
+ i = 0
+ while i < n :
+ pynodes.append( FNode( nodes.FNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.INodes )
+ i = 0
+ while i < n :
+ pynodes.append( INode( nodes.INodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.GNodes )
+ i = 0
+ while i < n :
+ pynodes.append( GNode( nodes.GNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.LNodes )
+ i = 0
+ while i < n :
+ pynodes.append( LNode( nodes.LNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.ELNodes )
+ i = 0
+ while i < n :
+ pynodes.append( GNode( nodes.ELNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.SNodes )
+ i = 0
+ while i < n :
+ pynodes.append( SNode( nodes.SNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ n = len( nodes.ESNodes )
+ i = 0
+ while i < n :
+ pynodes.append( GNode( nodes.ESNodes[i] , self.G.Verbose ) )
+ i = i + 1
+ j = j + 1
+ return pynodes
+ def ListNodes( self , *args ):
+ nodes = self.Nodes()
+ listofnodes = ""
+ if len( nodes ) :
+ listofnodes = nodes[ 0 ].Name()
+ i = 1
+ while i < len( nodes ) :
+ listofnodes = listofnodes + ',' + nodes[ i ].Name()
+ i = i + 1
+ print listofnodes
+ if len( args ) == 0 :
+ aName = self.N.Name()
+ else :
+ aName = args[ 0 ]
+ if len( nodes ) == 1 :
+ listofnodes = "[" + listofnodes + "] = " + aName + ".Nodes()"
+ else :
+ listofnodes = listofnodes + " = " + aName + ".Nodes()"
+ return listofnodes
+ def PrintNodes( self ):
+ nodes = self.Nodes()
+ n = len( nodes )
+ i = 0
+ while i < n :
+ print ' '
+ nodes[i].Print()
+ i = i + 1
+ def PrintThreads( self ):
+ nodes = self.Nodes()
+ i = 0
+ while i < len( nodes ) :
+ print nodes[i].Name(),nodes[i].Thread(),nodes[i].State(),nodes[i].Control(),nodes[i].AutoState()
+ i = i + 1
+ def GLinks( self ):
+ links = self.G.GLinks()
+ i = 0
+ while i < len( links ) :
+ links[ i ] = Link( links[i] , self.G.Verbose )
+ i = i + 1
+ return links
+ def ListLinks( self , *args ):
+ links = self.G.GLinks()
+ if len( links ) :
+ listoflinks = links[ 0 ].InPort().Node().Name()
+ listoflinks = listoflinks + links[ 0 ].InPort().Name()
+ i = 1
+ while i < len( links ) :
+ listoflinks = listoflinks + ',' + links[ i ].InPort().Node().Name()
+ listoflinks = listoflinks + links[ i ].InPort().Name()
+ i = i + 1
+ print listoflinks
+ if len( args ) == 0 :
+ aName = self.N.Name()
+ else :
+ aName = args[ 0 ]
+ if len( links ) == 1 :
+ listoflinks = "[" + listoflinks + "] = " + aName + ".GLinks()"
+ else :
+ listoflinks = listoflinks + " = " + aName + ".GLinks()"
+ return listoflinks
+ def PrintLinks( self ):
+ links = self.G.GLinks()
+ i = 0
+ while i < len( links ) :
+ Link( links[ i ] , self.G.Verbose ).Print()
+ i = i + 1
+ def Graphs( self ):
+ graphs = self.G.Graphs()
+ outgraphs = graphs
+ i = 0
+ while i < len( graphs ) :
+ outgraphs[ i ] = Graph( graphs[i].Name() , self.G.Verbose )
+ outgraphs[ i ].Merge( graphs[i] )
+ i = i + 1
+ return outgraphs
+ def Copy( self ):
+ aCopy = self.G.Copy()
+ if aCopy != None:
+ myCopy = Graph( aCopy )
+ return myCopy
+ ErrMsg = "Failed to get a Copy of " + self.G.Name()
+ if self.G.Verbose :
+ print ErrMsg
+ return aCopy
+ def Merge( self , aGraph ):
+ return self.G.Merge( aGraph.G )
+ def Destroy( self ):
+ self.N.destroy()
+
+##########################################################
+class GraphE(Graph):
+##########################################################
+ def __init__( self , aName ):
+ graph = SuperVision.GraphE( aName )
+ self.G = graph
+ self.G.Verbose = 1
+ self.N = graph
+ self.N.Verbose = 1
+
+##########################################################
+class Value:
+##########################################################
+ def __init__( self , aValue , Verbose ):
+ self.V = aValue
+ self.V.Verbose = Verbose
+ def ToString( self ):
+ return self.V.ToString()
+ def ToAny( self ):
+ return self.V.ToAny()
+ def Destroy( self ):
+ self.N.destroy()
+
+##########################################################
+class Port:
+##########################################################
+ def __init__( self , aPort , Verbose ):
+ self.P = aPort
+ self.P.Verbose = Verbose
+ def Input( self , *args ):
+ types, realargs = getRealArgs(self.P,args)
+ fn = bs_AddInput_valuedict[types]
+ anInput = apply( fn, realargs)
+ return anInput
+ def Node( self ):
+ aNode = self.P.Node()
+ if aNode != None :
+ if aNode.IsComputing() :
+ myNode = CNode( aNode , self.P.Verbose )
+ elif aNode.IsFactory() :
+ myNode = FNode( aNode , self.P.Verbose )
+ elif aNode.IsInLine() :
+ myNode = INode( aNode , self.P.Verbose )
+ elif aNode.IsGOTO() :
+ myNode = GNode( aNode , self.P.Verbose )
+ elif aNode.IsLoop() :
+ myNode = LNode( aNode , self.P.Verbose )
+ elif aNode.IsEndLoop() :
+ myNode = ELNode( aNode , self.P.Verbose )
+ elif aNode.IsSwitch() :
+ myNode = SNode( aNode , self.P.Verbose )
+ elif aNode.IsEndSwitch() :
+ myNode = ESNode( aNode , self.P.Verbose )
+ else :
+ myNode = None
+ return myNode
+ return aNode
+ def Name( self ):
+ return self.P.Name()
+ def Type( self ):
+ return self.P.Type()
+ def Link( self ):
+ aLink = self.P.Link()
+ if aLink != None :
+ myLink = Link( aLink , self.P.Verbose )
+ return myLink
+ ErrMsg = "Failed to get a Link to " + self.P.Node().Name() + "(" + self.P.Name() + ")"
+ if self.P.Verbose :
+ print ErrMsg
+ return aLink
+ def Links( self ):
+ links = self.P.Links()
+ i = 0
+ while i < len( links ) :
+ links[ i ] = Link( links[i] , self.P.Verbose )
+ i = i + 1
+ return links
+ def PrintLinks( self ):
+ links = self.P.Links()
+ i = 0
+ while i < len( links ) :
+ Link( links[ i ] , self.P.Verbose ).Print()
+ i = i + 1
+ def IsInput( self ):
+ return self.P.IsInput()
+ def IsLinked( self ):
+ return self.P.IsLinked()
+ def HasInput( self ):
+ return self.P.HasInput()
+ def Kind( self ) :
+ return self.P.Kind()
+ def IsParam( self ):
+ return self.P.IsParam()
+ def IsGate( self ):
+ return self.P.IsGate()
+ def IsLoop( self ):
+ return self.P.IsLoop()
+ def IsInLine( self ):
+ return self.P.IsInLine()
+ def IsSwitch( self ):
+ return self.P.IsSwitch()
+ def IsEndSwitch( self ):
+ return self.P.IsEndSwitch()
+# def IsBus( self ):
+# return self.P.IsBus()
+ def Done( self ):
+ return self.P.Done()
+ def State( self ):
+ return self.P.State()
+ def ToString( self ):
+ return self.P.ToString()
+ def ToAny( self ):
+ return self.P.ToAny()
+ def Print( self ):
+ if self.P.IsInput() :
+ if self.P.IsLinked() :
+ print "In",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString(),' from ',self.Link().OutPort().Print()
+ else :
+ print "In",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString()
+ else :
+ print "Out",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString()
+ def Destroy( self ):
+ self.P.destroy()
+
+##########################################################
+class Link:
+##########################################################
+ def __init__( self , aLink , Verbose ):
+ self.L = aLink
+ self.L.Verbose = Verbose
+ def OutPort( self ):
+ aPort = self.L.OutPort()
+ if aPort != None :
+ myPort = Port( aPort , self.L.Verbose )
+ return myPort
+ if self.L.Verbose :
+ print "Error while getting the Port : "
+ return None
+ def InPort( self ):
+ aPort = self.L.InPort()
+ if aPort != None :
+ myPort = Port( aPort , self.L.Verbose )
+ return myPort
+ if self.L.Verbose :
+ print "Error while getting the Port : "
+ return None
+ def Print( self ):
+ anOutPort = self.L.OutPort()
+ anInPort = self.L.InPort()
+ print anOutPort.Node().Name(),'(',anOutPort.Name(),' ',anOutPort.Kind(),') =',anOutPort.ToString(),' --> ',anInPort.Node().Name(),'(',anInPort.Name(),')',' ',anInPort.Kind()
+ def CoordsSize( self ):
+ return self.L.CoordsSize()
+ def AddCoord( self , index , X , Y ):
+ return self.L.AddCoord( index , X , Y )
+ def ChangeCoord( self , index , X , Y ):
+ return self.L.ChangeCoord( index , X , Y )
+ def RemoveCoord( self , index ):
+ return self.L.RemoveCoord( index )
+ def Coords( self , index ):
+ return self.L.Coords( index )
+ def destroy( self ):
+ self.L.destroy()
+
+