X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=695d5f9f094b367a0b6aafc9050df2c9bad5f2ff;hb=e37e05f7f0b20076b21cf5644dc94915111facdb;hp=9cc1487e9dc30216c5e146d85c46ae48a44d291b;hpb=819e2e95555b2b3c2190f24a3cfa82250d1f34e5;p=pulseview.git diff --git a/pv/view/view.cpp b/pv/view/view.cpp index 9cc1487..695d5f9 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include "decodetrace.hpp" #include "header.hpp" @@ -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" @@ -84,10 +85,6 @@ const int View::MaxScrollValue = INT_MAX / 2; const int View::ScaleUnits[3] = {1, 2, 5}; -const QColor View::CursorAreaColour(220, 231, 243); - -const QSizeF View::LabelPadding(4, 0); - View::View(Session &session, QWidget *parent) : QAbstractScrollArea(parent), session_(session), @@ -96,7 +93,6 @@ View::View(Session &session, QWidget *parent) : header_(new Header(*this)), scale_(1e-6), offset_(0), - v_offset_(0), updating_scroll_(false), tick_period_(0.0), tick_prefix_(0), @@ -108,7 +104,7 @@ View::View(Session &session, QWidget *parent) : connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(h_scroll_value_changed(int))); connect(verticalScrollBar(), SIGNAL(valueChanged(int)), - this, SLOT(v_scroll_value_changed(int))); + this, SLOT(v_scroll_value_changed())); connect(&session_, SIGNAL(signals_changed()), this, SLOT(signals_changed())); @@ -119,9 +115,6 @@ View::View(Session &session, QWidget *parent) : connect(&session_, SIGNAL(frame_ended()), this, SLOT(data_updated())); - connect(header_, SIGNAL(signals_moved()), - this, SLOT(on_signals_moved())); - connect(header_, SIGNAL(selection_changed()), ruler_, SLOT(clear_selection())); connect(ruler_, SIGNAL(selection_changed()), @@ -209,7 +202,14 @@ double View::offset() const int View::owner_visual_v_offset() const { - return -v_offset_; + return -verticalScrollBar()->sliderPosition(); +} + +void View::set_v_offset(int offset) +{ + verticalScrollBar()->setSliderPosition(offset); + header_->update(); + viewport_->update(); } unsigned int View::depth() const @@ -298,7 +298,7 @@ void View::set_scale_offset(double scale, double offset) set< shared_ptr > View::get_visible_data() const { shared_lock lock(session().signals_mutex()); - const vector< shared_ptr > &sigs(session().signals()); + const unordered_set< shared_ptr > &sigs(session().signals()); // Make a set of all the visible data objects set< shared_ptr > visible_data; @@ -324,7 +324,7 @@ pair 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); } } @@ -663,9 +663,8 @@ void View::h_scroll_value_changed(int value) viewport_->update(); } -void View::v_scroll_value_changed(int value) +void View::v_scroll_value_changed() { - v_offset_ = value; header_->update(); viewport_->update(); } @@ -677,21 +676,25 @@ void View::signals_changed() // Populate the traces clear_child_items(); - shared_ptr device = session_.device(); - assert(device); + const auto device = session_.device(); + if (!device) + return; + + shared_ptr sr_dev = device->device(); + assert(sr_dev); // Collect a set of signals unordered_map, shared_ptr > signal_map; shared_lock lock(session_.signals_mutex()); - const vector< shared_ptr > &sigs(session_.signals()); + const unordered_set< shared_ptr > &sigs(session_.signals()); for (const shared_ptr &sig : sigs) signal_map[sig->channel()] = sig; // Populate channel groups - for (auto entry : device->channel_groups()) + for (auto entry : sr_dev->channel_groups()) { const shared_ptr &group = entry.second; @@ -712,7 +715,7 @@ void View::signals_changed() shared_ptr 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 r) -> bool { return dynamic_pointer_cast(r) != nullptr; @@ -724,7 +727,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 @@ -749,18 +752,14 @@ void View::data_updated() viewport_->update(); } -void View::on_signals_moved() -{ - update_scroll(); - signals_moved(); -} - void View::process_sticky_events() { if (sticky_events_ & RowItemHExtentsChanged) update_layout(); - if (sticky_events_ & RowItemVExtentsChanged) + if (sticky_events_ & RowItemVExtentsChanged) { restack_all_row_items(); + update_scroll(); + } // Clear the sticky events sticky_events_ = 0;