RowItemOwner: Added list_row_item_owners
[pulseview.git] / pv / view / view.cpp
index f6c418433021d9007400b7a407cfe6e7289a6487..f7f9834d6695dfc59784753a603e41e6ca0928d1 100644 (file)
@@ -48,6 +48,7 @@
 #include "viewport.hpp"
 
 #include "pv/session.hpp"
+#include "pv/devices/device.hpp"
 #include "pv/data/logic.hpp"
 #include "pv/data/logicsegment.hpp"
 #include "pv/util.hpp"
@@ -90,7 +91,7 @@ View::View(Session &session, QWidget *parent) :
        viewport_(new Viewport(*this)),
        ruler_(new Ruler(*this)),
        header_(new Header(*this)),
-       scale_(1e-6),
+       scale_(1e-3),
        offset_(0),
        updating_scroll_(false),
        tick_period_(0.0),
@@ -323,7 +324,7 @@ pair<double, double> View::get_time_extents() const
                        const double start_time = s->start_time();
                        left_time = min(left_time, start_time);
                        right_time = max(right_time, start_time +
-                               d->get_max_sample_count() / samplerate);
+                               d->max_sample_count() / samplerate);
                }
        }
 
@@ -400,12 +401,8 @@ void View::update_viewport()
 
 void View::restack_all_row_items()
 {
-       // Make a set of owners
-       unordered_set< RowItemOwner* > owners;
-       for (const auto &r : *this)
-               owners.insert(r->owner());
-
-       // Make a list that is sorted from deepest first
+       // Make a list of owners that is sorted from deepest first
+       const auto owners = list_row_item_owners();
        vector< RowItemOwner* > sorted_owners(owners.begin(), owners.end());
        sort(sorted_owners.begin(), sorted_owners.end(),
                [](const RowItemOwner* a, const RowItemOwner *b) {
@@ -675,8 +672,12 @@ void View::signals_changed()
        // Populate the traces
        clear_child_items();
 
-       shared_ptr<sigrok::Device> device = session_.device();
-       assert(device);
+       const auto device = session_.device();
+       if (!device)
+               return;
+
+       shared_ptr<sigrok::Device> sr_dev = device->device();
+       assert(sr_dev);
 
        // Collect a set of signals
        unordered_map<shared_ptr<sigrok::Channel>, shared_ptr<Signal> >
@@ -689,7 +690,7 @@ void View::signals_changed()
                signal_map[sig->channel()] = sig;
 
        // Populate channel groups
-       for (auto entry : device->channel_groups())
+       for (auto entry : sr_dev->channel_groups())
        {
                const shared_ptr<sigrok::ChannelGroup> &group = entry.second;
 
@@ -710,7 +711,7 @@ void View::signals_changed()
        shared_ptr<TraceGroup> logic_trace_group(new TraceGroup());
        int child_offset = 0;
 
-       if (add_channels_to_owner(device->channels(),
+       if (add_channels_to_owner(sr_dev->channels(),
                logic_trace_group.get(), child_offset, signal_map,
                [](shared_ptr<RowItem> r) -> bool {
                        return dynamic_pointer_cast<LogicSignal>(r) != nullptr;
@@ -722,7 +723,7 @@ void View::signals_changed()
        }
 
        // Add the remaining channels
-       add_channels_to_owner(device->channels(), this, offset, signal_map);
+       add_channels_to_owner(sr_dev->channels(), this, offset, signal_map);
        assert(signal_map.empty());
 
        // Add decode signals