1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
|
// Copyright 2015 - 2025, GIBIS-UNIFESP and the wiRedPanda contributors
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include "elementeditor.h"
#include "graphicelement.h"
#include "scene.h"
#include <QCoreApplication>
class QNEConnection;
GraphicElement *findElm(const int id);
QNEConnection *findConn(const int id);
const QList<GraphicElement *> findElements(const QList<int> &ids);
const QList<QGraphicsItem *> findItems(const QList<int> &ids);
const QList<QGraphicsItem *> loadItems(Scene *scene, QByteArray &itemData, const QList<int> &ids, QList<int> &otherIds);
const QList<QGraphicsItem *> loadList(const QList<QGraphicsItem *> &items, QList<int> &ids, QList<int> &otherIds);
void addItems(Scene *scene, const QList<QGraphicsItem *> &items);
void deleteItems(Scene *scene, const QList<QGraphicsItem *> &items);
void saveItems(QByteArray &itemData, const QList<QGraphicsItem *> &items, const QList<int> &otherIds);
void storeIds(const QList<QGraphicsItem *> &items, QList<int> &ids);
void storeOtherIds(const QList<QGraphicsItem *> &connections, const QList<int> &ids, QList<int> &otherIds);
class AddItemsCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(AddItemsCommand)
public:
//! \param item A list of items in the form of GraphicElements (an IO elem., a gate or an IC)
//! \param editor The editor to which the command will be added to
explicit AddItemsCommand(const QList<QGraphicsItem *> &items, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
QByteArray m_itemData;
QList<int> m_ids;
QList<int> m_otherIds;
Scene *m_scene;
};
//! Represents a single action of removing a list of elements on the editor
class DeleteItemsCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(DeleteItemsCommand)
public:
//! \param items A list of QGraphicsItems to be removed from the editor
//! \param editor The editor from where the items will be removed
explicit DeleteItemsCommand(const QList<QGraphicsItem *> &items, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
QByteArray m_itemData;
QList<int> m_ids;
QList<int> m_otherIds;
Scene *m_scene;
};
//! Represents a single action of rotating a list of elements on the editor
class RotateCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(RotateCommand)
public:
//! \param items are the items to be rotated
//! \param angle defines how many degrees will be rotated, in clockwise direction, by this command.
explicit RotateCommand(const QList<GraphicElement *> &items, const int angle, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
//! Defines how many degrees will be rotated, in clockwise direction, in this command.
int m_angle;
QList<QPointF> m_positions;
QList<int> m_ids;
Scene *m_scene;
};
//! Represents a single action of moving a list of actions on the editor
class MoveCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(MoveCommand)
public:
explicit MoveCommand(const QList<GraphicElement *> &list, const QList<QPointF> &oldPositions, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
QList<QPointF> m_newPositions;
QList<QPointF> m_oldPositions;
QPointF m_offset;
QList<int> m_ids;
Scene *m_scene;
};
class UpdateCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(UpdateCommand)
public:
explicit UpdateCommand(const QList<GraphicElement *> &elements, const QByteArray &oldData, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
void loadData(QByteArray &itemData);
QByteArray m_newData;
QByteArray m_oldData;
QList<int> m_ids;
Scene *m_scene;
};
class SplitCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(SplitCommand)
public:
explicit SplitCommand(QNEConnection *conn, QPointF mousePos, Scene *scene, QUndoCommand *parent = nullptr);
void undo() override;
void redo() override;
private:
QPointF m_nodePos;
Scene *m_scene;
int m_c1Id;
int m_c2Id;
int m_elm1Id;
int m_elm2Id;
int m_nodeAngle;
int m_nodeId;
};
class MorphCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(MorphCommand)
public:
explicit MorphCommand(const QList<GraphicElement *> &elements, ElementType type, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
void transferConnections(QList<GraphicElement *> from, QList<GraphicElement *> to);
ElementType m_newType;
QList<ElementType> m_types;
QList<int> m_ids;
Scene *m_scene;
};
class ChangeInputSizeCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(ChangeInputSizeCommand)
public:
explicit ChangeInputSizeCommand(const QList<GraphicElement *> &elements, const int newInputSize, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
QByteArray m_oldData;
QList<int> m_ids;
QList<int> m_order;
Scene *m_scene;
int m_newInputSize;
};
class FlipCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(FlipCommand)
public:
explicit FlipCommand(const QList<GraphicElement *> &items, const int axis, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
QList<QPointF> m_positions;
QList<int> m_ids;
QPointF m_maxPos;
QPointF m_minPos;
Scene *m_scene;
int m_axis;
};
class ChangeOutputSizeCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(ChangeOutputSizeCommand)
public:
explicit ChangeOutputSizeCommand(const QList<GraphicElement *> &elements, const int newOutputSize, Scene *scene, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
QByteArray m_oldData;
QList<int> m_ids;
QList<int> m_order;
Scene *m_scene;
int m_newOutputSize;
};
class ToggleTruthTableOutputCommand : public QUndoCommand
{
Q_DECLARE_TR_FUNCTIONS(ToggleTruthTableOutputCommand)
public:
explicit ToggleTruthTableOutputCommand(GraphicElement *element, int pos, Scene *scene, ElementEditor *ElementEditor, QUndoCommand *parent = nullptr);
void redo() override;
void undo() override;
private:
ElementEditor *m_elementeditor;
Scene *m_scene;
int m_id;
int m_pos;
};
|