diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index 2d4be84f..486d8557 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -29,7 +29,7 @@ #include "domain/UBAbstractWidget.h" #include "domain/UBGraphicsStroke.h" #include "domain/UBGraphicsStrokesGroup.h" -#include "domain/ubgraphicsgroupcontaineritem.h" +#include "domain/UBGraphicsGroupContainerItem.h" #include "domain/UBItem.h" #include "tools/UBGraphicsRuler.h" @@ -543,6 +543,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene() if(strokesGroup){ polygonItem->setTransform(strokesGroup->transform()); strokesGroup->addToGroup(polygonItem); + polygonItem->setStrokesGroup(strokesGroup); } }else{ scene->addItem(polygonItem); @@ -1004,8 +1005,6 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::writeSvgElement() bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex) { - - if (mScene->isModified()) { static int i = 0; @@ -1028,6 +1027,7 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex) writeSvgElement(); + // Get the items from the scene QList items = mScene->items(); qSort(items.begin(), items.end(), itemZIndexComp); @@ -1040,10 +1040,32 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex) { QGraphicsItem *item = items.takeFirst(); - UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast (item); + // Is the item a strokes group? + UBGraphicsStrokesGroup* strokesGroupItem = qgraphicsitem_cast(item); + if(strokesGroupItem && strokesGroupItem->isVisible()){ + mXmlWriter.writeStartElement("g"); + QMatrix matrix = item->sceneMatrix(); + if (!matrix.isIdentity()){ + mXmlWriter.writeAttribute("transform", toSvgTransform(matrix)); + } + + // Add the polygons + foreach(QGraphicsItem* item, strokesGroupItem->childItems()){ + UBGraphicsPolygonItem* poly = qgraphicsitem_cast(item); + if(NULL != poly){ + polygonItemToSvgPolygon(poly, true); + items.removeOne(poly); + } + } + + mXmlWriter.writeEndElement(); //g + } + // Is the item a polygon? + UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast (item); if (polygonItem && polygonItem->isVisible()) { + UBGraphicsStroke* currentStroke = polygonItem->stroke(); if (openStroke && (currentStroke != openStroke)) @@ -1115,16 +1137,16 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex) openStroke = 0; } + // Is the item a picture? UBGraphicsPixmapItem *pixmapItem = qgraphicsitem_cast (item); - if (pixmapItem && pixmapItem->isVisible()) { pixmapItemToLinkedImage(pixmapItem); continue; } + // Is the item a shape? UBGraphicsSvgItem *svgItem = qgraphicsitem_cast (item); - if (svgItem && svgItem->isVisible()) { svgItemToLinkedSvg(svgItem); @@ -1142,54 +1164,55 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex) continue; } + // Is the item an app? UBGraphicsAppleWidgetItem *appleWidgetItem = qgraphicsitem_cast (item); - if (appleWidgetItem && appleWidgetItem->isVisible()) { graphicsAppleWidgetToSvg(appleWidgetItem); continue; } + // Is the item a W3C? UBGraphicsW3CWidgetItem *w3cWidgetItem = qgraphicsitem_cast (item); - if (w3cWidgetItem && w3cWidgetItem->isVisible()) { graphicsW3CWidgetToSvg(w3cWidgetItem); continue; } + // Is the item a PDF? UBGraphicsPDFItem *pdfItem = qgraphicsitem_cast (item); - if (pdfItem && pdfItem->isVisible()) { pdfItemToLinkedPDF(pdfItem); continue; } + // Is the item a text? UBGraphicsTextItem *textItem = qgraphicsitem_cast (item); - if (textItem && textItem->isVisible()) { textItemToSvg(textItem); continue; } + // Is the item a curtain? UBGraphicsCurtainItem *curtainItem = qgraphicsitem_cast (item); - if (curtainItem && curtainItem->isVisible()) { curtainItemToSvg(curtainItem); continue; } + // Is the item a ruler? UBGraphicsRuler *ruler = qgraphicsitem_cast (item); - if (ruler && ruler->isVisible()) { rulerToSvg(ruler); continue; } + // Is the item a cache? UBGraphicsCache* cache = qgraphicsitem_cast(item); if(cache && cache->isVisible()) { @@ -1197,35 +1220,35 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex) continue; } + // Is the item a compass UBGraphicsCompass *compass = qgraphicsitem_cast (item); - if (compass && compass->isVisible()) { compassToSvg(compass); continue; } + // Is the item a protractor? UBGraphicsProtractor *protractor = qgraphicsitem_cast (item); - if (protractor && protractor->isVisible()) { protractorToSvg(protractor); continue; } + // Is the item a triangle? UBGraphicsTriangle *triangle = qgraphicsitem_cast (item); - if (triangle && triangle->isVisible()) { triangleToSvg(triangle); continue; } + // Is the item a group? UBGraphicsGroupContainerItem *groupItem = qgraphicsitem_cast(item); - if (groupItem && groupItem->isVisible()) { - qDebug() << "came across the group during the parsing"; + qDebug() << "came across the group during the parsing, uuid is " << groupItem->data(UBGraphicsItemData::ItemUuid).toString(); continue; } } diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 85872574..b94fbc16 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -49,7 +49,7 @@ #include "domain/UBW3CWidget.h" #include "domain/UBGraphicsTextItem.h" #include "domain/UBPageSizeUndoCommand.h" -#include "domain/ubgraphicsgroupcontaineritem.h" +#include "domain/UBGraphicsGroupContainerItem.h" #include "tools/UBToolsManager.h" diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index 4f8eddab..2185125d 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -49,7 +49,7 @@ #include "domain/UBItem.h" #include "domain/UBGraphicsMediaItem.h" #include "domain/UBGraphicsSvgItem.h" -#include "domain/ubgraphicsgroupcontaineritem.h" +#include "domain/UBGraphicsGroupContainerItem.h" #include "domain/UBGraphicsStrokesGroup.h" #include "document/UBDocumentProxy.h" diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index 29e0ef71..98261e3a 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -582,7 +582,6 @@ UBGraphicsScene* UBPersistenceManager::loadDocumentScene(UBDocumentProxy* proxy, if (mSceneCache.contains(proxy, sceneIndex)) return mSceneCache.value(proxy, sceneIndex); else { - qDebug() << "scene" << sceneIndex << "retrieved from file ..."; UBGraphicsScene* scene = UBSvgSubsetAdaptor::loadScene(proxy, sceneIndex); if (scene) diff --git a/src/domain/ubgraphicsgroupcontaineritem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp similarity index 98% rename from src/domain/ubgraphicsgroupcontaineritem.cpp rename to src/domain/UBGraphicsGroupContainerItem.cpp index cea31fb9..a342d848 100644 --- a/src/domain/ubgraphicsgroupcontaineritem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -1,11 +1,11 @@ -#include "ubgraphicsgroupcontaineritem.h" +#include "UBGraphicsGroupContainerItem.h" #include #include "UBGraphicsMediaItem.h" #include "UBGraphicsTextItem.h" #include "domain/UBGraphicsItemDelegate.h" -#include "domain/ubgraphicsgroupcontaineritemdelegate.h" +#include "domain/UBGraphicsGroupContainerItemDelegate.h" #include "domain/UBGraphicsScene.h" #include "core/memcheck.h" diff --git a/src/domain/ubgraphicsgroupcontaineritem.h b/src/domain/UBGraphicsGroupContainerItem.h similarity index 100% rename from src/domain/ubgraphicsgroupcontaineritem.h rename to src/domain/UBGraphicsGroupContainerItem.h diff --git a/src/domain/ubgraphicsgroupcontaineritemdelegate.cpp b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp similarity index 95% rename from src/domain/ubgraphicsgroupcontaineritemdelegate.cpp rename to src/domain/UBGraphicsGroupContainerItemDelegate.cpp index 48f1270f..a78749f1 100644 --- a/src/domain/ubgraphicsgroupcontaineritemdelegate.cpp +++ b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp @@ -1,4 +1,4 @@ -#include "ubgraphicsgroupcontaineritemdelegate.h" +#include "UBGraphicsGroupContainerItemDelegate.h" #include @@ -6,7 +6,7 @@ #include "gui/UBResources.h" #include "domain/UBGraphicsDelegateFrame.h" -#include "domain/ubgraphicsgroupcontaineritem.h" +#include "domain/UBGraphicsGroupContainerItem.h" #include "board/UBBoardController.h" diff --git a/src/domain/ubgraphicsgroupcontaineritemdelegate.h b/src/domain/UBGraphicsGroupContainerItemDelegate.h similarity index 100% rename from src/domain/ubgraphicsgroupcontaineritemdelegate.h rename to src/domain/UBGraphicsGroupContainerItemDelegate.h diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index bbc13a99..d1759d3f 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -40,7 +40,7 @@ #include "domain/UBAbstractWidget.h" #include "domain/UBGraphicsTextItem.h" #include "domain/UBGraphicsMediaItem.h" -#include "domain/ubgraphicsgroupcontaineritem.h" +#include "domain/UBGraphicsGroupContainerItem.h" #include "web/UBWebController.h" diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 33716f14..dbaebdc0 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -56,7 +56,7 @@ #include "UBGraphicsTextItem.h" #include "UBGraphicsStrokesGroup.h" -#include "domain/ubgraphicsgroupcontaineritem.h" +#include "domain/UBGraphicsGroupContainerItem.h" #include "UBAppleWidget.h" #include "UBW3CWidget.h" @@ -777,18 +777,17 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth) if (mShouldUseOMP) { - #pragma omp parallel for + //#pragma omp parallel for for (int i = 0; i < collidItemsSize; i++) { UBGraphicsPolygonItem *collidingPolygonItem = qgraphicsitem_cast(collidItems.at(i)); - - if (NULL != collidingPolygonItem) + if(NULL != collidingPolygonItem) { UBGraphicsStrokesGroup* pGroup = collidingPolygonItem->strokesGroup(); if(eraserInnerRect.contains(collidingPolygonItem->boundingRect())) { - #pragma omp critical + //#pragma omp critical // Put the entire polygon into the remove list toBeRemovedItems << collidingPolygonItem; } @@ -825,7 +824,7 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth) } else */if (croppedPathSimplified.isEmpty()) { - #pragma omp critical + //#pragma omp critical // Put the entire polygon into the remove list if the eraser removes all its visible content toBeRemovedItems << collidingPolygonItem; } @@ -836,14 +835,15 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth) foreach(const QPolygonF &pol, croppedPathSimplified.toFillPolygons()) { UBGraphicsPolygonItem* croppedPolygonItem = collidingPolygonItem->deepCopy(pol); - #pragma omp critical + //#pragma omp critical if(NULL != pGroup){ croppedPolygonItem->setStrokesGroup(pGroup); + //pGroup->addToGroup(croppedPolygonItem); } // Add this new polygon to the 'added' list toBeAddedItems << croppedPolygonItem; } - #pragma omp critical + //#pragma omp critical // Remove the original polygonitem because it has been replaced by many smaller polygons toBeRemovedItems << collidingPolygonItem; } @@ -904,8 +904,9 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth) foreach(QGraphicsItem* item, toBeRemovedItems){ UBGraphicsPolygonItem* poly = dynamic_cast(item); if(NULL != poly){ - if(NULL != poly->strokesGroup()){ - poly->strokesGroup()->removeFromGroup(poly); + UBGraphicsStrokesGroup* group = poly->strokesGroup(); + if(NULL != group){ + group->removeFromGroup(poly); removeItem(poly); }else{ qDebug() << "No group present"; @@ -1489,6 +1490,11 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QListsetVisible(true); groupItem->setFocus(); + qDebug() << groupItem->uuid().toString(); + if (groupItem->uuid().isNull()) { + groupItem->setUuid(QUuid::createUuid()); + } + if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, 0, groupItem); UBApplication::undoStack->push(uc); diff --git a/src/domain/domain.pri b/src/domain/domain.pri index 4028dfed..96dbe679 100644 --- a/src/domain/domain.pri +++ b/src/domain/domain.pri @@ -21,8 +21,8 @@ HEADERS += src/domain/UBGraphicsScene.h \ src/domain/UBGraphicsMediaItem.h \ src/domain/UBAbstractUndoCommand.h\ src/domain/UBAngleWidget.h \ - src/domain/ubgraphicsgroupcontaineritem.h \ - src/domain/ubgraphicsgroupcontaineritemdelegate.h \ + src/domain/UBGraphicsGroupContainerItem.h \ + src/domain/UBGraphicsGroupContainerItemDelegate.h \ src/domain/UBGraphicsStrokesGroup.h HEADERS += src/domain/UBGraphicsItemDelegate.h \