diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index 441c34ef..a3d63c12 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -757,7 +757,7 @@ void UBPersistenceManager::persistDocumentScene(UBDocumentProxy* pDocumentProxy, if (pScene->isModified()) { UBThumbnailAdaptor::persistScene(pDocumentProxy, pScene, pSceneIndex); - if(forceImmediateSaving || pScene->hasGroups()) + if(forceImmediateSaving) UBSvgSubsetAdaptor::persistScene(pDocumentProxy,pScene,pSceneIndex); else{ UBGraphicsScene* copiedScene = pScene->sceneDeepCopy(); diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index 2181e6ea..ccb7795f 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -189,13 +189,23 @@ UBCoreGraphicsScene *UBGraphicsGroupContainerItem::corescene() return castScene; } -UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItem::deepCopy() const +UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItem::deepCopyNoChildDuplication() const { - UBGraphicsGroupContainerItem *copy = new UBGraphicsGroupContainerItem(); copy->setUuid(this->uuid()); // this is OK for now as long as Widgets are imutable + copyItemParameters(copy); + + return copy; +} + + +UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItem::deepCopy() const +{ + UBGraphicsGroupContainerItem *copy = new UBGraphicsGroupContainerItem(); + + copy->setUuid(this->uuid()); // this is OK for now as long as Widgets are imutable foreach (QGraphicsItem *it, childItems()) { UBItem *childAsUBItem = dynamic_cast(it); @@ -209,6 +219,8 @@ UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItem::deepCopy() const return copy; } + + void UBGraphicsGroupContainerItem::copyItemParameters(UBItem *copy) const { UBGraphicsGroupContainerItem *cp = dynamic_cast(copy); diff --git a/src/domain/UBGraphicsGroupContainerItem.h b/src/domain/UBGraphicsGroupContainerItem.h index 9b7050ba..ac2a0254 100644 --- a/src/domain/UBGraphicsGroupContainerItem.h +++ b/src/domain/UBGraphicsGroupContainerItem.h @@ -50,6 +50,7 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); virtual UBCoreGraphicsScene *corescene(); + UBGraphicsGroupContainerItem *deepCopyNoChildDuplication() const; virtual UBGraphicsGroupContainerItem *deepCopy() const; virtual void copyItemParameters(UBItem *copy) const; diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 11d7564b..9ddba5bb 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -315,7 +315,6 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent, bool enableUndoRedoSta , mpLastPolygon(NULL) , mCurrentPolygon(0) , mSelectionFrame(0) - , mNumberOfGroups(0) { UBCoreGraphicsScene::setObjectName("BoardScene"); setItemIndexMethod(NoIndex); @@ -1110,12 +1109,25 @@ UBGraphicsScene* UBGraphicsScene::sceneDeepCopy() const QGraphicsItem* cloneItem = 0; UBItem* ubItem = dynamic_cast(item); UBGraphicsStroke* stroke = dynamic_cast(item); + UBGraphicsGroupContainerItem* group = dynamic_cast(item); + + if(group){ + UBGraphicsGroupContainerItem* groupCloned = group->deepCopyNoChildDuplication(); + groupCloned->resetMatrix(); + groupCloned->resetTransform(); + foreach(QGraphicsItem* eachItem ,group->childItems()){ + QGraphicsItem* copiedChild = dynamic_cast(dynamic_cast(eachItem)->deepCopy()); + copiedChild->resetTransform(); + copiedChild->resetMatrix(); + copiedChild->setMatrix(eachItem->sceneMatrix()); + copy->addItem(copiedChild); + groupCloned->addToGroup(copiedChild); + } + copy->addItem(groupCloned); + } - - if (ubItem && !stroke) - { + if (ubItem && !stroke && !group) cloneItem = dynamic_cast(ubItem->deepCopy()); - } if (cloneItem) { @@ -1619,8 +1631,6 @@ UBGraphicsTextItem *UBGraphicsScene::addTextHtml(const QString &pString, const Q void UBGraphicsScene::addItem(QGraphicsItem* item) { UBCoreGraphicsScene::addItem(item); - if(item->type() == UBGraphicsItemType::groupContainerType) - mNumberOfGroups += 1; // the default z value is already set. This is the case when a svg file is read if(item->zValue() == DEFAULT_Z_VALUE || item->zValue() == UBZLayerController::errorNum()){ @@ -1650,9 +1660,6 @@ void UBGraphicsScene::addItems(const QSet& items) void UBGraphicsScene::removeItem(QGraphicsItem* item) { - if(item->type() == UBGraphicsItemType::groupContainerType) - mNumberOfGroups -= 1; - item->setSelected(false); UBCoreGraphicsScene::removeItem(item); UBApplication::boardController->freezeW3CWidget(item, true); @@ -1668,11 +1675,8 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item) void UBGraphicsScene::removeItems(const QSet& items) { - foreach(QGraphicsItem* item, items) { - if(item->type() == UBGraphicsItemType::groupContainerType) - mNumberOfGroups -= 1; + foreach(QGraphicsItem* item, items) UBCoreGraphicsScene::removeItem(item); - } mItemCount -= items.size(); diff --git a/src/domain/UBGraphicsScene.h b/src/domain/UBGraphicsScene.h index ef0c2b80..3a4590e1 100644 --- a/src/domain/UBGraphicsScene.h +++ b/src/domain/UBGraphicsScene.h @@ -348,7 +348,6 @@ public slots: void zoomOutMagnifier(); void changeMagnifierMode(int mode); void resizedMagnifier(qreal newPercent); - bool hasGroups() { return mNumberOfGroups != 0; } protected: @@ -434,7 +433,6 @@ public slots: bool mDrawWithCompass; UBGraphicsPolygonItem *mCurrentPolygon; UBSelectionFrame *mSelectionFrame; - int mNumberOfGroups; };