-void View::apply_offset(shared_ptr<RowItem> row_item, int &offset) {
- assert(row_item);
- const pair<int, int> extents = row_item->v_extents();
- if (row_item->enabled())
- offset += -extents.first;
- row_item->force_to_v_offset(offset);
- if (row_item->enabled())
- offset += extents.second;
+vector< shared_ptr<Trace> > View::extract_new_traces_for_channels(
+ const vector< shared_ptr<sigrok::Channel> > &channels,
+ const unordered_map<shared_ptr<sigrok::Channel>, shared_ptr<Signal> >
+ &signal_map,
+ set< shared_ptr<Trace> > &add_list)
+{
+ vector< shared_ptr<Trace> > filtered_traces;
+
+ for (const auto &channel : channels) {
+ const auto map_iter = signal_map.find(channel);
+ if (map_iter == signal_map.end())
+ continue;
+
+ shared_ptr<Trace> trace = (*map_iter).second;
+ const auto list_iter = add_list.find(trace);
+ if (list_iter == add_list.end())
+ continue;
+
+ filtered_traces.push_back(trace);
+ add_list.erase(list_iter);
+ }
+
+ return filtered_traces;
+}
+
+void View::determine_time_unit()
+{
+ // Check whether we know the sample rate and hence can use time as the unit
+ if (time_unit_ == util::TimeUnit::Samples) {
+ const unordered_set< shared_ptr<Signal> > sigs(session().signals());
+
+ // Check all signals but...
+ for (const shared_ptr<Signal> signal : sigs) {
+ const shared_ptr<SignalData> data = signal->data();
+
+ // ...only check first segment of each
+ const vector< shared_ptr<Segment> > segments = data->segments();
+ if (!segments.empty())
+ if (segments[0]->samplerate()) {
+ set_time_unit(util::TimeUnit::Time);
+ break;
+ }
+ }
+ }