YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
applicationitem.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: LGPL-2.1-or-later
4 */
5
6#include "applicationitem.h"
7#include "moduleitem.h"
8#include "arrow.h"
9#include "sourceportitem.h"
10#include "destinationportitem.h"
11#include "builderscene.h"
12#include <QGraphicsDropShadowEffect>
13#include <QDebug>
14
15
16ApplicationItem::ApplicationItem(Application* application, Manager *manager, QList <int> *usedIds,bool isInApp,
17 bool editingMode,
18 int *connectionsId,
19 BuilderItem *parent) :
20 BuilderItem(parent)
21{
24 this->itemName = QString("%1").arg(application->getName());
25 this->application = application;
26 this->editingMode = editingMode;
27 this->mainAppManager = manager;
28 this->connectionsId = connectionsId;
29 index = 0;
30 minx = miny = maxw = maxh = -1000;
31 this->nestedInApp = isInApp;
32
33 customFont.setPointSize(font.pointSize() + 5);
34 customFont.setBold(true);
35 QFontMetrics fontMetric(customFont);
36#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
37 textWidth = fontMetric.horizontalAdvance(itemName);
38#else
39 textWidth = fontMetric.width(itemName);
40#endif
41 usedModulesId = usedIds;
42}
43
45{
46 if(editingMode && mainAppManager){
47 Application* mainApplication = mainAppManager->getKnowledgeBase()->getApplication();
48 mainAppManager->getKnowledgeBase()->removeIApplicationFromApplication(mainApplication,application->getName());
49 application = nullptr;
50 }
51}
52
54{
55 return application;
56}
57
58
59
61{
62 setFlag(ItemIsMovable,!nestedInApp);
63 setFlag(ItemIsSelectable,true);
64 setFlag(ItemSendsGeometryChanges,!nestedInApp);
65
66 pressed = false;
67 moved = false;
68
69 setToolTip(itemName);
70
71
72 QFontMetrics fontMetric(font);
73 //int textWidth = fontMetric.width(itemName);
74
75
76 /*********************************************************/
77 ModulePContainer modules = mainAppManager->getKnowledgeBase()->getModules(application);
78 CnnContainer connections = mainAppManager->getKnowledgeBase()->getConnections(application);
79 ApplicaitonPContainer applications = mainAppManager->getKnowledgeBase()->getApplications(application);
80// ExecutablePContainer exes = mainAppManager->getExecutables();
82 /*************************************/
83
85 for(appItr=applications.begin(); appItr!=applications.end(); appItr++)
86 {
87 Application* application = (*appItr);
88 auto* appItem = new ApplicationItem(application,mainAppManager,usedModulesId,true,editingMode,connectionsId,this);
89 QObject::connect(appItem->signalHandler(),SIGNAL(moduleSelected(QGraphicsItem*)),
90 sigHandler,SLOT(onModuleSelected(QGraphicsItem*)));
91 QObject::connect(appItem->signalHandler(),SIGNAL(connectctionSelected(QGraphicsItem*)),
92 sigHandler,SLOT(onConnectionSelected(QGraphicsItem*)));
93 //QObject::connect(appItem->signalHandler(),SIGNAL(applicationSelected(QGraphicsItem*)),
94 // sigHandler,SLOT(onApplicationSelected(QGraphicsItem*)));
95 appItem->setZValue(zValue());
96 appItem->init();
97
98 if(application->getModelBase().points.size()>0){
99 appItem->setPos(application->getModelBase().points[0].x,
100 application->getModelBase().points[0].y);
101 } else {
102 appItem->setPos(index%900+10,
103 (index/900)*100+10);
104 index += 300;
105 }
106 //itemsList.append(appItem);
107 updateSizes(appItem);
108
109 }
110
111 ModulePIterator itr;
112 //int n = application->sucCount();
113 //for(int i=0;i<n;i++){
114 for(itr=modules.begin(); itr!=modules.end(); itr++){
115 Module* module1 = (*itr); //dynamic_cast<Module*>(application->getLinkAt(i).to());
116
117 if(!editingMode){
118 ExecutablePContainer exes = mainAppManager->getExecutables();
119 for(moditr=exes.begin(); moditr<exes.end(); moditr++){
120
121 Module* module = (*moditr)->getModule();
122
123 if(module == module1){
124 QString id = QString("%1").arg((*moditr)->getID());
125 usedModulesId->append(id.toInt());
126 addModule(module,id.toInt());
127 break;
128 }
129 }
130 }else{
131 addModule(module1,-1);
132 }
133 }
134
135
136
137 index = (index/900)*100+50;
138 CnnIterator citr;
139 ModulePContainer allModules = mainAppManager->getKnowledgeBase()->getSelModules();
140 //int id = 0;
141 for(citr=connections.begin(); citr<connections.end(); citr++){
142 Connection baseCon = *citr;
143 // if(baseCon.owner()->getLabel() != application->getLabel()){
144 // continue;
145 // }
146 GraphicModel model = baseCon.getModelBase();
147 InputData* input = nullptr;
148 OutputData* output = nullptr;
149 BuilderItem *source = nullptr;
150 BuilderItem *dest = nullptr;
151 QString inModulePrefix,outModulePrefix;
152 findInputOutputData((*citr), allModules/* : modules*/, input, output);
153 if(output){
154 source = findModelFromOutput(output);
155 }else{
156 bool bExist = false;
157 SourcePortItem *sourcePort = nullptr;
158 for(int i=0;i<childItems().count() && !bExist;i++){
159 if(childItems().at(i)->type() == (QGraphicsItem::UserType + SourcePortItemType)){
160 SourcePortItem *auxSourceport = (SourcePortItem*)childItems().at(i);
161 if(auxSourceport->getItemName() == baseCon.from()){
162 source = auxSourceport;
163 bExist = true;
164 break;
165 }
166
167 }
168 if(childItems().at(i)->type() == (QGraphicsItem::UserType + ApplicationItemType)){
169 // TODO
170 }
171 }
172 if(!bExist){
173 sourcePort = new SourcePortItem((*citr).from(),true,false,application,this);
174 QObject::connect(sourcePort->signalHandler(),SIGNAL(requestNewConnection(QPointF,QGraphicsItem*)),((BuilderScene*)scene()),SLOT(onNewConnectionRequested(QPointF,QGraphicsItem*)));
175 //itemsList.append(sourcePort);
176 //scene->addItem(sourcePort);
177 source = sourcePort;
178
179 if(model.points.size() > 1){
180 source->setPos(model.points[1].x /*+ source->boundingRect().width()/2*/,
181 model.points[1].y/* + source->boundingRect().height()/2*/);
182 }else{
183 source->setPos(10 + source->boundingRect().width()/2, index);
184 }
185 updateSizes(source);
186 }
187
188
189 index += 40;
190 }
191 if(input){
192 dest = findModelFromInput(input);
193 }else{
194 bool bExist = false;
195 DestinationPortItem *destPort = nullptr;
196 for(int i=0;i<childItems().count() && !bExist;i++){
197 if(childItems().at(i)->type() == (QGraphicsItem::UserType + DestinationPortItemType)){
198 DestinationPortItem *auxDestPort = (DestinationPortItem*)childItems().at(i);
199 if(auxDestPort->getItemName() == baseCon.to()){
200 dest = auxDestPort;
201 bExist = true;
202 break;
203 }
204 }
205 if(childItems().at(i)->type() == (QGraphicsItem::UserType + ApplicationItemType)){
206 // TODO
207 }
208 }
209 if(!bExist){
210 destPort = new DestinationPortItem((*citr).to(),true,false,application,this);
211 QObject::connect(destPort->signalHandler(),SIGNAL(addNewConnection(QPointF,QGraphicsItem*)),((BuilderScene*)scene()),SLOT(onNewConnectionAdded(QPointF,QGraphicsItem*)));
212 //itemsList.append(destPort);
213 dest = destPort;
214
215 //scene->addItem(destPort);
216 size_t size = model.points.size();
217 if(size > 2){
218 dest->setPos(model.points[size-1].x /*+ dest->boundingRect().width()/2*/,
219 model.points[size-1].y /*+ dest->boundingRect().height()/2*/);
220 }else{
221 dest->setPos(400 + dest->boundingRect().width()/2, index);
222 }
223 updateSizes(dest);
224 }
225
226
227 }
228
229 Arrow *arrow;
230 // check for arbitrators
231 std::string strCarrier = baseCon.carrier();
232 if((strCarrier.find("recv.priority") != std::string::npos)){
233 // TODO
234 }else{
235 if(source && dest){
236
237 arrow = new Arrow(source, dest,*connectionsId,nullptr,true,editingMode,this);
238 arrow->setConnection(baseCon);
239 QObject::connect(arrow->signalHandler(),SIGNAL(connectctionSelected(QGraphicsItem*)),sigHandler,SLOT(onConnectionSelected(QGraphicsItem*)));
240 arrow->setColor(QColor(Qt::red));
241 source->addArrow(arrow);
242 dest->addArrow(arrow);
243 //scene->addItem(arrow);
244 arrow->setZValue(zValue()+1);
245 arrow->updatePosition();
246 updateSizes(arrow);
247 //itemsList.append(arrow);
248 }
249 }
250 *connectionsId += 1;
251 qDebug() << "*connectionsId " << *connectionsId;
252 }
253
254
255
256 /***********************************************************/
257
258
259
260
261 if(!nestedInApp){
262 auto* effect = new QGraphicsDropShadowEffect();
263 effect->setColor(QColor(80,80,80,80));
264 effect->setBlurRadius(5);
265 setGraphicsEffect(effect);
266 }
267
268 allowInputs = true;
269 allowOutputs = true;
270 updateBoundingRect(childItems());
271
272 update();
273
274
275}
276
277
279{
280 QRectF br = QRectF(boundingR.x() - BORDERWIDTH,
281 boundingR.y() - BORDERWIDTH -30 ,
282 boundingR.width() + (2*BORDERWIDTH),
283 boundingR.height() + (2*BORDERWIDTH) + 30);
284 //qDebug() << br;
285 return br;
286}
287
288
290{
291 return (int)(QGraphicsItem::UserType + (int)itemType);
292}
293
295{
296 QPointF startIngPoint;
297
298 return startIngPoint;
299}
300
301void ApplicationItem::setModulesAction(QList<QAction *> act)
302{
303 modulesAction = act;
304}
305
306BuilderItem * ApplicationItem::addModule(Module *module,int moduleId)
307{
308 auto* it = new ModuleItem(module,moduleId,true,editingMode,mainAppManager,this);
309 it->setActions(modulesAction);
310 QObject::connect(it->signalHandler(),SIGNAL(moduleSelected(QGraphicsItem*)),sigHandler,SLOT(onModuleSelected(QGraphicsItem*)));
311 QObject::connect(it->signalHandler(),SIGNAL(requestNewConnection(QPointF,QGraphicsItem*)),((BuilderScene*)scene()),SLOT(onNewConnectionRequested(QPointF,QGraphicsItem*)));
312 QObject::connect(it->signalHandler(),SIGNAL(addNewConnection(QPointF,QGraphicsItem*)),((BuilderScene*)scene()),SLOT(onNewConnectionAdded(QPointF,QGraphicsItem*)));
313
314 it->setZValue(zValue()+2);
315 if(module->getModelBase().points.size()>0){
316 it->setPos(module->getModelBase().points[0].x ,
317 module->getModelBase().points[0].y );
318 }else{
319 it->setPos(index%900+10 + it->boundingRect().width()/2,
320 (index/900)*100+10 + it->boundingRect().height()/2);
321 index += 300;
322 }
323
324 updateSizes(it);
325
326 return it;
327}
328
329void ApplicationItem::updateSizes(QGraphicsItem *it,QGraphicsItem *parent)
330{
331 QRectF bRect = it->boundingRect();
332 if(it->type() == QGraphicsItem::UserType + ConnectionItemType){
333
334 foreach (QGraphicsItem *child, it->childItems()) {
335 updateSizes(child,it);
336 }
337 return;
338 }
339 if(it->type() == QGraphicsItem::UserType + ArrowLabelItemType){
340 auto* l = (Label*)it;
341 if(!l->hasBeenMoved()){
342 return;
343 }
344 }
345 QPointF pos = it->pos();
346 if(parent && (it->type() == QGraphicsItem::UserType + HandleItemType ||
347 it->type() == QGraphicsItem::UserType + ArrowLabelItemType)){
348 pos = mapFromItem(parent,pos);
349
350 }
351 QPointF p = mapFromItem(it,QPointF(bRect.x(),bRect.y() + bRect.height()/2));
352 if(minx == -1000 || p.x() < minx){
353 //minx = pos.x() - bRect.width()/2;
354 minx = p.x();
355 }
356 QPointF pp = mapFromItem(it,QPointF(bRect.x() + bRect.width()/2,bRect.y()));
357 if(miny == -1000 || pp.y() < miny){
358 miny = pp.y();
359 }
360 QPointF p1 = mapFromItem(it,QPointF(bRect.x() + bRect.width() ,bRect.y() + bRect.height()/2));
361 if(maxw == -1000 || p1.x() > maxw){
362 // maxw = pos.x() + bRect.width() /2;
363
364 maxw = p1.x();
365 }
366 QPointF pp1 = mapFromItem(it,QPointF(bRect.x() + bRect.width()/2, bRect.y() + bRect.height()));
367 if(maxh == -1000 || pp1.y() > maxh){
368 maxh = pp1.y();
369 }
370
371}
372
373void ApplicationItem::updateBoundingRect(QList<QGraphicsItem *> items)
374{
375
376 foreach (QGraphicsItem *it, items) {
377
378 if(it->type() == QGraphicsItem::UserType + ArrowLabelItemType ||
379 it->type() == QGraphicsItem::UserType + HandleItemType){
380 continue;
381 }
382
383 if(minx < 25){
384 qreal diff = 25 - minx;
385 it->moveBy(diff,0);
386 mainRect.setWidth(maxw + 25 + diff);
387 }else{
388 qreal diff = minx - 25;
389 it->moveBy(-diff,0);
390 mainRect.setWidth(maxw + 25 - diff);
391 }
392
393 if(miny < 25){
394 qreal diff = 25 - miny;
395 it->moveBy(0,diff);
396 mainRect.setHeight(maxh + 25 + diff);
397 }else{
398 qreal diff = miny - 25 ;
399 it->moveBy(0,-diff);
400 mainRect.setHeight(maxh + 25 - diff);
401 }
402 }
403
404 prepareGeometryChange();
405 boundingR = QRectF(mainRect);
406 update();
407}
408
409void ApplicationItem::findInputOutputData(Connection& cnn, ModulePContainer &modules,
410 InputData* &input_, OutputData* &output_)
411{
412 input_ = nullptr;
413 output_ = nullptr;
414 std::string strTo = cnn.to();
415 std::string strFrom = cnn.from();
416
417 ModulePIterator itr;
418 for(itr=modules.begin(); itr!=modules.end(); itr++)
419 {
420 Module* module = (*itr);
421 //if(module->owner() == application)
422 {
423 for(int i=0; i<module->inputCount(); i++)
424 {
425 InputData &input = module->getInputAt(i);
426 std::string strInput = std::string(module->getPrefix()) + std::string(input.getPort());
427 if(strTo == strInput)
428 {
429 input_ = &input;
430 break;
431 }
432 }
433
434 for(int i=0; i<module->outputCount(); i++)
435 {
436 OutputData &output = module->getOutputAt(i);
437 std::string strOutput = std::string(module->getPrefix()) + std::string(output.getPort());
438 if(strFrom == strOutput)
439 {
440 output_ = &output;
441 break;
442 }
443 }
444 }
445 }
446}
447
448PortItem* ApplicationItem::findModelFromOutput(OutputData* output)
449{
450 for(int i=0; i<scene()->items().count(); i++)
451 {
452 QGraphicsItem *it = scene()->items().at(i);
453 if(it->type() == (QGraphicsItem::UserType + (int)ApplicationItemType)){
454 auto* application = (ApplicationItem*)it;
455 for(int j=0; j<application->getModulesList().count(); j++){
456 if(application->getModulesList().at(j)->type() == QGraphicsItem::UserType + ModuleItemType){
457 ModuleItem *module = (ModuleItem*)application->getModulesList().at(j);
458 for(int k=0;k<module->oPorts.count();k++){
459 PortItem *port = module->oPorts.at(k);
460 //QString prefix = QString("%1%2").arg(application->getInnerApplication()->getPrefix()).arg(module->getInnerModule()->getBasePrefix());
461
462 //if(!strcmp(port->outData.getPort(), (*output).getPort()) && modulePrefix == prefix) {
463 if (port->outData == output) {
464 return port;
465 }
466 }
467 }
468 }
469 }
470
471
472
473 if(it->type() == (QGraphicsItem::UserType + (int)ModuleItemType)){
474 auto* module = (ModuleItem*)it;
475 for(int k=0;k<module->oPorts.count();k++){
476 PortItem *port = module->oPorts.at(k);
477 //if(!strcmp(port->outData.getPort(), (*output).getPort()) && modulePrefix == QString("%1").arg(module->getInnerModule()->getPrefix())) {
478 if(port->outData == output){
479 return port;
480 }
481 }
482
483 }
484 }
485
486
487
488 return nullptr;
489}
490
491PortItem* ApplicationItem::findModelFromInput(InputData* input)
492{
493 for(int i=0; i<scene()->items().count(); i++)
494 {
495 QGraphicsItem *it = scene()->items().at(i);
496
497 if(it->type() == (QGraphicsItem::UserType + (int)ApplicationItemType)){
498 auto* application = (ApplicationItem*)it;
499 for(int j=0;j<application->getModulesList().count();j++){
500 if(application->getModulesList().at(j)->type() == QGraphicsItem::UserType + ModuleItemType){
501 ModuleItem *module = (ModuleItem*)application->getModulesList().at(j);
502 for(int k=0;k<module->iPorts.count();k++){
503 PortItem *port = module->iPorts.at(k);
504 //QString prefix = QString("%1%2").arg(application->getInnerApplication()->getPrefix()).arg(module->getInnerModule()->getBasePrefix());
505 //if(!strcmp(port->inData.getPort(),(*input).getPort()) && modulePrefix == prefix) {
506 if(port->inData == input){
507 return port;
508 }
509 }
510 }
511 }
512
513 }
514
515 if(it->type() == (QGraphicsItem::UserType + (int)ModuleItemType)){
516 auto* module = (ModuleItem*)it;
517 for(int k=0;k<module->iPorts.count();k++){
518 PortItem *port = module->iPorts.at(k);
519 //if(!strcmp(port->inData.getPort(),(*input).getPort()) && modulePrefix == QString("%1").arg(module->getInnerModule()->getPrefix())){
520 if(port->inData == input){
521 return port;
522 }
523 }
524
525 }
526 }
527
528
529 return nullptr;
530}
531
532
533void ApplicationItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
534{
535 //QGraphicsItem::paint(painter,option,widget);
536 painter->save();
537 QPainterPath path;
538 path.moveTo(mainRect.x(),mainRect.y());
539 path.lineTo(mainRect.x(),mainRect.y() - 30);
540 path.lineTo(mainRect.x() + textWidth + 50,mainRect.y() - 30);
541 path.lineTo(mainRect.x() + textWidth + 50,mainRect.y());
542 path.lineTo(mainRect.x() + mainRect.width(),mainRect.y());
543 path.lineTo(mainRect.x() + mainRect.width(),mainRect.y() + mainRect.height());
544 path.lineTo(mainRect.x(),mainRect.y() + mainRect.height());
545 path.lineTo(mainRect.x(),mainRect.y());
546 //path.addRoundedRect( mainRect, 5.0, 5.0 );
547
548
549
550 painter->setFont(customFont);
551 painter->setPen(QPen(QBrush(QColor(Qt::black)),1));
552 painter->drawText(QRectF(mainRect.x(),mainRect.y() - 30,
553 textWidth + 50,30
554 ),Qt::AlignCenter,itemName);
555
556 if(isSelected()){
557 painter->setBrush(QBrush(QColor(0,0,220,80)));
558 }else{
559 painter->setBrush(QBrush(QColor(156,156,255,80)));
560 }
561 painter->drawPath(path);
562 painter->restore();
563
564}
565
566QList<QGraphicsItem *> ApplicationItem::getModulesList()
567{
568 return childItems();
569}
570
571void ApplicationItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
572{
573 moved = true;
574 QGraphicsItem::mouseMoveEvent(event);
575}
576
577void ApplicationItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
578{
579 pressed = true;
580 //setZValue(zValue() + 10);
582 QGraphicsItem::mousePressEvent(event);
583}
584
586{
587 GraphicModel modBase;
588 GyPoint p;
589 p.x = pos().x();
590 p.y = pos().y();
591 modBase.points.push_back(p);
592 application->setModelBase(modBase);
593}
594
595void ApplicationItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
596{
597
598 if(moved && editingMode && !nestedInApp){
599 //updateGraphicModel();
600 emit signalHandler()->modified();
601 emit signalHandler()->moved();
602 }
603 pressed = false;
604 moved = false;
605 //setZValue(zValue() - 10);
606 QGraphicsItem::mouseReleaseEvent(event);
607}
608
609
610QVariant ApplicationItem::itemChange(GraphicsItemChange change, const QVariant &value)
611{
612 if (change == QGraphicsItem::ItemPositionChange) {
613 foreach (QGraphicsItem *it, childItems()) {
614 if(it->type() == QGraphicsItem::UserType + ModuleItemType){
615 ModuleItem *mIt = ((ModuleItem*)it);
616 foreach (PortItem *p, mIt->oPorts) {
618 }
619 foreach (PortItem *p, mIt->iPorts) {
621 }
622 }
623 if(it->type() == QGraphicsItem::UserType + SourcePortItemType){
624 SourcePortItem *sIt = ((SourcePortItem *)it);
625 sIt->updateConnections();
626 }
627 if(it->type() == QGraphicsItem::UserType + DestinationPortItemType){
629 dIt->updateConnections();
630 }
631
632 }
633
634 if(snap && !nestedInApp){
635 QPointF newPos = value.toPointF();
636 QPointF closestPoint = computeTopLeftGridPoint(newPos);
637 return closestPoint+=offset;
638 }
639 }
640
641 return value;
642}
643
644
645void ApplicationItem::setModuleRunning(bool running, int id)
646{
647 for(int i=0;i<childItems().count();i++){
648 if(childItems().at(i)->type() == (QGraphicsItem::UserType + ModuleItemType)){
649 ModuleItem *m = (ModuleItem *)childItems().at(i);
650 if(m->getId() == id){
651 m->setRunning(running);
652 break;
653 }
654 }
655 if(childItems().at(i)->type() == (QGraphicsItem::UserType + ApplicationItemType)){
656 ApplicationItem *a = (ApplicationItem *)childItems().at(i);
657 a->setModuleRunning(running,id);
658 }
659 }
660}
661
663{
664 foreach (QGraphicsItem *it, childItems()) {
665 if(it->type() == QGraphicsItem::UserType + ConnectionItemType){
666 auto* arrow = (Arrow*)it;
667 if(selectedIds.contains(arrow->getId())){
668 arrow->setConnectionSelected(true);
669 }else{
670 arrow->setConnectionSelected(false);
671 }
672 }else
673 if(it->type() == QGraphicsItem::UserType + ApplicationItemType){
674 auto* app = (ApplicationItem*)it;
675 app->setSelectedConnections(selectedIds);
676 }
677 }
678}
679
680void ApplicationItem::setSelectedModules(QList<int>selectedIds)
681{
682 foreach (QGraphicsItem *it, childItems()) {
683 if(it->type() == QGraphicsItem::UserType + ModuleItemType){
684 auto* mod = (ModuleItem*)it;
685 if(selectedIds.contains(mod->getId())){
686 mod->setModuleSelected(true);
687 }else{
688 mod->setModuleSelected(false);
689 }
690 }else
691 if(it->type() == QGraphicsItem::UserType + ApplicationItemType){
692 auto* app = (ApplicationItem*)it;
693 app->setSelectedModules(selectedIds);
694 }
695 }
696}
697
698
699void ApplicationItem::setConnectionConnected(bool connected, QString from, QString to)
700{
701 for(int i=0;i<childItems().count();i++){
702 if(childItems().at(i)->type() == (QGraphicsItem::UserType + ConnectionItemType)){
703 Arrow *m = (Arrow *)childItems().at(i);
704 if(m->getFrom() == from && m->getTo() == to){
705 m->setConnected(connected);
706 break;
707 }
708 }
709 if(childItems().at(i)->type() == (QGraphicsItem::UserType + ApplicationItemType)){
710 ApplicationItem *a = (ApplicationItem *)childItems().at(i);
711 a->setConnectionConnected(connected,from,to);
712 }
713 }
714}
715
716void ApplicationItem::setOutputPortAvailable(QString oData, bool available)
717{
718 foreach (QGraphicsItem *it, childItems()) {
719 auto* item = (BuilderItem *)it;
720 if(item->type() == QGraphicsItem::UserType + ModuleItemType){
721 auto* mod = (ModuleItem*)item;
722
723 foreach (PortItem *oPort, mod->oPorts) {
724 QString strPort = QString("%1%2").arg(mod->getInnerModule()->getPrefix()).arg(oPort->outData->getPort());
725
726 if(strPort == oData ){
728 }
729 }
730
731
732 }else
733 if(item->type() == QGraphicsItem::UserType + ApplicationItemType){
734 auto* app = (ApplicationItem*)item;
735 app->setOutputPortAvailable(oData, available);
736 }else
737 if(item->type() == QGraphicsItem::UserType + SourcePortItemType){
738 auto* source = (SourcePortItem*)item;
739 QString strPort = QString("%1").arg(source->getItemName());
740 if(strPort == oData){
741 source->setAvailable(available);
742 }
743 }
744 }
745}
746
747void ApplicationItem::setInputPortAvailable(QString iData, bool available)
748{
749
750
751 foreach (QGraphicsItem *it, childItems()) {
752 auto* item = (BuilderItem *)it;
753 if(item->type() == QGraphicsItem::UserType + ModuleItemType){
754 auto* mod = (ModuleItem*)item;
755
756 foreach (PortItem *iPort, mod->iPorts) {
757 QString strPort = QString("%1%2").arg(mod->getInnerModule()->getPrefix()).arg(iPort->inData->getPort());
758 if(strPort == iData){
760 }
761 }
762
763
764 }else
765 if(item->type() == QGraphicsItem::UserType + ApplicationItemType){
766 auto* app = (ApplicationItem*)item;
767 app->setInputPortAvailable(iData,available);
768 }
769 else{
770 if(item->type() == QGraphicsItem::UserType + DestinationPortItemType){
771 auto* dest = (DestinationPortItem*)item;
772
773 QString strPort = QString("%1").arg(dest->getItemName());
774 if(strPort == iData){
775 dest->setAvailable(available);
776 }
777 }
778 }
779 }
780}
int SIGNAL(int pid, int signum)
void mouseReleaseEvent(QGraphicsSceneMouseEvent *e) override
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
void setOutputPortAvailable(QString oData, bool available)
QPointF connectionPoint() override
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=0) override
int type() const override
Application * getInnerApplication()
void setModuleRunning(bool, int)
void setSelectedConnections(QList< int >selectedIds)
void mousePressEvent(QGraphicsSceneMouseEvent *e) override
ApplicationItem(Application *application, Manager *manager, QList< int > *, bool nestedInApp=false, bool editingMode=false, int *connectionsId=NULL, BuilderItem *parent=NULL)
QRectF boundingRect() const override
void setModulesAction(QList< QAction * > act)
QList< QGraphicsItem * > getModulesList()
void setInputPortAvailable(QString iData, bool available)
void mouseMoveEvent(QGraphicsSceneMouseEvent *e) override
void setSelectedModules(QList< int >selectedIds)
void setConnectionConnected(bool connected, QString from, QString to)
Definition arrow.h:106
void updatePosition()
Definition arrow.cpp:329
QString getFrom()
Definition arrow.cpp:278
QString getTo()
Definition arrow.cpp:283
void setColor(const QColor &color)
Definition arrow.h:131
void setConnection(const Connection &conn)
Definition arrow.cpp:112
void setConnected(bool)
Definition arrow.cpp:288
ItemSignalHandler * sigHandler
Definition builderitem.h:90
QPointF computeTopLeftGridPoint(const QPointF &pointP)
QRectF boundingRect() const override=0
QString itemName
Definition builderitem.h:75
QPointF offset
Definition builderitem.h:80
friend class Arrow
Definition builderitem.h:31
bool allowInputs
Definition builderitem.h:85
bool allowOutputs
Definition builderitem.h:86
QString getItemName()
void addArrow(Arrow *arrow)
bool nestedInApp
Definition builderitem.h:88
ItemSignalHandler * signalHandler()
QRectF mainRect
Definition builderitem.h:77
QRectF boundingR
Definition builderitem.h:78
void updateConnections()
ItemType itemType
Definition builderitem.h:74
void applicationSelected(QGraphicsItem *it)
Definition arrow.h:74
void setRunning(bool)
QList< PortItem * > oPorts
Definition moduleitem.h:52
QList< PortItem * > iPorts
Definition moduleitem.h:51
OutputData * outData
Definition moduleitem.h:104
InputData * inData
Definition moduleitem.h:105
void setAvailable(PortStatus)
@ unavailable
Definition moduleitem.h:92
Class Application.
void setModelBase(GraphicModel &mdl)
GraphicModel & getModelBase()
Class Connection.
Definition application.h:56
GraphicModel & getModelBase()
std::vector< GyPoint > points
Definition node.h:29
Class InputData.
Definition data.h:21
const char * getPort()
Definition data.h:36
const ModulePContainer & getModules(Application *parent=nullptr)
Definition kbase.cpp:217
const ModulePContainer & getSelModules()
Definition kbase.h:67
Application * getApplication()
Definition kbase.h:84
bool removeIApplicationFromApplication(Application *application, const char *szTag)
Definition kbase.cpp:800
const ApplicaitonPContainer & getApplications(Application *parent=nullptr)
Definition kbase.cpp:188
const CnnContainer & getConnections(Application *parent=nullptr)
Definition kbase.cpp:246
Class Manager.
Definition manager.h:20
ExecutablePContainer & getExecutables()
Definition manager.h:82
KnowledgeBase * getKnowledgeBase()
Definition manager.h:103
Class Module.
Definition module.h:99
GraphicModel & getModelBase()
Definition module.h:186
const char * getPrefix()
Definition module.h:140
const char * getPort()
Definition data.h:83
@ ApplicationItemType
Definition commons.h:17
@ ConnectionItemType
Definition commons.h:17
@ SourcePortItemType
Definition commons.h:17
@ ModuleItemType
Definition commons.h:17
@ DestinationPortItemType
Definition commons.h:17
@ HandleItemType
Definition commons.h:17
@ ArrowLabelItemType
Definition commons.h:17
#define BORDERWIDTH
Definition commons.h:9
std::vector< Application * >::iterator ApplicationPIterator
std::vector< Executable * >::iterator ExecutablePIterator
Definition executable.h:167
std::vector< Connection >::iterator CnnIterator
std::vector< Executable * > ExecutablePContainer
Definition executable.h:166
std::vector< Module * > ModulePContainer
Definition module.h:230
std::vector< Application * > ApplicaitonPContainer
std::vector< Connection > CnnContainer
std::vector< Module * >::iterator ModulePIterator
Definition module.h:231
int diff(std::string contextName, folderType fType, bool verbose)