HAL
net_module_table.cpp
Go to the documentation of this file.
2 
4 
6 #include "gui/gui_globals.h"
10 
11 #include <QHeaderView>
12 #include <QClipboard>
13 #include <QApplication>
14 #include <QMenu>
15 
16 namespace hal
17 {
18 
19  NetModuleTable::NetModuleTable(ModuleTableModel* model, QWidget* parent) : QTableView(parent), mModuleTableModel(model)
20  {
28  verticalHeader()->hide();
29  setModel(mModuleTableModel);
30 
32 
33  //connections
35 
36  }
37 
39  {
40  Net* n = gNetlist->get_net_by_id(netID);
41 
42  setNet(n);
43  }
44 
46  {
47  if (!n)
48  return;
49 
50  mModuleTableModel->setNet(n);
51 
52  QModelIndex unused;
53 
54  fitSizeToContent();
55 
56  Q_EMIT updateText("Modules (" + QString::number(mModuleTableModel->rowCount(unused)) + ")");
57  }
58 
60  {
61  mModuleTableModel->clear();
62  }
63 
65  {
66  QModelIndex idx = indexAt(pos);
67  if(!idx.isValid())
68  return;
69 
70  u32 moduleID = mModuleTableModel->getModuleIDFromIndex(idx);
71  u32 pinID = mModuleTableModel->getPinIDFromIndex(idx);
72  QString pinName = mModuleTableModel->getPortNameFromIndex(idx);
73 
74  QMenu menu;
75 
76  menu.addAction("Pin name to clipboard", [pinName](){
77  QApplication::clipboard()->setText(pinName);
78  });
79  menu.addAction(QIcon(":/icons/python"), "Extract endpoint as python code (copy to clipboard)",
80  [moduleID, pinID]()
82  );
83 
84  ModuleContextMenu::addModuleSubmenu(&menu, moduleID);
85 
87  std::vector<u32>({moduleID}), {}, {});
88 
89  menu.exec(this->viewport()->mapToGlobal(pos));
90  }
91 
92  void NetModuleTable::fitSizeToContent()
93  {
97 
98  int rows = mModuleTableModel->rowCount();
99  int columns = mModuleTableModel->columnCount();
100 
101  int w = 0;
102  int h = 0;
103 
104  //necessary to test if the table is empty, otherwise (due to the resizeColumnsToContents function)
105  //is the table's width far too big, so just set 0 as the size
106  if(rows != 0)
107  {
108  w = verticalHeader()->width() + 4; // +4 seems to be needed
109  for (int i = 0; i < columns; i++)
110  w += columnWidth(i); // seems to include gridline
111 
112  h = horizontalHeader()->height() + 4;
113  for (int i = 0; i < rows; i++)
114  h += rowHeight(i);
115 
116  w = w + 5; //no contemporary source exists why 5 is the magic number here (my guess would be it's the width of the hidden scrollbar)
117  }
118  setFixedHeight(h);
119  setMinimumWidth(w);
121  update();
122  updateGeometry();
123  }
124 
125 }
static void addPluginSubmenus(QMenu *contextMenu, Netlist *netlist, const std::vector< u32 > &modules, const std::vector< u32 > &gates, const std::vector< u32 > &nets)
static void addModuleSubmenu(QMenu *contextMenu, u32 id)
A model to display module data.
u32 getPinIDFromIndex(const QModelIndex &index)
int columnCount(const QModelIndex &parent=QModelIndex()) const override
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QString getPortNameFromIndex(const QModelIndex &index)
u32 getModuleIDFromIndex(const QModelIndex &index)
Definition: net.h:58
NetModuleTable(ModuleTableModel *model, QWidget *parent=nullptr)
void setNet(u32 netID)
void handleContextMenuRequested(const QPoint &pos)
void updateText(const QString &text)
Net * get_net_by_id(u32 net_id) const
Definition: netlist.cpp:353
static QString pyCodeModulePinById(u32 moduleId, u32 pinId)
Netlist * gNetlist
Definition: plugin_gui.cpp:80
n
Definition: test.py:6
quint32 u32
void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
void setSelectionMode(QAbstractItemView::SelectionMode mode)
void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy)
void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy)
QWidget * viewport() const const
void setText(const QString &text, QClipboard::Mode mode)
QClipboard * clipboard()
void setStretchLastSection(bool stretch)
QAction * addAction(const QString &text)
QAction * exec()
bool isValid() const const
Q_EMITQ_EMIT
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString number(int n, int base)
CustomContextMenu
ScrollBarAlwaysOff
int columnWidth(int column) const const
QHeaderView * horizontalHeader() const const
virtual QModelIndex indexAt(const QPoint &pos) const const override
void resizeColumnsToContents()
void resizeRowsToContents()
int rowHeight(int row) const const
virtual void setModel(QAbstractItemModel *model) override
QHeaderView * verticalHeader() const const
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
void customContextMenuRequested(const QPoint &pos)
void setFocusPolicy(Qt::FocusPolicy policy)
void hide()
QPoint mapToGlobal(const QPoint &pos) const const
void setMinimumWidth(int minw)
void setFixedHeight(int h)
void setSizePolicy(QSizePolicy)
void update()
void updateGeometry()