X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=22d8f2dce06ceff5b0c46e8a185550ce52fc81ba;hb=dd048a7ec035447c051c7937ce04aca5be065b4e;hp=161eb9668bdd2217a43e8173d396138ea2908c6e;hpb=f9101a91fc942a28515872ae6c7285973bd54b91;p=pulseview.git diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index 161eb96..22d8f2d 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -86,7 +86,8 @@ DecodeTrace::DecodeTrace(pv::SigSession &session, Trace(session, QString::fromUtf8( decoder_stack->stack().front()->decoder()->name)), _decoder_stack(decoder_stack), - _delete_mapper(this) + _delete_mapper(this), + _show_hide_mapper(this) { assert(_decoder_stack); @@ -96,6 +97,8 @@ DecodeTrace::DecodeTrace(pv::SigSession &session, this, SLOT(on_new_decode_data())); connect(&_delete_mapper, SIGNAL(mapped(int)), this, SLOT(on_delete_decoder(int))); + connect(&_show_hide_mapper, SIGNAL(mapped(int)), + this, SLOT(on_show_hide_decoder(int))); } bool DecodeTrace::enabled() const @@ -163,9 +166,10 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) assert(_decoder_stack); - const vector rows(_decoder_stack->get_rows()); - BOOST_FOREACH (const Row &row, rows) + const vector rows(_decoder_stack->get_visible_rows()); + for (size_t i = 0; i < rows.size(); i++) { + const Row &row = rows[i]; vector annotations; _decoder_stack->get_annotation_subset(annotations, row, start_sample, end_sample); @@ -173,7 +177,7 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) BOOST_FOREACH(const Annotation &a, annotations) draw_annotation(a, p, get_text_colour(), annotation_height, left, right, - samples_per_pixel, pixels_offset, y); + samples_per_pixel, pixels_offset, y, i); y += row_height; } } @@ -197,6 +201,7 @@ void DecodeTrace::populate_popup_form(QWidget *parent, QFormLayout *form) // Add the decoder options _bindings.clear(); _probe_selectors.clear(); + _decoder_forms.clear(); const list< shared_ptr >& stack = _decoder_stack->stack(); @@ -251,14 +256,14 @@ QMenu* DecodeTrace::create_context_menu(QWidget *parent) void DecodeTrace::draw_annotation(const pv::data::decode::Annotation &a, QPainter &p, QColor text_color, int h, int left, int right, double samples_per_pixel, - double pixels_offset, int y) const + double pixels_offset, int y, unsigned int row_index) const { const double start = a.start_sample() / samples_per_pixel - pixels_offset; const double end = a.end_sample() / samples_per_pixel - pixels_offset; - const QColor fill = Colours[(a.format() * (countof(Colours) / 2 + 1)) % - countof(Colours)]; + const QColor fill = Colours[((row_index * 2 + a.format()) * + (countof(Colours) / 4 + 1)) % countof(Colours)]; const QColor outline(fill.darker()); if (start > right + DrawPadding || end < left - DrawPadding) @@ -431,10 +436,15 @@ void DecodeTrace::create_decoder_form(int index, pv::widgets::DecoderGroupBox *const group = new pv::widgets::DecoderGroupBox( QString::fromUtf8(decoder->name)); + group->set_decoder_visible(dec->shown()); _delete_mapper.setMapping(group, index); connect(group, SIGNAL(delete_decoder()), &_delete_mapper, SLOT(map())); + _show_hide_mapper.setMapping(group, index); + connect(group, SIGNAL(show_hide_decoder()), + &_show_hide_mapper, SLOT(map())); + QFormLayout *const decoder_form = new QFormLayout; group->add_layout(decoder_form); @@ -474,6 +484,7 @@ void DecodeTrace::create_decoder_form(int index, _bindings.push_back(binding); form->addRow(group); + _decoder_forms.push_back(group); } QComboBox* DecodeTrace::create_probe_selector( @@ -591,5 +602,28 @@ void DecodeTrace::on_delete_decoder(int index) _decoder_stack->begin_decode(); } +void DecodeTrace::on_show_hide_decoder(int index) +{ + using pv::data::decode::Decoder; + + const list< shared_ptr > stack(_decoder_stack->stack()); + + // Find the decoder in the stack + list< shared_ptr >::const_iterator iter = stack.begin(); + for(int i = 0; i < index; i++, iter++) + assert(iter != stack.end()); + + shared_ptr dec = *iter; + assert(dec); + + const bool show = !dec->shown(); + dec->show(show); + + assert(index < (int)_decoder_forms.size()); + _decoder_forms[index]->set_decoder_visible(show); + + _view->update_viewport(); +} + } // namespace view } // namespace pv