diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 03597682..7739ae1c 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -855,6 +855,10 @@ void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground) { + QGraphicsItem *oldBackgroundObject = NULL; + if (isBackground) + oldBackgroundObject = mActiveScene->backgroundObject(); + QString mimeType = pContentTypeHeader; // In some cases "image/jpeg;charset=" is returned by the drag-n-drop. That is @@ -1193,6 +1197,15 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString UBApplication::showMessage(tr("Unknown content type %1").arg(pContentTypeHeader)); qWarning() << "ignoring mime type" << pContentTypeHeader ; } + + if (isBackground && oldBackgroundObject != mActiveScene->backgroundObject()) + { + if (mActiveScene->isURStackIsEnabled()) { //should be deleted after scene own undo stack implemented + UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(mActiveScene, oldBackgroundObject, mActiveScene->backgroundObject()); + UBApplication::undoStack->push(uc); + } + + } } diff --git a/src/domain/UBGraphicsItemUndoCommand.cpp b/src/domain/UBGraphicsItemUndoCommand.cpp index 6c7420a0..eada4e0d 100644 --- a/src/domain/UBGraphicsItemUndoCommand.cpp +++ b/src/domain/UBGraphicsItemUndoCommand.cpp @@ -91,8 +91,15 @@ void UBGraphicsItemUndoCommand::undo() while (itRemoved.hasNext()) { QGraphicsItem* item = itRemoved.next(); - mScene->addItem(item); - UBApplication::boardController->freezeW3CWidget(item, false); + if (item) + { + if (UBItemLayerType::FixedBackground == item->data(UBGraphicsItemData::ItemLayerType)) + mScene->setAsBackgroundObject(item); + else + mScene->addItem(item); + + UBApplication::boardController->freezeW3CWidget(item, false); + } } // force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint @@ -123,8 +130,15 @@ void UBGraphicsItemUndoCommand::redo() while (itAdded.hasNext()) { QGraphicsItem* item = itAdded.next(); - mScene->addItem(item); - UBApplication::boardController->freezeW3CWidget(item, false); + if (item) + { + if (UBItemLayerType::FixedBackground == item->data(UBGraphicsItemData::ItemLayerType)) + mScene->setAsBackgroundObject(item); + else + mScene->addItem(item); + + UBApplication::boardController->freezeW3CWidget(item, false); + } } // force refresh, QT is a bit lazy and take a lot of time (nb item ^2) to trigger repaint diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 39606b0b..90f0a6b2 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1292,6 +1292,11 @@ void UBGraphicsScene::clearBackground() { if(mBackgroundObject){ removeItem(mBackgroundObject); + + if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented + UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, mBackgroundObject, NULL); + UBApplication::undoStack->push(uc); + } mBackgroundObject = 0; } update(sceneRect()); diff --git a/src/domain/UBGraphicsScene.h b/src/domain/UBGraphicsScene.h index fb1b4c3b..b8cdb7b7 100644 --- a/src/domain/UBGraphicsScene.h +++ b/src/domain/UBGraphicsScene.h @@ -102,6 +102,7 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem // tmp stub for divide addings scene objects from undo mechanism implementation void setURStackEnable(bool set = true) {enableUndoRedoStack = set;} + bool isURStackIsEnabled(){ return enableUndoRedoStack;} UBGraphicsScene(UBDocumentProxy *parent); virtual ~UBGraphicsScene();