X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fruler.cpp;h=64581459593a1fcc8148a4c4d2e14dee31164b64;hb=HEAD;hp=33746ed6f23814c888212b06c687afc071e3f7e2;hpb=9f094349d415a37ec30fa2aa2bb6c979c03d6bc1;p=pulseview.git diff --git a/pv/views/trace/ruler.cpp b/pv/views/trace/ruler.cpp index 33746ed6..64581459 100644 --- a/pv/views/trace/ruler.cpp +++ b/pv/views/trace/ruler.cpp @@ -158,6 +158,12 @@ void Ruler::contextMenuEvent(QContextMenuEvent *event) connect(set_zero_position, SIGNAL(triggered()), this, SLOT(on_setZeroPosition())); menu->addAction(set_zero_position); + if (view_.zero_offset().convert_to() != 0) { + QAction *const reset_zero_position = new QAction(tr("Reset zero point"), this); + connect(reset_zero_position, SIGNAL(triggered()), this, SLOT(on_resetZeroPosition())); + menu->addAction(reset_zero_position); + } + QAction *const toggle_hover_marker = new QAction(this); connect(toggle_hover_marker, SIGNAL(triggered()), this, SLOT(on_toggleHoverMarker())); menu->addAction(toggle_hover_marker); @@ -194,10 +200,12 @@ void Ruler::item_hover(const shared_ptr &item, QPoint pos) shared_ptr Ruler::get_reference_item() const { + // Note: time() returns 0 if item returns no valid time + if (mouse_modifiers_ & Qt::ShiftModifier) return nullptr; - if (hover_item_) + if (hover_item_ && (hover_item_->time() != 0)) return hover_item_; shared_ptr ref_item; @@ -215,6 +223,9 @@ shared_ptr Ruler::get_reference_item() const } } + if (ref_item && (ref_item->time() == 0)) + ref_item.reset(); + return ref_item; } @@ -231,7 +242,11 @@ shared_ptr Ruler::get_mouse_over_item(const QPoint &pt) void Ruler::mouseDoubleClickEvent(QMouseEvent *event) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + hover_item_ = view_.add_flag(get_absolute_time_from_x_pos(event->pos().x())); +#else hover_item_ = view_.add_flag(get_absolute_time_from_x_pos(event->x())); +#endif } void Ruler::paintEvent(QPaintEvent*) @@ -272,7 +287,7 @@ void Ruler::paintEvent(QPaintEvent*) const int rightedge = width(); const int x_tick = tick.first; if ((x_tick > leftedge) && (x_tick < rightedge)) { - const int x_left_bound = QFontMetrics(font()).width(tick.second) / 2; + const int x_left_bound = util::text_width(QFontMetrics(font()), tick.second) / 2; const int x_right_bound = rightedge - x_left_bound; const int x_legend = min(max(x_tick, x_left_bound), x_right_bound); p.drawText(x_legend, ValueMargin, 0, text_height, @@ -392,6 +407,11 @@ void Ruler::on_setZeroPosition() view_.set_zero_position(get_absolute_time_from_x_pos(mouse_down_point_.x())); } +void Ruler::on_resetZeroPosition() +{ + view_.reset_zero_position(); +} + void Ruler::on_toggleHoverMarker() { GlobalSettings settings;