HAL  v4.5.0-83-g30c8f0afc
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
wave_selection_dialog.cpp
Go to the documentation of this file.
2 #include <QTableView>
3 #include <QGridLayout>
4 #include <QDialogButtonBox>
5 #include <QPushButton>
6 #include <QIcon>
7 #include <QPixmap>
8 #include <QPainter>
9 #include <QHeaderView>
10 #include <QSortFilterProxyModel>
11 #include "gui/gui_globals.h"
12 
13 namespace hal {
14 
16  : QDialog(parent)
17  {
18  QGridLayout* layout = new QGridLayout(this);
19  mButAll = new QPushButton("All waveform items", this);
20  layout->addWidget(mButAll,0,0);
21  mButSel = new QPushButton("Current GUI selection", this);
22  connect(mButSel,&QPushButton::clicked,this,&WaveSelectionDialog::handleCurrentGuiSelection);
23  layout->addWidget(mButSel,0,1);
24  mButNone = new QPushButton("Clear selection", this);
25  layout->addWidget(mButNone,0,2);
26 
27  mTableView = new QTableView(this);
28  mProxyModel = new QSortFilterProxyModel(this);
29  mWaveModel = new WaveSelectionTable(mTableView);
30  mWaveModel->setEntryMap(wseMap);
31  mProxyModel->setSourceModel(mWaveModel);
32  mTableView->setModel(mProxyModel);
33  mTableView->setSortingEnabled(true);
36  QHeaderView* hv = mTableView->horizontalHeader();
40  mTableView->setColumnWidth(0,36);
41  mTableView->setColumnWidth(1,256);
42  mTableView->setColumnWidth(2,36);
43  layout->addWidget(mTableView,1,0,1,3);
49  layout->addWidget(dbb,2,1);
50  setWindowTitle("Add Waveform Net");
51  }
52 
53  void WaveSelectionDialog::handleCurrentGuiSelection()
54  {
55  QSet<u32> guiNetSel = gSelectionRelay->selectedNets();
56 
57  const QAbstractItemModel* modl = mTableView->model(); // proxy model
58  int nrows = modl->rowCount();
59  mTableView->clearSelection();
60 
61  bool ok;
62 
63  int n = mTableView->model()->columnCount();
64  for (int irow = 0; irow<nrows; irow++)
65  {
66  u32 gid = modl->data(modl->index(irow,0)).toUInt(&ok);
67  if (!ok) continue;
68  if (guiNetSel.contains(gid))
69  {
70  for (int i=0; i<n; i++)
71  {
72  QModelIndex inx = mTableView->model()->index(irow,i);
74  }
75  }
76  }
77  }
78 
80  {
81  QList<QModelIndex> selIndexList;
82  for (QModelIndex proxyInx : mTableView->selectionModel()->selectedIndexes())
83  {
84  selIndexList.append(mProxyModel->mapToSource(proxyInx));
85  }
86  return mWaveModel->entryMap(selIndexList);
87  }
88 
89  //-------------------------------------------
90 
92  : QAbstractTableModel(parent)
93  {;}
94 
95  int WaveSelectionTable::rowCount(const QModelIndex &parent) const
96  {
97  Q_UNUSED(parent);
98  return mWaveSelectionEntries.size();
99  }
100 
102  {
103  Q_UNUSED(parent);
104  return 3;
105  }
106 
108  {
109  if (role != Qt::DisplayRole) return QVariant();
110  if (index.row() >= mWaveSelectionEntries.size()) return QVariant();
111  const WaveSelectionEntry& wse = mWaveSelectionEntries.at(index.row()).first;
112  switch (index.column())
113  {
114  case 0: return wse.id();
115  case 1: return wse.name();
116  case 2: return QVariant((qulonglong)wse.size());
117  }
118  return QVariant();
119  }
120 
121  QVariant WaveSelectionTable::headerData(int section, Qt::Orientation orientation, int role) const
122  {
123  if (orientation != Qt::Horizontal || role != Qt::DisplayRole)
124  return QAbstractTableModel::headerData(section, orientation, role);
125  switch (section)
126  {
127  case 0: return "ID";
128  case 1: return "Name";
129  case 2: return "Events";
130  }
131  return QVariant();
132  }
133 
135  {
136  Q_UNUSED(index);
138  }
139 
141  {
143  for (const QModelIndex& inx : indexes)
144  {
145  int irow = inx.row();
146  if (irow >= mWaveSelectionEntries.size()) continue;
147  const QPair<WaveSelectionEntry,int>& pair = mWaveSelectionEntries.at(irow);
148  retval.insert(pair.first,pair.second);
149  }
150  return retval;
151  }
152 
154  {
155  beginResetModel();
156  mWaveSelectionEntries.clear();
157  for (auto it = entries.constBegin(); it != entries.constEnd(); ++it)
158  mWaveSelectionEntries.append(QPair(it.key(),it.value()));
159  endResetModel();
160  }
161 
162  uint qHash(const WaveSelectionEntry& wse) { return qHash(wse.name()); }
163 
164 }
const QSet< u32 > & selectedNets() const
QMap< WaveSelectionEntry, int > selectedWaves() const
WaveSelectionDialog(const QMap< WaveSelectionEntry, int > &wseMap, QWidget *parent=nullptr)
QString name() const
u64 size() const
u32 id() const
WaveSelectionTable(QObject *parent=nullptr)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QMap< WaveSelectionEntry, int > entryMap(const QList< QModelIndex > &indexes) const
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
void setEntryMap(const QMap< WaveSelectionEntry, int > &entries)
int columnCount(const QModelIndex &parent=QModelIndex()) const override
uint32_t u32
Definition: defines.h:41
Definition: defines.h:45
SelectionRelay * gSelectionRelay
Definition: plugin_gui.cpp:83
uint qHash(const LaneIndex &ri)
void clicked(bool checked)
virtual int columnCount(const QModelIndex &parent) const const=0
virtual QVariant data(const QModelIndex &index, int role) const const=0
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const const
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const=0
virtual int rowCount(const QModelIndex &parent) const const=0
QAbstractItemModel * model() const const
virtual void selectAll()
void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
void setSelectionMode(QAbstractItemView::SelectionMode mode)
QItemSelectionModel * selectionModel() const const
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const override
virtual void accept()
virtual void reject()
void setSectionResizeMode(QHeaderView::ResizeMode mode)
virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)
void addWidget(QWidget *w)
void append(const T &value)
QMap::const_iterator constBegin() const const
QMap::const_iterator constEnd() const const
QMap::iterator insert(const Key &key, const T &value)
int column() const const
int row() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QObject * parent() const const
bool contains(const T &value) const const
virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const const override
virtual void setSourceModel(QAbstractItemModel *sourceModel) override
DisplayRole
typedef ItemFlags
Orientation
QHeaderView * horizontalHeader() const const
void setColumnWidth(int column, int width)
virtual void setModel(QAbstractItemModel *model) override
void setSortingEnabled(bool enable)
uint toUInt(bool *ok) const const
QLayout * layout() const const
void setWindowTitle(const QString &)