X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Fdecoder_binary%2FQHexView.cpp;h=ed003949f242c67f482667a26b315554c1b90fd8;hb=4640a84e926ac4b82e2a1b6ef9fc80ef44c2bd3c;hp=ccd50f87bccc1291195d2b515a4ee70418e422f0;hpb=121307b3c50d981638cbe1e33ba5410bb2b11dd1;p=pulseview.git diff --git a/pv/views/decoder_binary/QHexView.cpp b/pv/views/decoder_binary/QHexView.cpp index ccd50f87..ed003949 100644 --- a/pv/views/decoder_binary/QHexView.cpp +++ b/pv/views/decoder_binary/QHexView.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -59,11 +60,6 @@ QHexView::QHexView(QWidget *parent): charWidth_ = fontMetrics().boundingRect('X').width(); charHeight_ = fontMetrics().height(); - // Determine X coordinates of the three sub-areas - posAddr_ = 0; - posHex_ = 10 * charWidth_ + GAP_ADR_HEX; - posAscii_ = posHex_ + HEXCHARS_IN_LINE * charWidth_ + GAP_HEX_ASCII; - setFocusPolicy(Qt::StrongFocus); if (palette().color(QPalette::ButtonText).toHsv().value() > 127) { @@ -99,6 +95,13 @@ void QHexView::set_data(const DecodeBinaryClass* data) } data_size_ = size; + address_digits_ = (uint8_t)QString::number(data_size_, 16).length(); + + // Calculate X coordinates of the three sub-areas + posAddr_ = 0; + posHex_ = address_digits_ * charWidth_ + GAP_ADR_HEX; + posAscii_ = posHex_ + HEXCHARS_IN_LINE * charWidth_ + GAP_HEX_ASCII; + viewport()->update(); } @@ -159,7 +162,7 @@ size_t QHexView::create_hex_line(size_t start, size_t end, QString* dest, end = std::min((uint64_t)end, offset + BYTES_PER_LINE); if (with_offset) - dest->append(QString("%1 ").arg(row * BYTES_PER_LINE, 10, 16, QChar('0')).toUpper()); + dest->append(QString("%1 ").arg(row * BYTES_PER_LINE, address_digits_, 16, QChar('0')).toUpper()); initialize_byte_iterator(offset); for (size_t i = offset; i < offset + BYTES_PER_LINE; i++) { @@ -283,7 +286,7 @@ void QHexView::paintEvent(QPaintEvent *event) // Fill widget background painter.fillRect(event->rect(), palette().color(QPalette::Base)); - if (!data_ || (data_size_ == 0)) { + if (!data_ || (data_size_ == 0) || (data_->chunks.empty())) { painter.setPen(palette().color(QPalette::Text)); QString s = tr("No data available"); int x = (areaSize.width() - fontMetrics().boundingRect(s).width()) / 2; @@ -319,7 +322,7 @@ void QHexView::paintEvent(QPaintEvent *event) int yStart = 2 * charHeight_; for (size_t lineIdx = firstLineIdx, y = yStart; lineIdx < lastLineIdx; lineIdx++) { - QString address = QString("%1").arg(lineIdx * 16, 10, 16, QChar('0')).toUpper(); + QString address = QString("%1").arg(lineIdx * 16, address_digits_, 16, QChar('0')).toUpper(); painter.drawText(posAddr_, y, address); y += charHeight_; }