Version: 9.15.0
YACS::HMI::SubjectComposedNode Class Reference

#include <guiObservers.hxx>

Inheritance diagram for YACS::HMI::SubjectComposedNode:
Collaboration diagram for YACS::HMI::SubjectComposedNode:

Public Member Functions

 SubjectComposedNode (YACS::ENGINE::ComposedNode *composedNode, Subject *parent)
 
virtual ~SubjectComposedNode ()
 
virtual SubjectNodeaddNode (YACS::ENGINE::Catalog *catalog, std::string compo, std::string type, std::string name, bool newCompoInst)
 
virtual SubjectNodegetChild (YACS::ENGINE::Node *node=0) const
 
virtual void loadChildren ()
 
virtual void loadLinks ()
 
virtual void completeChildrenSubjectList (SubjectNode *son)
 
SubjectNodeaddSubjectNode (YACS::ENGINE::Node *node, std::string name="", YACS::ENGINE::Catalog *catalog=0, std::string compo="", std::string type="")
 
SubjectLinkaddSubjectLink (SubjectNode *sno, SubjectDataPort *spo, SubjectNode *sni, SubjectDataPort *spi)
 
SubjectControlLinkaddSubjectControlLink (SubjectNode *sno, SubjectNode *sni)
 
virtual void removeLink (SubjectLink *link)
 
virtual void removeControlLink (SubjectControlLink *link)
 
virtual void removeExternalControlLinks ()
 
virtual void houseKeepingAfterCutPaste (bool isCut, SubjectNode *son)
 
virtual bool hasValue ()
 
virtual std::string getValue ()
 
virtual void clean (Command *command=0)
 
void localclean (Command *command=0)
 
- Public Member Functions inherited from YACS::HMI::SubjectNode
 SubjectNode (YACS::ENGINE::Node *node, Subject *parent)
 
virtual ~SubjectNode ()
 
virtual bool setProperties (std::map< std::string, std::string > properties)
 
virtual std::map< std::string, std::string > getProperties ()
 
virtual bool reparent (Subject *parent)
 
virtual bool copy (Subject *parent)
 
virtual std::string getName ()
 
virtual bool setName (std::string name)
 
virtual YACS::ENGINE::NodegetNode ()
 
void registerUndoDestroy ()
 
SubjectControlLinkaddSubjectControlLink (SubjectControlLink *sub)
 
void removeSubjectControlLink (SubjectControlLink *sub)
 
std::list< SubjectLink * > getSubjectLinks () const
 
std::list< SubjectControlLink * > getSubjectControlLinks () const
 
std::list< SubjectInputPort * > getSubjectInputPorts () const
 
std::list< SubjectOutputPort * > getSubjectOutputPorts () const
 
std::list< SubjectInputDataStreamPort * > getSubjectInputDataStreamPorts () const
 
std::list< SubjectOutputDataStreamPort * > getSubjectOutputDataStreamPorts () const
 
void localclean (Command *command=0)
 
virtual void update (GuiEvent event, int type, Subject *son)
 
virtual void recursiveUpdate (GuiEvent event, int type, Subject *son)
 
virtual void removeExternalLinks ()
 
virtual void saveLinks ()
 
virtual void restoreLinks ()
 
virtual bool putInComposedNode (std::string name, std::string type, bool toSaveRestoreLinks=true)
 
virtual int isValid ()
 
void setExecState (int execState)
 
- Public Member Functions inherited from YACS::HMI::Subject
 Subject (Subject *parent=0)
 
virtual ~Subject ()
 
virtual void attach (GuiObserver *obs)
 
virtual void detach (GuiObserver *obs)
 
virtual void select (bool isSelected)
 
virtual std::vector< std::string > knownProperties ()
 
virtual SubjectgetParent ()
 
virtual void setParent (Subject *son)
 
virtual bool destroy (Subject *son)
 From user action in Ihm, destroy an object. More...
 
virtual void addSubjectReference (Subject *ref)
 
void localclean (Command *command=0)
 
void registerUndoDestroy ()
 
void askRegisterUndoDestroy ()
 
bool isDestructible ()
 
virtual TypeOfElem getType ()
 
virtual void setProgress (std::string newProgress)
 
virtual std::string getProgress ()
 
- Public Member Functions inherited from YACS::ENGINE::Observer
virtual void notifyObserver2 (Node *object, const std::string &event, void *something)
 
virtual void notifyObserverFromClone (Node *originalInstance, const std::string &event, Node *clonedInstanceGeneratingEvent)
 
virtual ~Observer ()
 

Static Public Member Functions

static SubjectComposedNodegetLowestCommonAncestor (SubjectNode *snode1, SubjectNode *snode2)
 Retrieves the lowest common ancestor of 2 nodes. More...
 
- Static Public Member Functions inherited from YACS::HMI::SubjectNode
static bool tryCreateLink (SubjectNode *subOutNode, SubjectNode *subInNode)
 
- Static Public Member Functions inherited from YACS::HMI::Subject
static void erase (Subject *sub, Command *command=0, bool post=false)
 

Protected Member Functions

virtual SubjectNodecreateNode (YACS::ENGINE::Catalog *catalog, std::string compo, std::string type, std::string name, bool newCompoInst, int swCase=0)
 
- Protected Member Functions inherited from YACS::HMI::SubjectNode
virtual SubjectInputPortaddSubjectInputPort (YACS::ENGINE::InputPort *port, std::string name="")
 
virtual SubjectOutputPortaddSubjectOutputPort (YACS::ENGINE::OutputPort *port, std::string name="")
 
virtual SubjectInputDataStreamPortaddSubjectIDSPort (YACS::ENGINE::InputDataStreamPort *port, std::string name="")
 
virtual SubjectOutputDataStreamPortaddSubjectODSPort (YACS::ENGINE::OutputDataStreamPort *port, std::string name="")
 
virtual void notifyObserver (YACS::ENGINE::Node *object, const std::string &event)
 

Protected Attributes

YACS::ENGINE::ComposedNode_composedNode
 
- Protected Attributes inherited from YACS::HMI::SubjectNode
YACS::ENGINE::Node_node
 
std::list< SubjectInputPort * > _listSubjectInputPort
 
std::list< SubjectOutputPort * > _listSubjectOutputPort
 
std::list< SubjectInputDataStreamPort * > _listSubjectIDSPort
 
std::list< SubjectOutputDataStreamPort * > _listSubjectODSPort
 
std::list< SubjectLink * > _listSubjectLink
 
std::list< SubjectControlLink * > _listSubjectControlLink
 
int _execState
 
std::list< YACS::ENGINE::OutGate * > loutgate
 
std::list< YACS::ENGINE::InGate * > singate
 
std::vector< std::pair< YACS::ENGINE::OutPort *, YACS::ENGINE::InPort * > > dataLinks
 
std::vector< std::pair< YACS::ENGINE::OutPort *, YACS::ENGINE::InPort * > > dataflowLinks
 
- Protected Attributes inherited from YACS::HMI::Subject
std::set< GuiObserver * > _setObs
 
Subject_parent
 
bool _destructible
 
bool _askRegisterUndo
 
std::string _progress
 

Detailed Description

Definition at line 348 of file guiObservers.hxx.

Constructor & Destructor Documentation

◆ SubjectComposedNode()

SubjectComposedNode::SubjectComposedNode ( YACS::ENGINE::ComposedNode composedNode,
Subject parent 
)

Definition at line 1316 of file guiObservers.cxx.

1318  : SubjectNode(composedNode, parent), _composedNode(composedNode)
1319 {
1320 }
YACS::ENGINE::ComposedNode * _composedNode
SubjectNode(YACS::ENGINE::Node *node, Subject *parent)

◆ ~SubjectComposedNode()

SubjectComposedNode::~SubjectComposedNode ( )
virtual

all generic destruction is done in generic class SubjectNode

Definition at line 1325 of file guiObservers.cxx.

1326 {
1327  DEBTRACE("SubjectComposedNode::~SubjectComposedNode " << getName());
1328 }
#define DEBTRACE(msg)
Definition: YacsTrace.hxx:31
virtual std::string getName()

References DEBTRACE, and YACS::HMI::SubjectNode::getName().

Member Function Documentation

◆ addNode()

SubjectNode * SubjectComposedNode::addNode ( YACS::ENGINE::Catalog catalog,
std::string  compo,
std::string  type,
std::string  name,
bool  newCompoInst 
)
virtual

Reimplemented in YACS::HMI::SubjectDynParaLoop, YACS::HMI::SubjectWhileLoop, YACS::HMI::SubjectForLoop, and YACS::HMI::SubjectBloc.

Definition at line 1346 of file guiObservers.cxx.

1351 {
1352  DEBTRACE("SubjectComposedNode::addNode("<<catalog<<","<<compo<<","<<type<<","<<name<<")");
1353  SubjectNode* body = 0;
1354  GuiContext::getCurrent()->_lastErrorMessage = "YACS Internal Error: SubjectComposedNode::addNode";
1355  return body;
1356 }
std::string _lastErrorMessage
Definition: guiContext.hxx:79
static GuiContext * getCurrent()
Definition: guiContext.hxx:67

References YACS::HMI::GuiContext::_lastErrorMessage, DEBTRACE, and YACS::HMI::GuiContext::getCurrent().

Referenced by YACS::HMI::GuiEditor::_createNode(), and gui.GraphViewer.GraphViewer::popup().

◆ addSubjectControlLink()

SubjectControlLink * SubjectComposedNode::addSubjectControlLink ( SubjectNode sno,
SubjectNode sni 
)

Definition at line 1551 of file guiObservers.cxx.

1553 {
1554  Node *outn = sno->getNode();
1555  Node *inn = sni->getNode();
1556  pair<Node*,Node*> keyLink(outn,inn);
1557  //Don't create a new subject if it already exists
1558  if(GuiContext::getCurrent()->_mapOfSubjectControlLink.count(keyLink)!=0)
1560 
1561  SubjectControlLink *son = new SubjectControlLink(sno, sni, this);
1563  _listSubjectControlLink.push_back(son);
1564  sno->addSubjectControlLink(son);
1565  sni->addSubjectControlLink(son);
1567  DEBTRACE("addSubjectControlLink: " << getName() << " " << son->getName());
1568  return son;
1569 }
Base class for all nodes.
Definition: Node.hxx:70
std::map< std::pair< YACS::ENGINE::Node *, YACS::ENGINE::Node * >, YACS::HMI::SubjectControlLink * > _mapOfSubjectControlLink
Definition: guiContext.hxx:73
virtual void update(GuiEvent event, int type, Subject *son)
SubjectControlLink * addSubjectControlLink(SubjectControlLink *sub)
virtual YACS::ENGINE::Node * getNode()
std::list< SubjectControlLink * > _listSubjectControlLink

References YACS::HMI::SubjectNode::_listSubjectControlLink, YACS::HMI::GuiContext::_mapOfSubjectControlLink, YACS::HMI::ADDCONTROLLINK, YACS::HMI::SubjectNode::addSubjectControlLink(), YACS::HMI::CONTROLLINK, DEBTRACE, YACS::HMI::GuiContext::getCurrent(), YACS::HMI::SubjectNode::getName(), YACS::HMI::SubjectControlLink::getName(), YACS::HMI::SubjectNode::getNode(), and YACS::HMI::SubjectNode::update().

Referenced by loadLinks(), YACS::HMI::CommandAddLink::localExecute(), YACS::HMI::CommandAddControlLink::localExecute(), and YACS::HMI::SubjectNode::restoreLinks().

◆ addSubjectLink()

SubjectLink * SubjectComposedNode::addSubjectLink ( SubjectNode sno,
SubjectDataPort spo,
SubjectNode sni,
SubjectDataPort spi 
)

Definition at line 1508 of file guiObservers.cxx.

1512 {
1513  DEBTRACE("SubjectComposedNode::addSubjectLink");
1514  OutPort *outp = dynamic_cast<OutPort*>(spo->getPort());
1515  InPort *inp = dynamic_cast<InPort*>(spi->getPort());
1516  pair<OutPort*,InPort*> keyLink(outp,inp);
1517  //Don't create a new subject if it already exists
1518  if(GuiContext::getCurrent()->_mapOfSubjectLink.count(keyLink)!=0)
1519  return GuiContext::getCurrent()->_mapOfSubjectLink[keyLink];
1520 
1521  SubjectLink *son = new SubjectLink(sno, spo, sni, spi, this);
1522  GuiContext::getCurrent()->_mapOfSubjectLink[keyLink] = son;
1523  _listSubjectLink.push_back(son);
1524  spo->addSubjectLink(son);
1525  spi->addSubjectLink(son);
1526  update(ADDLINK, DATALINK, son);
1527  spi->update(UPDATE, DATALINK, spo);
1528  spo->update(UPDATE, DATALINK, spi);
1529  DEBTRACE("addSubjectLink: " << getName() << " " << son->getName());
1530  return son;
1531 }
std::map< std::pair< YACS::ENGINE::OutPort *, YACS::ENGINE::InPort * >, YACS::HMI::SubjectLink * > _mapOfSubjectLink
Definition: guiContext.hxx:72
void addSubjectLink(SubjectLink *subject)
virtual YACS::ENGINE::DataPort * getPort()
std::list< SubjectLink * > _listSubjectLink
virtual void update(GuiEvent event, int type, Subject *son)

References YACS::HMI::SubjectNode::_listSubjectLink, YACS::HMI::GuiContext::_mapOfSubjectLink, YACS::HMI::ADDLINK, YACS::HMI::SubjectDataPort::addSubjectLink(), YACS::HMI::DATALINK, DEBTRACE, YACS::HMI::GuiContext::getCurrent(), YACS::HMI::SubjectNode::getName(), YACS::HMI::SubjectLink::getName(), YACS::HMI::SubjectDataPort::getPort(), YACS::HMI::UPDATE, YACS::HMI::Subject::update(), and YACS::HMI::SubjectNode::update().

Referenced by loadLinks(), YACS::HMI::CommandAddLink::localExecute(), and YACS::HMI::SubjectNode::restoreLinks().

◆ addSubjectNode()

SubjectNode * SubjectComposedNode::addSubjectNode ( YACS::ENGINE::Node node,
std::string  name = "",
YACS::ENGINE::Catalog catalog = 0,
std::string  compo = "",
std::string  type = "" 
)

Definition at line 1385 of file guiObservers.cxx.

1390 {
1391  string theName = name;
1392  if (name.empty()) theName =node->getName();
1393  DEBTRACE("SubjectComposedNode::addSubjectNode "<< theName);
1394  TypeOfElem ntyp = ProcInvoc::getTypeOfNode(node);
1395  DEBTRACE("TypeOfNode: " << ntyp);
1396  SubjectNode *son = 0;
1397  switch(ntyp)
1398  {
1399  case BLOC:
1400  son = new SubjectBloc(dynamic_cast<YACS::ENGINE::Bloc*>(node), this);
1401  break;
1402  case PYTHONNODE:
1403  son = new SubjectPythonNode(dynamic_cast<YACS::ENGINE::PythonNode*>(node), this);
1404  break;
1405  case PYFUNCNODE:
1406  son = new SubjectPyFuncNode(dynamic_cast<YACS::ENGINE::PyFuncNode*>(node), this);
1407  break;
1408  case CORBANODE:
1409  son = new SubjectCORBANode(dynamic_cast<YACS::ENGINE::CORBANode*>(node), this);
1410  break;
1411  case CPPNODE:
1412  son = new SubjectCppNode(dynamic_cast<YACS::ENGINE::CppNode*>(node), this);
1413  break;
1414  case SALOMENODE:
1415  son = new SubjectSalomeNode(dynamic_cast<YACS::ENGINE::SalomeNode*>(node), this);
1416  break;
1417  case SALOMEPYTHONNODE:
1418  son = new SubjectSalomePythonNode(dynamic_cast<YACS::ENGINE::SalomePythonNode*>(node), this);
1419  break;
1420  case XMLNODE:
1421  son = new SubjectXmlNode(dynamic_cast<YACS::ENGINE::XmlNode*>(node), this);
1422  break;
1423  case SPLITTERNODE:
1424  son = new SubjectSplitterNode(dynamic_cast<YACS::ENGINE::SplitterNode*>(node), this);
1425  break;
1426  case PRESETNODE:
1427  son = new SubjectPresetNode(dynamic_cast<YACS::ENGINE::PresetNode*>(node), this);
1428  break;
1429  case OUTNODE:
1430  son = new SubjectOutNode(dynamic_cast<YACS::ENGINE::OutNode*>(node), this);
1431  break;
1432  case STUDYINNODE:
1433  son = new SubjectStudyInNode(dynamic_cast<YACS::ENGINE::StudyInNode*>(node), this);
1434  break;
1435  case STUDYOUTNODE:
1436  son = new SubjectStudyOutNode(dynamic_cast<YACS::ENGINE::StudyOutNode*>(node), this);
1437  break;
1438  case FORLOOP:
1439  son = new SubjectForLoop(dynamic_cast<YACS::ENGINE::ForLoop*>(node), this);
1440  break;
1441  case WHILELOOP:
1442  son = new SubjectWhileLoop(dynamic_cast<YACS::ENGINE::WhileLoop*>(node), this);
1443  break;
1444  case SWITCH:
1445  son = new SubjectSwitch(dynamic_cast<YACS::ENGINE::Switch*>(node), this);
1446  break;
1447  case FOREACHLOOP:
1448  son = new SubjectForEachLoop(dynamic_cast<YACS::ENGINE::ForEachLoopGen*>(node), this);
1449  break;
1450  case OPTIMIZERLOOP:
1451  son = new SubjectOptimizerLoop(dynamic_cast<YACS::ENGINE::OptimizerLoop*>(node), this);
1452  break;
1453  default:
1454  throw YACS::Exception("Not implemented");
1455  //YASSERT(0);
1456  }
1457  YASSERT(son);
1458  GuiContext::getCurrent()->_mapOfSubjectNode[static_cast<Node*>(node)] = son;
1460  if (!name.empty()) son->setName(name);
1462  update(ADD, ntyp ,son);
1463  if (SubjectServiceNode *service = dynamic_cast<SubjectServiceNode*>(son))
1464  if (catalog && !compo.empty() && !type.empty()) // --- clone from catalog: set component
1465  service->setComponentFromCatalog(catalog,compo,type);
1466  else
1467  service->setComponent();
1468  return son;
1469 }
#define YASSERT(val)
YASSERT macro is always defined, used like assert, but throw a YACS::Exception instead of abort.
Definition: YacsTrace.hxx:59
Composed node to group elementary and composed nodes.
Definition: Bloc.hxx:36
Class for CORBA Service Node.
Definition: CORBANode.hxx:45
Class for C++ Nodes (in process component)
Definition: CppNode.hxx:47
Class for for loop node.
Definition: ForLoop.hxx:33
const std::string & getName() const
Definition: Node.hxx:125
int getNumId()
return node instance identifiant, unique for each node instance
Definition: Node.cxx:643
class to build optimization loops
Class for data out node.
Definition: OutNode.hxx:30
Class for data in node.
Definition: PresetNode.hxx:31
Class for Salome component Service Node.
Definition: CORBANode.hxx:68
Control node that emulates the C switch.
Definition: Switch.hxx:85
Class for a while loop.
Definition: WhileLoop.hxx:39
std::map< int, YACS::HMI::SubjectNode * > _mapOfExecSubjectNode
Definition: guiContext.hxx:77
std::map< YACS::ENGINE::Node *, YACS::HMI::SubjectNode * > _mapOfSubjectNode
Definition: guiContext.hxx:68
static TypeOfElem getTypeOfNode(YACS::ENGINE::Node *node)
virtual void completeChildrenSubjectList(SubjectNode *son)
virtual bool setName(std::string name)

References YACS::HMI::GuiContext::_mapOfExecSubjectNode, YACS::HMI::GuiContext::_mapOfSubjectNode, YACS::HMI::ADD, YACS::HMI::BLOC, completeChildrenSubjectList(), YACS::HMI::CORBANODE, YACS::HMI::CPPNODE, DEBTRACE, YACS::HMI::FOREACHLOOP, YACS::HMI::FORLOOP, YACS::HMI::GuiContext::getCurrent(), YACS::ENGINE::Node::getName(), YACS::ENGINE::Node::getNumId(), YACS::HMI::ProcInvoc::getTypeOfNode(), YACS::HMI::OPTIMIZERLOOP, YACS::HMI::OUTNODE, YACS::HMI::PRESETNODE, YACS::HMI::PYFUNCNODE, YACS::HMI::PYTHONNODE, YACS::HMI::SALOMENODE, YACS::HMI::SALOMEPYTHONNODE, YACS::HMI::SubjectNode::setName(), YACS::HMI::SPLITTERNODE, YACS::HMI::STUDYINNODE, YACS::HMI::STUDYOUTNODE, YACS::HMI::SWITCH, YACS::HMI::SubjectNode::update(), YACS::HMI::WHILELOOP, YACS::HMI::XMLNODE, and YASSERT.

Referenced by loadChildren(), YACS::HMI::CommandAddNodeFromCatalog::localExecute(), YACS::HMI::CommandPutInComposedNode::localExecute(), and YACS::HMI::CommandCopyNode::localExecute().

◆ clean()

void SubjectComposedNode::clean ( Command command = 0)
virtual

Clean process prior to delete is redefined in derived classes: a local clean treatment relative to the derived class, then a call to the parent class clean method.

Reimplemented from YACS::HMI::SubjectNode.

Reimplemented in YACS::HMI::SubjectDynParaLoop, YACS::HMI::SubjectOptimizerLoop, YACS::HMI::SubjectForEachLoop, YACS::HMI::SubjectSwitch, YACS::HMI::SubjectWhileLoop, YACS::HMI::SubjectForLoop, YACS::HMI::SubjectProc, and YACS::HMI::SubjectBloc.

Definition at line 1330 of file guiObservers.cxx.

1331 {
1332  if (_askRegisterUndo)
1333  {
1334  _askRegisterUndo = false;
1336  }
1337  localclean(command);
1338  SubjectNode::clean(command);
1339 }
void localclean(Command *command=0)
virtual void clean(Command *command=0)

References YACS::HMI::Subject::_askRegisterUndo, YACS::HMI::SubjectNode::clean(), localclean(), and YACS::HMI::SubjectNode::registerUndoDestroy().

Referenced by YACS::HMI::SubjectBloc::clean(), YACS::HMI::SubjectForLoop::clean(), YACS::HMI::SubjectWhileLoop::clean(), YACS::HMI::SubjectSwitch::clean(), and YACS::HMI::SubjectDynParaLoop::clean().

◆ completeChildrenSubjectList()

void SubjectComposedNode::completeChildrenSubjectList ( SubjectNode son)
virtual

◆ createNode()

SubjectNode * SubjectComposedNode::createNode ( YACS::ENGINE::Catalog catalog,
std::string  compo,
std::string  type,
std::string  name,
bool  newCompoInst,
int  swCase = 0 
)
protectedvirtual

Definition at line 1358 of file guiObservers.cxx.

1364 {
1365  Proc *proc = GuiContext::getCurrent()->getProc();
1366  string position = "";
1367  if (proc != dynamic_cast<Proc*>(_node)) position = proc->getChildName(_node);
1369  compo,
1370  type,
1371  position,
1372  name,
1373  newCompoInst,
1374  swCase);
1375  if (command->execute())
1376  {
1377  GuiContext::getCurrent()->getInvoc()->add(command);
1378  Node * node = command->getNode();
1379  return command->getSubjectNode();
1380  }
1381  else delete command;
1382  return 0;
1383 }
std::string getChildName(const Node *node) const
Base class for all schema objects.
Definition: Proc.hxx:44
YACS::HMI::SubjectNode * getSubjectNode()
virtual bool execute()
the command is executed a first time after its registration for undo redo, then on redo
Definition: commands.cxx:51
YACS::ENGINE::Proc * getProc()
Definition: guiContext.hxx:50
YACS::HMI::ProcInvoc * getInvoc()
Definition: guiContext.hxx:51
void add(Command *command)
Definition: commands.cxx:156
YACS::ENGINE::Node * _node

References YACS::HMI::SubjectNode::_node, YACS::HMI::Invocator::add(), YACS::HMI::Command::execute(), YACS::ENGINE::ComposedNode::getChildName(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getInvoc(), YACS::HMI::CommandAddNodeFromCatalog::getNode(), YACS::HMI::GuiContext::getProc(), and YACS::HMI::CommandAddNodeFromCatalog::getSubjectNode().

Referenced by YACS::HMI::SubjectBloc::addNode(), YACS::HMI::SubjectForLoop::addNode(), YACS::HMI::SubjectWhileLoop::addNode(), YACS::HMI::SubjectDynParaLoop::addNode(), and YACS::HMI::SubjectSwitch::addNode().

◆ getChild()

virtual SubjectNode* YACS::HMI::SubjectComposedNode::getChild ( YACS::ENGINE::Node node = 0) const
inlinevirtual

◆ getLowestCommonAncestor()

SubjectComposedNode * SubjectComposedNode::getLowestCommonAncestor ( SubjectNode snode1,
SubjectNode snode2 
)
static

Retrieves the lowest common ancestor of 2 nodes.

Note
Retrieves the lowest common ancestor of 'node1' AND 'node2'. If 'node1' or 'node2' are both or indiscriminately instances of ComposedNode and that 'node1' is in descendance of 'node2' (resp. 'node2' in descendance of 'node1') 'node2' is returned (resp. 'node1').
Exceptions
Exception: if 'node1' and 'node2' do not share the same genealogy.
Returns
The lowest common ancestor if it exists.

Definition at line 1681 of file guiObservers.cxx.

1682 {
1683  Node* node1 = snode1->getNode();
1684  Node* node2 = snode2->getNode();
1685 
1686  ComposedNode *node = ComposedNode::getLowestCommonAncestor(node1->getFather(), node2->getFather());
1688  return snode;
1689 }
Base class for all composed nodes.

References YACS::HMI::GuiContext::_mapOfSubjectNode, YACS::HMI::GuiContext::getCurrent(), YACS::HMI::SubjectNode::getNode(), testCppPluginInvokation::node1, and testCppPluginInvokation::node2.

◆ getValue()

std::string SubjectComposedNode::getValue ( )
virtual

◆ hasValue()

bool SubjectComposedNode::hasValue ( )
virtual

used in derived classes using a counter, a selector, or a condition: ForLoop, ForEachLoop, Switch, WhileLoop.

Reimplemented in YACS::HMI::SubjectDynParaLoop, YACS::HMI::SubjectSwitch, YACS::HMI::SubjectWhileLoop, and YACS::HMI::SubjectForLoop.

Definition at line 1694 of file guiObservers.cxx.

1695 {
1696  return false;
1697 }

Referenced by YACS::HMI::SchemaComposedNodeItem::SchemaComposedNodeItem(), and YACS::HMI::SchemaComposedNodeItem::update().

◆ houseKeepingAfterCutPaste()

◆ loadChildren()

void SubjectComposedNode::loadChildren ( )
virtual

Reimplemented from YACS::HMI::Subject.

Definition at line 1475 of file guiObservers.cxx.

1476 {
1477  list<Node *> setOfNode= _composedNode->edGetDirectDescendants();
1478  if (ForEachLoopGen *feloop = dynamic_cast<ForEachLoopGen*>(_composedNode))
1479  {
1480  Node *node2Insert=feloop->getChildByName(ForEachLoopGen::NAME_OF_SPLITTERNODE);
1481  if(find(setOfNode.begin(),setOfNode.end(),node2Insert)==setOfNode.end())
1482  setOfNode.push_back(node2Insert);
1483  }
1484  for(list<Node *>::iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
1485  {
1486  try
1487  {
1488  SubjectNode * son = addSubjectNode(*iter);
1489  son->loadChildren();
1490  }
1491  catch(YACS::Exception& ex)
1492  {
1493  std::cerr << "Unknown type of node" << std::endl;
1494  }
1495  }
1496  list<InputPort*> listInputPorts = _composedNode->getLocalInputPorts();
1497  list<OutputPort*> listOutputPorts = _composedNode->getLocalOutputPorts();
1498  list<InputDataStreamPort*> listIDSPorts = _composedNode->getSetOfInputDataStreamPort();
1499  list<OutputDataStreamPort*> listODSPorts = _composedNode->getSetOfOutputDataStreamPort();
1500  list<InputPort*>::const_iterator iti;
1501  for (iti = listInputPorts.begin(); iti != listInputPorts.end(); ++iti)
1502  addSubjectInputPort(*iti);
1503  list<OutputPort*>::const_iterator ito;
1504  for (ito = listOutputPorts.begin(); ito != listOutputPorts.end(); ++ito)
1505  addSubjectOutputPort(*ito);
1506 }
std::list< InputDataStreamPort * > getSetOfInputDataStreamPort() const
std::list< OutputPort * > getLocalOutputPorts() const
redefined on derived class of ComposedNode. by default a ComposedNode has no port by itself
virtual std::list< Node * > edGetDirectDescendants() const =0
std::list< InputPort * > getLocalInputPorts() const
redefined on derived class of ComposedNode. by default a ComposedNode has no port by itself
std::list< OutputDataStreamPort * > getSetOfOutputDataStreamPort() const
virtual Node * getChildByName(const std::string &name) const =0
SubjectNode * addSubjectNode(YACS::ENGINE::Node *node, std::string name="", YACS::ENGINE::Catalog *catalog=0, std::string compo="", std::string type="")
virtual SubjectOutputPort * addSubjectOutputPort(YACS::ENGINE::OutputPort *port, std::string name="")
virtual SubjectInputPort * addSubjectInputPort(YACS::ENGINE::InputPort *port, std::string name="")
virtual void loadChildren()

References _composedNode, YACS::HMI::SubjectNode::addSubjectInputPort(), addSubjectNode(), YACS::HMI::SubjectNode::addSubjectOutputPort(), YACS::ENGINE::ComposedNode::edGetDirectDescendants(), testCppPluginInvokation::ex, YACS::ENGINE::Node::getChildByName(), YACS::ENGINE::ComposedNode::getLocalInputPorts(), YACS::ENGINE::ComposedNode::getLocalOutputPorts(), YACS::ENGINE::ComposedNode::getSetOfInputDataStreamPort(), YACS::ENGINE::ComposedNode::getSetOfOutputDataStreamPort(), and YACS::HMI::Subject::loadChildren().

Referenced by YACS::HMI::SubjectProc::loadProc().

◆ loadLinks()

void SubjectComposedNode::loadLinks ( )
virtual

loadLinks is used when an existing scheme has been loaded in memory, to create gui representation. Gui representation of links is done after node representation (loadChildren). Proc is explored recursively to find the composedNodes and create the corresponding links representation, from bottom to top. For each composedNode, data links representation are created first and stored in a map to avoid double representation. Then control links representation are created.

Reimplemented from YACS::HMI::Subject.

Definition at line 1619 of file guiObservers.cxx.

1620 {
1621  list<Node *> setOfNode= _composedNode->edGetDirectDescendants();
1622  for(list<Node *>::iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++)
1623  {
1624  ComposedNode *cnSon = dynamic_cast<ComposedNode*>(*iter);
1625  if (cnSon)
1626  {
1627  SubjectNode *subSon = GuiContext::getCurrent()->_mapOfSubjectNode[static_cast<Node*>(*iter)];
1628  YASSERT(subSon);
1629  SubjectComposedNode *subCnSon = dynamic_cast<SubjectComposedNode*>(subSon);
1630  YASSERT(subCnSon);
1631  subCnSon->loadLinks();
1632  }
1633  }
1634 
1635  std::vector<std::pair<OutPort*,InPort*> > setOfLinks = _composedNode->getSetOfInternalLinks();
1636  std::vector<std::pair<OutPort*,InPort*> >::iterator itp;
1637  for (itp = setOfLinks.begin(); itp != setOfLinks.end(); ++itp)
1638  if (!GuiContext::getCurrent()->_mapOfSubjectLink.count(*itp))
1639  {
1640  OutPort *outp = (*itp).first;
1641  InPort *inp = (*itp).second;
1642  Node *outn = outp->getNode();
1643  Node *inn = inp->getNode();
1644  DEBTRACE(outn->getName()<<"."<<outp->getName()<<"->"<<inn->getName()<<"."<<inp->getName());
1645  SubjectNode *sno = GuiContext::getCurrent()->_mapOfSubjectNode[static_cast<Node*>(outn)];
1646  SubjectNode *sni = GuiContext::getCurrent()->_mapOfSubjectNode[static_cast<Node*>(inn)];
1649  addSubjectLink(sno,spo,sni,spi);
1650  }
1651 
1652  std::list<Node*> setOfNodes = _composedNode->edGetDirectDescendants();
1653  std::list<Node*>::const_iterator itn;
1654  for(itn = setOfNodes.begin(); itn != setOfNodes.end(); ++itn)
1655  {
1657  OutGate* outgate = (*itn)->getOutGate();
1658  std::list<InGate*> setIngate = outgate->edSetInGate();
1659  std::list<InGate*>::const_iterator itg;
1660  for(itg = setIngate.begin(); itg != setIngate.end(); ++itg)
1661  {
1662  Node* inNode = (*itg)->getNode();
1664  if(sno && sni)
1665  addSubjectControlLink(sno,sni);
1666  }
1667  }
1668 }
std::vector< std::pair< OutPort *, InPort * > > getSetOfInternalLinks() const
std::string getName() const
Definition: DataPort.hxx:55
std::list< InGate * > edSetInGate() const
Definition: OutGate.cxx:112
Node * getNode() const
Definition: Port.hxx:46
std::map< YACS::ENGINE::DataPort *, YACS::HMI::SubjectDataPort * > _mapOfSubjectDataPort
Definition: guiContext.hxx:71
SubjectControlLink * addSubjectControlLink(SubjectNode *sno, SubjectNode *sni)
SubjectLink * addSubjectLink(SubjectNode *sno, SubjectDataPort *spo, SubjectNode *sni, SubjectDataPort *spi)

References _composedNode, YACS::HMI::GuiContext::_mapOfSubjectDataPort, YACS::HMI::GuiContext::_mapOfSubjectNode, addSubjectControlLink(), addSubjectLink(), DEBTRACE, YACS::ENGINE::ComposedNode::edGetDirectDescendants(), YACS::ENGINE::OutGate::edSetInGate(), YACS::HMI::GuiContext::getCurrent(), YACS::ENGINE::DataPort::getName(), YACS::ENGINE::Node::getName(), YACS::ENGINE::Port::getNode(), YACS::ENGINE::ComposedNode::getSetOfInternalLinks(), loadLinks(), and YASSERT.

Referenced by loadLinks(), and YACS::HMI::SubjectProc::loadProc().

◆ localclean()

void SubjectComposedNode::localclean ( Command command = 0)

Definition at line 1341 of file guiObservers.cxx.

1342 {
1343  DEBTRACE("SubjectComposedNode::localClean ");
1344 }

References DEBTRACE.

Referenced by clean().

◆ removeControlLink()

void SubjectComposedNode::removeControlLink ( SubjectControlLink link)
virtual

Definition at line 1571 of file guiObservers.cxx.

1572 {
1573  DEBTRACE("removeSubjectControlLink: " << getName());
1574 
1575  Node *outn = link->getSubjectOutNode()->getNode();
1576  Node *inn = link->getSubjectInNode()->getNode();
1577  pair<Node*,Node*> keyLink(outn,inn);
1578  if (GuiContext::getCurrent()->_mapOfSubjectControlLink.count(keyLink))
1579  {
1580  DEBTRACE(outn->getName() << " " << inn->getName());
1582  }
1583 
1586  _listSubjectControlLink.remove(link);
1587 }
void removeSubjectControlLink(SubjectControlLink *sub)

References YACS::HMI::SubjectNode::_listSubjectControlLink, YACS::HMI::GuiContext::_mapOfSubjectControlLink, DEBTRACE, YACS::HMI::GuiContext::getCurrent(), YACS::HMI::SubjectNode::getName(), YACS::ENGINE::Node::getName(), YACS::HMI::SubjectNode::getNode(), YACS::HMI::SubjectControlLink::getSubjectInNode(), YACS::HMI::SubjectControlLink::getSubjectOutNode(), and YACS::HMI::SubjectNode::removeSubjectControlLink().

Referenced by YACS::HMI::SubjectControlLink::localclean().

◆ removeExternalControlLinks()

void SubjectComposedNode::removeExternalControlLinks ( )
virtual

Reimplemented from YACS::HMI::SubjectNode.

Definition at line 1589 of file guiObservers.cxx.

1590 {
1591  DEBTRACE("SubjectComposedNode::removeExternalControlLinks " << getName());
1592  list<SubjectControlLink*> cplcl = getSubjectControlLinks();
1593  list<SubjectControlLink*>::iterator its;
1594  ComposedNode *cnode = dynamic_cast<ComposedNode*>(getNode());
1595  for (its = cplcl.begin(); its != cplcl.end(); ++its)
1596  {
1597  bool inside = true;
1598  Node *nout = (*its)->getSubjectOutNode()->getNode();
1599  Node *nin = (*its)->getSubjectInNode()->getNode();
1600  inside = inside && cnode->isInMyDescendance(nout); // --- 0 if nout is outside
1601  inside = inside && cnode->isInMyDescendance(nin); // --- 0 if nin is outside
1602  if (!inside)
1603  Subject::erase(*its);
1604  }
1605 }
Node * isInMyDescendance(Node *nodeToTest) const
Returns the parent of a node that is the direct child of this node.
std::list< SubjectControlLink * > getSubjectControlLinks() const
static void erase(Subject *sub, Command *command=0, bool post=false)

References DEBTRACE, YACS::HMI::Subject::erase(), YACS::HMI::SubjectNode::getName(), YACS::HMI::SubjectNode::getNode(), YACS::HMI::SubjectNode::getSubjectControlLinks(), and YACS::ENGINE::ComposedNode::isInMyDescendance().

◆ removeLink()

void SubjectComposedNode::removeLink ( SubjectLink link)
virtual

Definition at line 1533 of file guiObservers.cxx.

1534 {
1535  DEBTRACE("removeLink: " << link->getName());
1536 
1537  OutPort *outp = dynamic_cast<OutPort*>(link->getSubjectOutPort()->getPort());
1538  InPort *inp = dynamic_cast<InPort*>(link->getSubjectInPort()->getPort());
1539  pair<OutPort*,InPort*> keyLink(outp,inp);
1540  if (GuiContext::getCurrent()->_mapOfSubjectLink.count(keyLink))
1541  {
1542  DEBTRACE(outp->getName() << " " << inp->getName());
1543  GuiContext::getCurrent()->_mapOfSubjectLink.erase(keyLink);
1544  }
1545 
1546  link->getSubjectOutPort()->removeSubjectLink(link);
1547  link->getSubjectInPort()->removeSubjectLink(link);
1548  _listSubjectLink.remove(link);
1549 }
void removeSubjectLink(SubjectLink *subject)

References YACS::HMI::SubjectNode::_listSubjectLink, YACS::HMI::GuiContext::_mapOfSubjectLink, DEBTRACE, YACS::HMI::GuiContext::getCurrent(), YACS::HMI::SubjectLink::getName(), YACS::ENGINE::DataPort::getName(), YACS::HMI::SubjectDataPort::getPort(), YACS::HMI::SubjectLink::getSubjectInPort(), YACS::HMI::SubjectLink::getSubjectOutPort(), and YACS::HMI::SubjectDataPort::removeSubjectLink().

Referenced by YACS::HMI::SubjectLink::localclean().

Member Data Documentation

◆ _composedNode

YACS::ENGINE::ComposedNode* YACS::HMI::SubjectComposedNode::_composedNode
protected

Definition at line 389 of file guiObservers.hxx.

Referenced by loadChildren(), and loadLinks().


The documentation for this class was generated from the following files: