MCPcopy Create free account
hub / github.com/OpenBoard-org/OpenBoard / sceneDeepCopy

Method sceneDeepCopy

src/domain/UBGraphicsScene.cpp:1400–1470  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1398}
1399
1400std::shared_ptr<UBGraphicsScene> UBGraphicsScene::sceneDeepCopy() const
1401{
1402 std::shared_ptr<UBGraphicsScene> copy = std::make_shared<UBGraphicsScene>(this->document(), this->mUndoRedoStackEnabled);
1403
1404 copy->setBackground(this->isDarkBackground(), mPageBackground);
1405 copy->setBackgroundGridSize(mBackgroundGridSize);
1406 copy->setSceneRect(this->sceneRect());
1407
1408 if (this->mNominalSize.isValid())
1409 copy->setNominalSize(this->mNominalSize);
1410
1411 foreach (auto item, items())
1412 {
1413 UBItem* ubItem = dynamic_cast<UBItem*>(item);
1414
1415 // copy visible top-level items
1416 if (ubItem && item->isVisible() && !item->parentItem())
1417 {
1418 QGraphicsItem* cloneItem = nullptr;
1419 UBGraphicsGroupContainerItem* group = dynamic_cast<UBGraphicsGroupContainerItem*>(item);
1420
1421 if (group)
1422 {
1423 UBGraphicsGroupContainerItem* groupCloned = group->deepCopyNoChildDuplication();
1424 groupCloned->resetTransform();
1425 groupCloned->setPos(0, 0);
1426
1427 foreach (QGraphicsItem* childItem, group->childItems())
1428 {
1429 UBItem* childUBItem = dynamic_cast<UBItem*>(childItem);
1430 if (childUBItem)
1431 {
1432 UBItem* childUBItemCopy = childUBItem->deepCopy();
1433 QGraphicsItem* copiedChild = dynamic_cast<QGraphicsItem*>(childUBItemCopy);
1434 groupCloned->addToGroup(copiedChild);
1435 }
1436 }
1437
1438 bool locked = group->Delegate()->isLocked();
1439
1440 if (locked)
1441 groupCloned->setData(UBGraphicsItemData::ItemLocked, QVariant(true));
1442
1443 groupCloned->setData(UBGraphicsItemData::ItemIsHiddenOnDisplay, QVariant(group->data(UBGraphicsItemData::ItemIsHiddenOnDisplay)));
1444
1445 groupCloned->setTransform(QTransform::fromTranslate(group->pos().x(), group->pos().y()));
1446 groupCloned->setTransform(group->transform(), true);
1447 cloneItem = groupCloned;
1448 }
1449 else
1450 {
1451 cloneItem = dynamic_cast<QGraphicsItem*>(ubItem->deepCopy());
1452 }
1453
1454 if (cloneItem)
1455 {
1456 copy->addItem(cloneItem);
1457

Callers 4

addSceneMethod · 0.80
persistDocumentSceneMethod · 0.80
foreachFunction · 0.80
foreachFunction · 0.80

Calls 6

documentMethod · 0.95
isDarkBackgroundMethod · 0.95
setBackgroundGridSizeMethod · 0.80
setNominalSizeMethod · 0.80
setBackgroundMethod · 0.45
isValidMethod · 0.45

Tested by

no test coverage detected