+void DecodeTrace::create_decoder_form(shared_ptr<data::decode::Decoder> &dec,
+ QWidget *parent, QFormLayout *form)
+{
+ const GSList *probe;
+
+ assert(dec);
+ const srd_decoder *const decoder = dec->decoder();
+ assert(decoder);
+
+ form->addRow(new QLabel(tr("<h3>%1</h3>").arg(decoder->name), parent));
+
+ // Add the mandatory probes
+ for(probe = decoder->probes; probe; probe = probe->next) {
+ const struct srd_probe *const p =
+ (struct srd_probe *)probe->data;
+ QComboBox *const combo = create_probe_selector(parent, dec, p);
+ connect(combo, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(on_probe_selected(int)));
+ form->addRow(tr("<b>%1</b> (%2) *")
+ .arg(p->name).arg(p->desc), combo);
+
+ const ProbeSelector s = {combo, dec, p};
+ _probe_selectors.push_back(s);
+ }
+
+ // Add the optional probes
+ for(probe = decoder->opt_probes; probe; probe = probe->next) {
+ const struct srd_probe *const p =
+ (struct srd_probe *)probe->data;
+ QComboBox *const combo = create_probe_selector(parent, dec, p);
+ connect(combo, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(on_probe_selected(int)));
+ form->addRow(tr("<b>%1</b> (%2)")
+ .arg(p->name).arg(p->desc), combo);
+
+ const ProbeSelector s = {combo, dec, p};
+ _probe_selectors.push_back(s);
+ }
+
+ // Add the options
+ shared_ptr<prop::binding::DecoderOptions> binding(
+ new prop::binding::DecoderOptions(_decoder_stack, dec));
+ binding->add_properties_to_form(form, true);
+
+ _bindings.push_back(binding);
+}
+