Salome HOME
SMH: 3.0.0 preparation = merged version (POLYWORK + RTVDEBUG01) + adopation for new GUI
[modules/superv.git] / src / Supervision / Port_Impl.cxx
index cab72392e50d976f91cec497b2b2ff14522508c6..8ca4b76ed6a9bef5e9011b01280eb8f7eb6fba24 100644 (file)
@@ -117,21 +117,27 @@ void Port_Impl::destroy() {
       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() ) ;
+      if ( _DataFlowNode->IsOneOfInLineNodes() ) {
+        _DataFlowNode->DelInPort( _DataFlowPort->PortName() ) ;
+        if ( _DataFlowNode->IsLoopNode() ) {
+          _DataFlowNode->DelOutPort( _DataFlowPort->PortName() ) ;
+          _DataFlowNode->CoupledNode()->DelInPort( _DataFlowPort->PortName() ) ;
+          _DataFlowNode->CoupledNode()->DelOutPort( _DataFlowPort->PortName() ) ;
+        }
+      }
+      else {
       }
       destroyed = true ;
     }
-    else if ( !_DataFlowNode->IsLoopNode() ) {
+    else if ( _DataFlowNode->IsOneOfInLineNodes() && !_DataFlowNode->IsLoopNode() ) {
       _DataFlowNode->DelOutPort( _DataFlowPort->PortName() ) ;
       destroyed = true ;
     }
+    else {
+      destroyed = true ;
+    }
     if ( destroyed ) {
       _DataFlowEditor->UnValid() ;
-//      _DataFlowEditor->IsValid() ;
     }
   }
   if ( destroyed ) {
@@ -143,6 +149,15 @@ void Port_Impl::destroy() {
   endService( "Port_Impl::destroy" );
 }
 
+void Port_Impl::Remove() {
+  beginService( "Port_Impl::Remove" );
+  _poa->deactivate_object(*_id) ;
+  CORBA::release(_poa) ;
+  delete(_id) ;
+  _thisObj->_remove_ref();
+  endService( "Port_Impl::Remove" );
+}
+
 bool Port_Impl::Input( const SUPERV::Value_ptr aValue ) {
   return Input( aValue->ToAny() ) ;
 }
@@ -150,21 +165,31 @@ bool Port_Impl::Input( const SUPERV::Value_ptr aValue ) {
 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 ) ;
+  if ( _DataFlowEditor->Graph()->GraphMacroLevel() == 0 ) {
+    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() ;
+      
+      /* commenting out the lines below because it seems to be never executed
+         Editor::_Executing flag is set OFF in Executor::OutNode on execution finished
+         and in CNode_Impl class (also not called probably)
+      // asv: turn off Editor::_Executing flag
+      if ( _DataFlowExecutor->IsDone() ) {
+        _DataFlowEditor->Executing( false );
+      }
+      else 
+      */ 
+      if ( !_DataFlowExecutor->IsDone() ) {
+        RetVal = _DataFlowExecutor->ChangeInputData( _DataFlowNode->Name() ,
+                                                     _DataFlowPort->PortName() ,
+                                                     *anAny ) ;
+      }
     }
   }
   if ( !RetVal ) {
@@ -318,8 +343,8 @@ SUPERV::CNode_ptr Port_Impl::Node() {
 SUPERV::ListOfLinks * Port_Impl::Links() {
   beginService( "Port_Impl::Links" ) ;
   SUPERV::ListOfLinks_var RetVal = new SUPERV::ListOfLinks ;
-  RetVal = _DataFlowEditor->Graph()->ObjImpl()->Links( _DataFlowNode->ComputingNode() ,
-                                                       _DataFlowPort->PortName() ) ;
+  RetVal = _DataFlowEditor->Graph()->ObjImpl()->Links( /*_DataFlowNode->ComputingNode() ,
+                                                        _DataFlowPort->PortName()*/ ) ;
   MESSAGE( "Links of Node " << _DataFlowNode->ComputingNode()->Name()
            << " and of Port " << _DataFlowPort->PortName()
            << " _InputPort " << _InputPort ) ;
@@ -343,8 +368,8 @@ SUPERV::Link_ptr Port_Impl::Link() {
     SUPERV::ListOfLinks_var Links = new SUPERV::ListOfLinks ;
 //    cout << "Port_Impl::Link " << _DataFlowNode->Name() << " "
 //         << _DataFlowPort->PortName() << endl ;
-    Links = _DataFlowEditor->Graph()->ObjImpl()->Links( _DataFlowNode->ComputingNode() ,
-                                                        _DataFlowPort->PortName() ) ;
+    Links = _DataFlowEditor->Graph()->ObjImpl()->Links( /*_DataFlowNode->ComputingNode() ,
+                                                         _DataFlowPort->PortName()*/ ) ;
     if ( Links->length() ) {
       iobject = Links[ 0 ] ;
     }
@@ -532,8 +557,8 @@ bool Port_Impl::IsDone() {
   if ( _DataFlowEditor ) {
     GraphExecutor::DataFlow * _DataFlowExecutor = _DataFlowEditor->Executor() ;
     if ( _DataFlowExecutor ) {
-      RetVal = _DataFlowExecutor->IsDone( _DataFlowPort->NodeName() ,
-                                          _DataFlowPort->PortName() ) ;
+      RetVal = _DataFlowExecutor->PortDone( _DataFlowPort->NodeName() ,
+                                            _DataFlowPort->PortName() ) ;
     }
   }
 //  endService( "Port_Impl::IsDone" );