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;
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);
{
ViewBase::add_signalbase(signal->base());
signals_.insert(signal);
+
+ connect(signal->base().get(), SIGNAL(name_changed(const QString&)),
+ this, SLOT(on_signal_name_changed()));
}
#ifdef ENABLE_DECODE
shared_ptr<DecodeTrace> d(
new DecodeTrace(session_, signal, decode_traces_.size()));
decode_traces_.push_back(d);
+
+ connect(signal.get(), SIGNAL(name_changed(const QString&)),
+ this, SLOT(on_signal_name_changed()));
}
void View::remove_decode_signal(shared_ptr<data::DecodeSignal> signal)
settings_restored_ = true;
suppress_zoom_to_fit_after_acq_ = true;
+
+ // Update the ruler so that it uses the new scale
+ calculate_tick_spacing();
}
vector< shared_ptr<TimeItem> > View::time_items() const
void View::expand_header_to_fit()
{
+ // Setting the maximum width of the header widget doesn't work as
+ // expected because the splitter would allow the user to make the
+ // pane wider than that, creating empty space as a result.
+ // To make this work, we stricly enforce the maximum width by
+ // expanding the header unless the user shrunk it on purpose.
+ // As we're then setting the width of the header pane, we set the
+ // splitter to the maximum allowed position.
+
int splitter_area_width = 0;
for (int w : splitter_->sizes())
splitter_area_width += w;
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)
lazy_event_handler_.start();
}
+void View::on_signal_name_changed()
+{
+ if (!header_was_shrunk())
+ expand_header_to_fit();
+}
+
void View::on_splitter_moved()
{
- // Setting the maximum width of the header widget doesn't work as
- // expected because the splitter would allow the user to make the
- // pane wider than that, creating empty space as a result.
- // To make this work, we stricly enforce the maximum width by
- // expanding the header unless the user shrunk it on purpose.
- // As we're then setting the width of the header pane, we set the
- // splitter to the maximum allowed position.
if (!header_was_shrunk())
expand_header_to_fit();
}
}
}
+void View::on_segment_changed(int segment)
+{
+ current_segment_ = segment - 1;
+
+ for (shared_ptr<Signal> signal : signals_)
+ signal->set_current_segment(current_segment_);
+
+ viewport_->update();
+}
+
void View::perform_delayed_view_update()
{
if (always_zoom_to_fit_) {
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