X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fdecodesignal.cpp;h=33ea33f381e484391c82ec7cb83427b45d3a252f;hb=9472f4476b27336e9187635015169e308bfe8af7;hp=556631c6cc059e5a8bb850fdce91cee7aaa29f2a;hpb=01fd32630269c1cfb99eb2b0d6060d7d19a42475;p=pulseview.git diff --git a/pv/view/decodesignal.cpp b/pv/view/decodesignal.cpp index 556631c..33ea33f 100644 --- a/pv/view/decodesignal.cpp +++ b/pv/view/decodesignal.cpp @@ -25,6 +25,8 @@ extern "C" { #include "decodesignal.h" #include +#include +#include using namespace boost; using namespace std; @@ -37,6 +39,8 @@ DecodeSignal::DecodeSignal(pv::SigSession &session, Trace(session, QString(decoder->get_decoder()->name)), _decoder(decoder) { + assert(_decoder); + _colour = Qt::red; } @@ -50,11 +54,38 @@ bool DecodeSignal::enabled() const return true; } +void DecodeSignal::set_view(pv::view::View *view) +{ + assert(view); + Trace::set_view(view); +} + void DecodeSignal::paint(QPainter &p, int left, int right) { - (void)p; - (void)left; - (void)right; + using namespace pv::view::decode; + + assert(_view); + const int y = _v_offset - _view->v_offset(); + + const double scale = _view->scale(); + assert(scale > 0); + + double samplerate = _decoder->get_samplerate(); + + // Show sample rate as 1Hz when it is unknown + if (samplerate == 0.0) + samplerate = 1.0; + + const double pixels_offset = (_view->offset() - + _decoder->get_start_time()) / scale; + const double samples_per_pixel = samplerate * scale; + + assert(_decoder); + vector< shared_ptr > annotations(_decoder->annotations()); + BOOST_FOREACH(shared_ptr a, annotations) { + assert(a); + a->paint(p, left, right, samples_per_pixel, pixels_offset, y); + } } const list DecodeSignal::get_context_bar_actions()