Before, successive runs were shifting the zero point for no valid reason
and markers created on the ruler/trace used the wrong time and thus
showed up at the wrong location.
return pv::util::format_time_minutes(t, precision, sign);
}
return pv::util::format_time_minutes(t, precision, sign);
}
-pv::util::Timestamp Ruler::get_time_from_x_pos(uint32_t x) const
+pv::util::Timestamp Ruler::get_absolute_time_from_x_pos(uint32_t x) const
+{
+ return view_.offset() + ((double)x + 0.5) * view_.scale();
+}
+
+pv::util::Timestamp Ruler::get_ruler_time_from_x_pos(uint32_t x) const
{
return view_.ruler_offset() + ((double)x + 0.5) * view_.scale();
}
{
return view_.ruler_offset() + ((double)x + 0.5) * view_.scale();
}
void Ruler::mouseDoubleClickEvent(QMouseEvent *event)
{
void Ruler::mouseDoubleClickEvent(QMouseEvent *event)
{
- view_.add_flag(get_time_from_x_pos(event->x()));
+ view_.add_flag(get_ruler_time_from_x_pos(event->x()));
}
void Ruler::paintEvent(QPaintEvent*)
}
void Ruler::paintEvent(QPaintEvent*)
void Ruler::on_createMarker()
{
void Ruler::on_createMarker()
{
- view_.add_flag(get_time_from_x_pos(mouse_down_point_.x()));
+ view_.add_flag(get_absolute_time_from_x_pos(mouse_down_point_.x()));
}
void Ruler::on_setZeroPosition()
{
}
void Ruler::on_setZeroPosition()
{
- view_.set_zero_position(get_time_from_x_pos(mouse_down_point_.x()));
+ view_.set_zero_position(get_absolute_time_from_x_pos(mouse_down_point_.x()));
}
void Ruler::on_toggleHoverMarker()
}
void Ruler::on_toggleHoverMarker()
unsigned precision = 0,
bool sign = true);
unsigned precision = 0,
bool sign = true);
- pv::util::Timestamp get_time_from_x_pos(uint32_t x) const;
+ pv::util::Timestamp get_absolute_time_from_x_pos(uint32_t x) const;
+ pv::util::Timestamp get_ruler_time_from_x_pos(uint32_t x) const;
protected:
virtual void contextMenuEvent(QContextMenuEvent *event) override;
protected:
virtual void contextMenuEvent(QContextMenuEvent *event) override;
const Ruler *ruler = view->ruler();
QPoint p = ruler->mapFrom(view, QPoint(context_menu_x_pos_, 0));
const Ruler *ruler = view->ruler();
QPoint p = ruler->mapFrom(view, QPoint(context_menu_x_pos_, 0));
- view->add_flag(ruler->get_time_from_x_pos(p.x()));
+ view->add_flag(ruler->get_absolute_time_from_x_pos(p.x()));
settings.setValue("splitter_state", splitter_->saveState());
settings.setValue("segment_display_mode", segment_display_mode_);
settings.setValue("splitter_state", splitter_->saveState());
settings.setValue("segment_display_mode", segment_display_mode_);
- {
- stringstream ss;
- boost::archive::text_oarchive oa(ss);
- oa << boost::serialization::make_nvp("ruler_shift", ruler_shift_);
- settings.setValue("ruler_shift", QString::fromStdString(ss.str()));
- }
{
stringstream ss;
boost::archive::text_oarchive oa(ss);
{
stringstream ss;
boost::archive::text_oarchive oa(ss);
if (settings.contains("scale"))
set_scale(settings.value("scale").toDouble());
if (settings.contains("scale"))
set_scale(settings.value("scale").toDouble());
- if (settings.contains("ruler_shift")) {
- util::Timestamp shift;
- stringstream ss;
- ss << settings.value("ruler_shift").toString().toStdString();
-
- try {
- boost::archive::text_iarchive ia(ss);
- ia >> boost::serialization::make_nvp("ruler_shift", shift);
- ruler_shift_ = shift;
- } catch (boost::archive::archive_exception&) {
- qDebug() << "Could not restore the view ruler shift";
- }
- }
-
if (settings.contains("offset")) {
util::Timestamp offset;
stringstream ss;
if (settings.contains("offset")) {
util::Timestamp offset;
stringstream ss;
{
if ((offset_ != offset) || force_update) {
offset_ = offset;
{
if ((offset_ != offset) || force_update) {
offset_ = offset;
- ruler_offset_ = offset_ + ruler_shift_;
+ ruler_offset_ = offset_ + zero_offset_;
void View::set_zero_position(const pv::util::Timestamp& position)
{
void View::set_zero_position(const pv::util::Timestamp& position)
{
- // ruler shift is a negative offset and the new zero position is relative
- // to the current offset. Hence, we adjust the ruler shift only by the
- // difference.
- ruler_shift_ = -(position + (-ruler_shift_));
+ zero_offset_ = -position;
// Force an immediate update of the offsets
set_offset(offset_, true);
// Force an immediate update of the offsets
set_offset(offset_, true);
void View::reset_zero_position()
{
void View::reset_zero_position()
{
// Force an immediate update of the offsets
set_offset(offset_, true);
// Force an immediate update of the offsets
set_offset(offset_, true);
set_time_unit(util::TimeUnit::Samples);
trigger_markers_.clear();
set_time_unit(util::TimeUnit::Samples);
trigger_markers_.clear();
scale_at_acq_start_ = scale_;
offset_at_acq_start_ = offset_;
scale_at_acq_start_ = scale_;
offset_at_acq_start_ = offset_;
pv::util::Timestamp offset_;
/// The ruler version of the time offset in seconds.
pv::util::Timestamp ruler_offset_;
pv::util::Timestamp offset_;
/// The ruler version of the time offset in seconds.
pv::util::Timestamp ruler_offset_;
+ /// The offset of the zero point in seconds.
+ pv::util::Timestamp zero_offset_;
bool updating_scroll_;
bool settings_restored_;
bool updating_scroll_;
bool settings_restored_;
void ViewBase::reset_view_state()
{
void ViewBase::reset_view_state()
{
const bool is_main_view_;
const bool is_main_view_;
- util::Timestamp ruler_shift_;
util::TimeUnit time_unit_;
unordered_set< shared_ptr<data::SignalBase> > signalbases_;
util::TimeUnit time_unit_;
unordered_set< shared_ptr<data::SignalBase> > signalbases_;