X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Fdecoder_output%2FQHexView.cpp;h=5c34d61bac5ad9c5022e0db133b2cdcb0eadd8f1;hp=0fca4161fe02f6467799619a56862cb09db8b8c1;hb=a7af8bb09efb5c5a8e4f188cfc0c2f4a4f469647;hpb=13b726cda35835a120ade2d9cc1ab58770d4ef3f diff --git a/pv/views/decoder_output/QHexView.cpp b/pv/views/decoder_output/QHexView.cpp index 0fca4161..5c34d61b 100644 --- a/pv/views/decoder_output/QHexView.cpp +++ b/pv/views/decoder_output/QHexView.cpp @@ -79,7 +79,7 @@ QHexView::QHexView(QWidget *parent): } } -void QHexView::setMode(Mode m) +void QHexView::set_mode(Mode m) { mode_ = m; @@ -87,7 +87,7 @@ void QHexView::setMode(Mode m) // so we don't update the viewport here } -void QHexView::setData(const DecodeBinaryClass* data) +void QHexView::set_data(const DecodeBinaryClass* data) { data_ = data; @@ -100,6 +100,11 @@ void QHexView::setData(const DecodeBinaryClass* data) viewport()->update(); } +unsigned int QHexView::get_bytes_per_line() const +{ + return BYTES_PER_LINE; +} + void QHexView::clear() { verticalScrollBar()->setValue(0); @@ -141,6 +146,47 @@ pair QHexView::get_selection() const return std::make_pair(start, end); } +size_t QHexView::create_hex_line(size_t start, size_t end, QString* dest, + bool with_offset, bool with_ascii) +{ + dest->clear(); + + // Determine start address for the row + uint64_t row = start / BYTES_PER_LINE; + uint64_t offset = row * BYTES_PER_LINE; + end = std::min(end, offset + BYTES_PER_LINE); + + if (with_offset) + dest->append(QString("%1 ").arg(row * BYTES_PER_LINE, 10, 16, QChar('0')).toUpper()); + + initialize_byte_iterator(offset); + for (size_t i = offset; i < offset + BYTES_PER_LINE; i++) { + uint8_t value = 0; + + if (i < end) + value = get_next_byte(); + + if ((i < start) || (i >= end)) + dest->append(" "); + else + dest->append(QString("%1 ").arg(value, 2, 16, QChar('0')).toUpper()); + } + + if (with_ascii) { + initialize_byte_iterator(offset); + for (size_t i = offset; i < end; i++) { + uint8_t value = get_next_byte(); + + if (i < start) + dest->append(' '); + else + dest->append((char)value); + } + } + + return end; +} + void QHexView::initialize_byte_iterator(size_t offset) { current_chunk_id_ = 0; @@ -317,6 +363,9 @@ void QHexView::paintEvent(QPaintEvent *event) val = QString::number((byte_value & 0xF), 16).toUpper(); painter.drawText(x + charWidth_, y, val); + if ((pos >= selectBegin_) && (pos < selectEnd_ - 1) && (i < BYTES_PER_LINE - 1)) + painter.drawText(x + 2 * charWidth_, y, QString(' ')); + x += 3 * charWidth_; }