]> sigrok.org Git - pulseview.git/blobdiff - pv/popups/probes.cpp
Made Probes popup reusable
[pulseview.git] / pv / popups / probes.cpp
index 5499df62cd9496dc141ee3ef5cc2a45fb596b69a..51ba3ddca8b2744bfd60e89a109906ab741f60dd 100644 (file)
@@ -35,6 +35,7 @@ Probes::Probes(SigSession &session, QWidget *parent) :
        _session(session),
        _layout(this),
        _probes(this),
+       _updating_probes(false),
        _probes_bar(this),
        _enable_all_probes(this),
        _disable_all_probes(this)
@@ -56,27 +57,39 @@ Probes::Probes(SigSession &session, QWidget *parent) :
 
        _layout.addWidget(&_probes_bar);
 
+       connect(&_probes, SIGNAL(itemChanged(QListWidgetItem*)),
+               this, SLOT(item_changed(QListWidgetItem*)));
+}
+
+void Probes::set_all_probes(bool set)
+{
+       using pv::view::Signal;
+
+       _updating_probes = true;
+
        const vector< shared_ptr<pv::view::Signal> > sigs =
                _session.get_signals();
        for (unsigned int i = 0; i < sigs.size(); i++)
        {
                const shared_ptr<pv::view::Signal> &s = sigs[i];
                assert(s);
-               QListWidgetItem *const item = new QListWidgetItem(
-                       s->get_name(), &_probes);
+               s->enable(set);
+
+               QListWidgetItem *const item = _probes.item(i);
                assert(item);
-               item->setData(UserRole, qVariantFromValue(i));
-               item->setCheckState(s->enabled() ? Checked : Unchecked);
-               _probes.addItem(item);
+               item->setCheckState(set ? Qt::Checked : Qt::Unchecked);
        }
 
-       connect(&_probes, SIGNAL(itemChanged(QListWidgetItem*)),
-               this, SLOT(item_changed(QListWidgetItem*)));
+       _updating_probes = false;
 }
 
-void Probes::set_all_probes(bool set)
+void Probes::showEvent(QShowEvent *e)
 {
-       using pv::view::Signal;
+       pv::widgets::Popup::showEvent(e);
+
+       _updating_probes = true;
+
+       _probes.clear();
 
        const vector< shared_ptr<pv::view::Signal> > sigs =
                _session.get_signals();
@@ -84,18 +97,24 @@ void Probes::set_all_probes(bool set)
        {
                const shared_ptr<pv::view::Signal> &s = sigs[i];
                assert(s);
-               s->enable(set);
-
-               QListWidgetItem *const item = _probes.item(i);
+               QListWidgetItem *const item = new QListWidgetItem(
+                       s->get_name(), &_probes);
                assert(item);
-               item->setCheckState(set ? Qt::Checked : Qt::Unchecked);
+               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);
        const vector< shared_ptr<pv::view::Signal> > sigs =
                _session.get_signals();