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. 26
      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) {
int i = dbc()->msg(msg_id)->indexOf(sig); if (filter_str.isEmpty()) {
beginInsertRows({}, i, i); int i = dbc()->msg(msg_id)->indexOf(sig);
insertItem(root.get(), i, sig); beginInsertRows({}, i, i);
endInsertRows(); insertItem(root.get(), i, sig);
endInsertRows();
} else if (sig->name.contains(filter_str, Qt::CaseInsensitive)) {
refresh();
}
} }
} }
@ -237,12 +241,14 @@ 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});
// move row when the order changes. if (filter_str.isEmpty()) {
int to = dbc()->msg(msg_id)->indexOf(sig); // move row when the order changes.
if (to != row) { int to = dbc()->msg(msg_id)->indexOf(sig);
beginMoveRows({}, row, row, {}, to > row ? to + 1 : to); if (to != row) {
root->children.move(row, to); beginMoveRows({}, row, row, {}, to > row ? to + 1 : to);
endMoveRows(); root->children.move(row, to);
endMoveRows();
}
} }
} }
} }

Loading…
Cancel
Save