cabana: fix segfault when editing signal while filtering (#28836)

Fix the issue that editing signal will segfault when there is a filter string.
old-commit-hash: 1301e2d640
beeps
Dean Lee 2 years ago committed by GitHub
parent 5d520dc7ae
commit 592bcec5d6
  1. 6
      tools/cabana/signalview.cc

@ -226,10 +226,14 @@ void SignalModel::handleMsgChanged(MessageId id) {
void SignalModel::handleSignalAdded(MessageId id, const cabana::Signal *sig) { void SignalModel::handleSignalAdded(MessageId id, const cabana::Signal *sig) {
if (id == msg_id) { if (id == msg_id) {
if (filter_str.isEmpty()) {
int i = dbc()->msg(msg_id)->indexOf(sig); int i = dbc()->msg(msg_id)->indexOf(sig);
beginInsertRows({}, i, i); beginInsertRows({}, i, i);
insertItem(root.get(), i, sig); insertItem(root.get(), i, sig);
endInsertRows(); endInsertRows();
} else if (sig->name.contains(filter_str, Qt::CaseInsensitive)) {
refresh();
}
} }
} }
@ -237,6 +241,7 @@ void SignalModel::handleSignalUpdated(const cabana::Signal *sig) {
if (int row = signalRow(sig); row != -1) { if (int row = signalRow(sig); row != -1) {
emit dataChanged(index(row, 0), index(row, 1), {Qt::DisplayRole, Qt::EditRole, Qt::CheckStateRole}); emit dataChanged(index(row, 0), index(row, 1), {Qt::DisplayRole, Qt::EditRole, Qt::CheckStateRole});
if (filter_str.isEmpty()) {
// move row when the order changes. // move row when the order changes.
int to = dbc()->msg(msg_id)->indexOf(sig); int to = dbc()->msg(msg_id)->indexOf(sig);
if (to != row) { if (to != row) {
@ -245,6 +250,7 @@ void SignalModel::handleSignalUpdated(const cabana::Signal *sig) {
endMoveRows(); endMoveRows();
} }
} }
}
} }
void SignalModel::handleSignalRemoved(const cabana::Signal *sig) { void SignalModel::handleSignalRemoved(const cabana::Signal *sig) {

Loading…
Cancel
Save