HAL
module_context_menu.cpp
Go to the documentation of this file.
2 
3 #include "hal_core/defines.h"
4 #include "gui/gui_globals.h"
11 
12 #include <QApplication>
13 #include <QClipboard>
14 #include <QInputDialog>
15 
16 namespace hal {
18  {
19  QAction* act;
21 
22  contextMenu->addSeparator();
23  contextMenu->addAction("This module (ID:" + QString::number(id)+"):")->setDisabled(true);
24  QMenu *sm = contextMenu->addMenu(" To clipboard …");
25  sm->addAction("Module name",
26  [id, module]()
28  );
29  sm->addAction("Module ID",
30  [id]()
32  );
33  sm->addAction("Module type",
34  [id, module]()
36  );
37  sm->addAction(QIcon(":/icons/python"),
38  " Module as python code",
39  [id]()
41  );
42  sm = contextMenu->addMenu(" Change …");
43  sm->addAction("Module name",
44  [id]()
46  );
47  sm->addAction("Module type",
48  [id]()
50  );
51  sm->addAction("Module color",
52  [id]()
54  );
55  contextMenu->addAction(" Add child module",
56  [id]()
58  );
59  sm = contextMenu->addMenu(" To selection …");
60  sm->addAction("Set module as selection",
61  [id](){
64  assf->exec();
65  }
66  );
67  act = sm->addAction("Add module to selection",
68  [id](){
71  }
72  );
74  act->setEnabled(false);
75 
77  contextMenu->addAction(" Move to module …",
78  [id](){
80  }
81  );
82  sm = contextMenu->addMenu(" To grouping …");
83  QString actionText = " Assign module to grouping";
84  if(module->get_grouping() != nullptr)
85  actionText = " Reassign module to grouping";
86  sm->addAction(actionText,
87  [id]()
89  );
90 
91  act = sm->addAction(" Remove module from grouping",
92  [id]()
94  );
95  if(module->get_grouping() == nullptr)
96  act->setEnabled(false);
97 
98  contextMenu->addAction(" Focus module in Graph View",
99  [id]()
101  );
102  contextMenu->addAction(" Isolate module in new view",
103  [id]()
105  );
106  QAction* delAction = contextMenu->addAction(" Delete module",
107  [id]()
109  );
110  if(module == gNetlist->get_top_module())
111  delAction->setEnabled(false);
112  }
113 
115  {
116  QAction *act;
117  Gate* gate = gNetlist->get_gate_by_id(id);
118 
119  contextMenu->addSeparator();
120  contextMenu->addAction("This gate (ID:" + QString::number(id)+"):")->setDisabled(true);
121  QMenu *sm = contextMenu->addMenu(" To clipboard …");
122  sm->addAction("Gate name",
123  [id, gate]()
125  );
126  sm->addAction("Gate ID",
127  [id]()
129  );
130  sm->addAction("Gate type",
131  [id, gate]()
133  );
134  sm->addAction(QIcon(":/icons/python"),
135  " Gate as python code",
136  [id]()
138  );
139  contextMenu->addAction(" Change gate name",
140  [id]()
142  );
143  sm = contextMenu->addMenu(" To selection …");
144  sm->addAction(" Set gate as selection",
145  [id](){
148  assf->exec();
149  }
150  );
151  act = sm->addAction(" Add gate to selection",
152  [id](){
155  }
156  );
158  act->setEnabled(false);
159 
161  contextMenu->addAction(" Move to module …",
162  [id](){
164  }
165  );
166  sm = contextMenu->addMenu(" To grouping …");
167  QString actionText = " Assign gate to grouping";
168  if(gate->get_grouping() != nullptr)
169  actionText = " Reassign gate to grouping";
170  sm->addAction(actionText,
171  [id]()
173  );
174 
175  act = sm->addAction(" Remove gate from grouping",
176  [id]()
178  );
179  if(gate->get_grouping() == nullptr)
180  act->setEnabled(false);
181 
182  contextMenu->addAction(" Focus gate in Graph View",
183  [id]()
185  );
186  contextMenu->addAction(" Isolate gate in new view",
187  [id]()
189  );
190  }
191 
193  {
194  QAction* act;
195  Net* net = gNetlist->get_net_by_id(id);
196 
197  contextMenu->addSeparator();
198  contextMenu->addAction("This net (ID:" + QString::number(id)+"):")->setDisabled(true);
199  QMenu *sm = contextMenu->addMenu(" To clipboard …");
200  sm->addAction("Net name",
201  [id, net]()
203  );
204  sm->addAction("Net ID",
205  [id]()
207  );
208  sm->addAction(QIcon(":/icons/python"),
209  " Net as python code",
210  [id]()
212  );
213  contextMenu->addAction(" Change net name",
214  [id]()
216  );
217  sm = contextMenu->addMenu(" To selection …");
218  sm->addAction("Set net as selection",
219  [id]()
220  {
223  assf->exec();
224  }
225  );
226  act = sm->addAction("Add net to selection",
227  [id]()
228  {
229  gSelectionRelay->addNet(id);
231  }
232  );
234  act->setEnabled(false);
235 
236  sm = contextMenu->addMenu(" To grouping …");
237  QString actionText = " Assign net to grouping";
238  if(net->get_grouping() != nullptr)
239  actionText = " Reassign net to grouping";
240  sm->addAction(actionText,
241  [id]()
243  );
244 
245  act = sm->addAction(" Remove net from grouping",
246  [id]()
248  );
249  if(net->get_grouping() == nullptr)
250  act->setEnabled(false);
251 
252  contextMenu->addAction(" Focus net in Graph View",
253  [id]()
255  );
256  contextMenu->addAction(" Isolate net endpoints in new view",
257  [id]()
259  );
260  }
261 
262  void ModuleContextMenu::addMultipleElementsSubmenu(QMenu* contextMenu, const QSet<u32>& modules, const QSet<u32>& gates, const QSet<u32>& nets)
263  {
264  contextMenu->addSeparator();
265  contextMenu->addAction("Entire selection:")->setDisabled(true);
267  contextMenu->addAction(" Move to module …",
268  [](){
270  }
271  );
272 
273  contextMenu->addAction(" Assign all to grouping",
274  [modules, gates, nets]()
275  {gContentManager->getGroupingManagerWidget()->assignElementsToGroupingDialog(modules, gates, nets);}
276  );
277  contextMenu->addAction(" Remove all from grouping",
278  [modules, gates, nets]()
279  {gContentManager->getGroupingManagerWidget()->removeElementsFromGrouping(modules, gates, nets);}
280  );
281  }
282 }
Set the selection and focus.
void setObject(const UserActionObject &obj) override
GraphTabWidget * getGraphTabWidget()
Get hal's graph tab widget.
GroupingManagerWidget * getGroupingManagerWidget()
Definition: gate.h:58
GateType * get_type() const
Definition: gate.cpp:125
const std::string & get_name() const
Definition: gate.cpp:105
Grouping * get_grouping() const
Definition: gate.cpp:204
const std::string & get_name() const
Definition: gate_type.cpp:64
void openModuleInView(u32 moduleId, bool unfold)
void handleGateFocus(u32 gateId)
void handleNetFocus(u32 netId)
void handleModuleFocus(u32 moduleId)
void assignElementsToGroupingDialog(const QSet< u32 > &modules=QSet< u32 >(), const QSet< u32 > &gates=QSet< u32 >(), const QSet< u32 > &nets=QSet< u32 >())
void removeElementsFromGrouping(const QSet< u32 > &modules=QSet< u32 >(), const QSet< u32 > &gates=QSet< u32 >(), const QSet< u32 > &nets=QSet< u32 >())
static void addModuleSubmenu(QMenu *contextMenu, u32 id)
static void addMultipleElementsSubmenu(QMenu *contextMenu, const QSet< u32 > &modules=QSet< u32 >(), const QSet< u32 > &gates=QSet< u32 >(), const QSet< u32 > &nets=QSet< u32 >())
static void addGateSubmenu(QMenu *contextMenu, u32 id)
static void addNetSubmenu(QMenu *contextMenu, u32 id)
std::string get_name() const
Definition: module.cpp:87
Grouping * get_grouping() const
Definition: module.cpp:120
std::string get_type() const
Definition: module.cpp:106
Definition: net.h:58
Module * get_top_module() const
Definition: netlist.cpp:608
Gate * get_gate_by_id(const u32 gate_id) const
Definition: netlist.cpp:193
Module * get_module_by_id(u32 module_id) const
Definition: netlist.cpp:613
Net * get_net_by_id(u32 net_id) const
Definition: netlist.cpp:353
void addToModuleDialog(const Node &node=Node())
void addChildModuleDialog(const u32 id)
void deleteModule(const u32 id)
void changeModuleColorDialog(const u32 id)
void changeElementNameDialog(ModuleItem::TreeItemType type, u32 id)
void changeModuleTypeDialog(const u32 id)
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
static QString pyCodeModule(u32 moduleId)
static QString pyCodeNet(u32 netId)
static QString pyCodeGate(u32 gateId)
const QSet< u32 > & selectedNets() const
void relaySelectionChanged(void *sender)
const QSet< u32 > & selectedGates() const
const QSet< u32 > & selectedModules() const
int numberSelectedNodes() const
The UserActionObject class represents a single object used in UserAction.
const Module * module(const Gate *g, const NodeBoxes &boxes)
ContentManager * gContentManager
Definition: plugin_gui.cpp:78
GraphContextManager * gGraphContextManager
Definition: plugin_gui.cpp:85
SelectionRelay * gSelectionRelay
Definition: plugin_gui.cpp:83
Netlist * gNetlist
Definition: plugin_gui.cpp:80
NetlistRelay * gNetlistRelay
Definition: plugin_gui.cpp:81
quint32 u32
Net * net
i32 id
void setEnabled(bool)
void setDisabled(bool b)
void setText(const QString &text, QClipboard::Mode mode)
QClipboard * clipboard()
QAction * addAction(const QString &text)
QAction * addMenu(QMenu *menu)
QAction * addSeparator()
bool contains(const T &value) const const
QString fromStdString(const std::string &str)
QString number(int n, int base)