SLOT(on_view_alwaysZoomToFit_changed(int)));
trace_view_layout->addRow(tr("Constantly perform &zoom-to-fit during capture"), cb);
+ cb = create_checkbox(GlobalSettings::Key_View_ZoomToFitAfterAcq,
+ SLOT(on_view_zoomToFitAfterAcq_changed(int)));
+ trace_view_layout->addRow(tr("Perform a zoom-to-&fit when acquisition stops"), cb);
+
cb = create_checkbox(GlobalSettings::Key_View_StickyScrolling,
SLOT(on_view_stickyScrolling_changed(int)));
trace_view_layout->addRow(tr("Always keep &newest samples at the right edge during capture"), cb);
settings.setValue(GlobalSettings::Key_View_AlwaysZoomToFit, state ? true : false);
}
+void Settings::on_view_zoomToFitAfterAcq_changed(int state)
+{
+ GlobalSettings settings;
+ settings.setValue(GlobalSettings::Key_View_ZoomToFitAfterAcq, state ? true : false);
+}
+
void Settings::on_view_colouredBG_changed(int state)
{
GlobalSettings settings;
private Q_SLOTS:
void on_page_changed(QListWidgetItem *current, QListWidgetItem *previous);
void on_view_alwaysZoomToFit_changed(int state);
+ void on_view_zoomToFitAfterAcq_changed(int state);
void on_view_colouredBG_changed(int state);
void on_view_stickyScrolling_changed(int state);
void on_view_showSamplingPoints_changed(int state);
namespace pv {
const QString GlobalSettings::Key_View_AlwaysZoomToFit = "View_AlwaysZoomToFit";
+const QString GlobalSettings::Key_View_ZoomToFitAfterAcq = "View_ZoomToFitAfterAcq";
const QString GlobalSettings::Key_View_ColouredBG = "View_ColouredBG";
const QString GlobalSettings::Key_View_StickyScrolling = "View_StickyScrolling";
const QString GlobalSettings::Key_View_ShowSamplingPoints = "View_ShowSamplingPoints";
void GlobalSettings::set_defaults_where_needed()
{
+ // Enable zoom-to-fit after acquisition by default
+ if (!contains(Key_View_ZoomToFitAfterAcq))
+ setValue(Key_View_ZoomToFitAfterAcq, true);
+
// Enable coloured trace backgrounds by default
if (!contains(Key_View_ColouredBG))
setValue(Key_View_ColouredBG, true);
public:
static const QString Key_View_AlwaysZoomToFit;
+ static const QString Key_View_ZoomToFitAfterAcq;
static const QString Key_View_ColouredBG;
static const QString Key_View_StickyScrolling;
static const QString Key_View_ShowSamplingPoints;
trigger_markers_(),
hover_point_(-1, -1),
scroll_needs_defaults_(true),
- saved_v_offset_(0)
+ saved_v_offset_(0),
+ scale_at_acq_start_(0),
+ offset_at_acq_start_(0),
+ suppress_zoom_to_fit_after_acq_(false)
{
QVBoxLayout *root_layout = new QVBoxLayout(this);
root_layout->setContentsMargins(0, 0, 0, 0);
}
settings_restored_ = true;
+ suppress_zoom_to_fit_after_acq_ = true;
}
vector< shared_ptr<TimeItem> > View::time_items() const
void View::capture_state_updated(int state)
{
+ GlobalSettings settings;
+
if (state == Session::Running) {
set_time_unit(util::TimeUnit::Samples);
trigger_markers_.clear();
+ scale_at_acq_start_ = scale_;
+ offset_at_acq_start_ = offset_;
+
// Activate "always zoom to fit" if the setting is enabled and we're
// the main view of this session (other trace views may be used for
// zooming and we don't want to mess them up)
- GlobalSettings settings;
bool state = settings.value(GlobalSettings::Key_View_AlwaysZoomToFit).toBool();
if (is_main_view_ && state) {
always_zoom_to_fit_ = true;
always_zoom_to_fit_ = false;
always_zoom_to_fit_changed(always_zoom_to_fit_);
}
+
+ bool zoom_to_fit_after_acq =
+ settings.value(GlobalSettings::Key_View_ZoomToFitAfterAcq).toBool();
+
+ // Only perform zoom-to-fit if the user hasn't altered the viewport and
+ // we didn't restore settings in the meanwhile
+ if (zoom_to_fit_after_acq &&
+ !suppress_zoom_to_fit_after_acq_ &&
+ (scale_ == scale_at_acq_start_) &&
+ (offset_ == offset_at_acq_start_))
+ zoom_fit(false); // We're stopped, so the GUI state doesn't matter
+
+ suppress_zoom_to_fit_after_acq_ = false;
}
}
// A nonzero value indicates the v offset to restore. See View::resizeEvent()
int saved_v_offset_;
+
+ // These are used to determine whether the view was altered after acq started
+ double scale_at_acq_start_;
+ pv::util::Timestamp offset_at_acq_start_;
+
+ // Used to suppress performing a "zoom to fit" when the session stops. This
+ // is needed when the view's settings are restored before acquisition ends.
+ // In that case we want to keep the restored settings, not have a "zoom to fit"
+ // mess them up.
+ bool suppress_zoom_to_fit_after_acq_;
};
} // namespace trace