]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/trace.cpp
Trace: Force trace replaint when a setting changes
[pulseview.git] / pv / views / trace / trace.cpp
index 5977bc2c5c701c59bb0901274b6de6534fe0d377..bbd0115fb65af00512508c7129d3e6399b12a3a2 100644 (file)
@@ -68,11 +68,36 @@ Trace::Trace(shared_ptr<data::SignalBase> channel) :
                settings.value(GlobalSettings::Key_View_ShowHoverMarker).toBool();
 }
 
+Trace::~Trace()
+{
+       GlobalSettings::remove_change_handler(this);
+}
+
 shared_ptr<data::SignalBase> Trace::base() const
 {
        return base_;
 }
 
+bool Trace::is_selectable(QPoint pos) const
+{
+       // True if the header was clicked, false if the trace area was clicked
+       const View *view = owner_->view();
+       assert(view);
+
+       return (pos.x() <= view->header_width());
+}
+
+bool Trace::is_draggable(QPoint pos) const
+{
+       // While the header label that belongs to this trace is draggable,
+       // the trace itself shall not be. Hence we return true if the header
+       // was clicked and false if the trace area was clicked
+       const View *view = owner_->view();
+       assert(view);
+
+       return (pos.x() <= view->header_width());
+}
+
 void Trace::set_segment_display_mode(SegmentDisplayMode mode)
 {
        segment_display_mode_ = mode;
@@ -85,6 +110,10 @@ void Trace::on_setting_changed(const QString &key, const QVariant &value)
 {
        if (key == GlobalSettings::Key_View_ShowHoverMarker)
                show_hover_marker_ = value.toBool();
+
+       // Force a repaint since many options alter the way traces look
+       if (owner_)
+               owner_->row_item_appearance_changed(false, true);
 }
 
 void Trace::paint_label(QPainter &p, const QRect &rect, bool hover)
@@ -144,9 +173,9 @@ void Trace::paint_label(QPainter &p, const QRect &rect, bool hover)
                Qt::AlignCenter | Qt::AlignVCenter, base_->name());
 }
 
-QMenu* Trace::create_context_menu(QWidget *parent)
+QMenu* Trace::create_header_context_menu(QWidget *parent)
 {
-       QMenu *const menu = ViewItem::create_context_menu(parent);
+       QMenu *const menu = ViewItem::create_header_context_menu(parent);
 
        return menu;
 }
@@ -182,6 +211,20 @@ QRectF Trace::label_rect(const QRectF &rect) const
                label_size.height());
 }
 
+QRectF Trace::hit_box_rect(const ViewItemPaintParams &pp) const
+{
+       // This one is only for the trace itself, excluding the header area
+       const View *view = owner_->view();
+       assert(view);
+
+       pair<int, int> extents = v_extents();
+       const int top = pp.top() + get_visual_y() + extents.first;
+       const int height = extents.second - extents.first;
+
+       return QRectF(pp.left() + view->header_width(), top,
+               pp.width() - view->header_width(), height);
+}
+
 void Trace::set_current_segment(const int segment)
 {
        current_segment_ = segment;