DiagramDesigner/include/undoCommands.h

119 lines
2.4 KiB
C
Raw Normal View History

2024-12-03 20:07:25 +08:00
#pragma once
#include "global.h"
#include <QUndoCommand>
#include <QtCore/QJsonObject>
#include <QtCore/QPointF>
class BasicGraphicsScene;
class CreateCommand : public QUndoCommand
{
public:
CreateCommand(BasicGraphicsScene *scene, QString const name, QPointF const &mouseScenePos);
void undo() override;
void redo() override;
private:
BasicGraphicsScene *_scene;
NodeId _nodeId;
QJsonObject _sceneJson;
};
/**
* Selected scene objects are serialized and then removed from the scene.
* The deleted elements could be restored in `undo`.
*/
class DeleteCommand : public QUndoCommand
{
public:
DeleteCommand(BasicGraphicsScene *scene);
void undo() override;
void redo() override;
private:
BasicGraphicsScene *_scene;
QJsonObject _sceneJson;
};
class CopyCommand : public QUndoCommand
{
public:
CopyCommand(BasicGraphicsScene *scene);
};
class PasteCommand : public QUndoCommand
{
public:
PasteCommand(BasicGraphicsScene *scene, QPointF const &mouseScenePos);
void undo() override;
void redo() override;
private:
QJsonObject takeSceneJsonFromClipboard();
QJsonObject makeNewNodeIdsInScene(QJsonObject const &sceneJson);
private:
BasicGraphicsScene *_scene;
QPointF const &_mouseScenePos;
QJsonObject _newSceneJson;
};
class DisconnectCommand : public QUndoCommand
{
public:
DisconnectCommand(BasicGraphicsScene *scene, ConnectionId const);
void undo() override;
void redo() override;
private:
BasicGraphicsScene *_scene;
ConnectionId _connId;
};
class ConnectCommand : public QUndoCommand
{
public:
ConnectCommand(BasicGraphicsScene *scene, ConnectionId const);
void undo() override;
void redo() override;
private:
BasicGraphicsScene *_scene;
ConnectionId _connId;
};
class MoveNodeCommand : public QUndoCommand
{
public:
MoveNodeCommand(BasicGraphicsScene *scene, QPointF const &diff);
void undo() override;
void redo() override;
/**
* A command ID is used in command compression. It must be an integer unique to
* this command's class, or -1 if the command doesn't support compression.
*/
int id() const override;
/**
* Several sequential movements could be merged into one command.
*/
bool mergeWith(QUndoCommand const *c) override;
private:
BasicGraphicsScene *_scene;
QSet<NodeId> _selectedNodes;
QPointF _diff;
};