workaround for issue related to the group duplication

preferencesAboutTextFull
Claudio Valerio 11 years ago
parent 1e6e64c9ec
commit 6d7350445f
  1. 10
      src/adaptors/UBSvgSubsetAdaptor.cpp
  2. 4
      src/core/UBPersistenceManager.cpp
  3. 3
      src/domain/UBGraphicsGroupContainerItem.cpp
  4. 21
      src/domain/UBGraphicsScene.cpp
  5. 3
      src/domain/UBGraphicsScene.h

@ -1066,16 +1066,6 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
// Get the items from the scene // Get the items from the scene
QList<QGraphicsItem*> items = mScene->items(); QList<QGraphicsItem*> items = mScene->items();
// int strokes = 0; int polygons = 0;
// foreach(QGraphicsItem *item, items) {
// if (item->type() == UBGraphicsPolygonItem::Type) {
// polygons++;
// } else if (item->type() == UBGraphicsStrokesGroup::Type) {
// strokes++;
// }
// }
// qDebug() << "---Strokes count" << strokes << "Polygons count" << polygons;
// qDebug() << "---Number of scene items " << items.count();
qSort(items.begin(), items.end(), itemZIndexComp); qSort(items.begin(), items.end(), itemZIndexComp);
UBGraphicsStroke *openStroke = 0; UBGraphicsStroke *openStroke = 0;

@ -757,15 +757,15 @@ void UBPersistenceManager::persistDocumentScene(UBDocumentProxy* pDocumentProxy,
if (pScene->isModified()) if (pScene->isModified())
{ {
UBThumbnailAdaptor::persistScene(pDocumentProxy, pScene, pSceneIndex); UBThumbnailAdaptor::persistScene(pDocumentProxy, pScene, pSceneIndex);
if(forceImmediateSaving) if(forceImmediateSaving || pScene->hasGroups())
UBSvgSubsetAdaptor::persistScene(pDocumentProxy,pScene,pSceneIndex); UBSvgSubsetAdaptor::persistScene(pDocumentProxy,pScene,pSceneIndex);
else{ else{
UBGraphicsScene* copiedScene = pScene->sceneDeepCopy(); UBGraphicsScene* copiedScene = pScene->sceneDeepCopy();
mWorker->saveScene(pDocumentProxy, copiedScene, pSceneIndex); mWorker->saveScene(pDocumentProxy, copiedScene, pSceneIndex);
pScene->setModified(false); pScene->setModified(false);
} }
} }
} }

@ -188,10 +188,11 @@ UBCoreGraphicsScene *UBGraphicsGroupContainerItem::corescene()
return castScene; return castScene;
} }
UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItem::deepCopy() const UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItem::deepCopy() const
{ {
UBGraphicsGroupContainerItem *copy = new UBGraphicsGroupContainerItem(parentItem()); UBGraphicsGroupContainerItem *copy = new UBGraphicsGroupContainerItem();
copy->setUuid(this->uuid()); // this is OK for now as long as Widgets are imutable copy->setUuid(this->uuid()); // this is OK for now as long as Widgets are imutable

@ -315,6 +315,7 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent, bool enableUndoRedoSta
, mpLastPolygon(NULL) , mpLastPolygon(NULL)
, mCurrentPolygon(0) , mCurrentPolygon(0)
, mSelectionFrame(0) , mSelectionFrame(0)
, mNumberOfGroups(0)
{ {
UBCoreGraphicsScene::setObjectName("BoardScene"); UBCoreGraphicsScene::setObjectName("BoardScene");
setItemIndexMethod(NoIndex); setItemIndexMethod(NoIndex);
@ -1101,30 +1102,19 @@ UBGraphicsScene* UBGraphicsScene::sceneDeepCopy() const
copy->setNominalSize(this->mNominalSize); copy->setNominalSize(this->mNominalSize);
QListIterator<QGraphicsItem*> itItems(this->mFastAccessItems); QListIterator<QGraphicsItem*> itItems(this->mFastAccessItems);
QMap<UBGraphicsStroke*, UBGraphicsStroke*> groupClone; QMap<UBGraphicsStroke*, UBGraphicsStroke*> groupClone;
QList<QUuid> groupAlreadyCloned;
while (itItems.hasNext()) while (itItems.hasNext())
{ {
QGraphicsItem* item = itItems.next(); QGraphicsItem* item = itItems.next();
QGraphicsItem* cloneItem = 0; QGraphicsItem* cloneItem = 0;
UBItem* ubItem = dynamic_cast<UBItem*>(item); UBItem* ubItem = dynamic_cast<UBItem*>(item);
UBGraphicsStroke* stroke = dynamic_cast<UBGraphicsStroke*>(item); UBGraphicsStroke* stroke = dynamic_cast<UBGraphicsStroke*>(item);
UBGraphicsGroupContainerItem* group = dynamic_cast<UBGraphicsGroupContainerItem*>(item);
if (ubItem && !stroke) if (ubItem && !stroke)
{ {
//horrible hack cloneItem = dynamic_cast<QGraphicsItem*>(ubItem->deepCopy());
if(group && !groupAlreadyCloned.contains(group->uuid())){
cloneItem = dynamic_cast<QGraphicsItem*>(ubItem->deepCopy());
groupAlreadyCloned.append(group->uuid());
}
if(!group)
cloneItem = dynamic_cast<QGraphicsItem*>(ubItem->deepCopy());
} }
if (cloneItem) if (cloneItem)
@ -1629,6 +1619,8 @@ UBGraphicsTextItem *UBGraphicsScene::addTextHtml(const QString &pString, const Q
void UBGraphicsScene::addItem(QGraphicsItem* item) void UBGraphicsScene::addItem(QGraphicsItem* item)
{ {
UBCoreGraphicsScene::addItem(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 // 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()){ if(item->zValue() == DEFAULT_Z_VALUE || item->zValue() == UBZLayerController::errorNum()){
@ -1658,6 +1650,9 @@ void UBGraphicsScene::addItems(const QSet<QGraphicsItem*>& items)
void UBGraphicsScene::removeItem(QGraphicsItem* item) void UBGraphicsScene::removeItem(QGraphicsItem* item)
{ {
if(item->type() == UBGraphicsItemType::groupContainerType)
mNumberOfGroups -= 1;
item->setSelected(false); item->setSelected(false);
UBCoreGraphicsScene::removeItem(item); UBCoreGraphicsScene::removeItem(item);
UBApplication::boardController->freezeW3CWidget(item, true); UBApplication::boardController->freezeW3CWidget(item, true);
@ -1674,6 +1669,8 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item)
void UBGraphicsScene::removeItems(const QSet<QGraphicsItem*>& items) void UBGraphicsScene::removeItems(const QSet<QGraphicsItem*>& items)
{ {
foreach(QGraphicsItem* item, items) { foreach(QGraphicsItem* item, items) {
if(item->type() == UBGraphicsItemType::groupContainerType)
mNumberOfGroups -= 1;
UBCoreGraphicsScene::removeItem(item); UBCoreGraphicsScene::removeItem(item);
} }

@ -348,6 +348,7 @@ public slots:
void zoomOutMagnifier(); void zoomOutMagnifier();
void changeMagnifierMode(int mode); void changeMagnifierMode(int mode);
void resizedMagnifier(qreal newPercent); void resizedMagnifier(qreal newPercent);
bool hasGroups() { return mNumberOfGroups != 0; }
protected: protected:
@ -374,6 +375,7 @@ public slots:
virtual void drawBackground(QPainter *painter, const QRectF &rect); virtual void drawBackground(QPainter *painter, const QRectF &rect);
private: private:
void setDocumentUpdated(); void setDocumentUpdated();
void createEraiser(); void createEraiser();
@ -432,6 +434,7 @@ public slots:
bool mDrawWithCompass; bool mDrawWithCompass;
UBGraphicsPolygonItem *mCurrentPolygon; UBGraphicsPolygonItem *mCurrentPolygon;
UBSelectionFrame *mSelectionFrame; UBSelectionFrame *mSelectionFrame;
int mNumberOfGroups;
}; };

Loading…
Cancel
Save