2 #include "RuntimeSALOME.hxx"
6 #include "guiContext.hxx"
8 #include "browseCatalog.h"
9 #include "chooseName.h"
10 #include "ServiceNode.hxx"
15 #include "YacsTrace.hxx"
17 #include <qpopupmenu.h>
18 #include <qfiledialog.h>
21 #include <qmessagebox.h>
31 using namespace YACS::HMI;
38 ViewItem::ViewItem(QListView *parent, QString label, Subject* subject)
39 : QListViewItem(parent, label)
44 _subject->attach(this);
51 ViewItem::ViewItem(ViewItem *parent, QString label, Subject* subject)
52 : GuiObserver(), QListViewItem(parent, label)
54 _parent = parent->getParent();
57 _subject->attach(this);
72 void ViewItem::setState(int state)
80 QListView *ViewItem::getParent()
89 Subject* ViewItem::getSubject()
98 void ViewItem::select(bool isSelected)
100 DEBTRACE("ViewItem::select() "<< isSelected << " " << this);
101 _parent->setSelected(this, isSelected);
102 _parent->ensureItemVisible(this);
105 void ViewItem::update(GuiEvent event, int type, Subject* son)
107 DEBTRACE("ViewItem::update");
112 DEBTRACE("ViewItem::update RENAME " << _subject->getName());
113 setText(0,_subject->getName());
116 DEBTRACE("ViewItem::update ADDREF " << _subject->getName());
117 item = new ReferenceViewItem(this,
122 DEBTRACE("ViewItem::update(), event not handled: " << event);
123 GuiObserver::update(event, type, son);
131 void ViewItem::paintCell( QPainter *p, const QColorGroup &cg,
132 int column, int width, int alignment )
134 QColorGroup _cg( cg );
135 QColor c = _cg.text();
136 if (column == 1) _cg.setColor( QColorGroup::Text, _cf );
137 QListViewItem::paintCell( p, _cg, column, width, alignment );
138 if (column == 1) _cg.setColor( QColorGroup::Text, c );
141 // ----------------------------------------------------------------------------
147 NodeViewItem::NodeViewItem(ViewItem *parent,
150 : ViewItem::ViewItem(parent, label, subject)
154 void NodeViewItem::update(GuiEvent event, int type, Subject* son)
156 DEBTRACE("NodeViewItem::update");
163 case YACS::HMI::INPUTPORT:
164 case YACS::HMI::OUTPUTPORT:
165 case YACS::HMI::INPUTDATASTREAMPORT:
166 case YACS::HMI::OUTPUTDATASTREAMPORT:
167 item = new PortViewItem(this,
172 DEBTRACE("NodeViewItem::update(), ADD, type not handled: " << type);
176 DEBTRACE("NodeViewItem::update(), event not handled: " << event);
177 ViewItem::update(event, type, son);
181 // ----------------------------------------------------------------------------
187 ComposedNodeViewItem::ComposedNodeViewItem(QListView *parent,
190 : ViewItem::ViewItem(parent, label, subject)
199 ComposedNodeViewItem::ComposedNodeViewItem(ViewItem *parent,
202 : ViewItem::ViewItem(parent, label, subject)
206 void ComposedNodeViewItem::update(GuiEvent event, int type, Subject* son)
208 DEBTRACE("ComposedNodeViewItem::update");
215 case YACS::HMI::BLOC:
216 case YACS::HMI::FORLOOP:
217 case YACS::HMI::WHILELOOP:
218 case YACS::HMI::SWITCH:
219 case YACS::HMI::FOREACHLOOP:
220 case YACS::HMI::OPTIMIZERLOOP:
221 item = new ComposedNodeViewItem(this,
225 case YACS::HMI::PYTHONNODE:
226 case YACS::HMI::PYFUNCNODE:
227 case YACS::HMI::CORBANODE:
228 case YACS::HMI::CPPNODE:
229 case YACS::HMI::SALOMENODE:
230 case YACS::HMI::SALOMEPYTHONNODE:
231 case YACS::HMI::XMLNODE:
232 case YACS::HMI::PRESETNODE:
233 case YACS::HMI::OUTNODE:
234 case YACS::HMI::STUDYINNODE:
235 case YACS::HMI::STUDYOUTNODE:
236 item = new NodeViewItem(this,
240 case YACS::HMI::INPUTPORT:
241 case YACS::HMI::OUTPUTPORT:
242 case YACS::HMI::INPUTDATASTREAMPORT:
243 case YACS::HMI::OUTPUTDATASTREAMPORT:
244 item = new PortViewItem(this,
248 case YACS::HMI::COMPONENT:
249 item = new ComponentViewItem(this,
253 case YACS::HMI::CONTAINER:
254 item = new ContainerViewItem(this,
258 case YACS::HMI::DATATYPE:
259 item = new DataTypeViewItem(this,
264 DEBTRACE("ComposedNodeViewItem::update() ADD, type not handled:" << type);
267 case YACS::HMI::ADDLINK:
268 case YACS::HMI::ADDCONTROLLINK:
269 item = new LinkViewItem(this,
274 DEBTRACE("ComposedNodeViewItem::update(), event not handled: "<< event);
275 ViewItem::update(event, type, son);
279 // ----------------------------------------------------------------------------
281 PortViewItem::PortViewItem(ViewItem *parent, QString label, Subject* subject)
282 : ViewItem::ViewItem(parent, label, subject)
286 void PortViewItem::update(GuiEvent event, int type, Subject* son)
288 DEBTRACE("PortViewItem::update");
289 ViewItem::update(event, type, son);
292 // ----------------------------------------------------------------------------
294 LinkViewItem::LinkViewItem(ViewItem *parent, QString label, Subject* subject)
295 : ViewItem::ViewItem(parent, label, subject)
299 void LinkViewItem::update(GuiEvent event, int type, Subject* son)
301 DEBTRACE("LinkViewItem::update");
302 ViewItem::update(event, type, son);
305 // ----------------------------------------------------------------------------
307 ComponentViewItem::ComponentViewItem(ViewItem *parent, QString label, Subject* subject)
308 : ViewItem::ViewItem(parent, label, subject)
312 void ComponentViewItem::update(GuiEvent event, int type, Subject* son)
314 DEBTRACE("ComponentViewItem::update");
315 ViewItem::update(event, type, son);
318 // ----------------------------------------------------------------------------
320 ContainerViewItem::ContainerViewItem(ViewItem *parent, QString label, Subject* subject)
321 : ViewItem::ViewItem(parent, label, subject)
325 void ContainerViewItem::update(GuiEvent event, int type, Subject* son)
327 DEBTRACE("ContainerViewItem::update");
328 ViewItem::update(event, type, son);
331 // ----------------------------------------------------------------------------
333 DataTypeViewItem::DataTypeViewItem(ViewItem *parent, QString label, Subject* subject)
334 : ViewItem::ViewItem(parent, label, subject)
338 void DataTypeViewItem::update(GuiEvent event, int type, Subject* son)
340 DEBTRACE("DataTypeViewItem::update");
341 ViewItem::update(event, type, son);
344 // ----------------------------------------------------------------------------
346 ReferenceViewItem::ReferenceViewItem(ViewItem *parent, QString label, Subject* subject)
347 : ViewItem::ViewItem(parent, label, subject)
351 void ReferenceViewItem::update(GuiEvent event, int type, Subject* son)
353 DEBTRACE("ReferenceViewItem::update");
354 ViewItem::update(event, type, son);
357 // ----------------------------------------------------------------------------
364 editTree::editTree(YACS::HMI::Subject *context,
367 WFlags fl) : GuiObserver(), wiEditTree(parent, name, fl)
372 _previousSelected = 0;
373 _selectedSubjectOutPort = 0;
374 _selectedSubjectNode = 0;
375 _selectedSubjectComponent = 0;
376 _selectedSubjectService = 0;
378 _context->attach(this);
379 connect( lv, SIGNAL(selectionChanged()),
380 this, SLOT(select()) );
381 // connect( lv, SIGNAL(clicked(QListViewItem *)),
382 // this, SLOT(select()) );
383 // connect( lv, SIGNAL(selectionChanged(QListViewItem *)),
384 // this, SLOT(select(QListViewItem *)) );
385 // connect( lv, SIGNAL(clicked(QListViewItem *)),
386 // this, SLOT(select(QListViewItem *)) );
393 editTree::~editTree()
397 void editTree::update(GuiEvent event, int type, Subject* son)
399 DEBTRACE("editTree::update");
402 case YACS::HMI::NEWROOT:
406 DEBTRACE("editTree::update(), event not handled: "<< event);
410 void editTree::setNewRoot(YACS::HMI::Subject *root)
417 void editTree::addViewItemInMap(YACS::HMI::ViewItem* item, YACS::HMI::Subject* subject)
419 _viewItemsMap[subject] = item;
422 YACS::HMI::ViewItem* editTree::getViewItem(YACS::HMI::Subject* subject)
424 return _viewItemsMap[subject];
431 void editTree::resetTreeNode(QListView *lv)
434 lv->setColumnWidth(0,400);
435 // lv->addColumn( "state", 100);
436 lv->setRootIsDecorated( TRUE );
439 string name = _root->getName();
440 ViewItem *start = new ComposedNodeViewItem(lv, name, _root);
441 addViewItemInMap(start, _root);
449 void editTree::printName()
451 QListViewItem *it = lv->selectedItem();
454 DEBTRACE("my name is Bond, James Bond... "<< this);
458 DEBTRACE("nobody "<< this);
462 YACS::HMI::Subject* editTree::getSelectedSubject()
465 QListViewItem *it = lv->selectedItem();
468 ViewItem *item = dynamic_cast<ViewItem*> (it);
469 if (item) sub = item->getSubject();
474 void editTree::destroy()
476 DEBTRACE("editTree::destroy");
477 Subject *sub =getSelectedSubject();
480 Subject *parent = sub->getParent();
483 parent->destroy(sub);
488 void editTree::addLink()
490 DEBTRACE("editTree::addLink");
491 Subject *sub =getSelectedSubject();
494 if (dynamic_cast<SubjectOutputPort*>(sub) || dynamic_cast<SubjectOutputDataStreamPort*>(sub))
495 _selectedSubjectOutPort = static_cast<SubjectDataPort*>(sub);
496 else if (dynamic_cast<SubjectNode*>(sub))
497 _selectedSubjectNode = static_cast<SubjectNode*>(sub);
501 void editTree::editPortProperties()
503 DEBTRACE("editTree::editPortProperties");
504 Subject *sub =getSelectedSubject();
507 if (SubjectOutputDataStreamPort* subODS = dynamic_cast<SubjectOutputDataStreamPort*>(sub))
509 map<string, string> properties = subODS->getProperties();
510 properties["prop1"] = "val1";
511 properties["prop2"] = "val2";
512 subODS->setProperties(properties);
513 properties = subODS->getProperties();
514 map<string, string>::iterator it;
515 for (it = properties.begin(); it !=properties.end(); ++it)
516 DEBTRACE("OutputDataStreamPort property " << (*it).first << " " << (*it).second);
518 else if (SubjectInputDataStreamPort* subIDS = dynamic_cast<SubjectInputDataStreamPort*>(sub))
520 map<string, string> properties = subIDS->getProperties();
521 properties["prop1"] = "val1";
522 properties["prop2"] = "val2";
523 subIDS->setProperties(properties);
524 properties = subIDS->getProperties();
525 map<string, string>::iterator it;
526 for (it = properties.begin(); it !=properties.end(); ++it)
527 DEBTRACE("InputDataStreamPort property " << (*it).first << " " << (*it).second);
532 void editTree::addComponent()
534 DEBTRACE("editTree::addComponent");
537 name << "_" << GuiContext::getCurrent()->getNewId();
538 ChooseName chooseName("root", "component", name.str());
540 if (chooseName.isOk())
542 string theName = chooseName.getChoosenName();
543 bool ret = GuiContext::getCurrent()->getSubjectProc()->addComponent(theName);
544 if (!ret) QMessageBox::warning(this, "Component not Created", GuiContext::getCurrent()->_lastErrorMessage );
548 void editTree::addContainer()
550 DEBTRACE("editTree::addContainer");
551 std::stringstream name;
552 name << "container" << GuiContext::getCurrent()->getNewId();
553 ChooseName chooseName("root", "container", name.str());
555 if (chooseName.isOk())
557 string theName = chooseName.getChoosenName();
558 bool ret = GuiContext::getCurrent()->getSubjectProc()->addContainer(theName);
559 if (!ret) QMessageBox::warning(this, "Container not Created", GuiContext::getCurrent()->_lastErrorMessage );
563 void editTree::associateServiceToComponent()
565 DEBTRACE("editTree::associateServiceToComponent");
566 Subject *sub =getSelectedSubject();
569 if (SubjectServiceNode *subserv = dynamic_cast<SubjectServiceNode*>(sub))
570 _selectedSubjectService = subserv;
574 void editTree::associateComponentToContainer()
576 DEBTRACE("editTree::associateComponentToContainer");
577 Subject *sub =getSelectedSubject();
580 if (SubjectComponent *subcomp = dynamic_cast<SubjectComponent*>(sub))
581 _selectedSubjectComponent = subcomp;
585 void editTree::editContainerProperties()
587 DEBTRACE("editTree::editContainerProperties");
588 Subject *sub =getSelectedSubject();
591 if (SubjectContainer *subcont = dynamic_cast<SubjectContainer*>(sub))
593 map<string, string> properties = subcont->getProperties();
594 properties["prop1"] = "val1";
595 properties["prop2"] = "val2";
596 subcont->setProperties(properties);
597 properties = subcont->getProperties();
598 map<string, string>::iterator it;
599 for (it = properties.begin(); it !=properties.end(); ++it)
600 DEBTRACE("container property " << (*it).first << " " << (*it).second);
605 void editTree::newNode(int key)
607 DEBTRACE("editTree::newNode(Catalog* catalog, string type): "<< this);
608 YACS::ENGINE::Catalog* catalog = _catalogItemsMap[key].first;
609 std::string type = _catalogItemsMap[key].second;
610 Subject *sub =getSelectedSubject();
613 YACS::HMI::SubjectComposedNode *subject = dynamic_cast< YACS::HMI::SubjectComposedNode*>(sub);
616 std::stringstream name;
617 name << type << GuiContext::getCurrent()->getNewId();
618 YACS::HMI::SubjectSwitch *aSwitch = dynamic_cast< YACS::HMI::SubjectSwitch*>(subject);
621 map<int, SubjectNode*> bodyMap = aSwitch->getBodyMap();
623 if (bodyMap.empty()) swCase = 1;
626 map<int, SubjectNode*>::reverse_iterator rit = bodyMap.rbegin();
627 swCase = (*rit).first + 1;
629 aSwitch->addNode(catalog, "", type, name.str(), swCase);
632 subject->addNode(catalog, "", type, name.str());
635 else DEBTRACE("editTree::newNode(Catalog* catalog, string type): no ComposedNode selected "<< this);
638 void editTree::newNode(YACS::ENGINE::Catalog* catalog,
640 std::pair<std::string,std::string> compoServ)
642 DEBTRACE("editTree::newNode(catalog, subject, std::pair<std::string,std::string> compoServ)");
643 std::string compo = compoServ.first;
644 std::string service = compoServ.second;
645 std::stringstream name;
646 name << compo << "_" << service << GuiContext::getCurrent()->getNewId();
647 YACS::HMI::SubjectComposedNode *subject = dynamic_cast< YACS::HMI::SubjectComposedNode*>(sub);
650 YACS::HMI::SubjectSwitch *aSwitch = dynamic_cast< YACS::HMI::SubjectSwitch*>(subject);
653 map<int, SubjectNode*> bodyMap = aSwitch->getBodyMap();
655 if (bodyMap.empty()) swCase = 1;
658 map<int, SubjectNode*>::reverse_iterator rit = bodyMap.rbegin();
659 swCase = (*rit).first + 1;
661 aSwitch->addNode(catalog, compo, service, name.str(), swCase);
664 subject->addNode(catalog, compo, service, name.str());
668 void editTree::newDataType(YACS::ENGINE::Catalog* catalog,
670 std::string typeName)
672 DEBTRACE("editTree::newDataType " << sub->getName() << " " << typeName);
673 YACS::HMI::SubjectProc *subproc = GuiContext::getCurrent()->getSubjectProc();
674 subproc->addDataType(catalog, typeName);
678 void editTree::newInputPort(int key)
680 DEBTRACE("editTree::newInputPort(Catalog* catalog, string type): "<< this);
681 YACS::ENGINE::Catalog* catalog = _catalogItemsMap[key].first;
682 std::string type = _catalogItemsMap[key].second;
683 Subject *sub =getSelectedSubject();
684 newDFInputPort(catalog, sub, type);
687 void editTree::newOutputPort(int key)
689 DEBTRACE("editTree::newOutputPort(Catalog* catalog, string type): "<< this);
690 YACS::ENGINE::Catalog* catalog = _catalogItemsMap[key].first;
691 std::string type = _catalogItemsMap[key].second;
692 Subject *sub =getSelectedSubject();
693 newDFOutputPort(catalog, sub, type);
696 void editTree::newDFInputPort(YACS::ENGINE::Catalog* catalog,
698 std::string typeName)
702 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
705 std::stringstream name;
706 name << "InDF_" << typeName << GuiContext::getCurrent()->getNewId();
707 ChooseName chooseName(subject->getName(), typeName, name.str());
709 if (chooseName.isOk())
711 string theName = chooseName.getChoosenName();
712 bool ret = subject->addInputPort(catalog, typeName, theName);
713 if (!ret) QMessageBox::warning(this, "Input Port not Created", GuiContext::getCurrent()->_lastErrorMessage );
719 void editTree::newDFOutputPort(YACS::ENGINE::Catalog* catalog,
721 std::string typeName)
725 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
728 std::stringstream name;
729 name << "OutDF_" << typeName << GuiContext::getCurrent()->getNewId();
730 ChooseName chooseName(subject->getName(), typeName, name.str());
732 if (chooseName.isOk())
734 string theName = chooseName.getChoosenName();
735 bool ret = subject->addOutputPort(catalog, typeName, theName);
736 if (!ret) QMessageBox::warning(this, "Output Port not Created", GuiContext::getCurrent()->_lastErrorMessage );
742 void editTree::newDSInputPort(YACS::ENGINE::Catalog* catalog,
744 std::string typeName)
748 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
751 std::stringstream name;
752 name << "InDS_" << typeName << GuiContext::getCurrent()->getNewId();
753 ChooseName chooseName(subject->getName(), typeName, name.str());
755 if (chooseName.isOk())
757 string theName = chooseName.getChoosenName();
758 bool ret = subject->addIDSPort(catalog, typeName, theName);
759 if (!ret) QMessageBox::warning(this, "Input Port not Created", GuiContext::getCurrent()->_lastErrorMessage );
765 void editTree::newDSOutputPort(YACS::ENGINE::Catalog* catalog,
767 std::string typeName)
771 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
774 std::stringstream name;
775 name << "OutDS_" << typeName << GuiContext::getCurrent()->getNewId();
776 ChooseName chooseName(subject->getName(), typeName, name.str());
778 if (chooseName.isOk())
780 string theName = chooseName.getChoosenName();
781 bool ret = subject->addODSPort(catalog, typeName, theName);
782 if (!ret) QMessageBox::warning(this, "Output Port not Created", GuiContext::getCurrent()->_lastErrorMessage );
789 void editTree::newDFInputPort()
791 DEBTRACE("editTree::newDFInputPort");
792 Subject *sub =getSelectedSubject();
795 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
797 catalog(CATALOGINPUTPORT);
802 void editTree::newDFOutputPort()
804 DEBTRACE("editTree::newDFOutputPort");
805 Subject *sub =getSelectedSubject();
808 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
810 catalog(CATALOGOUTPUTPORT);
813 void editTree::newDSInputPort()
815 DEBTRACE("editTree::newDSInputPort");
816 Subject *sub =getSelectedSubject();
819 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
821 catalog(CATALOGIDSPORT);
826 void editTree::newDSOutputPort()
828 DEBTRACE("editTree::newDSOutputPort");
829 Subject *sub =getSelectedSubject();
832 YACS::HMI::SubjectElementaryNode *subject = dynamic_cast< YACS::HMI::SubjectElementaryNode*>(sub);
834 catalog(CATALOGODSPORT);
838 void editTree::catalog(int cataType)
840 Subject *sub =getSelectedSubject();
843 BrowseCatalog *brCat = new BrowseCatalog(this, sub, cataType);
848 void editTree::setCatalog(int isproc)
850 Subject *sub =getSelectedSubject();
855 QString fn = QFileDialog::getOpenFileName( QString::null,
856 tr( "XML-Files (*.xml);;All Files (*)" ),
858 "load YACS scheme file dialog as catalog",
859 "Choose a filename to load" );
862 YACS::ENGINE::Catalog* aCatalog = YACS::ENGINE::getSALOMERuntime()->loadCatalog( "proc", fn.latin1());
863 GuiContext::getCurrent()->setProcCatalog(aCatalog);
864 GuiContext::getCurrent()->setCurrentCatalog(aCatalog);
869 GuiContext::getCurrent()->setCurrentCatalog(GuiContext::getCurrent()->getSessionCatalog());
879 void editTree::select()
881 DEBTRACE("editTree::select() "<< this);
882 QListViewItem *it =lv->selectedItem();
884 if (it) // an item selected
886 if (it != _previousSelected) // a new item is selected
888 _previousSelected = it;
889 item = dynamic_cast<ViewItem*> (it);
892 else if (_previousSelected) // nothing selected, deselect previous
894 it = _previousSelected;
895 _previousSelected = 0;
896 item = dynamic_cast<ViewItem*> (it);
900 item->getSubject()->select(it->isSelected());
901 if (_selectedSubjectOutPort)
903 Subject *sub = item->getSubject();
904 if (dynamic_cast<SubjectInputPort*>(sub) || dynamic_cast<SubjectInputDataStreamPort*>(sub))
906 SubjectDataPort *sdp = dynamic_cast<SubjectDataPort*>(sub);
908 SubjectDataPort::tryCreateLink(_selectedSubjectOutPort, sdp);
909 _selectedSubjectOutPort = 0;
912 if (_selectedSubjectNode)
914 Subject *sub = item->getSubject();
915 if (SubjectNode* subNode = dynamic_cast<SubjectNode*>(sub))
917 SubjectNode::tryCreateLink(_selectedSubjectNode, subNode);
918 _selectedSubjectNode = 0;
921 if (_selectedSubjectService)
923 Subject *sub = item->getSubject();
924 if (SubjectComponent *subcomp = dynamic_cast<SubjectComponent*>(sub))
926 _selectedSubjectService->associateToComponent(subcomp);
927 _selectedSubjectService = 0;
930 if (_selectedSubjectComponent)
932 Subject *sub = item->getSubject();
933 if (SubjectContainer *subcont = dynamic_cast<SubjectContainer*>(sub))
935 _selectedSubjectComponent->associateToContainer(subcont);
936 _selectedSubjectComponent = 0;
946 void editTree::select(QListViewItem *it)
948 DEBTRACE("editTree::select(QListViewItem *item) "<< this);
949 ViewItem *item = dynamic_cast<ViewItem*> (it);
950 if (item) item->getSubject()->select(it->isSelected());
957 void editTree::contextMenuEvent( QContextMenuEvent * )
959 QListViewItem *it =lv->selectedItem();
963 if (item = dynamic_cast<ComposedNodeViewItem*> (it))
964 ComposedNodeContextMenu();
965 else if (item = dynamic_cast<NodeViewItem*> (it))
967 else if (item = dynamic_cast<PortViewItem*> (it))
969 else if (item = dynamic_cast<LinkViewItem*> (it))
971 else if (item = dynamic_cast<ComponentViewItem*> (it))
972 ComponentContextMenu();
973 else if (item = dynamic_cast<ContainerViewItem*> (it))
974 ContainerContextMenu();
982 void editTree::ComposedNodeContextMenu()
984 DEBTRACE("editTree::ComposedNodeContextMenu");
985 QPopupMenu* contextMenu = new QPopupMenu();
986 Q_CHECK_PTR( contextMenu );
987 QLabel *caption = new QLabel( "<font color=darkblue><u><b>"
988 "ComposedNode Context Menu</b></u></font>",
990 caption->setAlignment( Qt::AlignCenter );
992 contextMenu->insertItem( caption );
993 contextMenu->insertItem( "Message", this, SLOT(printName()) );
994 contextMenu->insertItem( "Delete", this, SLOT(destroy()) );
995 contextMenu->insertItem( "add control link to other node", this, SLOT(addLink()) );
997 _catalogItemsMap.clear();
998 YACS::ENGINE::Catalog *builtinCatalog = YACS::ENGINE::getSALOMERuntime()->getBuiltinCatalog();
1000 map<string,YACS::ENGINE::Node*>::iterator it;
1001 for (it=builtinCatalog->_nodeMap.begin(); it!=builtinCatalog->_nodeMap.end(); ++it)
1003 string nodeType = "new " + (*it).first;
1004 //DEBTRACE(nodeType);
1005 id =contextMenu->insertItem( nodeType.c_str(), this,
1006 SLOT(newNode(int)) );
1007 std::pair<YACS::ENGINE::Catalog*, std::string> p(builtinCatalog, (*it).first);
1008 _catalogItemsMap[_keymap] = p;
1009 contextMenu->setItemParameter(id, _keymap++);
1013 map<string,YACS::ENGINE::ComposedNode*>::iterator it;
1014 for (it=builtinCatalog->_composednodeMap.begin(); it!=builtinCatalog->_composednodeMap.end(); ++it)
1016 string nodeType = "new " + (*it).first;
1017 //DEBTRACE(nodeType);
1018 id =contextMenu->insertItem( nodeType.c_str(), this,
1019 SLOT(newNode(int)) );
1020 std::pair<YACS::ENGINE::Catalog*, std::string> p(builtinCatalog, (*it).first);
1021 _catalogItemsMap[_keymap] = p;
1022 contextMenu->setItemParameter(id, _keymap++);
1025 id = contextMenu->insertItem( "set current catalog to session", this, SLOT(setCatalog(int)) );
1026 contextMenu->setItemParameter(id, 0);
1027 id = contextMenu->insertItem( "set current catalog to proc", this, SLOT(setCatalog(int)) );
1028 contextMenu->setItemParameter(id, 1);
1029 id = contextMenu->insertItem( "new node from current Catalog", this, SLOT(catalog(int)) );
1030 contextMenu->setItemParameter(id, CATALOGNODE);
1031 contextMenu->exec( QCursor::pos() );
1039 void editTree::NodeContextMenu()
1041 QPopupMenu* contextMenu = new QPopupMenu();
1042 Q_CHECK_PTR( contextMenu );
1043 QLabel *caption = new QLabel( "<font color=darkblue><u><b>"
1044 "Elementary Node Context Menu</b></u></font>",
1046 caption->setAlignment( Qt::AlignCenter );
1047 contextMenu->insertItem( caption );
1048 contextMenu->insertItem( "Message", this, SLOT(printName()) );
1049 contextMenu->insertItem( "Delete", this, SLOT(destroy()) );
1050 contextMenu->insertItem( "add Component", this, SLOT(addComponent()) );
1051 contextMenu->insertItem( "associate to Component", this, SLOT(associateServiceToComponent()) );
1052 contextMenu->insertItem( "add control link to other node", this, SLOT(addLink()) );
1054 _catalogItemsMap.clear();
1055 YACS::ENGINE::Catalog *builtinCatalog = YACS::ENGINE::getSALOMERuntime()->getBuiltinCatalog();
1058 map<string,YACS::ENGINE::TypeCode*>::iterator it;
1059 for (it=builtinCatalog->_typeMap.begin(); it!=builtinCatalog->_typeMap.end(); ++it)
1061 std::pair<YACS::ENGINE::Catalog*, std::string> p(builtinCatalog, (*it).first);
1063 string typeCode = "new input port " + (*it).first;
1065 id =contextMenu->insertItem( typeCode.c_str(), this,
1066 SLOT(newInputPort(int)) );
1067 _catalogItemsMap[_keymap] = p;
1068 contextMenu->setItemParameter(id, _keymap++);
1071 string typeCode = "new output port " + (*it).first;
1073 id =contextMenu->insertItem( typeCode.c_str(), this,
1074 SLOT(newOutputPort(int)) );
1075 _catalogItemsMap[_keymap] = p;
1076 contextMenu->setItemParameter(id, _keymap++);
1079 id = contextMenu->insertItem( "set current catalog to session", this, SLOT(setCatalog(int)) );
1080 contextMenu->setItemParameter(id, 0);
1081 id = contextMenu->insertItem( "set current catalog to proc", this, SLOT(setCatalog(int)) );
1082 contextMenu->setItemParameter(id, 1);
1083 id = contextMenu->insertItem( "new InputPort from catalog", this, SLOT(newDFInputPort()));
1084 id = contextMenu->insertItem( "new OutputPort from catalog", this, SLOT(newDFOutputPort()));
1085 id = contextMenu->insertItem( "new DataStream InputPort from catalog", this, SLOT(newDSInputPort()));
1086 id = contextMenu->insertItem( "new DataStream OutputPort from catalog", this, SLOT(newDSOutputPort()));
1087 id = contextMenu->insertItem( "add Data Type from current Catalog", this, SLOT(catalog(int)) );
1088 contextMenu->setItemParameter(id, CATALOGDATATYPE);
1090 contextMenu->exec( QCursor::pos() );
1094 void editTree::PortContextMenu()
1096 QPopupMenu* contextMenu = new QPopupMenu();
1097 Q_CHECK_PTR( contextMenu );
1098 QLabel *caption = new QLabel( "<font color=darkblue><u><b>"
1099 "Port Context Menu</b></u></font>",
1101 caption->setAlignment( Qt::AlignCenter );
1102 contextMenu->insertItem( caption );
1103 contextMenu->insertItem( "Message", this, SLOT(printName()) );
1104 contextMenu->insertItem( "Delete", this, SLOT(destroy()) );
1105 contextMenu->insertItem( "Add link", this, SLOT(addLink()) );
1106 contextMenu->insertItem( "edit properties", this, SLOT(editPortProperties()) );
1107 contextMenu->exec( QCursor::pos() );
1111 void editTree::LinkContextMenu()
1113 QPopupMenu* contextMenu = new QPopupMenu();
1114 Q_CHECK_PTR( contextMenu );
1115 QLabel *caption = new QLabel( "<font color=darkblue><u><b>"
1116 "Link Context Menu</b></u></font>",
1118 caption->setAlignment( Qt::AlignCenter );
1119 contextMenu->insertItem( caption );
1120 contextMenu->insertItem( "Message", this, SLOT(printName()) );
1121 contextMenu->insertItem( "Delete", this, SLOT(destroy()) );
1122 contextMenu->exec( QCursor::pos() );
1126 void editTree::ComponentContextMenu()
1128 QPopupMenu* contextMenu = new QPopupMenu();
1129 Q_CHECK_PTR( contextMenu );
1130 QLabel *caption = new QLabel( "<font color=darkblue><u><b>"
1131 "Component Context Menu</b></u></font>",
1133 caption->setAlignment( Qt::AlignCenter );
1134 contextMenu->insertItem( caption );
1135 contextMenu->insertItem( "Message", this, SLOT(printName()) );
1136 contextMenu->insertItem( "add Container", this, SLOT(addContainer()) );
1137 contextMenu->insertItem( "associate to Container", this, SLOT(associateComponentToContainer()) );
1138 contextMenu->exec( QCursor::pos() );
1142 void editTree::ContainerContextMenu()
1144 QPopupMenu* contextMenu = new QPopupMenu();
1145 Q_CHECK_PTR( contextMenu );
1146 QLabel *caption = new QLabel( "<font color=darkblue><u><b>"
1147 "Container Context Menu</b></u></font>",
1149 caption->setAlignment( Qt::AlignCenter );
1150 contextMenu->insertItem( caption );
1151 contextMenu->insertItem( "Message", this, SLOT(printName()) );
1152 contextMenu->insertItem( "edit container properties", this, SLOT(editContainerProperties()) );
1153 contextMenu->exec( QCursor::pos() );