X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fdecodetrace.cpp;h=9529c50a72650958ce7f0b3abdc93b67a01a6f21;hb=6d2802aa2f53bcfc3a9a56ee65be5b88750b6cdd;hp=d8f04c582ef5a6c9c76696e344e034a52db6bace;hpb=477472187338948c83bea5d790ead66034008296;p=pulseview.git diff --git a/pv/views/trace/decodetrace.cpp b/pv/views/trace/decodetrace.cpp index d8f04c5..9529c50 100644 --- a/pv/views/trace/decodetrace.cpp +++ b/pv/views/trace/decodetrace.cpp @@ -56,14 +56,11 @@ extern "C" { using std::all_of; using std::make_pair; using std::max; -using std::map; using std::min; using std::out_of_range; using std::pair; using std::shared_ptr; -using std::make_shared; using std::tie; -using std::unordered_set; using std::vector; using pv::data::decode::Annotation; @@ -90,6 +87,8 @@ const double DecodeTrace::EndCapWidth = 5; const int DecodeTrace::RowTitleMargin = 10; const int DecodeTrace::DrawPadding = 100; +const int DecodeTrace::MaxTraceUpdateRate = 1; // No more than 1 Hz + const QColor DecodeTrace::Colours[16] = { QColor(0xEF, 0x29, 0x29), QColor(0xF6, 0x6A, 0x32), @@ -147,6 +146,8 @@ DecodeTrace::DecodeTrace(pv::Session &session, connect(decode_signal_.get(), SIGNAL(new_annotations()), this, SLOT(on_new_annotations())); + connect(decode_signal_.get(), SIGNAL(decode_finished()), + this, SLOT(on_decode_finished())); connect(decode_signal_.get(), SIGNAL(channels_updated()), this, SLOT(on_channels_updated())); @@ -154,6 +155,11 @@ DecodeTrace::DecodeTrace(pv::Session &session, this, SLOT(on_delete_decoder(int))); connect(&show_hide_mapper_, SIGNAL(mapped(int)), this, SLOT(on_show_hide_decoder(int))); + + connect(&delayed_trace_updater_, SIGNAL(timeout()), + this, SLOT(on_delayed_trace_update())); + delayed_trace_updater_.setSingleShot(true); + delayed_trace_updater_.setInterval(1000 / MaxTraceUpdateRate); } bool DecodeTrace::enabled() const @@ -242,11 +248,13 @@ void DecodeTrace::paint_mid(QPainter &p, ViewItemPaintParams &pp) // Draw the hatching draw_unresolved_period(p, annotation_height, pp.left(), pp.right()); - if ((int)visible_rows_.size() > max_visible_rows_) - owner_->extents_changed(false, true); + if ((int)visible_rows_.size() > max_visible_rows_) { + max_visible_rows_ = (int)visible_rows_.size(); - // Update the maximum row count if needed - max_visible_rows_ = max(max_visible_rows_, (int)visible_rows_.size()); + // Call order is important, otherwise the lazy event handler won't work + owner_->extents_changed(false, true); + owner_->row_item_appearance_changed(false, true); + } } void DecodeTrace::paint_fore(QPainter &p, ViewItemPaintParams &pp) @@ -710,6 +718,12 @@ void DecodeTrace::hover_point_changed() assert(view); QPoint hp = view->hover_point(); + + if (hp.x() == 0) { + QToolTip::hideText(); + return; + } + QString ann = get_annotation_at_point(hp); assert(view); @@ -865,6 +879,18 @@ QComboBox* DecodeTrace::create_channel_selector_init_state(QWidget *parent, } void DecodeTrace::on_new_annotations() +{ + if (!delayed_trace_updater_.isActive()) + delayed_trace_updater_.start(); +} + +void DecodeTrace::on_delayed_trace_update() +{ + if (owner_) + owner_->row_item_appearance_changed(false, true); +} + +void DecodeTrace::on_decode_finished() { if (owner_) owner_->row_item_appearance_changed(false, true);