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();
163 menu.
addAction(
"Set focus to pin", [
this, clickedItem]() {
166 ?
g->get_type()->get_input_pins() :
g->get_type()->get_output_pins();
172 if (clickedItem->
pinName() == pin->get_name())
190 if(netIds.
size() != 0)
192 QString desc = (netIds.
size() == 1) ?
"Set net as current selection" :
"Set net(s) as current selection";
193 QString desc2 = (netIds.
size() == 1) ?
"Add net to current selection" :
"Add net(s) to current selection";
194 if(!isMiscSectionSet)
197 isMiscSectionSet =
true;
201 for(
const int id : netIds)
207 for(
const int id : netIds)
216 buildPythonMenuForPin(menu, clickedItem);
218 buildPythonMenuForPinGroup(menu, clickedItem);
229 QString pythonCommandNetIds, pythonCommandName;
231 if(netIdsOfItem.
size() == 1)
236 else if(netIdsOfItem.
size() == 2)
242 menu.
addAction(
QIcon(
":/icons/python"),
"Extract net(s) as python code",
243 [pythonCommandNetIds]()
250 menu.
addAction(
QIcon(
":/icons/python"),
"Extract pin direction as python code",
251 [pythonCommandDirection]()
259 menu.
addAction(
QIcon(
":/icons/python"),
"Extract pin type as python code",
260 [pythonCommandType]()
267 void GatePinTree::buildPythonMenuForPinGroup(
QMenu &menu, GatePinsTreeItem *clickedPinIGrouptem)
271 for(
auto childPin : clickedPinIGrouptem->getChildren())
273 pythonList = pythonList.
left(pythonList.
size()-2);
276 menu.
addAction(
QIcon(
":/icons/python"),
"Extract pingroup as python list",
283 BaseTreeItem* firstPinItemOfGroup = clickedPinIGrouptem->getChild(0);
284 if(firstPinItemOfGroup)
288 menu.
addAction(
QIcon(
":/icons/python"),
"Extract direction of pingroup as python code",
289 [pythonCommandGroupDirection]()
296 menu.
addAction(
QIcon(
":/icons/python"),
"Extract type of pingroup as python code",
297 [pythonCommandGroupType]()
304 void GatePinTree::addSourceOurDestinationToSelection(
int netId,
bool isInputPin)
309 auto sourcesOrDesti = isInputPin ?
net->get_sources() :
net->get_destinations();
310 if(sourcesOrDesti.empty() ||
net->is_global_input_net() ||
net->is_global_output_net())
314 else if (sourcesOrDesti.size() == 1)
318 auto ep = *sourcesOrDesti.begin();
320 auto pins = isInputPin ? ep->get_gate()->get_type()->get_output_pins() : ep->get_gate()->get_type()->get_input_pins();
321 auto index = std::distance(
pins.begin(), std::find(
pins.begin(),
pins.end(), ep->get_pin()));
328 if(mNavigationTable->
isEmpty())
333 mNavigationTable->
show();
340 void GatePinTree::handleNavigationCloseRequested()
342 mNavigationTable->
hide();
345 void GatePinTree::handleNavigationJumpRequested(
const Node &origin,
const u32 via_net,
const QSet<u32> &to_gates,
const QSet<u32> &to_modules)
350 mNavigationTable->
hide();
355 for(
u32 id : to_gates)
361 for(
u32 id : to_gates)
364 if(to_gates.size()==1)
369 auto pins = isNavDirLeft ?
g->get_type()->get_output_pins() :
g->get_type()->get_input_pins();
372 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)
std::string pinName() const
QVariant getData(int column) const override
PinDirection direction() const
QList< u32 > netIds() const
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
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