commit
7acbcaab56
@ -0,0 +1,58 @@ |
||||
#include "UBGraphicsItemGroupUndoCommand.h" |
||||
|
||||
#include "UBGraphicsGroupContainerItem.h" |
||||
#include "UBGraphicsScene.h" |
||||
#include "core/memcheck.h" |
||||
|
||||
|
||||
UBGraphicsItemGroupUndoCommand::UBGraphicsItemGroupUndoCommand(UBGraphicsScene *pScene, UBGraphicsGroupContainerItem *pGroupCreated) : |
||||
mScene (pScene), mGroup(pGroupCreated), mFirstRedo(true) |
||||
|
||||
{ |
||||
if (pGroupCreated->childItems().count()) { |
||||
foreach (QGraphicsItem *item, pGroupCreated->childItems()) { |
||||
mItems << item; |
||||
} |
||||
} |
||||
} |
||||
|
||||
UBGraphicsItemGroupUndoCommand::~UBGraphicsItemGroupUndoCommand() |
||||
{ |
||||
} |
||||
|
||||
void UBGraphicsItemGroupUndoCommand::undo() |
||||
{ |
||||
mGroup->destroy(); |
||||
foreach(QGraphicsItem *item, mItems) { |
||||
item->setSelected(true); |
||||
} |
||||
} |
||||
|
||||
void UBGraphicsItemGroupUndoCommand::redo() |
||||
{ |
||||
if (mFirstRedo) { |
||||
//Work around. TODO determine why does Qt call the redo function on pushing to undo
|
||||
mFirstRedo = false; |
||||
return; |
||||
} |
||||
|
||||
foreach (QGraphicsItem *item, mItems) { |
||||
if (item->type() == UBGraphicsGroupContainerItem::Type) { |
||||
QList<QGraphicsItem*> childItems = item->childItems(); |
||||
UBGraphicsGroupContainerItem *currentGroup = dynamic_cast<UBGraphicsGroupContainerItem*>(item); |
||||
if (currentGroup) { |
||||
currentGroup->destroy(); |
||||
} |
||||
foreach (QGraphicsItem *chItem, childItems) { |
||||
mGroup->addToGroup(chItem); |
||||
} |
||||
} else { |
||||
mGroup->addToGroup(item); |
||||
} |
||||
} |
||||
|
||||
mScene->addItem(mGroup); |
||||
mGroup->setVisible(true); |
||||
mGroup->setFocus(); |
||||
mGroup->setSelected(true); |
||||
} |
@ -0,0 +1,30 @@ |
||||
#ifndef UBGRAPHICSITEMGROUPUNDOCOMMAND_H |
||||
#define UBGRAPHICSITEMGROUPUNDOCOMMAND_H |
||||
|
||||
#include <QList> |
||||
#include "UBAbstractUndoCommand.h" |
||||
|
||||
class UBGraphicsScene; |
||||
class UBGraphicsGroupContainerItem; |
||||
|
||||
class UBGraphicsItemGroupUndoCommand : public UBAbstractUndoCommand |
||||
{ |
||||
public: |
||||
UBGraphicsItemGroupUndoCommand(UBGraphicsScene *pScene, UBGraphicsGroupContainerItem *pGroupCreated); |
||||
virtual ~UBGraphicsItemGroupUndoCommand(); |
||||
|
||||
virtual UndoType getType() { return undotype_GRAPHICSGROUPITEM; } |
||||
|
||||
protected: |
||||
virtual void undo(); |
||||
virtual void redo(); |
||||
|
||||
private: |
||||
UBGraphicsScene *mScene; |
||||
UBGraphicsGroupContainerItem *mGroup; |
||||
QList<QGraphicsItem*> mItems; |
||||
|
||||
bool mFirstRedo; |
||||
}; |
||||
|
||||
#endif // UBGRAPHICSITEMGROUPUNDOCOMMAND_H
|
Loading…
Reference in new issue