X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=8e48ae444582ffd96b9f3d5af407dcd28b3abe17;hp=c9b08bf8c0445de0783d5bbb16d4d4275f5066f1;hb=d6128866e740f496a1bb3c9636e188648507fc3a;hpb=9d4010c7f02b1c7575db2fb163b0d6daf323c1a9 diff --git a/pv/view/view.cpp b/pv/view/view.cpp index c9b08bf8..8e48ae44 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -43,7 +43,6 @@ #include #include "analogsignal.hpp" -#include "decodetrace.hpp" #include "header.hpp" #include "logicsignal.hpp" #include "ruler.hpp" @@ -59,6 +58,10 @@ #include "pv/data/logicsegment.hpp" #include "pv/util.hpp" +#ifdef ENABLE_DECODE +#include "decodetrace.hpp" +#endif + using boost::shared_lock; using boost::shared_mutex; @@ -455,9 +458,11 @@ void View::enable_coloured_bg(bool state) if (l) l->set_coloured_bg(state); +#ifdef ENABLE_DECODE shared_ptr d = dynamic_pointer_cast(i); if (d) d->set_coloured_bg(state); +#endif } viewport_->update(); @@ -821,9 +826,9 @@ bool View::eventFilter(QObject *object, QEvent *event) return QObject::eventFilter(object, event); } -bool View::viewportEvent(QEvent *e) +bool View::viewportEvent(QEvent *event) { - switch (e->type()) { + switch (event->type()) { case QEvent::Paint: case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: @@ -835,7 +840,7 @@ bool View::viewportEvent(QEvent *e) case QEvent::TouchEnd: return false; default: - return QAbstractScrollArea::viewportEvent(e); + return QAbstractScrollArea::viewportEvent(event); } } @@ -906,13 +911,11 @@ void View::signals_changed() vector< shared_ptr > new_top_level_items; - const auto device = session_.device(); - if (!device) + if (!session_.device()) return; - shared_ptr sr_dev = device->device(); + shared_ptr sr_dev = session_.device()->device(); assert(sr_dev); - const vector< shared_ptr > channels( sr_dev->channels()); @@ -987,6 +990,9 @@ void View::signals_changed() offset += extents.second; } + // 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) @@ -998,19 +1004,23 @@ void View::signals_changed() copy_if(channels.begin(), channels.end(), back_inserter(logic_channels), [](const shared_ptr& c) { return c->type() == sigrok::ChannelType::LOGIC; }); + const vector< shared_ptr > non_grouped_logic_signals = - extract_new_traces_for_channels(logic_channels, - signal_map, add_traces); - const shared_ptr non_grouped_trace_group( - make_shared()); - for (shared_ptr trace : non_grouped_logic_signals) - non_grouped_trace_group->add_child_item(trace); - new_top_level_items.push_back(non_grouped_trace_group); + extract_new_traces_for_channels(logic_channels, signal_map, add_traces); + + if (non_grouped_logic_signals.size() > 0) { + const shared_ptr non_grouped_trace_group( + make_shared()); + for (shared_ptr trace : non_grouped_logic_signals) + non_grouped_trace_group->add_child_item(trace); + + non_grouped_trace_group->restack_items(); + new_top_level_items.push_back(non_grouped_trace_group); + } // Enqueue the remaining channels as free ungrouped traces const vector< shared_ptr > new_top_level_signals = - extract_new_traces_for_channels(channels, - signal_map, add_traces); + extract_new_traces_for_channels(channels, signal_map, add_traces); new_top_level_items.insert(new_top_level_items.end(), new_top_level_signals.begin(), new_top_level_signals.end()); @@ -1027,16 +1037,15 @@ void View::signals_changed() // Add and position the pending top levels items for (auto item : new_top_level_items) { + // Position the item after the last item or at the top if there is none + int offset = v_extents().second; + add_child_item(item); + item->force_to_v_offset(offset); - // Position the item after the last present item - int offset = v_extents().second; const pair extents = item->v_extents(); if (item->enabled()) - offset += -extents.first; - item->force_to_v_offset(offset); - if (item->enabled()) - offset += extents.second; + offset += (extents.second - extents.first); } update_layout();