X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdialogs%2Fdecoder.cpp;h=07375f649b35a883efa8b65991f5f1d300d8a88c;hb=3045c869ada2e32bf55cbb68633b5213b9b11e28;hp=afb5852db729cf2b184b590cd6e48d42f7e9dc9e;hpb=df840662d228637f84d44ec24005e8b9bed8628f;p=pulseview.git diff --git a/pv/dialogs/decoder.cpp b/pv/dialogs/decoder.cpp index afb5852..07375f6 100644 --- a/pv/dialogs/decoder.cpp +++ b/pv/dialogs/decoder.cpp @@ -22,14 +22,29 @@ extern "C" { #include } +#include + +#include + +#include + #include "decoder.h" +#include +#include + +using namespace boost; +using namespace std; + namespace pv { namespace dialogs { -Decoder::Decoder(QWidget *parent, const srd_decoder *decoder) : +Decoder::Decoder(QWidget *parent, const srd_decoder *decoder, + const vector< shared_ptr > &sigs, + GHashTable *options) : QDialog(parent), - _decoder(decoder), + _sigs(sigs), + _binding(decoder, options), _layout(this), _form(this), _form_layout(&_form), @@ -37,9 +52,11 @@ Decoder::Decoder(QWidget *parent, const srd_decoder *decoder) : _button_box(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this) { + const GSList *probe; + setWindowTitle(tr("Configure %1").arg(decoder->name)); - _heading.setText(tr("

%1

%2") + _heading.setText(tr("

%1

%2") .arg(decoder->longname) .arg(decoder->desc)); @@ -52,6 +69,91 @@ Decoder::Decoder(QWidget *parent, const srd_decoder *decoder) : _layout.addWidget(&_heading); _layout.addWidget(&_form); _layout.addWidget(&_button_box); + + _form_layout.addRow(new QLabel(tr("

Probes

"), &_form)); + + // 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( + &_form, p->name); + _form_layout.addRow(tr("%1 (%2) *") + .arg(p->name).arg(p->desc), combo); + + _probe_selector_map[p] = combo; + } + + // 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( + &_form, p->name); + _form_layout.addRow(tr("%1 (%2)") + .arg(p->name).arg(p->desc), combo); + + _probe_selector_map[p] = combo; + } + + _form_layout.addRow(new QLabel( + tr("* Required Probes"), &_form)); + + // Add the options + if (!_binding.properties().empty()) { + _form_layout.addRow(new QLabel(tr("

Options

"), + &_form)); + _binding.add_properties_to_form(&_form_layout); + } +} + +void Decoder::accept() +{ + QDialog::accept(); + _binding.commit(); +} + +QComboBox* Decoder::create_probe_selector( + QWidget *parent, const char *name) +{ + QComboBox *selector = new QComboBox(parent); + + selector->addItem("-", qVariantFromValue(-1)); + selector->setCurrentIndex(0); + + for(size_t i = 0; i < _sigs.size(); i++) { + const shared_ptr s(_sigs[i]); + assert(s); + + if (s->enabled()) + { + selector->addItem(s->get_name(), qVariantFromValue(i)); + if(s->get_name().toLower().contains( + QString(name).toLower())) + selector->setCurrentIndex(i + 1); + } + } + + return selector; +} + +map > Decoder::get_probes() +{ + map > probe_map; + for(map::const_iterator i = + _probe_selector_map.begin(); + i != _probe_selector_map.end(); i++) + { + const QComboBox *const combo = (*i).second; + const int probe_index = + combo->itemData(combo->currentIndex()).value(); + if(probe_index >= 0) { + shared_ptr sig = _sigs[probe_index]; + probe_map[(*i).first] = sig; + } + } + + return probe_map; } } // namespace dialogs