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);
}
/**
* @brief Set delegate as background for the scene, replacing any existing background.
*/
void UBGraphicsItemDelegate::setAsBackground()
{
UBGraphicsScene* scene = castUBGraphicsScene();
QGraphicsItem* item = delegated();
if (scene && item) {
startUndoStep();
item->resetTransform();
item->setPos(item->sceneBoundingRect().width()/-2., item->sceneBoundingRect().height()/-2.);
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 "UBResizableGraphicsItem.h"
#include "domain/UBItem.h"
#include "domain/UBGraphicsScene.h"
#include "core/memcheck.h"
UBGraphicsItemTransformUndoCommand::UBGraphicsItemTransformUndoCommand(QGraphicsItem* pItem,
const QPointF& prevPos, const QTransform& prevTransform, const qreal& prevZValue,
const QSizeF& prevSize):UBUndoCommand()
const QSizeF& prevSize, bool setToBackground)
: UBUndoCommand()
{
mItem = pItem;
mPreviousTransform = prevTransform;
@ -52,6 +54,8 @@ UBGraphicsItemTransformUndoCommand::UBGraphicsItemTransformUndoCommand(QGraphics
if (resizableItem)
mCurrentSize = resizableItem->size();
mSetToBackground = setToBackground;
}
UBGraphicsItemTransformUndoCommand::~UBGraphicsItemTransformUndoCommand()
@ -61,6 +65,13 @@ UBGraphicsItemTransformUndoCommand::~UBGraphicsItemTransformUndoCommand()
void UBGraphicsItemTransformUndoCommand::undo()
{
if (mSetToBackground) {
UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mItem->scene());
if (scene && scene->isBackgroundObject(mItem)) {
scene->unsetBackgroundObject();
}
}
mItem->setPos(mPreviousPosition);
mItem->setTransform(mPreviousTransform);
mItem->setZValue(mPreviousZValue);
@ -73,6 +84,12 @@ void UBGraphicsItemTransformUndoCommand::undo()
void UBGraphicsItemTransformUndoCommand::redo()
{
if (mSetToBackground) {
UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mItem->scene());
if (scene)
scene->setAsBackgroundObject(mItem);
}
mItem->setPos(mCurrentPosition);
mItem->setTransform(mCurrentTransform);
mItem->setZValue(mCurrentZValue);

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

@ -1983,6 +1983,21 @@ QGraphicsItem* UBGraphicsScene::setAsBackgroundObject(QGraphicsItem* item, bool
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)
{

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

Loading…
Cancel
Save