]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/decodetrace.cpp
DecodeTrace: Don't show tooltips destined for the header area
[pulseview.git] / pv / views / trace / decodetrace.cpp
index d8f04c582ef5a6c9c76696e344e034a52db6bace..e6b977ae01952ea1d22f377e8898b060c6fc3c1c 100644 (file)
@@ -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
@@ -710,6 +716,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 +877,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);