]> git.sesse.net Git - nageru/blobdiff - shared/midi_mapper_util.h
Make MIDIMappingDialog reuse some of the code from midi_mapper_util.h.
[nageru] / shared / midi_mapper_util.h
index 9120fc8719998f97575193e4e739c25aa7f65f58..072494e07606dee1f576e2f1e6ef8574189535ff 100644 (file)
@@ -7,31 +7,43 @@
 #include <google/protobuf/descriptor.h>
 
 template <class Proto>
-inline bool match_controller_helper(const Proto &msg, int field_number, int controller)
+inline int get_controller_mapping_helper(const Proto &msg, int field_number, int default_value)
 {
        using namespace google::protobuf;
        const FieldDescriptor *descriptor = msg.GetDescriptor()->FindFieldByNumber(field_number);
        const Reflection *reflection = msg.GetReflection();
        if (!reflection->HasField(msg, descriptor)) {
-               return false;
+               return default_value;
        }
        const MIDIControllerProto &controller_proto =
                static_cast<const MIDIControllerProto &>(reflection->GetMessage(msg, descriptor));
-       return (controller_proto.controller_number() == controller);
+       return controller_proto.controller_number();
 }
 
 template <class Proto>
-inline bool match_button_helper(const Proto &msg, int field_number, int note)
+inline bool match_controller_helper(const Proto &msg, int field_number, int controller)
+{
+       return (get_controller_mapping_helper(msg, field_number, -1) == controller);
+}
+
+template <class Proto>
+inline int get_button_mapping_helper(const Proto &msg, int field_number, int default_value)
 {
        using namespace google::protobuf;
        const FieldDescriptor *descriptor = msg.GetDescriptor()->FindFieldByNumber(field_number);
        const Reflection *reflection = msg.GetReflection();
        if (!reflection->HasField(msg, descriptor)) {
-               return false;
+               return default_value;
        }
        const MIDIButtonProto &button_proto =
                static_cast<const MIDIButtonProto &>(reflection->GetMessage(msg, descriptor));
-       return (button_proto.note_number() == note);
+       return button_proto.note_number();
+}
+
+template <class Proto>
+inline bool match_button_helper(const Proto &msg, int field_number, int note)
+{
+       return (get_button_mapping_helper(msg, field_number, -1) == note);
 }
 
 template <class Proto>