7 #include <QApplication>
11 #include <QMouseEvent>
17 mGateID(-1), mClearSelection(false)
28 mNavigationTable->
hide();
53 mGateID =
g->get_id();
81 if(
direction ==
"output" && !clickedNet->is_global_output_net())
83 mClearSelection =
true;
84 addSourceOurDestinationToSelection(netId,
false);
85 }
else if (
direction ==
"input" && !clickedNet->is_global_input_net())
87 mClearSelection =
true;
88 addSourceOurDestinationToSelection(netId,
true);
101 bool isMiscSectionSet =
false;
161 netIds = clickedItem->
netIds();
172 if(netIds.
size() != 0)
174 QString desc = (netIds.
size() == 1) ?
"Set net as current selection" :
"Set net(s) as current selection";
175 QString desc2 = (netIds.
size() == 1) ?
"Add net to current selection" :
"Add net(s) to current selection";
176 if(!isMiscSectionSet)
179 isMiscSectionSet =
true;
183 for(
const int id : netIds)
189 for(
const int id : netIds)
198 buildPythonMenuForPin(menu, clickedItem);
200 buildPythonMenuForPinGroup(menu, clickedItem);
207 void GatePinTree::buildPythonMenuForPin(
QMenu &menu,
PinTreeItem *clickedPinItem)
211 QString pythonCommandNetIds, pythonCommandName;
213 if(netIdsOfItem.
size() == 1)
218 else if(netIdsOfItem.
size() == 2)
224 menu.
addAction(
QIcon(
":/icons/python"),
"Extract net(s) as python code",
225 [pythonCommandNetIds]()
232 menu.
addAction(
QIcon(
":/icons/python"),
"Extract pin direction as python code",
233 [pythonCommandDirection]()
241 menu.
addAction(
QIcon(
":/icons/python"),
"Extract pin type as python code",
242 [pythonCommandType]()
249 void GatePinTree::buildPythonMenuForPinGroup(
QMenu &menu, PinTreeItem *clickedPinIGrouptem)
253 for(
auto childPin : clickedPinIGrouptem->getChildren())
255 pythonList = pythonList.
left(pythonList.
size()-2);
258 menu.
addAction(
QIcon(
":/icons/python"),
"Extract pingroup as python list",
265 BaseTreeItem* firstPinItemOfGroup = clickedPinIGrouptem->getChild(0);
266 if(firstPinItemOfGroup)
270 menu.
addAction(
QIcon(
":/icons/python"),
"Extract direction of pingroup as python code",
271 [pythonCommandGroupDirection]()
278 menu.
addAction(
QIcon(
":/icons/python"),
"Extract type of pingroup as python code",
279 [pythonCommandGroupType]()
286 void GatePinTree::addSourceOurDestinationToSelection(
int netId,
bool isInputPin)
291 auto sourcesOrDesti = isInputPin ?
net->get_sources() :
net->get_destinations();
292 if(sourcesOrDesti.empty() ||
net->is_global_input_net() ||
net->is_global_output_net())
296 else if (sourcesOrDesti.size() == 1)
300 auto ep = *sourcesOrDesti.begin();
302 auto pins = isInputPin ? ep->get_gate()->get_type()->get_output_pins() : ep->get_gate()->get_type()->get_input_pins();
303 auto index = std::distance(
pins.begin(), std::find(
pins.begin(),
pins.end(), ep->get_pin()));
310 if(mNavigationTable->
isEmpty())
315 mNavigationTable->
show();
322 void GatePinTree::handleNavigationCloseRequested()
324 mNavigationTable->
hide();
327 void GatePinTree::handleNavigationJumpRequested(
const Node &origin,
const u32 via_net,
const QSet<u32> &to_gates,
const QSet<u32> &to_modules)
332 mNavigationTable->
hide();
337 for(
u32 id : to_gates)
343 for(
u32 id : to_gates)
346 if(to_gates.size()==1)
351 auto pins = isNavDirLeft ?
g->get_type()->get_output_pins() :
g->get_type()->get_input_pins();
354 if(isNavDirLeft ?
g->get_fan_out_net(pin) ==
n :
g->get_fan_in_net(pin) ==
n)
virtual QList< BaseTreeItem * > getChildren() const
BaseTreeItem * getItemFromIndex(QModelIndex index) const
virtual void mouseDoubleClickEvent(QMouseEvent *event) override
void updateText(const QString &newHeadline)
void handleContextMenuRequested(const QPoint &pos)
GatePinTree(QWidget *parent=nullptr)
A model to display the pins of a gate.
static const int sTypeColumn
int getNumberOfDisplayedPins()
static const int sDirectionColumn
static const int sNameColumn
Gate * get_gate_by_id(const u32 gate_id) const
Net * get_net_by_id(u32 net_id) const
QVariant getData(int column) const override
QList< u32 > netIds() const
static QString pyCodeGateTypePinDirection(u32 gateId, QString pin)
static QString pyCodeGateTypePinType(u32 gateId, QString pin)
static QString pyCodeNet(u32 netId)
static QString pyCodeNetName(u32 netId)
void setFocus(ItemType ftype, u32 fid, Subfocus sfoc=Subfocus::None, u32 sfinx=0)
void relaySelectionChanged(void *sender)
SelectionRelay * gSelectionRelay
std::vector< PinInformation > pins
virtual bool event(QEvent *event) override
void setSelectionMode(QAbstractItemView::SelectionMode mode)
void setText(const QString &text, QClipboard::Mode mode)
void append(const T &value)
const T & at(int i) const const
bool isValid() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool isEmpty() const const
QString left(int n) const const
virtual QModelIndex indexAt(const QPoint &point) const const override
virtual void mouseDoubleClickEvent(QMouseEvent *event) override
virtual void setModel(QAbstractItemModel *model) override
QString toString() const const