13 #include <QResizeEvent>
14 #include <QWheelEvent>
16 #include <QHeaderView>
18 #include <QApplication>
34 :
QSplitter(parent), mController(ctrl), mControllerOwner(nullptr),
35 mControllerId(ctrl->get_id()), mControllerName(ctrl->get_name()),
36 mOngoingYscroll(false), mVisualizeNetState(false), mAutoAddWaves(true)
40 mTreeView =
new WaveTreeView(mWaveDataList, mWaveItemHash,
this);
42 mTreeModel =
new WaveTreeModel(mWaveDataList, mWaveItemHash, mGraphicsCanvas,
this);
91 log_info(mControllerName,
"Simulation controller id={} name='{}' instantiated", mControllerId, mControllerName);
96 log_info(mControllerName,
"Simulation controller id={} name='{}' disposed", mControllerId, mControllerName);
101 int nWaves = mWaveDataList->
size();
102 for (
int i=0; i<nWaves; i++)
105 if (!wd->
id())
continue;
109 if (netName == wd->
name())
continue;
116 if (!mController)
return 0;
117 return mControllerId;
123 return mController->get_state();
128 return mControllerOwner !=
nullptr;
133 mControllerOwner = std::move(ctrl);
138 return mWaveItemHash->
isEmpty();
154 if (!mControllerOwner)
return false;
162 qApp->processEvents();
168 for (
const ModuleItem* sti : highlight)
178 mController->create_simulation_engine(engineFactoryName.
toStdString());
184 static const char* grpNames[3] = {
"x state",
"0 state",
"1 state"};
185 mVisualizeNetState =
state;
186 if (!activeTab)
return;
187 if (mVisualizeNetState)
189 for (
int i=0; i<3; i++)
197 mGroupIds[i] = grp->
get_id();
205 for (
int i=0; i<3; i++)
220 int n = mWaveDataList->
size();
222 for (
int i=0; i<n; i++)
225 alreadyShownNames.
insert(mWaveDataList->
at(i)->name());
240 if (alreadyShownNames.
contains(netName))
continue;
259 int iwave = it.value();
262 iwave = mWaveDataList->
size();
266 mWaveDataList->
add(wd,
false);
271 wavesToAdd.
append(mWaveDataList->
at(iwave));
297 mController->reset();
298 mController->add_gates(gats);
299 for (
const Net* inpNet : mController->get_input_nets())
300 mController->get_waveform_by_net(inpNet);
303 void WaveWidget::handleNumberWaveformChanged(
int count)
308 if (expectMoreEvents)
return;
317 int w =
event->size().width() - 320;
322 void WaveWidget::visualizeCurrentNetState(
double tCursor,
int xpos)
326 for (
auto it = mWaveItemHash->
begin(); it != mWaveItemHash->
end(); ++it)
335 if (val < -1 || val > 1)
continue;
336 netState[val+1].
insert(n);
339 for (
int i=0; i<3; i++)
343 for (Net* n : grp->get_nets())
345 auto it = netState[i].
find(n);
346 if (it == netState[i].end())
349 netState[i].
erase(it);
351 for (Net* n : netState[i])
352 grp->assign_net(n,
true);
358 if (mOngoingYscroll)
return;
359 mOngoingYscroll =
true;
370 mOngoingYscroll =
false;
SelectionDetailsWidget * getSelectionDetailsWidget()
GroupingManagerWidget * getGroupingManagerWidget()
Table that holds information about all groupings.
Grouping * groupingByName(const QString &name) const
QColor recolorGrouping(u32 id, const QColor &groupingColor)
const std::string & get_name() const
Grouping * create_grouping(const u32 grouping_id, const std::string &name="")
bool delete_grouping(Grouping *grouping)
Net * get_net_by_id(u32 net_id) const
Grouping * get_grouping_by_id(u32 grouping_id) const
void stateChanged(hal::NetlistSimulatorController::SimulationState state)
WaveDataList * get_waves() const
void loadProgress(int percent)
static SimulationSettings * sSimulationSettings
The SaleaeDirectory class provides the API for the SALEAE directory file. The SALEAE directory file w...
int get_next_available_index() const
Getter for next available file index ('digital_XXX.bin' with lowest number XXX not in use)
std::vector< ListEntry > get_net_list() const
Getter for all net entries.
bool loadSaleae(const WaveDataTimeframe &tframe=WaveDataTimeframe())
void updateWaveName(int iwave, const QString &nam)
void waveUpdated(int inx, int grpId)
void booleanAdded(int boolId)
void waveRemovedFromGroup(int iwave, int grpId)
void add(WaveData *wd, bool updateSaleae)
void triggerEndResetModel()
int waveIndexByNetId(u32 id) const
void groupAdded(int grpId)
void waveRenamed(int iwave)
void timeframeChanged(const hal::WaveDataTimeframe *tframe)
const WaveDataTimeframe & timeFrame() const
void triggerAdded(int trigId)
void groupRenamed(int grpId)
void removeGroup(u32 grpId)
void groupAboutToBeRemoved(hal::WaveDataGroup *grp)
void triggerBeginResetModel()
void groupUpdated(int grpId)
void waveAddedToGroup(const QVector< u32 > &netIds, int grpId)
void handleWaveUpdated(int iwave, int groupId)
void handleTimeframeChanged(const hal::WaveDataTimeframe *tframe)
void cursorMoved(double tCursor, int xpos)
int importedWires() const
const WaveData * wavedata() const
int cursorValue(double tCursor, int xpos)
QMap< WaveSelectionEntry, int > selectedWaves() const
void addWaves(const QVector< WaveData * > &wds)
void handleWaveAddedToGroup(const QVector< u32 > &netIds, int grpId)
void handleWaveRemovedFromGroup(int iwave, int grpId)
void handleWaveAdded(int iwave)
void numberEntriesChanged(int count)
void handleGroupRenamed(int grpId)
void forwardEndResetModel()
void inserted(QModelIndex index)
int decreaseNumberEntriesChangedEvents()
void handleTriggerAdded(int trigId)
void handleGroupAboutToBeRemoved(WaveDataGroup *grp)
void handleCursorMoved(u64 tCursor, int xpos)
void handleWaveRenamed(int iwave)
void handleGroupAdded(int grpId)
QSet< int > waveDataIndexSet() const
void forwardBeginResetModel()
void handleGroupUpdated(int grpId)
void handleBooleanAdded(int boolId)
void handleInserted(const QModelIndex &index)
void setWaveSelection(const QSet< u32 > &netIds)
void triggerUpdateWaveItems()
#define log_info(channel,...)
ContentManager * gContentManager
bool isEmpty() const const
const T & at(int i) const const
QMap::const_iterator constBegin() const const
QMap::const_iterator constEnd() const const
QMap::iterator insert(const Key &key, const T &value)
bool isEmpty() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
QObject * parent() const const
bool contains(const T &value) const const
QSet::iterator erase(QSet::iterator pos)
QSet::iterator find(const T &value)
QSet::iterator insert(const T &value)
virtual bool event(QEvent *e) override
virtual void resizeEvent(QResizeEvent *) override
void setSizes(const QList< int > &list)
QString fromStdString(const std::string &str)
std::string toStdString() const const
void setColumnWidth(int column, int width)
virtual void setModel(QAbstractItemModel *model) override
void append(const T &value)