using std::back_inserter;
using std::copy_if;
using std::count_if;
-using std::dynamic_pointer_cast;
using std::inserter;
using std::max;
using std::make_pair;
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);
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_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
viewport_->installEventFilter(this);
connect(splitter_, SIGNAL(splitterMoved(int, int)),
this, SLOT(on_splitter_moved()));
- connect(this, SIGNAL(hover_point_changed()),
- this, SLOT(on_hover_point_changed()));
-
connect(&lazy_event_handler_, SIGNAL(timeout()),
this, SLOT(process_sticky_events()));
lazy_event_handler_.setSingleShot(true);
decode_traces_.clear();
}
-void View::add_decode_signal(shared_ptr<data::SignalBase> signalbase)
+void View::add_decode_signal(shared_ptr<data::DecodeSignal> signal)
{
shared_ptr<DecodeTrace> d(
- new DecodeTrace(session_, signalbase, decode_traces_.size()));
+ new DecodeTrace(session_, signal, decode_traces_.size()));
decode_traces_.push_back(d);
}
-void View::remove_decode_signal(shared_ptr<data::SignalBase> signalbase)
+void View::remove_decode_signal(shared_ptr<data::DecodeSignal> signal)
{
for (auto i = decode_traces_.begin(); i != decode_traces_.end(); i++)
- if ((*i)->base() == signalbase) {
+ if ((*i)->base() == signal) {
decode_traces_.erase(i);
signals_changed();
return;
}
settings_restored_ = true;
+ suppress_zoom_to_fit_after_acq_ = true;
}
vector< shared_ptr<TimeItem> > View::time_items() const
else
hover_point_ = QPoint(-1, -1);
- hover_point_changed();
+ update_hover_point();
} else if (type == QEvent::Leave) {
hover_point_ = QPoint(-1, -1);
- hover_point_changed();
+ update_hover_point();
} else if (type == QEvent::Show) {
// This is somewhat of a hack, unfortunately. We cannot use
update_layout();
}
+void View::update_hover_point()
+{
+ const vector<shared_ptr<TraceTreeItem>> trace_tree_items(
+ list_by_type<TraceTreeItem>());
+ for (shared_ptr<TraceTreeItem> r : trace_tree_items)
+ r->hover_point_changed(hover_point_);
+
+ hover_point_changed(hover_point_);
+}
+
void View::row_item_appearance_changed(bool label, bool content)
{
if (label)
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();
+ bool state = settings.value(GlobalSettings::Key_View_ZoomToFitDuringAcq).toBool();
if (is_main_view_ && state) {
always_zoom_to_fit_ = true;
always_zoom_to_fit_changed(always_zoom_to_fit_);
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;
}
}
sticky_events_ = 0;
}
-void View::on_hover_point_changed()
-{
- const vector<shared_ptr<TraceTreeItem>> trace_tree_items(
- list_by_type<TraceTreeItem>());
- for (shared_ptr<TraceTreeItem> r : trace_tree_items)
- r->hover_point_changed();
-}
-
} // namespace trace
} // namespace views
} // namespace pv