diff options
author | Gerald Combs <gerald@wireshark.org> | 2017-12-21 09:02:06 -0800 |
---|---|---|
committer | Roland Knall <rknall@gmail.com> | 2017-12-21 22:06:57 +0000 |
commit | 46a35e50044b7caf35bc0eaead3d70e39f8427ed (patch) | |
tree | 901a2a6d79f589468739375008c4c9614e21399c /ui/qt/widgets/byte_view_text.cpp | |
parent | 5631bdbac6ffc7cab64ff2c2a8ed9629c2f94659 (diff) |
Qt: Add back byte view hover.
Add back the byte view hover behavior. Draw an overline+underline when
hovering to make it a bit less distracting and to make hovered vs marked
modes more obvious. Update names to match.
Change-Id: I554d1cad98199f08f1c19796b14d158ad41706b4
Reviewed-on: https://code.wireshark.org/review/24932
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'ui/qt/widgets/byte_view_text.cpp')
-rw-r--r-- | ui/qt/widgets/byte_view_text.cpp | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/ui/qt/widgets/byte_view_text.cpp b/ui/qt/widgets/byte_view_text.cpp index e1aeb2f95e..f6eddd4397 100644 --- a/ui/qt/widgets/byte_view_text.cpp +++ b/ui/qt/widgets/byte_view_text.cpp @@ -33,7 +33,6 @@ // and ASCII/EBCDIC. // - Add a UTF-8 and possibly UTF-xx option to the ASCII display. // - Add "copy bytes as" context menu items. -// - Add back hover. // - Move more common metrics to DataPrinter. Q_DECLARE_METATYPE(bytes_view_type) @@ -44,7 +43,7 @@ ByteViewText::ByteViewText(QByteArray data, packet_char_enc encoding, QWidget *p layout_(new QTextLayout()), encoding_(encoding), hovered_byte_offset_(-1), - hovered_byte_lock_(false), + marked_byte_offset_(-1), proto_start_(0), proto_len_(0), field_start_(0), @@ -241,17 +240,24 @@ void ByteViewText::mousePressEvent (QMouseEvent *event) { return; } - hovered_byte_lock_ = !hovered_byte_lock_; - emit byteSelected(byteOffsetAtPixel(event->pos())); + if (marked_byte_offset_ < 0) { + marked_byte_offset_ = byteOffsetAtPixel(event->pos()); + hovered_byte_offset_ = -1; + } else { + marked_byte_offset_ = -1; + mouseMoveEvent(event); + } + emit byteSelected(marked_byte_offset_); } void ByteViewText::mouseMoveEvent(QMouseEvent *event) { - if (hovered_byte_lock_) { + if (marked_byte_offset_ >= 0) { return; } - emit byteHovered(byteOffsetAtPixel(event->pos())); + hovered_byte_offset_ = byteOffsetAtPixel(event->pos()); + emit byteHovered(hovered_byte_offset_); viewport()->update(); } @@ -347,8 +353,11 @@ void ByteViewText::drawLine(QPainter *painter, const int offset, const int row_y offset_mode = ModeOffsetField; } addHexFormatRange(fmt_list, field_a_start_, field_a_len_, offset, max_tvb_pos, ModeField); + if (marked_byte_offset_ >= offset && marked_byte_offset_ <= max_tvb_pos) { + addHexFormatRange(fmt_list, marked_byte_offset_, 1, offset, max_tvb_pos, ModeMarked); + } if (hovered_byte_offset_ >= offset && hovered_byte_offset_ <= max_tvb_pos) { - addHexFormatRange(fmt_list, hovered_byte_offset_, hovered_byte_offset_ + 1, offset, max_tvb_pos, ModeField); + addHexFormatRange(fmt_list, hovered_byte_offset_, 1, offset, max_tvb_pos, ModeHover); } } @@ -370,6 +379,7 @@ void ByteViewText::drawLine(QPainter *painter, const int offset, const int row_y if (g_ascii_isprint(c)) { line += c; } else { + // XXX Should we soften the text color as well? line += UTF8_MIDDLE_DOT; } if (build_x_pos) { @@ -381,8 +391,11 @@ void ByteViewText::drawLine(QPainter *painter, const int offset, const int row_y offset_mode = ModeOffsetField; } addAsciiFormatRange(fmt_list, field_a_start_, field_a_len_, offset, max_tvb_pos, ModeField); + if (marked_byte_offset_ >= offset && marked_byte_offset_ <= max_tvb_pos) { + addAsciiFormatRange(fmt_list, marked_byte_offset_, 1, offset, max_tvb_pos, ModeMarked); + } if (hovered_byte_offset_ >= offset && hovered_byte_offset_ <= max_tvb_pos) { - addAsciiFormatRange(fmt_list, hovered_byte_offset_, hovered_byte_offset_ + 1, offset, max_tvb_pos, ModeField); + addAsciiFormatRange(fmt_list, hovered_byte_offset_, 1, offset, max_tvb_pos, ModeHover); } } @@ -427,8 +440,16 @@ bool ByteViewText::addFormatRange(QList<QTextLayout::FormatRange> &fmt_list, int format_range.format.setForeground(offset_field_fg_); break; case ModeHover: - format_range.format.setForeground(ColorUtils::byteViewHoverColor(false)); - format_range.format.setBackground(ColorUtils::byteViewHoverColor(true)); + // QTextCharFormat doesn't appear to let us draw a complete border. + // This is the next best thing. + format_range.format.setFontUnderline(true); + format_range.format.setFontOverline(true); + break; + case ModeMarked: + // XXX Should we get rid of byteViewMarkColor and just draw an + // overline + underline instead? + format_range.format.setForeground(ColorUtils::byteViewMarkColor(false)); + format_range.format.setBackground(ColorUtils::byteViewMarkColor(true)); break; } fmt_list << format_range; |