]> sigrok.org Git - pulseview.git/blobdiff - pv/view/decodetrace.cpp
DecodeTrace: Use correct background colour
[pulseview.git] / pv / view / decodetrace.cpp
index c0c4d167e109f17f16eeb374aba8420d863dd86f..61f67b9eb584ca424786e59c753b0354fb4e1216 100644 (file)
@@ -29,6 +29,8 @@ extern "C" {
 #include <tuple>
 
 #include <boost/functional/hash.hpp>
+#include <boost/thread/locks.hpp>
+#include <boost/thread/shared_mutex.hpp>
 
 #include <QAction>
 #include <QApplication>
@@ -136,7 +138,7 @@ DecodeTrace::DecodeTrace(pv::Session &session,
 {
        assert(decoder_stack_);
 
-       colour_ = DecodeColours[index % countof(DecodeColours)];
+       set_colour(DecodeColours[index % countof(DecodeColours)]);
 
        connect(decoder_stack_.get(), SIGNAL(new_decode_data()),
                this, SLOT(on_new_decode_data()));
@@ -180,8 +182,7 @@ void DecodeTrace::paint_mid(QPainter &p, const ViewItemPaintParams &pp)
 
        assert(decoder_stack_);
        const QString err = decoder_stack_->error_message();
-       if (!err.isEmpty())
-       {
+       if (!err.isEmpty()) {
                draw_unresolved_period(
                        p, annotation_height, pp.left(), pp.right());
                draw_error(p, err, pp);
@@ -197,8 +198,7 @@ void DecodeTrace::paint_mid(QPainter &p, const ViewItemPaintParams &pp)
        const vector<Row> rows(decoder_stack_->get_visible_rows());
 
        visible_rows_.clear();
-       for (size_t i = 0; i < rows.size(); i++)
-       {
+       for (size_t i = 0; i < rows.size(); i++) {
                const Row &row = rows[i];
 
                size_t base_colour = 0x13579BDF;
@@ -230,15 +230,13 @@ void DecodeTrace::paint_fore(QPainter &p, const ViewItemPaintParams &pp)
 
        assert(row_height_);
 
-       for (size_t i = 0; i < visible_rows_.size(); i++)
-       {
+       for (size_t i = 0; i < visible_rows_.size(); i++) {
                const int y = i * row_height_ + get_visual_y();
 
                p.setPen(QPen(Qt::NoPen));
                p.setBrush(QApplication::palette().brush(QPalette::WindowText));
 
-               if (i != 0)
-               {
+               if (i != 0) {
                        const QPointF points[] = {
                                QPointF(pp.left(), y - ArrowSize),
                                QPointF(pp.left() + ArrowSize, y),
@@ -284,15 +282,12 @@ void DecodeTrace::populate_popup_form(QWidget *parent, QFormLayout *form)
 
        const list< shared_ptr<Decoder> >& stack = decoder_stack_->stack();
 
-       if (stack.empty())
-       {
+       if (stack.empty()) {
                QLabel *const l = new QLabel(
                        tr("<p><i>No decoders in the stack</i></p>"));
                l->setAlignment(Qt::AlignCenter);
                form->addRow(l);
-       }
-       else
-       {
+       } else {
                auto iter = stack.cbegin();
                for (int i = 0; i < (int)stack.size(); i++, iter++) {
                        shared_ptr<Decoder> dec(*iter);
@@ -387,8 +382,7 @@ void DecodeTrace::draw_range(const pv::data::decode::Annotation &a, QPainter &p,
        p.setBrush(fill);
 
        // If the two ends are within 1 pixel, draw a vertical line
-       if (start + 1.0 > end)
-       {
+       if (start + 1.0 > end) {
                p.drawLine(QPointF(start, top), QPointF(start, bottom));
                return;
        }
@@ -708,8 +702,7 @@ QComboBox* DecodeTrace::create_channel_selector(
 {
        assert(dec);
 
-       shared_lock<shared_mutex> lock(session_.signals_mutex());
-       const auto &sigs(session_.signals());
+       const auto sigs(session_.signals());
 
        vector< shared_ptr<Signal> > sig_list(sigs.begin(), sigs.end());
        std::sort(sig_list.begin(), sig_list.end(),
@@ -728,11 +721,12 @@ QComboBox* DecodeTrace::create_channel_selector(
 
        for (const shared_ptr<view::Signal> &s : sig_list) {
                assert(s);
-               if (dynamic_pointer_cast<LogicSignal>(s) && s->enabled())
-               {
+               if (dynamic_pointer_cast<LogicSignal>(s) && s->enabled()) {
                        selector->addItem(s->name(),
                                qVariantFromValue((void*)s.get()));
-                       if ((*channel_iter).second == s)
+
+                       if (channel_iter != dec->channels().end() &&
+                               (*channel_iter).second == s)
                                selector->setCurrentIndex(
                                        selector->count() - 1);
                }
@@ -747,11 +741,9 @@ void DecodeTrace::commit_decoder_channels(shared_ptr<data::decode::Decoder> &dec
 
        map<const srd_channel*, shared_ptr<LogicSignal> > channel_map;
 
-       shared_lock<shared_mutex> lock(session_.signals_mutex());
-       const unordered_set< shared_ptr<Signal> > &sigs(session_.signals());
+       const unordered_set< shared_ptr<Signal> > sigs(session_.signals());
 
-       for (const ChannelSelector &s : channel_selectors_)
-       {
+       for (const ChannelSelector &s : channel_selectors_) {
                if (s.decoder_ != dec)
                        break;