Use list_by_type instead of iterator
[pulseview.git] / pv / view / view.cpp
index 540b90e14cffb17021e698549b780475e689f280..6d366e7311881b8736b80daf2709becd72d7c88b 100644 (file)
@@ -32,6 +32,8 @@
 #include <mutex>
 #include <unordered_set>
 
+#include <boost/thread/locks.hpp>
+
 #include <QApplication>
 #include <QEvent>
 #include <QFontMetrics>
@@ -507,7 +509,11 @@ void View::update_viewport()
 void View::restack_all_trace_tree_items()
 {
        // Make a list of owners that is sorted from deepest first
-       const auto owners = list_row_item_owners();
+       const vector<shared_ptr<TraceTreeItem>> items(
+               list_by_type<TraceTreeItem>());
+       set< TraceTreeItemOwner* > owners;
+       for (const auto &r : items)
+               owners.insert(r->owner());
        vector< TraceTreeItemOwner* > sorted_owners(owners.begin(), owners.end());
        sort(sorted_owners.begin(), sorted_owners.end(),
                [](const TraceTreeItemOwner* a, const TraceTreeItemOwner *b) {
@@ -518,8 +524,8 @@ void View::restack_all_trace_tree_items()
                o->restack_items();
 
        // Animate the items to their destination
-       for (const auto &r : *this)
-               r->animate_to_layout_v_offset();
+       for (const auto &i : items)
+               i->animate_to_layout_v_offset();
 }
 
 void View::get_scroll_layout(double &length, Timestamp &offset) const
@@ -875,7 +881,9 @@ void View::signals_changed()
 
        // Make a list of traces that are being added, and a list of traces
        // that are being removed
-       const set<shared_ptr<Trace>> prev_traces = list_by_type<Trace>();
+       const vector<shared_ptr<Trace>> prev_trace_list = list_by_type<Trace>();
+       const set<shared_ptr<Trace>> prev_traces(
+               prev_trace_list.begin(), prev_trace_list.end());
 
        shared_lock<shared_mutex> lock(session_.signals_mutex());
        const unordered_set< shared_ptr<Signal> > &sigs(session_.signals());
@@ -1057,7 +1065,9 @@ void View::process_sticky_events()
 
 void View::on_hover_point_changed()
 {
-       for (shared_ptr<TraceTreeItem> r : *this)
+       const vector<shared_ptr<TraceTreeItem>> trace_tree_items(
+               list_by_type<TraceTreeItem>());
+       for (shared_ptr<TraceTreeItem> r : trace_tree_items)
                r->hover_point_changed();
 }