12#include <QGraphicsDropShadowEffect>
25 this->application = application;
26 this->editingMode = editingMode;
27 this->mainAppManager = manager;
28 this->connectionsId = connectionsId;
30 minx = miny = maxw = maxh = -1000;
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);
39 textWidth = fontMetric.width(
itemName);
41 usedModulesId = usedIds;
46 if(editingMode && mainAppManager){
49 application =
nullptr;
63 setFlag(ItemIsSelectable,
true);
72 QFontMetrics fontMetric(
font);
85 for(appItr=applications.begin(); appItr!=applications.end(); 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*)));
95 appItem->setZValue(zValue());
102 appItem->setPos(index%900+10,
107 updateSizes(appItem);
114 for(itr=modules.begin(); itr!=modules.end(); itr++){
119 for(moditr=exes.begin(); moditr<exes.end(); moditr++){
121 Module*
module = (*moditr)->getModule();
123 if(module == module1){
124 QString
id = QString(
"%1").arg((*moditr)->getID());
125 usedModulesId->append(
id.toInt());
126 addModule(module,
id.toInt());
131 addModule(module1,-1);
137 index = (index/900)*100+50;
141 for(citr=connections.begin(); citr<connections.end(); citr++){
151 QString inModulePrefix,outModulePrefix;
152 findInputOutputData((*citr), allModules, input, output);
154 source = findModelFromOutput(output);
158 for(
int i=0;i<childItems().count() && !bExist;i++){
162 source = auxSourceport;
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*)));
179 if(model.
points.size() > 1){
180 source->setPos(model.
points[1].x ,
183 source->setPos(10 + source->
boundingRect().width()/2, index);
192 dest = findModelFromInput(input);
196 for(
int i=0;i<childItems().count() && !bExist;i++){
211 QObject::connect(destPort->
signalHandler(),
SIGNAL(addNewConnection(QPointF,QGraphicsItem*)),((
BuilderScene*)scene()),SLOT(onNewConnectionAdded(QPointF,QGraphicsItem*)));
216 size_t size = model.
points.size();
218 dest->setPos(model.
points[size-1].x ,
221 dest->setPos(400 + dest->
boundingRect().width()/2, index);
231 std::string strCarrier = baseCon.
carrier();
232 if((strCarrier.find(
"recv.priority") != std::string::npos)){
237 arrow =
new Arrow(source, dest,*connectionsId,
nullptr,
true,editingMode,
this);
244 arrow->setZValue(zValue()+1);
251 qDebug() <<
"*connectionsId " << *connectionsId;
262 auto* effect =
new QGraphicsDropShadowEffect();
263 effect->setColor(QColor(80,80,80,80));
264 effect->setBlurRadius(5);
265 setGraphicsEffect(effect);
270 updateBoundingRect(childItems());
291 return (
int)(QGraphicsItem::UserType + (int)
itemType);
296 QPointF startIngPoint;
298 return startIngPoint;
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*)));
314 it->setZValue(zValue()+2);
319 it->setPos(index%900+10 + it->boundingRect().width()/2,
320 (index/900)*100+10 + it->boundingRect().height()/2);
329void ApplicationItem::updateSizes(QGraphicsItem *it,QGraphicsItem *parent)
331 QRectF bRect = it->boundingRect();
334 foreach (QGraphicsItem *child, it->childItems()) {
335 updateSizes(child,it);
340 auto* l = (
Label*)it;
341 if(!l->hasBeenMoved()){
345 QPointF pos = it->pos();
346 if(parent && (it->type() == QGraphicsItem::UserType +
HandleItemType ||
348 pos = mapFromItem(parent,pos);
351 QPointF p = mapFromItem(it,QPointF(bRect.x(),bRect.y() + bRect.height()/2));
352 if(minx == -1000 || p.x() < minx){
356 QPointF pp = mapFromItem(it,QPointF(bRect.x() + bRect.width()/2,bRect.y()));
357 if(miny == -1000 || pp.y() < miny){
360 QPointF p1 = mapFromItem(it,QPointF(bRect.x() + bRect.width() ,bRect.y() + bRect.height()/2));
361 if(maxw == -1000 || p1.x() > maxw){
366 QPointF pp1 = mapFromItem(it,QPointF(bRect.x() + bRect.width()/2, bRect.y() + bRect.height()));
367 if(maxh == -1000 || pp1.y() > maxh){
373void ApplicationItem::updateBoundingRect(QList<QGraphicsItem *> items)
376 foreach (QGraphicsItem *it, items) {
384 qreal
diff = 25 - minx;
388 qreal
diff = minx - 25;
394 qreal
diff = 25 - miny;
398 qreal
diff = miny - 25 ;
404 prepareGeometryChange();
414 std::string strTo = cnn.
to();
415 std::string strFrom = cnn.
from();
418 for(itr=modules.begin(); itr!=modules.end(); itr++)
423 for(
int i=0; i<
module->inputCount(); i++)
425 InputData &input =
module->getInputAt(i);
426 std::string strInput = std::string(module->
getPrefix()) + std::string(input.
getPort());
427 if(strTo == strInput)
434 for(
int i=0; i<
module->outputCount(); i++)
437 std::string strOutput = std::string(module->
getPrefix()) + std::string(output.
getPort());
438 if(strFrom == strOutput)
450 for(
int i=0; i<scene()->items().count(); i++)
452 QGraphicsItem *it = scene()->items().at(i);
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);
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);
493 for(
int i=0; i<scene()->items().count(); i++)
495 QGraphicsItem *it = scene()->items().at(i);
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);
506 if(port->
inData == input){
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);
520 if(port->
inData == input){
550 painter->setFont(customFont);
551 painter->setPen(QPen(QBrush(QColor(Qt::black)),1));
557 painter->setBrush(QBrush(QColor(0,0,220,80)));
559 painter->setBrush(QBrush(QColor(156,156,255,80)));
561 painter->drawPath(path);
574 QGraphicsItem::mouseMoveEvent(event);
582 QGraphicsItem::mousePressEvent(event);
591 modBase.
points.push_back(p);
606 QGraphicsItem::mouseReleaseEvent(event);
612 if (change == QGraphicsItem::ItemPositionChange) {
613 foreach (QGraphicsItem *it, childItems()) {
635 QPointF newPos = value.toPointF();
637 return closestPoint+=
offset;
647 for(
int i=0;i<childItems().count();i++){
648 if(childItems().at(i)->type() == (QGraphicsItem::UserType +
ModuleItemType)){
650 if(m->
getId() == id){
664 foreach (QGraphicsItem *it, childItems()) {
666 auto* arrow = (
Arrow*)it;
667 if(selectedIds.contains(arrow->getId())){
668 arrow->setConnectionSelected(
true);
670 arrow->setConnectionSelected(
false);
675 app->setSelectedConnections(selectedIds);
682 foreach (QGraphicsItem *it, childItems()) {
685 if(selectedIds.contains(mod->getId())){
686 mod->setModuleSelected(
true);
688 mod->setModuleSelected(
false);
693 app->setSelectedModules(selectedIds);
701 for(
int i=0;i<childItems().count();i++){
718 foreach (QGraphicsItem *it, childItems()) {
723 foreach (
PortItem *oPort, mod->oPorts) {
724 QString strPort = QString(
"%1%2").arg(mod->getInnerModule()->getPrefix()).arg(oPort->
outData->
getPort());
726 if(strPort == oData ){
735 app->setOutputPortAvailable(oData, available);
739 QString strPort = QString(
"%1").arg(source->getItemName());
740 if(strPort == oData){
741 source->setAvailable(available);
751 foreach (QGraphicsItem *it, childItems()) {
756 foreach (
PortItem *iPort, mod->iPorts) {
757 QString strPort = QString(
"%1%2").arg(mod->getInnerModule()->getPrefix()).arg(iPort->
inData->
getPort());
758 if(strPort == iData){
767 app->setInputPortAvailable(iData,available);
773 QString strPort = QString(
"%1").arg(dest->getItemName());
774 if(strPort == iData){
775 dest->setAvailable(available);
int SIGNAL(int pid, int signum)
void mouseReleaseEvent(QGraphicsSceneMouseEvent *e) override
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
void updateGraphicModel()
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)
void setColor(const QColor &color)
void setConnection(const Connection &conn)
ItemSignalHandler * sigHandler
QPointF computeTopLeftGridPoint(const QPointF &pointP)
QRectF boundingRect() const override=0
void addArrow(Arrow *arrow)
ItemSignalHandler * signalHandler()
void applicationSelected(QGraphicsItem *it)
QList< PortItem * > oPorts
QList< PortItem * > iPorts
void setAvailable(PortStatus)
void setModelBase(GraphicModel &mdl)
GraphicModel & getModelBase()
GraphicModel & getModelBase()
std::vector< GyPoint > points
const ModulePContainer & getModules(Application *parent=nullptr)
const ModulePContainer & getSelModules()
Application * getApplication()
bool removeIApplicationFromApplication(Application *application, const char *szTag)
const ApplicaitonPContainer & getApplications(Application *parent=nullptr)
const CnnContainer & getConnections(Application *parent=nullptr)
ExecutablePContainer & getExecutables()
KnowledgeBase * getKnowledgeBase()
GraphicModel & getModelBase()
@ DestinationPortItemType
std::vector< Application * >::iterator ApplicationPIterator
std::vector< Executable * >::iterator ExecutablePIterator
std::vector< Connection >::iterator CnnIterator
std::vector< Executable * > ExecutablePContainer
std::vector< Module * > ModulePContainer
std::vector< Application * > ApplicaitonPContainer
std::vector< Connection > CnnContainer
std::vector< Module * >::iterator ModulePIterator
int diff(std::string contextName, folderType fType, bool verbose)