X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fdata%2Fdecode%2Frow.cpp;h=4f0e245fc65c359528a7cf3e5a5d8c3760671740;hb=86d4b8e3e52a422fe3a6956d6bbef27f1859717b;hp=72a6869f94250abcbe731a75d5ebcaffc3b028a2;hpb=6a26fc4417798ab21654197e105e707a14d462f0;p=pulseview.git diff --git a/pv/data/decode/row.cpp b/pv/data/decode/row.cpp index 72a6869f..4f0e245f 100644 --- a/pv/data/decode/row.cpp +++ b/pv/data/decode/row.cpp @@ -17,6 +17,8 @@ * along with this program; if not, see . */ +#include + #include "decoder.hpp" #include "row.hpp" @@ -75,11 +77,17 @@ const QString Row::description() const vector Row::ann_classes() const { + assert(decoder_); + vector result; - if (!srd_row_) + if (!srd_row_) { + if (index_ == 0) { + // When operating as the fallback row, all annotation classes belong to it + return decoder_->ann_classes(); + } return result; - assert(decoder_); + } for (GSList *l = srd_row_->ann_classes; l; l = l->next) { size_t class_id = (size_t)l->data; @@ -104,6 +112,68 @@ void Row::set_visible(bool visible) visible_ = visible; } +void Row::set_base_color(QColor base_color) +{ + // For the row color, use the base color hue and add an offset that's + // not a dividend of 360 + + const int h = (base_color.toHsv().hue() + 20 * index_) % 360; + const int s = DECODE_COLOR_SATURATION; + const int v = DECODE_COLOR_VALUE; + color_.setHsl(h, s, v); + + vector classes = ann_classes(); + for (const AnnotationClass* ann_class : classes) { + + // For each class color, use the row color hue and add an offset that's + // not a dividend of 360 and not a multiple of the row offset + + QColor ann_color(color_); + const int h = (ann_color.toHsv().hue() + 55 * ann_class->id) % 360; + const int s = DECODE_COLOR_SATURATION; + const int v = DECODE_COLOR_VALUE; + ann_color.setHsl(h, s, v); + + ann_class_color_[ann_class->id] = ann_color; + ann_bright_class_color_[ann_class->id] = ann_color.lighter(); + ann_dark_class_color_[ann_class->id] = ann_color.darker(); + } +} + +const QColor Row::color() const +{ + return color_; +} + +const QColor Row::get_class_color(uint32_t ann_class_id) const +{ + return ann_class_color_.at(ann_class_id); +} + +const QColor Row::get_bright_class_color(uint32_t ann_class_id) const +{ + return ann_bright_class_color_.at(ann_class_id); +} + +const QColor Row::get_dark_class_color(uint32_t ann_class_id) const +{ + return ann_dark_class_color_.at(ann_class_id); +} + +bool Row::has_hidden_classes() const +{ + for (const AnnotationClass* c : ann_classes()) + if (!c->visible) + return true; + + return false; +} + +bool Row::class_is_visible(uint32_t ann_class_id) const +{ + return decoder_->get_ann_class_by_id(ann_class_id)->visible; +} + bool Row::operator<(const Row& other) const { return (decoder_ < other.decoder_) ||