]> sigrok.org Git - pulseview.git/blobdiff - pv/popups/channels.hpp
Backport recent changes from mainline.
[pulseview.git] / pv / popups / channels.hpp
index 3701325bc704572758831b8781d800a56cc39065..54d24340d7d85229db92576df8efc17bab24a7fc 100644 (file)
 #ifndef PULSEVIEW_PV_POPUPS_CHANNELS_HPP
 #define PULSEVIEW_PV_POPUPS_CHANNELS_HPP
 
+#include <functional>
 #include <map>
 #include <memory>
 #include <vector>
 
+#include <QCheckBox>
 #include <QFormLayout>
-#include <QHBoxLayout>
+#include <QGridLayout>
+#include <QLabel>
 #include <QPushButton>
 #include <QSignalMapper>
 
 #include <pv/widgets/popup.hpp>
 
+using std::function;
 using std::map;
 using std::shared_ptr;
 using std::vector;
 
-class QCheckBox;
-class QGridLayout;
-
 namespace sigrok {
        class ChannelGroup;
 }
@@ -70,13 +71,17 @@ public:
 private:
        void set_all_channels(bool set);
 
+       void enable_channels_conditionally(
+               function<bool (const shared_ptr<data::SignalBase>)> cond_func);
+       void disable_channels_conditionally(
+               function<bool (const shared_ptr<data::SignalBase>)> cond_func);
+
        void populate_group(shared_ptr<sigrok::ChannelGroup> group,
                const vector< shared_ptr<pv::data::SignalBase> > sigs);
 
        QGridLayout* create_channel_group_grid(
                const vector< shared_ptr<pv::data::SignalBase> > sigs);
 
-private:
        void showEvent(QShowEvent *event);
 
 private Q_SLOTS:
@@ -84,6 +89,14 @@ private Q_SLOTS:
 
        void enable_all_channels();
        void disable_all_channels();
+       void enable_all_logic_channels();
+       void disable_all_logic_channels();
+       void enable_all_analog_channels();
+       void disable_all_analog_channels();
+       void enable_all_named_channels();
+       void disable_all_unnamed_channels();
+       void enable_all_changing_channels();
+       void disable_all_non_changing_channels();
 
 private:
        pv::Session &session_;
@@ -95,10 +108,14 @@ private:
        vector< shared_ptr<pv::binding::Device> > group_bindings_;
        map< QCheckBox*, shared_ptr<pv::data::SignalBase> >
                check_box_signal_map_;
-
-       QHBoxLayout buttons_bar_;
-       QPushButton enable_all_channels_;
-       QPushButton disable_all_channels_;
+       map< shared_ptr<sigrok::ChannelGroup>, QLabel*> group_label_map_;
+
+       QGridLayout filter_buttons_bar_;
+       QPushButton enable_all_channels_, disable_all_channels_;
+       QPushButton enable_all_logic_channels_, disable_all_logic_channels_;
+       QPushButton enable_all_analog_channels_, disable_all_analog_channels_;
+       QPushButton enable_all_named_channels_, disable_all_unnamed_channels_;
+       QPushButton enable_all_changing_channels_, disable_all_non_changing_channels_;
 
        QSignalMapper check_box_mapper_;
 };