+void View::save_settings(QSettings &settings) const
+{
+ settings.setValue("scale", scale_);
+ settings.setValue("v_offset",
+ scrollarea_.verticalScrollBar()->sliderPosition());
+
+ stringstream ss;
+ boost::archive::text_oarchive oa(ss);
+ oa << boost::serialization::make_nvp("offset", offset_);
+ settings.setValue("offset", QString::fromStdString(ss.str()));
+
+ for (shared_ptr<Signal> signal : signals_) {
+ settings.beginGroup(signal->base()->internal_name());
+ signal->save_settings(settings);
+ settings.endGroup();
+ }
+}
+
+void View::restore_settings(QSettings &settings)
+{
+ // Note: It is assumed that this function is only called once,
+ // immediately after restoring a previous session.
+
+ if (settings.contains("scale"))
+ set_scale(settings.value("scale").toDouble());
+
+ if (settings.contains("offset")) {
+ util::Timestamp offset;
+ stringstream ss;
+ ss << settings.value("offset").toString().toStdString();
+
+ boost::archive::text_iarchive ia(ss);
+ ia >> boost::serialization::make_nvp("offset", offset);
+
+ set_offset(offset);
+ }
+
+ for (shared_ptr<Signal> signal : signals_) {
+ settings.beginGroup(signal->base()->internal_name());
+ signal->restore_settings(settings);
+ settings.endGroup();
+ }
+
+ if (settings.contains("v_offset")) {
+ saved_v_offset_ = settings.value("v_offset").toInt();
+ set_v_offset(saved_v_offset_);
+ scroll_needs_defaults_ = false;
+ // Note: see resizeEvent() for additional information
+ }
+}
+