Add ability to undo/redo setting image as background

preferencesAboutTextFull
Craig Watson 7 years ago
parent aedebaf2db
commit 881a1d5011
  1. 14
      src/domain/UBGraphicsItemDelegate.cpp
  2. 19
      src/domain/UBGraphicsItemTransformUndoCommand.cpp
  3. 5
      src/domain/UBGraphicsItemTransformUndoCommand.h
  4. 15
      src/domain/UBGraphicsScene.cpp
  5. 1
      src/domain/UBGraphicsScene.h

@ -596,16 +596,30 @@ void UBGraphicsItemDelegate::showHide(bool show)
emit showOnDisplayChanged(show); emit showOnDisplayChanged(show);
} }
/**
* @brief Set delegate as background for the scene, replacing any existing background.
*/
void UBGraphicsItemDelegate::setAsBackground() void UBGraphicsItemDelegate::setAsBackground()
{ {
UBGraphicsScene* scene = castUBGraphicsScene(); UBGraphicsScene* scene = castUBGraphicsScene();
QGraphicsItem* item = delegated(); QGraphicsItem* item = delegated();
if (scene && item) { if (scene && item) {
startUndoStep();
item->resetTransform(); item->resetTransform();
item->setPos(item->sceneBoundingRect().width()/-2., item->sceneBoundingRect().height()/-2.); item->setPos(item->sceneBoundingRect().width()/-2., item->sceneBoundingRect().height()/-2.);
scene->setAsBackgroundObject(item); scene->setAsBackgroundObject(item);
UBGraphicsItemTransformUndoCommand *uc =
new UBGraphicsItemTransformUndoCommand(mDelegated,
mPreviousPosition,
mPreviousTransform,
mPreviousZValue,
mPreviousSize,
true);
UBApplication::undoStack->push(uc);
} }
} }

@ -30,12 +30,14 @@
#include "UBGraphicsItemTransformUndoCommand.h" #include "UBGraphicsItemTransformUndoCommand.h"
#include "UBResizableGraphicsItem.h" #include "UBResizableGraphicsItem.h"
#include "domain/UBItem.h" #include "domain/UBItem.h"
#include "domain/UBGraphicsScene.h"
#include "core/memcheck.h" #include "core/memcheck.h"
UBGraphicsItemTransformUndoCommand::UBGraphicsItemTransformUndoCommand(QGraphicsItem* pItem, UBGraphicsItemTransformUndoCommand::UBGraphicsItemTransformUndoCommand(QGraphicsItem* pItem,
const QPointF& prevPos, const QTransform& prevTransform, const qreal& prevZValue, const QPointF& prevPos, const QTransform& prevTransform, const qreal& prevZValue,
const QSizeF& prevSize):UBUndoCommand() const QSizeF& prevSize, bool setToBackground)
: UBUndoCommand()
{ {
mItem = pItem; mItem = pItem;
mPreviousTransform = prevTransform; mPreviousTransform = prevTransform;
@ -52,6 +54,8 @@ UBGraphicsItemTransformUndoCommand::UBGraphicsItemTransformUndoCommand(QGraphics
if (resizableItem) if (resizableItem)
mCurrentSize = resizableItem->size(); mCurrentSize = resizableItem->size();
mSetToBackground = setToBackground;
} }
UBGraphicsItemTransformUndoCommand::~UBGraphicsItemTransformUndoCommand() UBGraphicsItemTransformUndoCommand::~UBGraphicsItemTransformUndoCommand()
@ -61,6 +65,13 @@ UBGraphicsItemTransformUndoCommand::~UBGraphicsItemTransformUndoCommand()
void UBGraphicsItemTransformUndoCommand::undo() void UBGraphicsItemTransformUndoCommand::undo()
{ {
if (mSetToBackground) {
UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mItem->scene());
if (scene && scene->isBackgroundObject(mItem)) {
scene->unsetBackgroundObject();
}
}
mItem->setPos(mPreviousPosition); mItem->setPos(mPreviousPosition);
mItem->setTransform(mPreviousTransform); mItem->setTransform(mPreviousTransform);
mItem->setZValue(mPreviousZValue); mItem->setZValue(mPreviousZValue);
@ -73,6 +84,12 @@ void UBGraphicsItemTransformUndoCommand::undo()
void UBGraphicsItemTransformUndoCommand::redo() void UBGraphicsItemTransformUndoCommand::redo()
{ {
if (mSetToBackground) {
UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mItem->scene());
if (scene)
scene->setAsBackgroundObject(mItem);
}
mItem->setPos(mCurrentPosition); mItem->setPos(mCurrentPosition);
mItem->setTransform(mCurrentTransform); mItem->setTransform(mCurrentTransform);
mItem->setZValue(mCurrentZValue); mItem->setZValue(mCurrentZValue);

@ -42,7 +42,8 @@ class UBGraphicsItemTransformUndoCommand : public UBUndoCommand
const QPointF& prevPos, const QPointF& prevPos,
const QTransform& prevTransform, const QTransform& prevTransform,
const qreal& prevZValue, const qreal& prevZValue,
const QSizeF& prevSize = QSizeF()); const QSizeF& prevSize = QSizeF(),
bool setToBackground = false);
virtual ~UBGraphicsItemTransformUndoCommand(); virtual ~UBGraphicsItemTransformUndoCommand();
virtual int getType() const { return UBUndoType::undotype_GRAPHICITEMTRANSFORM; } virtual int getType() const { return UBUndoType::undotype_GRAPHICITEMTRANSFORM; }
@ -63,6 +64,8 @@ class UBGraphicsItemTransformUndoCommand : public UBUndoCommand
qreal mPreviousZValue; qreal mPreviousZValue;
qreal mCurrentZValue; qreal mCurrentZValue;
bool mSetToBackground;
}; };
#endif /* UBGRAPHICSITEMTRANSFORMUNDOCOMMAND_H_ */ #endif /* UBGRAPHICSITEMTRANSFORMUNDOCOMMAND_H_ */

@ -1983,6 +1983,21 @@ QGraphicsItem* UBGraphicsScene::setAsBackgroundObject(QGraphicsItem* item, bool
return item; return item;
} }
void UBGraphicsScene::unsetBackgroundObject()
{
if (!mBackgroundObject)
return;
mBackgroundObject->setFlag(QGraphicsItem::ItemIsSelectable, true);
mBackgroundObject->setFlag(QGraphicsItem::ItemIsMovable, true);
mBackgroundObject->setAcceptedMouseButtons(Qt::LeftButton);
// Item zLayer and Layer Type should be set by the caller of this function, as
// it may depend on the object type, where it was before, etc.
mBackgroundObject = 0;
}
QRectF UBGraphicsScene::normalizedSceneRect(qreal ratio) QRectF UBGraphicsScene::normalizedSceneRect(qreal ratio)
{ {

@ -174,6 +174,7 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
void addGroup(UBGraphicsGroupContainerItem *groupItem); void addGroup(UBGraphicsGroupContainerItem *groupItem);
QGraphicsItem* setAsBackgroundObject(QGraphicsItem* item, bool pAdaptTransformation = false, bool expand = false); QGraphicsItem* setAsBackgroundObject(QGraphicsItem* item, bool pAdaptTransformation = false, bool expand = false);
void unsetBackgroundObject();
QGraphicsItem* backgroundObject() const QGraphicsItem* backgroundObject() const
{ {

Loading…
Cancel
Save