Qt: Fix the packet diagram start offset arithmetic.
572c1ae5a3
introduced a bug that allowed for negative diagram item start
values. Fixup our arithmetic so that that doesn't happen.
This commit is contained in:
parent
8b9ec1b5a5
commit
d1f29ee338
|
@ -603,24 +603,24 @@ void PacketDiagram::addDiagram(proto_node *tl_node)
|
||||||
// Get rid of overlaps.
|
// Get rid of overlaps.
|
||||||
if (prev_span.start_bit + prev_span.length > start_bit) {
|
if (prev_span.start_bit + prev_span.length > start_bit) {
|
||||||
#ifdef DEBUG_PACKET_DIAGRAM
|
#ifdef DEBUG_PACKET_DIAGRAM
|
||||||
qDebug() << "Resized prev" << prev_item.item->finfo->hfinfo->abbrev << prev_item.start_bit << prev_item.length << "->" << start_bit - prev_item.start_bit;
|
qDebug() << "Resized prev" << prev_span.finfo->hfinfo->abbrev << prev_span.start_bit << prev_span.length << "->" << start_bit - prev_span.start_bit;
|
||||||
#endif
|
#endif
|
||||||
prev_span.length = start_bit - prev_span.start_bit;
|
prev_span.length = start_bit - prev_span.start_bit;
|
||||||
}
|
}
|
||||||
if (prev_span.length < 1) {
|
if (prev_span.length < 1) {
|
||||||
#ifdef DEBUG_PACKET_DIAGRAM
|
#ifdef DEBUG_PACKET_DIAGRAM
|
||||||
qDebug() << "Removed prev" << prev_item.item->finfo->hfinfo->abbrev << prev_item.start_bit << prev_item.length;
|
qDebug() << "Removed prev" << prev_span.finfo->hfinfo->abbrev << prev_span.start_bit << prev_span.length;
|
||||||
diag_items.removeLast();
|
item_spans.removeLast();
|
||||||
if (diag_items.size() < 1) {
|
if (item_spans.size() < 1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
prev_item = diag_items.last();
|
prev_span = item_spans.last();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// Fill in gaps.
|
// Fill in gaps.
|
||||||
if (prev_span.start_bit + prev_span.length < start_bit) {
|
if (prev_span.start_bit + prev_span.length < start_bit) {
|
||||||
#ifdef DEBUG_PACKET_DIAGRAM
|
#ifdef DEBUG_PACKET_DIAGRAM
|
||||||
qDebug() << "Adding gap" << prev_item.item->finfo->hfinfo->abbrev << prev_item.start_bit << prev_item.length << start_bit;
|
qDebug() << "Adding gap" << prev_span.finfo->hfinfo->abbrev << prev_span.start_bit << prev_span.length << start_bit;
|
||||||
#endif
|
#endif
|
||||||
int gap_start = prev_span.start_bit + prev_span.length;
|
int gap_start = prev_span.start_bit + prev_span.length;
|
||||||
DiagramItemSpan gap_span = { nullptr, gap_start, start_bit - gap_start };
|
DiagramItemSpan gap_span = { nullptr, gap_start, start_bit - gap_start };
|
||||||
|
@ -633,21 +633,15 @@ void PacketDiagram::addDiagram(proto_node *tl_node)
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal z_value = tl_item->zValue();
|
qreal z_value = tl_item->zValue();
|
||||||
int collapse_offset = 0;
|
int start_bit = 0;
|
||||||
for (int idx = 0; idx < item_spans.size(); idx++) {
|
for (int idx = 0; idx < item_spans.size(); idx++) {
|
||||||
DiagramItemSpan *item_span = &item_spans[idx];
|
DiagramItemSpan *item_span = &item_spans[idx];
|
||||||
int start_bit = item_span->start_bit - collapse_offset;
|
|
||||||
|
|
||||||
int y_off = (start_bit / bits_per_row) * layout_->rowHeight();
|
int y_off = (start_bit / bits_per_row) * layout_->rowHeight();
|
||||||
// Stack each item behind the previous one.
|
// Stack each item behind the previous one.
|
||||||
z_value -= .01;
|
z_value -= .01;
|
||||||
FieldInformationGraphicsItem *fi_item = new FieldInformationGraphicsItem(item_span->finfo, start_bit, item_span->length, layout_);
|
FieldInformationGraphicsItem *fi_item = new FieldInformationGraphicsItem(item_span->finfo, start_bit, item_span->length, layout_);
|
||||||
if (fi_item->collapsedLength() < item_span->length) {
|
start_bit += fi_item->collapsedLength();
|
||||||
collapse_offset += item_span->length - fi_item->collapsedLength();
|
|
||||||
#ifdef DEBUG_PACKET_DIAGRAM
|
|
||||||
qDebug() << "Collapse offset now" << collapse_offset;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
fi_item->setPos(x, y_bottom + y_off);
|
fi_item->setPos(x, y_bottom + y_off);
|
||||||
fi_item->setFlag(QGraphicsItem::ItemIsSelectable);
|
fi_item->setFlag(QGraphicsItem::ItemIsSelectable);
|
||||||
fi_item->setAcceptedMouseButtons(Qt::LeftButton);
|
fi_item->setAcceptedMouseButtons(Qt::LeftButton);
|
||||||
|
|
Loading…
Reference in New Issue