HAL
user_action.cpp
Go to the documentation of this file.
2 #include "gui/gui_globals.h"
3 
4 namespace hal
5 {
7  : mTagname(nam)
8  {
10  }
11 
13  : mCompoundOrder(-1), mUndoAction(nullptr),
14  mTimeStamp(0), mObjectLock(false),
15  mProjectModified(true)
16  {;}
17 
19  {
20  if (mUndoAction) delete mUndoAction;
21  }
22 
24  {
26  mTimeStamp = uam->timeStamp();
27  uam->addExecutedAction(this);
29  return true;
30  }
31 
33  {
34  if (mObjectLock) return;
35  mObject = obj;
36  }
37 
39  {
41  cryptoHash.addData((char*) (&recordNo), sizeof(int));
42  cryptoHash.addData(tagname().toUtf8());
43  cryptoHash.addData((char*) (&mObject), sizeof(mObject));
44  cryptoHash.addData((char*) (&mParentObject), sizeof (mParentObject));
45  cryptoHash.addData((char*) (&mTimeStamp), sizeof(mTimeStamp));
46  addToHash(cryptoHash);
47  return QString::fromUtf8(cryptoHash.result().toHex(0));
48  }
49 
51  {
52  QString retval;
53  for (u32 id : set)
54  {
55  if (!retval.isEmpty()) retval += ',';
56  retval += QString::number(id);
57  }
58  return retval;
59  }
60 
62  {
63  QSet<u32> retval;
64  for (QString x : s.split(QChar(',')))
65  retval.insert(x.toInt());
66  return retval;
67  }
68 
70  {
71  QString retval;
72  for (auto it = grid.constBegin(); it!= grid.constEnd(); ++it)
73  {
74  if (!retval.isEmpty()) retval += ',';
75  retval += QString("%1%2:%3:%4")
76  .arg(it.key().type()==hal::Node::Module?'M':'G')
77  .arg(it.key().id())
78  .arg(it.value().x())
79  .arg(it.value().y());
80  }
81  return retval;
82  }
83 
85  {
87  for (QString s : txt.split(','))
88  {
89  if (s.isEmpty()) continue;
91  switch (s.at(0).unicode())
92  {
93  case 'M':
94  tp = hal::Node::Module;
95  break;
96  case 'G':
97  tp = hal::Node::Gate;
98  break;
99  default:
100  continue;
101  }
102  QStringList num = s.mid(1).split(':');
103  if (num.size() != 3) continue;
104  retval.insert(hal::Node(num.at(0).toUInt(),tp),QPoint(num.at(1).toInt(),num.at(2).toInt()));
105  }
106  return retval;
107  }
108 
110  {
112  {
113  xmlOut.writeStartElement("parentObj");
114  mParentObject.writeToXml(xmlOut);
115  xmlOut.writeEndElement();
116  }
117  }
118 
120  {
121  if(xmlIn.name() == "parentObj")
122  {
123  mParentObject.readFromXml(xmlIn);
124  xmlIn.readNext();//to read the corresponding EndElement
125  }
126  }
127 
129  {
130  Q_UNUSED(xmlOut);
131  }
132 
134  {
135  Q_UNUSED(xmlIn);
136  }
137 
139  {
140  Q_UNUSED(cryptoHash);
141  }
142 
144  {
145  QString retval = " ";
146  if (mCompoundOrder >= 0) retval = QString("%1 ").arg((char)('0' + mCompoundOrder%10));
147  retval += QString("%1 %2\n").arg(tagname(),-22).arg(mObject.debugDump());
148  return retval;
149  }
150 }
The Node class object represents a module or a gate.
Definition: gui_def.h:61
@ Module
Definition: gui_def.h:63
@ Gate
Definition: gui_def.h:63
@ None
Definition: gui_def.h:63
UserActionFactory(const QString &nam)
Definition: user_action.cpp:6
virtual QString tagname() const =0
virtual ~UserAction()
Definition: user_action.cpp:18
void readParentObjectFromXml(QXmlStreamReader &xmlIn)
void writeParentObjectToXml(QXmlStreamWriter &xmlOut) const
static QString gridToText(const QHash< hal::Node, QPoint > &grid)
Definition: user_action.cpp:69
QString debugDump() const
virtual void addToHash(QCryptographicHash &cryptoHash) const
UserActionObject mParentObject
Definition: user_action.h:184
UserAction * mUndoAction
Definition: user_action.h:186
static QString setToText(const QSet< u32 > &set)
Definition: user_action.cpp:50
static QHash< hal::Node, QPoint > gridFromText(const QString &txt)
Definition: user_action.cpp:84
virtual bool exec()
Definition: user_action.cpp:23
QString cryptographicHash(int recordNo) const
Definition: user_action.cpp:38
static QSet< u32 > setFromText(const QString &s)
Definition: user_action.cpp:61
virtual void setObject(const UserActionObject &obj)
Definition: user_action.cpp:32
UserActionObject mObject
Definition: user_action.h:183
virtual void readFromXml(QXmlStreamReader &xmlIn)
bool hasProjectModified() const
Definition: user_action.h:179
virtual void writeToXml(QXmlStreamWriter &xmlOut) const
Handles and manages user actions related proccesses.
void addExecutedAction(UserAction *act)
void registerFactory(UserActionFactory *fac)
static UserActionManager * instance()
The UserActionObject class represents a single object used in UserAction.
void readFromXml(QXmlStreamReader &xmlIn)
void writeToXml(QXmlStreamWriter &xmlOut) const
UserActionObjectType::ObjectType type() const
FileStatusManager * gFileStatusManager
Definition: plugin_gui.cpp:84
quint32 u32
include set(SRCROOT ${CMAKE_CURRENT_SOURCE_DIR}/src) set(UIROOT $
Definition: CMakeLists.txt:45
QByteArray toHex() const const
void addData(const char *data, int length)
QByteArray result() const const
QHash::const_iterator constBegin() const const
QHash::const_iterator constEnd() const const
QHash::iterator insert(const Key &key, const T &value)
const T & at(int i) const const
QList< T > mid(int pos, int length) const const
int size() const const
QSet::iterator insert(const T &value)
QStringList split(const QString &sep, QString::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString fromUtf8(const char *str, int size)
bool isEmpty() const const
QString number(int n, int base)
QStringRef name() const const
QXmlStreamReader::TokenType readNext()
void writeEndElement()
void writeStartElement(const QString &qualifiedName)