X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdialogs%2Fdecoder.cpp;h=07375f649b35a883efa8b65991f5f1d300d8a88c;hb=3045c869ada2e32bf55cbb68633b5213b9b11e28;hp=01cec8431a9feacbc1b7c99e792de016ee50b3e1;hpb=c8c28626464eb310255dacf542f2501cf2f74d38;p=pulseview.git diff --git a/pv/dialogs/decoder.cpp b/pv/dialogs/decoder.cpp index 01cec84..07375f6 100644 --- a/pv/dialogs/decoder.cpp +++ b/pv/dialogs/decoder.cpp @@ -18,27 +18,47 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "decoder.h" - extern "C" { -/* __STDC_FORMAT_MACROS is required for PRIu64 and friends (in C++). */ -#define __STDC_FORMAT_MACROS -#include -#include +#include } +#include + +#include + +#include + +#include "decoder.h" + +#include +#include + +using namespace boost; +using namespace std; + namespace pv { namespace dialogs { -Decoder::Decoder(QWidget *parent) : +Decoder::Decoder(QWidget *parent, const srd_decoder *decoder, + const vector< shared_ptr > &sigs, + GHashTable *options) : QDialog(parent), + _sigs(sigs), + _binding(decoder, options), _layout(this), _form(this), _form_layout(&_form), + _heading(this), _button_box(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this) { - setWindowTitle(tr("Configure Decoder")); + const GSList *probe; + + setWindowTitle(tr("Configure %1").arg(decoder->name)); + + _heading.setText(tr("

%1

%2") + .arg(decoder->longname) + .arg(decoder->desc)); connect(&_button_box, SIGNAL(accepted()), this, SLOT(accept())); connect(&_button_box, SIGNAL(rejected()), this, SLOT(reject())); @@ -46,8 +66,94 @@ Decoder::Decoder(QWidget *parent) : _form.setLayout(&_form_layout); setLayout(&_layout); + _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