X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.cpp;h=22f23ccfbca737d00efa00c22ed07075560c9184;hb=710c2a1896fbac968c82f2d1257aaabd10a48cc8;hp=f1d7aa3dfca872a29bc81f5c0c2c444e4a34e03e;hpb=f4ab4b5c657e5613caba82feaa81a8a400e4f331;p=pulseview.git diff --git a/pv/views/trace/view.cpp b/pv/views/trace/view.cpp index f1d7aa3d..22f23ccf 100644 --- a/pv/views/trace/view.cpp +++ b/pv/views/trace/view.cpp @@ -129,7 +129,7 @@ View::View(Session &session, bool is_main_view, QWidget *parent) : // Note: Place defaults in View::reset_view_state(), not here splitter_(new QSplitter()), - header_was_shrunk_(false), // The splitter remains unchanged after a reset, so this goes here + header_was_shrunk_(false), // The splitter remains unchanged after a reset, so this goes here sticky_scrolling_(false) // Default setting is set in MainWindow::setup_ui() { QVBoxLayout *root_layout = new QVBoxLayout(this); @@ -168,8 +168,8 @@ View::View(Session &session, bool is_main_view, QWidget *parent) : splitter_->setHandleWidth(1); // Don't show a visible rubber band splitter_->setCollapsible(0, false); // Prevent the header from collapsing splitter_->setCollapsible(1, false); // Prevent the traces from collapsing - splitter_->setStretchFactor(0, 0); // Prevent the panes from being resized - splitter_->setStretchFactor(1, 1); // when the entire view is resized + splitter_->setStretchFactor(0, 0); // Prevent the panes from being resized + splitter_->setStretchFactor(1, 1); // when the entire view is resized splitter_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); viewport_->installEventFilter(this); @@ -362,12 +362,6 @@ void View::save_settings(QSettings &settings) const 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); @@ -390,20 +384,6 @@ void View::restore_settings(QSettings &settings) 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; @@ -463,6 +443,11 @@ vector< shared_ptr > View::time_items() const return items; } +shared_ptr View::get_reference_time_item() +{ + return ruler_->get_reference_item(); +} + double View::scale() const { return scale_; @@ -480,7 +465,7 @@ void View::set_offset(const pv::util::Timestamp& offset, bool force_update) { if ((offset_ != offset) || force_update) { offset_ = offset; - ruler_offset_ = offset_ + ruler_shift_; + ruler_offset_ = offset_ + zero_offset_; offset_changed(); } } @@ -495,9 +480,9 @@ const Timestamp& View::ruler_offset() const return ruler_offset_; } -void View::set_zero_position(pv::util::Timestamp& position) +void View::set_zero_position(const pv::util::Timestamp& position) { - ruler_shift_ = -position; + zero_offset_ = -position; // Force an immediate update of the offsets set_offset(offset_, true); @@ -506,13 +491,18 @@ void View::set_zero_position(pv::util::Timestamp& position) void View::reset_zero_position() { - ruler_shift_ = 0; + zero_offset_ = 0; // Force an immediate update of the offsets set_offset(offset_, true); ruler_->update(); } +pv::util::Timestamp View::zero_offset() const +{ + return zero_offset_; +} + int View::owner_visual_v_offset() const { return -scrollarea_->verticalScrollBar()->sliderPosition(); @@ -764,10 +754,10 @@ pair View::get_time_extents() const const Timestamp start_time = s->start_time(); left_time = left_time ? min(*left_time, start_time) : - start_time; + start_time; right_time = right_time ? max(*right_time, start_time + d->max_sample_count() / samplerate) : - start_time + d->max_sample_count() / samplerate; + start_time + d->max_sample_count() / samplerate; } } @@ -810,22 +800,36 @@ bool View::cursors_shown() const void View::show_cursors(bool show) { - show_cursors_ = show; - cursor_state_changed(show); + if (show_cursors_ != show) { + show_cursors_ = show; + + cursor_state_changed(show); + ruler_->update(); + viewport_->update(); + } +} + +void View::set_cursors(pv::util::Timestamp& first, pv::util::Timestamp& second) +{ + assert(cursors_); + + cursors_->first()->set_time(first); + cursors_->second()->set_time(second); + ruler_->update(); viewport_->update(); } void View::centre_cursors() { - if (cursors_) { - const double time_width = scale_ * viewport_->width(); - cursors_->first()->set_time(offset_ + time_width * 0.4); - cursors_->second()->set_time(offset_ + time_width * 0.6); + assert(cursors_); - ruler_->update(); - viewport_->update(); - } + const double time_width = scale_ * viewport_->width(); + cursors_->first()->set_time(offset_ + time_width * 0.4); + cursors_->second()->set_time(offset_ + time_width * 0.6); + + ruler_->update(); + viewport_->update(); } shared_ptr View::cursors() const @@ -833,15 +837,17 @@ shared_ptr View::cursors() const return cursors_; } -void View::add_flag(const Timestamp& time) +shared_ptr View::add_flag(const Timestamp& time) { - flags_.push_back(make_shared(*this, time, - QString("%1").arg(next_flag_text_))); + shared_ptr flag = make_shared( + *this, time, QString("%1").arg(next_flag_text_)); + flags_.push_back(flag); next_flag_text_ = (next_flag_text_ >= 'Z') ? 'A' : (next_flag_text_ + 1); time_item_appearance_changed(true, true); + return flag; } void View::remove_flag(shared_ptr flag) @@ -1215,7 +1221,8 @@ void View::set_scroll_default() void View::determine_if_header_was_shrunk() { - const int header_pane_width = splitter_->sizes().front(); + const int header_pane_width = + splitter_->sizes().front(); // clazy:exclude=detaching-temporary // Allow for a slight margin of error so that we also accept // slight differences when e.g. a label name change increased @@ -1234,7 +1241,7 @@ void View::resize_header_to_fit() // splitter to the maximum allowed position. int splitter_area_width = 0; - for (int w : splitter_->sizes()) + for (int w : splitter_->sizes()) // clazy:exclude=range-loop splitter_area_width += w; // Make sure the header has enough horizontal space to show all labels fully @@ -1695,6 +1702,7 @@ void View::capture_state_updated(int state) set_time_unit(util::TimeUnit::Samples); trigger_markers_.clear(); + set_zero_position(0); scale_at_acq_start_ = scale_; offset_at_acq_start_ = offset_;