HAL
action_set_selection_focus.cpp
Go to the documentation of this file.
2 #include "gui/gui_globals.h"
3 
4 namespace hal
5 {
7  : UserActionFactory("SetSelectionFocus") {;}
8 
10 
12  {
13  return new ActionSetSelectionFocus;
14  }
15 
17  {
18  mProjectModified = false;
19  }
20 
22  {
24  }
25 
27  {
28  cryptoHash.addData((char*)(&mSubfocus),sizeof(mSubfocus));
29  cryptoHash.addData((char*)(&mSubfocusIndex),sizeof(mSubfocusIndex));
30  cryptoHash.addData("mod",3);
31  cryptoHash.addData(setToText(mModules).toUtf8());
32  cryptoHash.addData("gat",3);
33  cryptoHash.addData(setToText(mGates).toUtf8());
34  cryptoHash.addData("net",3);
35  cryptoHash.addData(setToText(mNets).toUtf8());
36  }
37 
39  {
40  switch (mSubfocus)
41  {
43  xmlOut.writeAttribute("subfocus","Left");
44  xmlOut.writeAttribute("subfocusIndex", QString::number(mSubfocusIndex));
45  break;
47  xmlOut.writeAttribute("subfocus","Right");
48  xmlOut.writeAttribute("subfocusIndex", QString::number(mSubfocusIndex));
49  break;
50  default:
51  break;
52  }
53 
54  if (!mModules.isEmpty()) xmlOut.writeTextElement("modules",setToText(mModules));
55  if (!mGates.isEmpty()) xmlOut.writeTextElement("gates",setToText(mGates));
56  if (!mNets.isEmpty()) xmlOut.writeTextElement("nets",setToText(mNets));
57  }
58 
60  {
61  QStringRef sfocAttribute = xmlIn.attributes().value("subfocus");
62  if (!sfocAttribute.isNull() && !sfocAttribute.isEmpty())
63  {
64  if (sfocAttribute == "Left")
65  {
67  mSubfocusIndex = xmlIn.attributes().value("subfocusIndex").toInt();
68  }
69  else if (sfocAttribute == "Right")
70  {
72  mSubfocusIndex = xmlIn.attributes().value("subfocusIndex").toInt();
73  }
74  }
75 
76  while (xmlIn.readNextStartElement())
77  {
78  if (xmlIn.name()=="modules")
79  mModules = setFromText(xmlIn.readElementText());
80  else if (xmlIn.name()=="gates")
81  mGates = setFromText(xmlIn.readElementText());
82  else if (xmlIn.name()=="nets")
83  mNets = setFromText(xmlIn.readElementText());
84  }
85  }
86 
88  {
89  if (gSelectionRelay->focusId() != mObject.id()) return true;
91  != mObject.type()) return true;
92  if (gSelectionRelay->subfocus() != mSubfocus) return true;
93  if (gSelectionRelay->subfocusIndex() != mSubfocusIndex) return true;
94  if (gSelectionRelay->selectedModules() != mModules) return true;
95  if (gSelectionRelay->selectedGates() != mGates) return true;
96  if (gSelectionRelay->selectedNets() != mNets) return true;
97  return false;
98  }
99 
101  {
103  if (obj.id() > 0)
104  switch (obj.type())
105  {
107  mModules.insert(obj.id());
108  break;
110  mGates.insert(obj.id());
111  break;
113  mNets.insert(obj.id());
114  break;
115  default:
116  break;
117  }
118  }
119 
121  {
123  undo->mModules = gSelectionRelay->selectedModules();
124  undo->mGates = gSelectionRelay->selectedGates();
125  undo->mNets = gSelectionRelay->selectedNets();
126  undo->mSubfocus = gSelectionRelay->subfocus();
127  undo->mSubfocusIndex = gSelectionRelay->subfocusIndex();
130  mUndoAction = undo;
131  gSelectionRelay->actionSetSelected(mModules, mGates, mNets);
133  mObject.id(),mSubfocus,mSubfocusIndex);
134  return UserAction::exec();
135  }
136 }
UserActionFactory for ActionSetSelectionFocus.
static ActionSetSelectionFocusFactory * sFactory
Set the selection and focus.
void writeToXml(QXmlStreamWriter &xmlOut) const override
void readFromXml(QXmlStreamReader &xmlIn) override
void addToHash(QCryptographicHash &cryptoHash) const override
void setObject(const UserActionObject &obj) override
ItemType focusType() const
const QSet< u32 > & selectedNets() const
const QSet< u32 > & selectedGates() const
void setFocusDirect(ItemType ftype, u32 fid, Subfocus sfoc=Subfocus::None, u32 sfinx=0)
const QSet< u32 > & selectedModules() const
Subfocus subfocus() const
u32 subfocusIndex() const
void actionSetSelected(const QSet< u32 > &mods, const QSet< u32 > &gats, const QSet< u32 > &nets)
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
The UserActionObject class represents a single object used in UserAction.
UserActionObjectType::ObjectType type() const
static SelectionRelay::ItemType toSelectionType(ObjectType t)
static ObjectType fromSelectionType(SelectionRelay::ItemType itp)
SelectionRelay * gSelectionRelay
Definition: plugin_gui.cpp:83
void addData(const char *data, int length)
QSet::iterator insert(const T &value)
bool isEmpty() const const
QString number(int n, int base)
bool isEmpty() const const
bool isNull() const const
int toInt(bool *ok, int base) const const
QStringRef value(const QString &namespaceUri, const QString &name) const const
QXmlStreamAttributes attributes() const const
QStringRef name() const const
QString readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour)
bool readNextStartElement()
void writeAttribute(const QString &qualifiedName, const QString &value)
void writeTextElement(const QString &qualifiedName, const QString &text)