1 // Copyright (C) 2006-2008 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #ifndef _GUIOBSERVERS_HXX_
20 #define _GUIOBSERVERS_HXX_
26 #include "Dispatcher.hxx"
27 #include "commandsProc.hxx"
50 class SalomePythonNode;
63 class InputDataStreamPort;
64 class OutputDataStreamPort;
66 class ComponentInstance;
105 class SubjectReference;
106 class Subject: public YACS::ENGINE::Observer
109 Subject(Subject *parent=0);
111 virtual void attach(GuiObserver *obs);
112 virtual void detach(GuiObserver *obs);
113 virtual void select(bool isSelected);
114 virtual void update(GuiEvent event, int type, Subject* son);
115 virtual std::string getName();
116 virtual bool setName(std::string name);
117 virtual Subject* getParent();
118 virtual bool destroy(Subject *son);
119 virtual void loadChildren();
120 virtual void loadLinks();
121 virtual void addSubjectReference(Subject *ref);
122 virtual void clean();
124 bool isDestructible() { return _destructible; };
125 static void erase(Subject* sub);
126 virtual TypeOfElem getType(){return UNKNOWN;}
128 std::set<GuiObserver *> _setObs;
137 virtual ~GuiObserver();
138 virtual void select(bool isSelected);
139 virtual void update(GuiEvent event, int type, Subject* son);
140 virtual void incrementSubjects(Subject *subject);
141 virtual void decrementSubjects(Subject *subject);
143 bool isDestructible() { return _destructible; };
144 static std::string eventName(GuiEvent event);
145 static void setEventMap();
147 std::set<Subject*> _subjectSet;
149 static std::map<int, std::string> _eventNameMap;
152 class SubjectReference: public Subject
155 SubjectReference(Subject* ref, Subject *parent);
156 virtual ~SubjectReference();
157 virtual std::string getName();
158 virtual Subject* getReference() const;
159 virtual void reparent(Subject *parent);
160 virtual void clean();
162 virtual TypeOfElem getType(){return REFERENCE;}
168 class SubjectControlLink;
169 class SubjectDataPort: public Subject
172 SubjectDataPort(YACS::ENGINE::DataPort* port, Subject *parent);
173 virtual ~SubjectDataPort();
174 virtual std::string getName();
175 virtual bool setName(std::string name);
176 virtual YACS::ENGINE::DataPort* getPort();
177 static bool tryCreateLink(SubjectDataPort *subOutport, SubjectDataPort *subInport,bool control=true);
178 virtual void clean();
180 void addSubjectLink(SubjectLink* subject) { _listSubjectLink.push_back(subject); };
181 void removeSubjectLink(SubjectLink* subject) { _listSubjectLink.remove(subject); };
182 std::list<SubjectLink*> getListOfSubjectLink() { return _listSubjectLink; };
183 virtual bool setValue(std::string value);
184 void setExecValue(std::string value);
185 std::string getExecValue();
187 YACS::ENGINE::DataPort *_dataPort;
188 std::list<SubjectLink*> _listSubjectLink;
189 std::string _execValue;
192 class SubjectInputPort: public SubjectDataPort
195 SubjectInputPort(YACS::ENGINE::InputPort *port, Subject *parent);
196 virtual ~SubjectInputPort();
197 virtual void clean();
199 virtual bool setValue(std::string value);
200 virtual TypeOfElem getType(){return INPUTPORT;}
202 YACS::ENGINE::InputPort *_inputPort;
205 class SubjectOutputPort: public SubjectDataPort
208 SubjectOutputPort(YACS::ENGINE::OutputPort *port, Subject *parent);
209 virtual ~SubjectOutputPort();
210 virtual void clean();
212 virtual bool setValue(std::string value);
213 virtual TypeOfElem getType(){return OUTPUTPORT;}
215 YACS::ENGINE::OutputPort *_outputPort;
218 class SubjectInputDataStreamPort: public SubjectDataPort
221 SubjectInputDataStreamPort(YACS::ENGINE::InputDataStreamPort *port, Subject *parent);
222 virtual ~SubjectInputDataStreamPort();
223 virtual bool setProperties(std::map<std::string, std::string> properties);
224 virtual std::map<std::string, std::string> getProperties();
225 virtual void clean();
227 virtual TypeOfElem getType(){return INPUTDATASTREAMPORT;}
229 YACS::ENGINE::InputDataStreamPort *_inputDataStreamPort;
232 class SubjectOutputDataStreamPort: public SubjectDataPort
235 SubjectOutputDataStreamPort(YACS::ENGINE::OutputDataStreamPort *port, Subject *parent);
236 virtual ~SubjectOutputDataStreamPort();
237 virtual bool setProperties(std::map<std::string, std::string> properties);
238 virtual std::map<std::string, std::string> getProperties();
239 virtual void clean();
241 virtual TypeOfElem getType(){return OUTPUTDATASTREAMPORT;}
243 YACS::ENGINE::OutputDataStreamPort *_outputDataStreamPort;
247 class SubjectNode: public Subject
250 SubjectNode(YACS::ENGINE::Node *node, Subject *parent);
251 virtual ~SubjectNode();
252 virtual bool reparent(Subject* parent);
253 virtual bool copy(Subject* parent);
254 virtual std::string getName();
255 virtual bool setName(std::string name);
256 virtual YACS::ENGINE::Node* getNode();
257 virtual void clean();
258 SubjectControlLink* addSubjectControlLink(SubjectControlLink *sub) { _listSubjectControlLink.push_back(sub); };
259 void removeSubjectControlLink(SubjectControlLink* sub) { _listSubjectControlLink.remove(sub); };
260 std::list<SubjectLink*> getSubjectLinks() const { return _listSubjectLink; };
261 std::list<SubjectControlLink*> getSubjectControlLinks() const { return _listSubjectControlLink; };
262 std::list<SubjectInputPort*> getSubjectInputPorts() const { return _listSubjectInputPort; };
263 std::list<SubjectOutputPort*> getSubjectOutputPorts() const { return _listSubjectOutputPort; };
264 std::list<SubjectInputDataStreamPort*> getSubjectInputDataStreamPorts() const { return _listSubjectIDSPort; };
265 std::list<SubjectOutputDataStreamPort*> getSubjectOutputDataStreamPorts() const { return _listSubjectODSPort; };
267 virtual void update(GuiEvent event, int type, Subject* son);
268 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
269 virtual void removeExternalLinks();
270 virtual void removeExternalControlLinks();
271 void setExecState(int execState);
272 static bool tryCreateLink(SubjectNode *subOutNode, SubjectNode *subInNode);
275 virtual SubjectInputPort* addSubjectInputPort(YACS::ENGINE::InputPort *port,
276 std::string name = "");
277 virtual SubjectOutputPort* addSubjectOutputPort(YACS::ENGINE::OutputPort *port,
278 std::string name = "");
279 virtual SubjectInputDataStreamPort* addSubjectIDSPort(YACS::ENGINE::InputDataStreamPort *port,
280 std::string name = "");
281 virtual SubjectOutputDataStreamPort* addSubjectODSPort(YACS::ENGINE::OutputDataStreamPort *port,
282 std::string name = "");
283 virtual void notifyObserver(YACS::ENGINE::Node* object,const std::string& event);
285 YACS::ENGINE::Node *_node;
286 std::list<SubjectInputPort*> _listSubjectInputPort;
287 std::list<SubjectOutputPort*> _listSubjectOutputPort;
288 std::list<SubjectInputDataStreamPort*> _listSubjectIDSPort;
289 std::list<SubjectOutputDataStreamPort*> _listSubjectODSPort;
290 std::list<SubjectLink*> _listSubjectLink;
291 std::list<SubjectControlLink*> _listSubjectControlLink;
295 class SubjectComposedNode: public SubjectNode
298 SubjectComposedNode(YACS::ENGINE::ComposedNode *composedNode, Subject *parent);
299 virtual ~SubjectComposedNode();
300 virtual SubjectNode* addNode(YACS::ENGINE::Catalog *catalog,
304 virtual SubjectNode* getChild(YACS::ENGINE::Node* node=0) const { return 0; }
305 virtual void loadChildren();
306 virtual void loadLinks();
307 virtual void completeChildrenSubjectList(SubjectNode *son);
308 SubjectNode* addSubjectNode(YACS::ENGINE::Node * node,
309 std::string name = "",
310 YACS::ENGINE::Catalog *catalog = 0,
311 std::string compo = "",
312 std::string type ="");
313 SubjectLink* addSubjectLink(SubjectNode *sno,
314 SubjectDataPort *spo,
316 SubjectDataPort *spi);
317 SubjectControlLink* addSubjectControlLink(SubjectNode *sno,
319 virtual void removeLink(SubjectLink* link);
320 virtual void removeControlLink(SubjectControlLink* link);
321 virtual void removeExternalControlLinks();
322 virtual bool hasValue();
323 virtual std::string getValue();
324 virtual void clean();
326 static SubjectComposedNode* getLowestCommonAncestor(SubjectNode* snode1, SubjectNode* snode2);
328 virtual SubjectNode *createNode(YACS::ENGINE::Catalog *catalog,
333 YACS::ENGINE::ComposedNode *_composedNode;
336 class SubjectBloc: public SubjectComposedNode
339 SubjectBloc(YACS::ENGINE::Bloc *bloc, Subject *parent);
340 virtual ~SubjectBloc();
341 virtual SubjectNode* addNode(YACS::ENGINE::Catalog *catalog,
345 virtual void removeNode(SubjectNode* child);
346 virtual void completeChildrenSubjectList(SubjectNode *son);
347 virtual SubjectNode* getChild(YACS::ENGINE::Node* node=0) const;
348 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
349 virtual void clean();
351 virtual TypeOfElem getType(){return BLOC;}
353 YACS::ENGINE::Bloc *_bloc;
354 std::set<SubjectNode*> _children;
357 class SubjectComponent;
358 class SubjectContainer: public Subject
361 SubjectContainer(YACS::ENGINE::Container* container, Subject *parent);
362 virtual ~SubjectContainer();
363 virtual std::string getName();
364 virtual bool setName(std::string name);
365 virtual std::map<std::string, std::string> getProperties();
366 virtual bool setProperties(std::map<std::string, std::string> properties);
367 virtual SubjectReference* attachComponent(SubjectComponent* component);
368 virtual void detachComponent(SubjectReference* reference);
369 virtual void moveComponent(SubjectReference* reference);
370 virtual void removeSubComponentFromSet(SubjectComponent *component);
371 virtual void notifyComponentsChange(GuiEvent event, int type, Subject* son);
372 virtual void clean();
374 YACS::ENGINE::Container* getContainer() const;
375 virtual TypeOfElem getType(){return CONTAINER;}
377 YACS::ENGINE::Container* _container;
378 std::set<SubjectComponent*> _subComponentSet;
381 class SubjectServiceNode;
382 class SubjectComponent: public Subject
385 SubjectComponent(YACS::ENGINE::ComponentInstance* component, Subject *parent);
386 virtual ~SubjectComponent();
387 virtual std::string getName();
388 virtual void setContainer();
389 virtual bool associateToContainer(SubjectContainer* subcont);
390 virtual SubjectReference* attachService(SubjectServiceNode* service);
391 virtual void detachService(SubjectReference* reference);
392 virtual void moveService(SubjectReference* reference);
393 virtual void removeSubServiceFromSet(SubjectServiceNode *service);
394 virtual void notifyServicesChange(GuiEvent event, int type, Subject* son);
395 virtual std::pair<std::string, int> getKey();
396 virtual void clean();
398 YACS::ENGINE::ComponentInstance* getComponent() const;
399 virtual TypeOfElem getType(){return COMPONENT;}
402 YACS::ENGINE::ComponentInstance* _compoInst;
403 SubjectReference* _subRefContainer;
404 std::set<SubjectServiceNode*> _subServiceSet;
407 class SubjectDataType: public Subject
410 SubjectDataType(YACS::ENGINE::TypeCode *typeCode, Subject *parent, std::string alias);
411 virtual ~SubjectDataType();
412 virtual std::string getName();
413 virtual std::string getAlias();
414 virtual YACS::ENGINE::TypeCode* getTypeCode();
415 virtual void clean();
417 virtual TypeOfElem getType(){return DATATYPE;}
419 YACS::ENGINE::TypeCode *_typeCode;
423 class SubjectProc: public SubjectBloc
426 SubjectProc(YACS::ENGINE::Proc *proc, Subject *parent);
427 virtual ~SubjectProc();
429 void loadComponents();
430 void loadContainers();
431 virtual SubjectComponent* addComponent(std::string name);
432 virtual SubjectContainer* addContainer(std::string name, std::string ref="");
433 virtual SubjectDataType* addDataType(YACS::ENGINE::Catalog* catalog, std::string typeName);
434 SubjectComponent* addSubjectComponent(YACS::ENGINE::ComponentInstance* compo);
435 SubjectContainer* addSubjectContainer(YACS::ENGINE::Container* cont,
436 std::string name = "");
437 SubjectDataType* addSubjectDataType(YACS::ENGINE::TypeCode *type, std::string alias);
438 void removeSubjectDataType(YACS::ENGINE::TypeCode *type);
439 virtual void clean();
441 virtual TypeOfElem getType(){return SALOMEPROC;}
443 YACS::ENGINE::Proc *_proc;
446 class SubjectForLoop: public SubjectComposedNode
449 SubjectForLoop(YACS::ENGINE::ForLoop *forLoop, Subject *parent);
450 virtual ~SubjectForLoop();
451 virtual SubjectNode* addNode(YACS::ENGINE::Catalog *catalog,
455 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
456 virtual void completeChildrenSubjectList(SubjectNode *son);
457 virtual SubjectNode* getChild(YACS::ENGINE::Node* node=0) const { return _body; }
458 virtual bool setNbSteps(std::string nbSteps);
459 virtual bool hasValue();
460 virtual std::string getValue();
461 virtual void clean();
463 virtual TypeOfElem getType(){return FORLOOP;}
465 YACS::ENGINE::ForLoop *_forLoop;
469 class SubjectWhileLoop: public SubjectComposedNode
472 SubjectWhileLoop(YACS::ENGINE::WhileLoop *whileLoop, Subject *parent);
473 virtual ~SubjectWhileLoop();
474 virtual SubjectNode* addNode(YACS::ENGINE::Catalog *catalog,
478 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
479 virtual void completeChildrenSubjectList(SubjectNode *son);
480 virtual SubjectNode* getChild(YACS::ENGINE::Node* node=0) const { return _body; }
481 virtual bool setCondition(std::string condition);
482 virtual bool hasValue();
483 virtual std::string getValue();
484 virtual void clean();
486 virtual TypeOfElem getType(){return WHILELOOP;}
488 YACS::ENGINE::WhileLoop *_whileLoop;
492 class SubjectSwitch: public SubjectComposedNode
495 SubjectSwitch(YACS::ENGINE::Switch *aSwitch, Subject *parent);
496 virtual ~SubjectSwitch();
497 virtual SubjectNode* addNode(YACS::ENGINE::Catalog *catalog,
502 bool replace = false);
503 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
504 virtual void removeNode(SubjectNode* son);
505 std::map<int, SubjectNode*> getBodyMap();
506 virtual void completeChildrenSubjectList(SubjectNode *son);
507 virtual SubjectNode* getChild(YACS::ENGINE::Node* node=0) const;
508 virtual bool setSelect(std::string select);
509 virtual bool setCase(std::string caseId, SubjectNode* snode);
510 virtual bool hasValue();
511 virtual std::string getValue();
512 virtual void clean();
514 virtual TypeOfElem getType(){return SWITCH;}
516 YACS::ENGINE::Switch *_switch;
517 std::map<int, SubjectNode*> _bodyMap;
520 class SubjectForEachLoop: public SubjectComposedNode
523 SubjectForEachLoop(YACS::ENGINE::ForEachLoop *forEachLoop, Subject *parent);
524 virtual ~SubjectForEachLoop();
525 virtual SubjectNode* addNode(YACS::ENGINE::Catalog *catalog,
529 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
530 virtual void completeChildrenSubjectList(SubjectNode *son);
531 virtual SubjectNode* getChild(YACS::ENGINE::Node* node=0) const { return _body; }
532 virtual bool setNbBranches(std::string nbBranches);
533 virtual bool hasValue();
534 virtual std::string getValue();
535 virtual void clean();
537 virtual TypeOfElem getType(){return FOREACHLOOP;}
539 YACS::ENGINE::ForEachLoop *_forEachLoop;
541 SubjectNode* _splitter;
544 class SubjectOptimizerLoop: public SubjectComposedNode
547 SubjectOptimizerLoop(YACS::ENGINE::OptimizerLoop *optimizerLoop, Subject *parent);
548 virtual ~SubjectOptimizerLoop();
549 virtual SubjectNode* addNode(YACS::ENGINE::Catalog *catalog,
553 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
554 virtual void completeChildrenSubjectList(SubjectNode *son);
555 virtual SubjectNode* getChild(YACS::ENGINE::Node* node=0) const { return _body; }
556 virtual void clean();
558 virtual TypeOfElem getType(){return OPTIMIZERLOOP;}
560 YACS::ENGINE::OptimizerLoop *_optimizerLoop;
564 class SubjectElementaryNode: public SubjectNode
567 SubjectElementaryNode(YACS::ENGINE::ElementaryNode *elementaryNode, Subject *parent);
568 virtual ~SubjectElementaryNode();
569 virtual void recursiveUpdate(GuiEvent event, int type, Subject* son);
570 virtual SubjectDataPort* addInputPort(YACS::ENGINE::Catalog *catalog, std::string type, std::string name);
571 virtual SubjectDataPort* addOutputPort(YACS::ENGINE::Catalog *catalog, std::string type, std::string name);
572 virtual SubjectDataPort* addIDSPort(YACS::ENGINE::Catalog *catalog, std::string type, std::string name);
573 virtual SubjectDataPort* addODSPort(YACS::ENGINE::Catalog *catalog, std::string type, std::string name);
574 virtual bool OrderDataPorts(SubjectDataPort* portToMove, int isUp);
575 virtual void removePort(SubjectDataPort* port);
576 virtual void loadChildren();
577 virtual void clean();
580 YACS::ENGINE::ElementaryNode *_elementaryNode;
583 class SubjectInlineNode: public SubjectElementaryNode
586 SubjectInlineNode(YACS::ENGINE::InlineNode *inlineNode, Subject *parent);
587 virtual ~SubjectInlineNode();
588 virtual bool setScript(std::string script);
589 virtual std::string getScript();
590 virtual void clean();
593 YACS::ENGINE::InlineNode *_inlineNode;
596 class SubjectPythonNode: public SubjectInlineNode
599 SubjectPythonNode(YACS::ENGINE::PythonNode *pythonNode, Subject *parent);
600 virtual ~SubjectPythonNode();
601 virtual void clean();
603 virtual TypeOfElem getType(){return PYTHONNODE;}
605 YACS::ENGINE::PythonNode *_pythonNode;
608 class SubjectPyFuncNode: public SubjectInlineNode
611 SubjectPyFuncNode(YACS::ENGINE::PyFuncNode *pyFuncNode, Subject *parent);
612 virtual ~SubjectPyFuncNode();
613 virtual bool setFunctionName(std::string funcName);
614 virtual void clean();
616 virtual TypeOfElem getType(){return PYFUNCNODE;}
618 YACS::ENGINE::PyFuncNode *_pyFuncNode;
621 class SubjectServiceNode: public SubjectElementaryNode
624 SubjectServiceNode(YACS::ENGINE::ServiceNode *serviceNode, Subject *parent);
625 virtual ~SubjectServiceNode();
626 virtual void setComponentFromCatalog(YACS::ENGINE::Catalog *catalog,
628 std::string service);
629 virtual void setComponent();
630 virtual bool associateToComponent(SubjectComponent *subcomp);
631 virtual void removeSubjectReference(Subject *ref);
632 virtual void addSubjectReference(Subject *ref);
633 virtual SubjectReference* getSubjectReference();
634 virtual void clean();
637 YACS::ENGINE::ServiceNode *_serviceNode;
638 SubjectReference* _subjectReference;
639 SubjectReference* _subRefComponent;
642 class SubjectCORBANode: public SubjectServiceNode
645 SubjectCORBANode(YACS::ENGINE::CORBANode *corbaNode, Subject *parent);
646 virtual ~SubjectCORBANode();
647 virtual void clean();
650 YACS::ENGINE::CORBANode *_corbaNode;
653 class SubjectCppNode: public SubjectServiceNode
656 SubjectCppNode(YACS::ENGINE::CppNode *cppNode, Subject *parent);
657 virtual ~SubjectCppNode();
658 virtual void clean();
661 YACS::ENGINE::CppNode *_cppNode;
664 class SubjectSalomeNode: public SubjectServiceNode
667 SubjectSalomeNode(YACS::ENGINE::SalomeNode *salomeNode, Subject *parent);
668 virtual ~SubjectSalomeNode();
669 virtual void clean();
671 virtual TypeOfElem getType(){return SALOMENODE;}
673 YACS::ENGINE::SalomeNode *_salomeNode;
676 class SubjectSalomePythonNode: public SubjectServiceNode
679 SubjectSalomePythonNode(YACS::ENGINE::SalomePythonNode *salomePythonNode,
681 virtual ~SubjectSalomePythonNode();
682 virtual void clean();
684 virtual TypeOfElem getType(){return SALOMEPYTHONNODE;}
686 YACS::ENGINE::SalomePythonNode *_salomePythonNode;
689 class SubjectXmlNode: public SubjectServiceNode
692 SubjectXmlNode(YACS::ENGINE::XmlNode *xmlNode, Subject *parent);
693 virtual ~SubjectXmlNode();
694 virtual void clean();
696 virtual TypeOfElem getType(){return XMLNODE;}
698 YACS::ENGINE::XmlNode *_xmlNode;
701 class SubjectSplitterNode: public SubjectElementaryNode
704 SubjectSplitterNode(YACS::ENGINE::SplitterNode *splitterNode, Subject *parent);
705 virtual ~SubjectSplitterNode();
706 virtual std::string getName();
707 virtual void clean();
709 virtual TypeOfElem getType(){return SPLITTERNODE;}
711 YACS::ENGINE::SplitterNode *_splitterNode;
714 class SubjectDataNode: public SubjectElementaryNode
717 SubjectDataNode(YACS::ENGINE::DataNode *dataNode, Subject *parent);
718 virtual ~SubjectDataNode();
719 virtual void clean();
722 YACS::ENGINE::DataNode *_dataNode;
725 class SubjectPresetNode: public SubjectDataNode
728 SubjectPresetNode(YACS::ENGINE::PresetNode *presetNode, Subject *parent);
729 virtual ~SubjectPresetNode();
730 virtual void clean();
732 virtual TypeOfElem getType(){return PRESETNODE;}
734 YACS::ENGINE::PresetNode *_presetNode;
737 class SubjectOutNode: public SubjectDataNode
740 SubjectOutNode(YACS::ENGINE::OutNode *outNode, Subject *parent);
741 virtual ~SubjectOutNode();
742 virtual void clean();
744 virtual TypeOfElem getType(){return OUTNODE;}
746 YACS::ENGINE::OutNode *_outNode;
749 class SubjectStudyInNode: public SubjectDataNode
752 SubjectStudyInNode(YACS::ENGINE::StudyInNode *studyInNode, Subject *parent);
753 virtual ~SubjectStudyInNode();
754 virtual void clean();
756 virtual TypeOfElem getType(){return STUDYINNODE;}
758 YACS::ENGINE::StudyInNode *_studyInNode;
761 class SubjectStudyOutNode: public SubjectDataNode
764 SubjectStudyOutNode(YACS::ENGINE::StudyOutNode *studyOutNode, Subject *parent);
765 virtual ~SubjectStudyOutNode();
766 virtual void clean();
768 virtual TypeOfElem getType(){return STUDYOUTNODE;}
770 YACS::ENGINE::StudyOutNode *_studyOutNode;
773 class SubjectLink: public Subject
776 SubjectLink(SubjectNode* subOutNode,
777 SubjectDataPort* outPort,
778 SubjectNode* subInNode,
779 SubjectDataPort* inPort,
781 virtual ~SubjectLink();
782 virtual std::string getName();
783 virtual void clean();
785 SubjectNode* getSubjectOutNode() { return _subOutNode; };
786 SubjectNode* getSubjectInNode() { return _subInNode; };
787 SubjectDataPort* getSubjectOutPort() { return _outPort; };
788 SubjectDataPort* getSubjectInPort() { return _inPort; };
789 virtual TypeOfElem getType(){return DATALINK;}
791 SubjectNode* _subOutNode;
792 SubjectDataPort* _outPort;
793 SubjectNode* _subInNode;
794 SubjectDataPort* _inPort;
796 YACS::ENGINE::ComposedNode *_cla;
797 YACS::ENGINE::OutPort *_outp;
798 YACS::ENGINE::InPort *_inp;
801 class SubjectControlLink: public Subject
804 SubjectControlLink(SubjectNode* subOutNode,
805 SubjectNode* subInNode,
807 virtual ~SubjectControlLink();
808 virtual std::string getName();
809 virtual void clean();
811 SubjectNode* getSubjectOutNode() { return _subOutNode; };
812 SubjectNode* getSubjectInNode() { return _subInNode; };
813 virtual TypeOfElem getType(){return CONTROLLINK;}
815 SubjectNode* _subOutNode;
816 SubjectNode* _subInNode;
818 YACS::ENGINE::ComposedNode *_cla;