X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fpopups%2Fprobes.cpp;h=51ba3ddca8b2744bfd60e89a109906ab741f60dd;hb=b7b659aa72851df2d34d4c1e5fd5636fbd9176d1;hp=9684d435093cbcae8d6fc7a022eb02ab2bbc5f10;hpb=51d4a9ab96a6bf64a1fcd1700e7e174498d4c118;p=pulseview.git diff --git a/pv/popups/probes.cpp b/pv/popups/probes.cpp index 9684d43..51ba3dd 100644 --- a/pv/popups/probes.cpp +++ b/pv/popups/probes.cpp @@ -20,22 +20,26 @@ #include "probes.h" +#include +#include + +using namespace boost; using namespace Qt; +using namespace std; namespace pv { namespace popups { -Probes::Probes(sr_dev_inst *sdi, QWidget *parent) : +Probes::Probes(SigSession &session, QWidget *parent) : Popup(parent), - _sdi(sdi), + _session(session), _layout(this), _probes(this), + _updating_probes(false), _probes_bar(this), _enable_all_probes(this), _disable_all_probes(this) { - assert(_sdi); - setLayout(&_layout); connect(&_enable_all_probes, SIGNAL(clicked()), @@ -53,44 +57,71 @@ Probes::Probes(sr_dev_inst *sdi, QWidget *parent) : _layout.addWidget(&_probes_bar); - for (const GSList *l = _sdi->probes; l; l = l->next) { - sr_probe *const probe = (sr_probe*)l->data; - assert(probe); - QListWidgetItem *const item = new QListWidgetItem( - probe->name, &_probes); - assert(item); - item->setData(UserRole, - qVariantFromValue((void*)probe)); - item->setCheckState(probe->enabled ? - Checked : Unchecked); - _probes.addItem(item); - } - connect(&_probes, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(item_changed(QListWidgetItem*))); } void Probes::set_all_probes(bool set) { - for (int i = 0; i < _probes.count(); i++) { + using pv::view::Signal; + + _updating_probes = true; + + const vector< shared_ptr > sigs = + _session.get_signals(); + for (unsigned int i = 0; i < sigs.size(); i++) + { + const shared_ptr &s = sigs[i]; + assert(s); + s->enable(set); + QListWidgetItem *const item = _probes.item(i); assert(item); item->setCheckState(set ? Qt::Checked : Qt::Unchecked); + } - sr_probe *const probe = (sr_probe*) - item->data(UserRole).value(); - assert(probe); - probe->enabled = item->checkState() == Checked; + _updating_probes = false; +} + +void Probes::showEvent(QShowEvent *e) +{ + pv::widgets::Popup::showEvent(e); + + _updating_probes = true; + + _probes.clear(); + + const vector< shared_ptr > sigs = + _session.get_signals(); + for (unsigned int i = 0; i < sigs.size(); i++) + { + const shared_ptr &s = sigs[i]; + assert(s); + QListWidgetItem *const item = new QListWidgetItem( + s->get_name(), &_probes); + assert(item); + item->setCheckState(s->enabled() ? Checked : Unchecked); + item->setData(UserRole, qVariantFromValue(i)); + _probes.addItem(item); } + + _updating_probes = false; } void Probes::item_changed(QListWidgetItem *item) { + using pv::view::Signal; + + if (_updating_probes) + return; + assert(item); - sr_probe *const probe = (sr_probe*) - item->data(UserRole).value(); - assert(probe); - probe->enabled = item->checkState() == Checked; + const vector< shared_ptr > sigs = + _session.get_signals(); + const shared_ptr s = sigs[ + item->data(UserRole).value()]; + assert(s); + s->enable(item->checkState() == Checked); } void Probes::enable_all_probes()