HAL
action_remove_items_from_object.cpp
Go to the documentation of this file.
2 
4 #include "gui/gui_globals.h"
9 
10 namespace hal
11 {
13  {
14  ;
15  }
16 
18 
20  {
21  return new ActionRemoveItemsFromObject;
22  }
23 
25  {
27  }
28 
30  {
31  cryptoHash.addData("mod", 3);
32  cryptoHash.addData(setToText(mModules).toUtf8());
33  cryptoHash.addData("gat", 3);
34  cryptoHash.addData(setToText(mGates).toUtf8());
35  cryptoHash.addData("net", 3);
36  cryptoHash.addData(setToText(mNets).toUtf8());
37  cryptoHash.addData("pin", 3);
38  cryptoHash.addData(setToText(mPins).toUtf8());
39  }
40 
42  {
43  if (!mModules.isEmpty())
44  xmlOut.writeTextElement("modules", setToText(mModules));
45  if (!mGates.isEmpty())
46  xmlOut.writeTextElement("gates", setToText(mGates));
47  if (!mNets.isEmpty())
48  xmlOut.writeTextElement("nets", setToText(mNets));
49  if (!mPins.isEmpty())
50  xmlOut.writeTextElement("pins", setToText(mPins));
51  }
52 
54  {
55  while (xmlIn.readNextStartElement())
56  {
57  if (xmlIn.name() == "modules")
58  mModules = setFromText(xmlIn.readElementText());
59  else if (xmlIn.name() == "gates")
60  mGates = setFromText(xmlIn.readElementText());
61  else if (xmlIn.name() == "nets")
62  mNets = setFromText(xmlIn.readElementText());
63  else if (xmlIn.name() == "pins")
64  mPins = setFromText(xmlIn.readElementText());
65  }
66  }
67 
69  {
70  mUndoAction = nullptr;
71  GraphContext* ctx;
72  Grouping* grp;
73  switch (mObject.type())
74  {
77  if (ctx)
78  {
79  ActionAddItemsToObject* undo = new ActionAddItemsToObject(mModules, mGates, mNets);
80  undo->setObject(mObject);
82  for (u32 id : mModules)
83  {
84  Node nd(id, Node::Module);
86  if (!p.isUndefined()) plc.addGridPosition(nd, p);
87  }
88  for (u32 id : mGates)
89  {
90  Node nd(id, Node::Gate);
92  if (!p.isUndefined()) plc.addGridPosition(nd, p);
93  }
94  undo->setPlacementHint(plc);
95  mUndoAction = undo;
96  ctx->beginChange();
97  ctx->remove(mModules, mGates);
98  ctx->endChange();
99  }
100  else
101  return false;
102  break;
105  if (grp)
106  {
107  for (u32 id : mModules)
108  grp->remove_module_by_id(id);
109  for (u32 id : mGates)
110  grp->remove_gate_by_id(id);
111  for (u32 id : mNets)
112  grp->remove_net_by_id(id);
113  }
114  else
115  return false;
116  break;
117  default:
118  return false;
119  }
120 
121  if (!mUndoAction)
122  {
123  mUndoAction = new ActionAddItemsToObject(mModules, mGates, mNets, mPins);
125  }
126  return UserAction::exec();
127  }
128 } // namespace hal
Adds an item to a module or grouping.
void setPlacementHint(PlacementHint hint)
UserActionFactory for ActionRemoveItemsFromObject.
static ActionRemoveItemsFromObjectFactory * sFactory
Removes an item from a Module or Grouping.
void addToHash(QCryptographicHash &cryptoHash) const override
void writeToXml(QXmlStreamWriter &xmlOut) const override
void readFromXml(QXmlStreamReader &xmlIn) override
Logical container for modules, gates, and nets.
Definition: graph_context.h:55
void remove(const QSet< u32 > &modules, const QSet< u32 > &gates)
GraphLayouter * getLayouter() const
GraphContext * getContextById(u32 id) const
NetLayoutPoint positonForNode(const Node &nd) const
bool remove_gate_by_id(const u32 gate_id)
Definition: grouping.cpp:130
bool remove_module_by_id(const u32 module_id)
Definition: grouping.cpp:304
bool remove_net_by_id(const u32 net_id)
Definition: grouping.cpp:217
bool isUndefined() const
Grouping * get_grouping_by_id(u32 grouping_id) const
Definition: netlist.cpp:691
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
The PlacementHint class object provides hints for the layouter how new box objects are placed on a vi...
Definition: gui_def.h:196
void addGridPosition(const Node &nd, const QPoint &p)
Definition: gui_def.h:263
The UserActionFactory is the abstract base class for registration.
Definition: user_action.h:225
QString tagname() const
Definition: user_action.h:242
The UserAction class is the abstract base class for user interactions.
Definition: user_action.h:57
UserAction * mUndoAction
Definition: user_action.h:186
static QString setToText(const QSet< u32 > &set)
Definition: user_action.cpp:50
virtual bool exec()
Definition: user_action.cpp:23
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
UserActionObjectType::ObjectType type() const
GraphContextManager * gGraphContextManager
Definition: plugin_gui.cpp:85
Netlist * gNetlist
Definition: plugin_gui.cpp:80
quint32 u32
void addData(const char *data, int length)
bool isEmpty() const const
QStringRef name() const const
QString readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour)
bool readNextStartElement()
void writeTextElement(const QString &qualifiedName, const QString &text)