return hover_point_;
}
-void View::update_viewport()
-{
- assert(viewport_);
- viewport_->update();
- header_->update();
-}
-
void View::restack_all_trace_tree_items()
{
// Make a list of owners that is sorted from deepest first
update_scroll();
}
-void View::paint_label(QPainter &p, const QRect &rect, bool hover)
-{
- (void)p;
- (void)rect;
- (void)hover;
-}
-
-QRectF View::label_rect(const QRectF &rect)
-{
- (void)rect;
- return QRectF();
-}
-
TraceTreeItemOwner* View::find_prevalent_trace_group(
const shared_ptr<sigrok::ChannelGroup> &group,
- const unordered_map<shared_ptr<sigrok::Channel>, shared_ptr<Signal> >
+ const unordered_map<shared_ptr<data::SignalBase>, shared_ptr<Signal> >
&signal_map)
{
assert(group);
// Make a set and a list of all the owners
for (const auto &channel : group->channels()) {
- const auto iter = signal_map.find(channel);
- if (iter == signal_map.end())
- continue;
-
- TraceTreeItemOwner *const o = (*iter).second->owner();
- owner_list.push_back(o);
- owners.insert(o);
+ for (auto entry : signal_map) {
+ if (entry.first->channel() == channel) {
+ TraceTreeItemOwner *const o = (entry.second)->owner();
+ owner_list.push_back(o);
+ owners.insert(o);
+ }
+ }
}
// Iterate through the list of owners, and find the most prevalent
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> >
+ const unordered_map<shared_ptr<data::SignalBase>, 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);
+ for (auto entry : signal_map) {
+ if (entry.first->channel() == channel) {
+ shared_ptr<Trace> trace = entry.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;
if (!session_.device()) {
reset_scroll();
} else {
- assert(sr_dev);
sr_dev = session_.device()->device();
+ assert(sr_dev);
channels = sr_dev->channels();
}
inserter(remove_traces, remove_traces.begin()));
// Make a look-up table of sigrok Channels to pulseview Signals
- unordered_map<shared_ptr<sigrok::Channel>, shared_ptr<Signal> >
+ unordered_map<shared_ptr<data::SignalBase>, shared_ptr<Signal> >
signal_map;
for (const shared_ptr<Signal> &sig : sigs)
signal_map[sig->channel()] = sig;
offset += extents.second;
}
- // Assign proper vertical offsets to each channel in the group
- new_trace_group->restack_items();
+ if (new_trace_group) {
+ // Assign proper vertical offsets to each channel in the group
+ new_trace_group->restack_items();
- // If this is a new group, enqueue it in the new top level
- // items list
- if (!new_traces_in_group.empty() && new_trace_group)
- new_top_level_items.push_back(new_trace_group);
+ // If this is a new group, enqueue it in the new top level
+ // items list
+ if (!new_traces_in_group.empty())
+ new_top_level_items.push_back(new_trace_group);
+ }
}
// Enqueue the remaining logic channels in a group
// Remove any empty trace groups
for (shared_ptr<TraceGroup> group : list_by_type<TraceGroup>())
- if (group->child_items().size() == 0)
+ if (group->child_items().size() == 0) {
remove_child_item(group);
+ group.reset();
+ }
// Add and position the pending top levels items
for (auto item : new_top_level_items) {