]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/trace.cpp
View: Fixes related to multi-segment display
[pulseview.git] / pv / views / trace / trace.cpp
index 46d9edb9ba14bbcfdf2069b42390415b34a6299c..91fde4725cbbf6f142644174a7e1103be26ff5fa 100644 (file)
@@ -50,6 +50,9 @@ const QColor Trace::DarkGrayBGColour = QColor(0, 0, 0, 15 * 255 / 100);
 
 Trace::Trace(shared_ptr<data::SignalBase> channel) :
        base_(channel),
+       axis_pen_(AxisPen),
+       segment_display_mode_(ShowLastSegmentOnly),  // Will be overwritten by View
+       current_segment_(0),
        popup_(nullptr),
        popup_form_(nullptr)
 {
@@ -134,7 +137,7 @@ pv::widgets::Popup* Trace::create_popup(QWidget *parent)
 
        popup_ = new Popup(parent);
        popup_->set_position(parent->mapToGlobal(
-               point(parent->rect())), Popup::Right);
+               drag_point(parent->rect())), Popup::Right);
 
        create_popup_form();
 
@@ -159,6 +162,16 @@ QRectF Trace::label_rect(const QRectF &rect) const
                label_size.height());
 }
 
+void Trace::set_current_segment(const int segment)
+{
+       current_segment_ = segment;
+}
+
+int Trace::get_current_segment() const
+{
+       return current_segment_;
+}
+
 void Trace::paint_back(QPainter &p, ViewItemPaintParams &pp)
 {
        const View *view = owner_->view();
@@ -180,7 +193,7 @@ void Trace::paint_axis(QPainter &p, ViewItemPaintParams &pp, int y)
 {
        p.setRenderHint(QPainter::Antialiasing, false);
 
-       p.setPen(AxisPen);
+       p.setPen(axis_pen_);
        p.drawLine(QPointF(pp.left(), y), QPointF(pp.right(), y));
 
        p.setRenderHint(QPainter::Antialiasing, true);
@@ -241,6 +254,14 @@ void Trace::set_colour(QColor colour)
        base_->set_colour(colour);
 }
 
+void Trace::set_segment_display_mode(SegmentDisplayMode mode)
+{
+       segment_display_mode_ = mode;
+
+       if (owner_)
+               owner_->row_item_appearance_changed(true, true);
+}
+
 void Trace::on_name_changed(const QString &text)
 {
        /* This event handler is called by SignalBase when the name was changed there */