]> sigrok.org Git - pulseview.git/blobdiff - pv/popups/channels.hpp
Channel popup: Don't disable channels when clicking the enable buttons
[pulseview.git] / pv / popups / channels.hpp
index 0ebe333f5f4836484ebf547f364e735445e50338..344d21a824e7bb79e27bc28f0f44054e78d6b24c 100644 (file)
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef PULSEVIEW_PV_POPUPS_CHANNELS_H
-#define PULSEVIEW_PV_POPUPS_CHANNELS_H
+#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 <QGridLayout>
 #include <QHBoxLayout>
+#include <QLabel>
 #include <QPushButton>
 #include <QSignalMapper>
 
 #include <pv/widgets/popup.hpp>
 
-class QCheckBox;
-class QGridLayout;
+using std::function;
+using std::map;
+using std::shared_ptr;
+using std::vector;
 
 namespace sigrok {
        class ChannelGroup;
@@ -43,10 +48,12 @@ namespace pv {
 
 class Session;
 
-namespace prop {
 namespace binding {
-class DeviceOptions;
+class Device;
 }
+
+namespace data {
+class SignalBase;
 }
 
 namespace view {
@@ -60,25 +67,31 @@ class Channels : public pv::widgets::Popup
        Q_OBJECT
 
 public:
-       Channels(Session &session_, QWidget *parent);
+       Channels(Session &session, QWidget *parent);
 
 private:
        void set_all_channels(bool set);
+       void enable_channels_conditionally(
+               function<bool (const shared_ptr<data::SignalBase>)> cond_func);
 
-       void populate_group(std::shared_ptr<sigrok::ChannelGroup> group,
-               const std::vector< std::shared_ptr<pv::view::Signal> > sigs);
+       void populate_group(shared_ptr<sigrok::ChannelGroup> group,
+               const vector< shared_ptr<pv::data::SignalBase> > sigs);
 
        QGridLayout* create_channel_group_grid(
-               const std::vector< std::shared_ptr<pv::view::Signal> > sigs);
+               const vector< shared_ptr<pv::data::SignalBase> > sigs);
 
 private:
-       void showEvent(QShowEvent *e);
+       void showEvent(QShowEvent *event);
 
 private Q_SLOTS:
        void on_channel_checked(QWidget *widget);
 
        void enable_all_channels();
        void disable_all_channels();
+       void enable_all_logic_channels();
+       void enable_all_analog_channels();
+       void enable_all_named_channels();
+       void enable_all_changing_channels();
 
 private:
        pv::Session &session_;
@@ -87,19 +100,20 @@ private:
 
        bool updating_channels_;
 
-       std::vector< std::shared_ptr<pv::prop::binding::DeviceOptions> >
-                group_bindings_;
-       std::map< QCheckBox*, std::shared_ptr<pv::view::Signal> >
+       vector< shared_ptr<pv::binding::Device> > group_bindings_;
+       map< QCheckBox*, shared_ptr<pv::data::SignalBase> >
                check_box_signal_map_;
+       map< shared_ptr<sigrok::ChannelGroup>, QLabel*> group_label_map_;
 
        QHBoxLayout buttons_bar_;
-       QPushButton enable_all_channels_;
-       QPushButton disable_all_channels_;
+       QPushButton enable_all_channels_, disable_all_channels_;
+       QPushButton enable_all_logic_channels_, enable_all_analog_channels_;
+       QPushButton enable_all_named_channels_, enable_all_changing_channels_;
 
        QSignalMapper check_box_mapper_;
 };
 
-} // popups
-} // pv
+}  // namespace popups
+}  // namespace pv
 
-#endif // PULSEVIEW_PV_POPUPS_CHANNELS_H
+#endif // PULSEVIEW_PV_POPUPS_CHANNELS_HPP