+
+ // Query the annotation rows and reference them by the classes that use them
+ uint32_t row_count = 0;
+ for (const GSList *rl = srd_decoder_->annotation_rows; rl; rl = rl->next)
+ row_count++;
+
+ i = 0;
+ for (const GSList *rl = srd_decoder_->annotation_rows; rl; rl = rl->next) {
+ const srd_decoder_annotation_row *const srd_row = (srd_decoder_annotation_row *)rl->data;
+ assert(srd_row);
+ rows_.emplace_back(i++, this, srd_row);
+
+ // FIXME PV can crash from .at() if a PD's ann classes are defined incorrectly
+ for (const GSList *cl = srd_row->ann_classes; cl; cl = cl->next)
+ ann_classes_.at((size_t)cl->data).row = &(rows_.back());
+
+ connect(&(rows_.back()), SIGNAL(visibility_changed()),
+ this, SLOT(on_row_visibility_changed()));
+ }
+
+ if (rows_.empty()) {
+ // Make sure there is a row for PDs without row declarations
+ rows_.emplace_back(0, this);
+
+ for (AnnotationClass& c : ann_classes_)
+ c.row = &(rows_.back());
+ }