178 QByteArray encodedData =
event->mimeData()->data(
"application/vnd.text.list");
179 QDataStream stream(&encodedData, QIODevice::ReadOnly);
180 QList<QStringList> NewItems;
182 while (!stream.atEnd()) {
188 QStringList ObjectList;
190 for (QStringList& i : NewItems) {
191 ObjectList.append(i.at(0));
194 for (
int i = 0; i < NewItems.size(); ++i) {
195 if (NewItems.at(0).at(1) != NewItems.at(i).at(1)) {
200 QStringList PossibleRelationships;
201 QString ClassName = NewItems.at(0).at(1);
205 std::vector<dunedaq::conffwk::relationship_t> RelationshipList = ClassInfoReceiverObject.
p_relationships;
208 if (i.p_type == ClassName.toStdString())
209 PossibleRelationships.append(QString::fromStdString(i.p_name));
212 std::vector<std::string> RelationshipListDropped = ClassInfoDroppedObject.
p_subclasses;
214 for (std::string& j : RelationshipListDropped) {
215 if (j == ClassName.toStdString())
216 PossibleRelationships.append(QString::fromStdString(i.p_name));
220 QString SelectedRelationship;
222 if (PossibleRelationships.size() == 0) {
224 }
else if (PossibleRelationships.size() == 1)
225 SelectedRelationship = PossibleRelationships.at(0);
227 QDialog* NewDialog =
new QDialog();
228 QHBoxLayout* NewLayout =
new QHBoxLayout();
229 QPushButton* OkButton =
new QPushButton(
"Ok");
230 QComboBox* NewCombo =
new QComboBox();
231 QLabel* NewLabel =
new QLabel(
"Choose relationship : ");
232 NewCombo->addItems(PossibleRelationships);
233 NewLayout->addWidget(NewLabel);
234 NewLayout->addWidget(NewCombo);
235 NewLayout->addWidget(OkButton);
236 NewDialog->setLayout(NewLayout);
237 NewDialog->adjustSize();
238 connect(OkButton, SIGNAL(clicked()), NewDialog, SLOT(accept()), Qt::UniqueConnection);
240 int Status = NewDialog->exec();
242 if (Status == QDialog::Accepted) {
243 SelectedRelationship = NewCombo->currentText();
255 if (RelationshipData.
p_name == SelectedRelationship.toStdString()) {
258 std::vector<std::string> RelationshipValues;
261 RelationshipValues.push_back(RelationshipChildren->GetData(0).toString().toStdString());
263 for (QStringList&
Item : NewItems)
264 if (std::find(RelationshipValues.begin(), RelationshipValues.end(),
Item.at(0).toStdString()) ==
265 RelationshipValues.end())
266 RelationshipValues.push_back(
Item.at(0).toStdString());
271 QString SelectedObject;
273 if (NewItems.size() > 1) {
274 QDialog* NewDialog =
new QDialog();
275 QHBoxLayout* NewLayout =
new QHBoxLayout();
276 QPushButton* OkButton =
new QPushButton(
"Ok");
277 QComboBox* NewCombo =
new QComboBox();
278 QLabel* NewLabel =
new QLabel(
"Choose Object : ");
279 NewCombo->addItems(ObjectList);
280 NewLayout->addWidget(NewLabel);
281 NewLayout->addWidget(NewCombo);
282 NewLayout->addWidget(OkButton);
283 NewDialog->setLayout(NewLayout);
284 NewDialog->adjustSize();
285 connect(OkButton, SIGNAL(clicked()), NewDialog, SLOT(accept()), Qt::UniqueConnection);
287 int Status = NewDialog->exec();
289 if (Status == QDialog::Accepted) {
290 SelectedObject = NewCombo->currentText();
293 SelectedObject = NewItems.at(0).at(0);
345 for (QGraphicsItem* i : this->childItems()) {
349 double ThisOffsetX = 0;
350 double ThisOffsetY = 0;
353 QPointF ThisItemBottom = this->mapToScene(this->
boundingRect().bottomRight());
355 if (!this->childItems().isEmpty()) {
356 ThisOffsetX -= ThisItemBottom.x();
357 ThisOffsetY -= ThisItemBottom.y();
361 QGraphicsItem* AuxiliaryItem =
this;
363 while (AuxiliaryItem->parentItem() !=
nullptr) {
364 for (
int i = AuxiliaryItem->parentItem()->childItems().indexOf(AuxiliaryItem) + 1;
365 i < AuxiliaryItem->parentItem()->childItems().size();
367 QGraphicsItem* Child = AuxiliaryItem->parentItem()->childItems().at(i);
368 Child->setY(Child->y() + ThisOffsetY);
371 AuxiliaryItem = AuxiliaryItem->parentItem();
376 double ThisTopLevelOffsetX = 0;
377 double ThisTopLevelOffsetY = 0;
378 GetOffsetX(this->topLevelItem(), ThisTopLevelOffsetX);
379 GetOffsetY(this->topLevelItem(), ThisTopLevelOffsetY);
380 QPointF ThisTopLevelItemBottom = this->topLevelItem()->mapToScene(this->topLevelItem()->
boundingRect().bottomRight());
382 if (!this->topLevelItem()->childItems().isEmpty()) {
383 ThisTopLevelOffsetX -= ThisTopLevelItemBottom.x();
384 ThisTopLevelOffsetY -= ThisTopLevelItemBottom.y();
388 QList<QGraphicsItem*> TopLevelItems = scene()->items();
391 double LineHighestOffsetY = 0;
393 for (QGraphicsItem*
Item : TopLevelItems) {
396 if (
Item->parentItem() ==
nullptr && ThisTopLevelItem->y() ==
Item->y() && ThisTopLevelItem !=
Item) {
399 if (ItemObject && LineHighestOffsetY < ItemObject->
GetExpandedY())
406 for (QGraphicsItem*
Item : TopLevelItems) {
407 if (ThisTopLevelItem !=
Item &&
Item->parentItem() ==
nullptr) {
408 if (ThisTopLevelItem->y() <
Item->y() && ThisTopLevelOffsetY > LineHighestOffsetY) {
409 if (LineHighestOffsetY == 0) {
410 Item->setY(
Item->y() + ThisOffsetY);
412 if (ThisTopLevelOffsetY - LineHighestOffsetY < ThisTopLevelOffsetY - ThisTopLevelItem->
GetExpandedY())
413 Item->setY(
Item->y() + ThisTopLevelOffsetY - LineHighestOffsetY);
420 if (ThisTopLevelItem->y() ==
Item->y() && ThisTopLevelItem->x() <
Item->x() &&
Item->parentItem() ==
nullptr) {
421 if (ThisTopLevelOffsetX > ThisTopLevelItem->
GetExpandedX()) {
423 Item->setX(
Item->x() + ThisOffsetX);
441 double ThisOffsetX = 0;
442 double ThisOffsetY = 0;
445 QPointF ThisItemBottom = this->mapToScene(this->
boundingRect().bottomRight());
447 if (!this->childItems().isEmpty()) {
448 ThisOffsetX -= ThisItemBottom.x();
449 ThisOffsetY -= ThisItemBottom.y();
453 QGraphicsItem* AuxiliaryItem =
this;
455 while (AuxiliaryItem->parentItem() !=
nullptr) {
456 for (
int i = AuxiliaryItem->parentItem()->childItems().indexOf(AuxiliaryItem) + 1;
457 i < AuxiliaryItem->parentItem()->childItems().size();
459 QGraphicsItem* Child = AuxiliaryItem->parentItem()->childItems().at(i);
460 Child->setY(Child->y() - ThisOffsetY);
463 AuxiliaryItem = AuxiliaryItem->parentItem();
470 for (QGraphicsItem* i : this->childItems()) {
474 double ThisTopLevelOffsetX = 0;
475 double ThisTopLevelOffsetY = 0;
476 GetOffsetX(this->topLevelItem(), ThisTopLevelOffsetX);
477 GetOffsetY(this->topLevelItem(), ThisTopLevelOffsetY);
478 QPointF ThisTopLevelItemBottom = this->topLevelItem()->mapToScene(this->topLevelItem()->
boundingRect().bottomRight());
480 if (!this->topLevelItem()->childItems().isEmpty() && this->topLevelItem()->childItems().at(0)->isVisible()) {
481 ThisTopLevelOffsetX -= ThisTopLevelItemBottom.x();
482 ThisTopLevelOffsetY -= ThisTopLevelItemBottom.y();
486 QList<QGraphicsItem*> TopLevelItems = scene()->items();
489 double LineHighestOffsetY = 0;
491 for (QGraphicsItem*
Item : TopLevelItems) {
494 if (
Item->parentItem() ==
nullptr && ThisTopLevelItem->y() ==
Item->y() && ThisTopLevelItem !=
Item) {
497 if (ItemObject && LineHighestOffsetY < ItemObject->
GetExpandedY())
504 for (QGraphicsItem*
Item : TopLevelItems) {
505 if (ThisTopLevelItem !=
Item &&
Item->parentItem() ==
nullptr) {
506 if (ThisTopLevelItem->y() <
Item->y() && ThisTopLevelItem->
GetExpandedY() > LineHighestOffsetY) {
507 if (LineHighestOffsetY == 0) {
508 Item->setY(
Item->y() - ThisOffsetY);
510 if (ThisTopLevelOffsetY >= LineHighestOffsetY && ThisTopLevelOffsetY < ThisTopLevelItem->
GetExpandedY())
513 if (ThisTopLevelItem->
GetExpandedY() > LineHighestOffsetY && ThisTopLevelOffsetY < LineHighestOffsetY)
519 if (ThisTopLevelItem->y() ==
Item->y() && ThisTopLevelItem->x() <
Item->x() &&
Item->parentItem() ==
nullptr) {
520 if (ThisTopLevelOffsetX < ThisTopLevelItem->
GetExpandedX()) {
710 if (ChildNode->GetData(0).toString() == QString(
RelationshipData.p_name.c_str())) {
714 if (ChildChildNodeObject) {
718 new GraphicalObject(
true, ChildChildNode->GetData(0).toString(), Dummy);
719 ObjectNodeGraphical->setParentItem(
this);
721 QPointF coord = ObjectNodeGraphical->mapFromParent(
boundingRect().topRight());
722 ObjectNodeGraphical->setX(coord.x() + OffsetX);
723 ObjectNodeGraphical->setY(coord.y() + OffsetY);
724 OffsetY += ObjectNodeGraphical->
boundingRect().height();