Cabana: sort signal by start bit and keep cursor position after save (#26529)

sort signals by start bit and keep cursor position after save
old-commit-hash: e3c913bfa1d8c534f351d6ead5c2156ee4ee4ffa
This commit is contained in:
Dean Lee
2022-11-17 07:43:49 +08:00
committed by GitHub
parent 9fc4aa38b3
commit 78a2c19d0b
6 changed files with 31 additions and 12 deletions
+7 -7
View File
@@ -166,19 +166,19 @@ void BinaryViewModel::setMessage(const QString &message_id) {
row_count = dbc_msg->size;
items.resize(row_count * column_count);
int i = 0;
for (auto &[name, sig] : dbc_msg->sigs) {
auto [start, end] = getSignalRange(&sig);
for (auto sig : dbc_msg->getSignals()) {
auto [start, end] = getSignalRange(sig);
for (int j = start; j <= end; ++j) {
int bit_index = sig.is_little_endian ? bigEndianBitIndex(j) : j;
int bit_index = sig->is_little_endian ? bigEndianBitIndex(j) : j;
int idx = column_count * (bit_index / 8) + bit_index % 8;
if (idx >= items.size()) {
qWarning() << "signal " << name << "out of bounds.start_bit:" << sig.start_bit << "size:" << sig.size;
qWarning() << "signal " << sig->name.c_str() << "out of bounds.start_bit:" << sig->start_bit << "size:" << sig->size;
break;
}
if (j == start) sig.is_little_endian ? items[idx].is_lsb = true : items[idx].is_msb = true;
if (j == end) sig.is_little_endian ? items[idx].is_msb = true : items[idx].is_lsb = true;
if (j == start) sig->is_little_endian ? items[idx].is_lsb = true : items[idx].is_msb = true;
if (j == end) sig->is_little_endian ? items[idx].is_msb = true : items[idx].is_lsb = true;
items[idx].bg_color = getColor(i);
items[idx].sigs.push_back(&sig);
items[idx].sigs.push_back(sig);
}
++i;
}