X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Ftrace.cpp;h=bbd0115fb65af00512508c7129d3e6399b12a3a2;hp=5977bc2c5c701c59bb0901274b6de6534fe0d377;hb=39dce56b0e0b4daba503663e44ee6c86a754ddc2;hpb=1931b5f932cf068d073bc798f11dd21ede5389a2 diff --git a/pv/views/trace/trace.cpp b/pv/views/trace/trace.cpp index 5977bc2..bbd0115 100644 --- a/pv/views/trace/trace.cpp +++ b/pv/views/trace/trace.cpp @@ -68,11 +68,36 @@ Trace::Trace(shared_ptr channel) : settings.value(GlobalSettings::Key_View_ShowHoverMarker).toBool(); } +Trace::~Trace() +{ + GlobalSettings::remove_change_handler(this); +} + shared_ptr 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 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;