13 #include <QVBoxLayout>
21 Q_ASSERT(mNavigationWidget);
74 Q_ASSERT(mNavigationWidget);
112 for (
int ichild = 0; ichild < item->
childCount(); ichild++)
113 retval.
append(selectedItemRecursion(item->
child(ichild)));
121 for (
int i = 0; i <
n; i++)
126 const int GraphNavigationWidget::sDefaultColumnWidth[] = {250, 50, 100, 80, 250};
129 :
QWidget(parent), mOnlyNavigate(onlyNavigate), mNavigateVisible(false), mAddToViewVisible(false), mViaNet(nullptr), mDirection(
SelectionRelay::Subfocus::None)
132 headerLabels <<
"Name"
158 mTabs->
addTab(mNavigateWidget,
"Navigate to …");
178 mTabs->
addTab(mAddToViewWidget,
"Add to view …");
199 void GraphNavigationWidget::viaNetByNode()
226 QStringList GraphNavigationWidget::moduleEntry(Module* m, Endpoint* ep)
228 Module* pm = m->get_parent_module();
234 mtype +=
" (module)";
237 Net* epNet = ep->get_net();
240 if (
const auto pin = m->get_pin_by_net(epNet); pin !=
nullptr)
248 QStringList GraphNavigationWidget::gateEntry(Gate*
g, Endpoint* ep)
257 for (
int i = 0; i < fields.
size(); i++)
264 mAddToViewNodes.insert(retval, nd);
268 bool GraphNavigationWidget::addToViewItem(Endpoint* ep)
270 Gate*
g = ep->get_gate();
278 while (pm && !mModulesInView.contains(pm))
280 auto itMod = mListedModules.find(pm);
281 if (itMod != mListedModules.end())
284 itMod.value()->addChild(item);
287 fields = moduleEntry(pm, ep);
290 mListedModules.insert(pm, parentItem);
292 pm = pm->get_parent_module();
298 void GraphNavigationWidget::addNavigateItem(Endpoint* ep,
const Node& targetNode)
300 Gate*
g = ep->get_gate();
305 switch (targetNode.type())
310 fields = gateEntry(
g, ep);
315 fields = moduleEntry(m, ep);
320 mNavigateNodes.append(targetNode);
322 for (
int icol = 0; icol < fields.
size(); icol++)
329 mNavigateWidget->
setItem(
n, icol, cell);
371 void GraphNavigationWidget::setModulesInView()
377 switch (nbox->
type())
387 setModuleInView(
g->get_module());
397 return mNavigateVisible && mAddToViewVisible;
424 return !mNavigateVisible && !mAddToViewVisible;
427 void GraphNavigationWidget::setModuleInView(
Module* m)
431 mModulesInView.insert(m);
433 setModuleInView(parentModule);
436 void GraphNavigationWidget::fillTable()
440 mNavigateNodes.clear();
441 mAddToViewWidget->
clear();
442 mAddToViewNodes.clear();
443 mModulesInView.clear();
444 mEndpointNotInView.clear();
445 mListedModules.clear();
450 mNavigateVisible =
false;
456 Gate*
g = ep->get_gate();
461 const NodeBox* nbox = boxes.boxForGate(
g);
464 Node targetNode = nbox->
getNode();
465 if (targetNode == mOrigin)
468 if (listedTargets.
contains(targetNode))
471 listedTargets.
insert(targetNode);
472 addNavigateItem(ep, targetNode);
473 mNavigateVisible =
true;
476 mEndpointNotInView.append(ep);
479 if (mNavigateVisible)
492 mAddToViewVisible =
false;
493 if (!mEndpointNotInView.isEmpty() && !mOnlyNavigate)
495 for (Endpoint* ep : mEndpointNotInView)
497 if (addToViewItem(ep))
498 mAddToViewVisible =
true;
502 if (mAddToViewVisible)
508 if (!mNavigateVisible)
521 void GraphNavigationWidget::resizeToFit()
523 if (mNavigateVisible)
528 for (
int i = 0; i < mNavigateWidget->
columnCount(); i++)
531 width += sDefaultColumnWidth[i];
535 for (
int i = 0; i < mNavigateWidget->
rowCount(); i++)
544 if (mAddToViewVisible)
547 for (
int i = 0; i < mAddToViewWidget->
columnCount(); i++)
550 width += sDefaultColumnWidth[i];
570 if (mNavigateVisible)
575 else if (mAddToViewVisible)
582 void GraphNavigationWidget::handleNavigateSelected(
int irow,
int icol)
587 const Node& nd = mNavigateNodes.at(irow);
602 void GraphNavigationWidget::handleAddToViewSelected(
QTreeWidgetItem* item,
int icol)
611 Node nd = mAddToViewNodes.value(selItem);
615 addModules.
insert(nd.id());
ContextManagerWidget * getContextManagerWidget()
GraphContext * getCurrentContext()
GraphLayouter * getLayouter() const
const NodeBoxes & boxes() const
QList< u32 > inputNets() const
QList< u32 > outputNets() const
Module * get_parent_module() const
std::vector< Endpoint * > get_destinations(const std::function< bool(Endpoint *ep)> &filter=nullptr) const
std::vector< Endpoint * > get_sources(const std::function< bool(Endpoint *ep)> &filter=nullptr) const
Gate * get_gate_by_id(const u32 gate_id) const
Module * get_module_by_id(u32 module_id) const
Net * get_net_by_id(u32 net_id) const
The NodeBox class represents a node placed at a grid position within a hal view.
GraphicsNode * item() const
item getter for graphics item object
Node getNode() const
getNode getter for node information
Node::NodeType type() const
type getter for type information
u32 id() const
id getter for ID information
The NodeBoxes class owns all NodeBox'es from hal view.
NodeBox * boxForNode(const Node &n) const
boxForNode find NodeBox by node
The Node class object represents a module or a gate.
NodeType type() const
type getter for type information
bool isNull() const
isNull test for null-Node object typically returned from functions
u32 id() const
id getter for ID information
Stores and manages the gui's selection state.
ItemType focusType() const
u32 subfocusIndex() const
ContentManager * gContentManager
SelectionRelay * gSelectionRelay
virtual void focusInEvent(QFocusEvent *event) override
virtual void keyPressEvent(QKeyEvent *event) override
void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
void setSelectionMode(QAbstractItemView::SelectionMode mode)
void setCurrentIndex(const QModelIndex &index)
QEvent::Type type() const const
void append(const T &value)
const T & at(int i) const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool contains(const T &value) const const
QSet::iterator insert(const T &value)
QString fromStdString(const std::string &str)
bool isEmpty() const const
QString number(int n, int base)
void resizeColumnsToContents()
void setColumnWidth(int column, int width)
void setShowGrid(bool show)
void setTextAlignment(int alignment)
virtual void keyPressEvent(QKeyEvent *event) override
void setColumnWidth(int column, int width)
void setTextAlignment(int column, int alignment)