From: Joel Holdsworth Date: Thu, 13 Feb 2014 23:47:06 +0000 (+0000) Subject: Added row heading text X-Git-Tag: pulseview-0.2.0~68 X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=commitdiff_plain;h=88908838c9682423c83da4cf1ab07e3aa43fc47e Added row heading text --- diff --git a/pv/data/decode/row.cpp b/pv/data/decode/row.cpp index 0eee547c..2aabf0f9 100644 --- a/pv/data/decode/row.cpp +++ b/pv/data/decode/row.cpp @@ -20,6 +20,8 @@ #include "row.h" +#include + namespace pv { namespace data { namespace decode { @@ -46,6 +48,19 @@ const srd_decoder_annotation_row* Row::row() const return _row; } +const QString Row::title() const +{ + if (_decoder && _decoder->name && _row && _row->desc) + return QString("%1: %2") + .arg(QString::fromUtf8(_decoder->name)) + .arg(QString::fromUtf8(_row->desc)); + if (_decoder && _decoder->name) + return QString::fromUtf8(_decoder->name); + if (_row && _row->desc) + return QString::fromUtf8(_row->desc); + return QString(); +} + bool Row::operator<(const Row &other) const { return (_decoder < other._decoder) || diff --git a/pv/data/decode/row.h b/pv/data/decode/row.h index 4ee05f6e..6c05ac45 100644 --- a/pv/data/decode/row.h +++ b/pv/data/decode/row.h @@ -43,6 +43,8 @@ public: const srd_decoder* decoder() const; const srd_decoder_annotation_row* row() const; + const QString title() const; + bool operator<(const Row &other) const; private: diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index ddf006ce..c47a46ab 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -68,6 +68,7 @@ const QColor DecodeTrace::DecodeColours[4] = { const QColor DecodeTrace::ErrorBgColour = QColor(0xEF, 0x29, 0x29); const QColor DecodeTrace::NoDecodeColour = QColor(0x88, 0x8A, 0x85); +const int DecodeTrace::ArrowSize = 4; const double DecodeTrace::EndCapWidth = 5; const int DecodeTrace::DrawPadding = 100; @@ -161,6 +162,8 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) double samplerate = _decoder_stack->samplerate(); + _cur_row_headings.clear(); + // Show sample rate as 1Hz when it is unknown if (samplerate == 0.0) samplerate = 1.0; @@ -216,6 +219,8 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) samples_per_pixel, pixels_offset, y, base_colour); y += row_height; + + _cur_row_headings.push_back(row.title()); } } @@ -224,6 +229,52 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) samples_per_pixel, pixels_offset); } +void DecodeTrace::paint_fore(QPainter &p, int left, int right) +{ + using namespace pv::data::decode; + + (void)right; + + QFontMetrics m(QApplication::font()); + const int text_height = m.boundingRect(QRect(), 0, "Tg").height(); + const int row_height = (text_height * 6) / 4; + + for (size_t i = 0; i < _cur_row_headings.size(); i++) + { + const int y = i * row_height + get_y(); + + p.setPen(QPen(Qt::NoPen)); + p.setBrush(QApplication::palette().brush(QPalette::WindowText)); + + if (i != 0) + { + const QPointF points[] = { + QPointF(left, y - ArrowSize), + QPointF(left + ArrowSize, y), + QPointF(left, y + ArrowSize) + }; + p.drawPolygon(points, countof(points)); + } + + const QRect r(left + ArrowSize * 2, y - row_height / 2, + right - left, row_height); + const QString h(_cur_row_headings[i]); + const int f = Qt::AlignLeft | Qt::AlignVCenter | + Qt::TextDontClip; + + // Draw the outline + p.setPen(QApplication::palette().color(QPalette::Base)); + for (int dx = -1; dx <= 1; dx++) + for (int dy = -1; dy <= 1; dy++) + if (dx != 0 && dy != 0) + p.drawText(r.translated(dx, dy), f, h); + + // Draw the text + p.setPen(QApplication::palette().color(QPalette::WindowText)); + p.drawText(r, f, h); + } +} + void DecodeTrace::populate_popup_form(QWidget *parent, QFormLayout *form) { using pv::data::decode::Decoder; diff --git a/pv/view/decodetrace.h b/pv/view/decodetrace.h index 08558c98..642f2a0e 100644 --- a/pv/view/decodetrace.h +++ b/pv/view/decodetrace.h @@ -74,6 +74,7 @@ private: static const QColor ErrorBgColour; static const QColor NoDecodeColour; + static const int ArrowSize; static const double EndCapWidth; static const int DrawPadding; @@ -107,6 +108,14 @@ public: **/ void paint_mid(QPainter &p, int left, int right); + /** + * Paints the foreground layer of the trace with a QPainter + * @param p the QPainter to paint into. + * @param left the x-coordinate of the left edge of the signal + * @param right the x-coordinate of the right edge of the signal + **/ + void paint_fore(QPainter &p, int left, int right); + void populate_popup_form(QWidget *parent, QFormLayout *form); QMenu* create_context_menu(QWidget *parent); @@ -171,6 +180,8 @@ private: std::list _probe_selectors; std::vector _decoder_forms; + std::vector _cur_row_headings; + QSignalMapper _delete_mapper, _show_hide_mapper; };