]> git.sesse.net Git - nageru/commitdiff
Make MIDIMappingDialog reuse some of the code from midi_mapper_util.h.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 18 Jan 2019 00:09:40 +0000 (01:09 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 18 Jan 2019 00:09:40 +0000 (01:09 +0100)
nageru/midi_mapping_dialog.cpp
shared/midi_mapper_util.h

index 0c7683c017ac953e7e60fd0b73c9eaaf32a97f52..a5c1126a3ae5664f06c16676d2b57f4a4f1b19aa 100644 (file)
@@ -21,6 +21,7 @@
 #include "controller_spin_box.h"
 #include "midi_mapper.h"
 #include "nageru_midi_mapping.pb.h"
+#include "shared/midi_mapper_util.h"
 #include "shared/post_to_main_thread.h"
 #include "ui_midi_mapping.h"
 
@@ -104,16 +105,8 @@ int get_controller_mapping(const MIDIMappingProto &mapping_proto, size_t bus_idx
        if (bus_idx >= size_t(mapping_proto.bus_mapping_size())) {
                return default_value;
        }
-
        const MIDIMappingBusProto &bus_mapping = mapping_proto.bus_mapping(bus_idx);
-       const FieldDescriptor *descriptor = bus_mapping.GetDescriptor()->FindFieldByNumber(field_number);
-       const Reflection *bus_reflection = bus_mapping.GetReflection();
-       if (!bus_reflection->HasField(bus_mapping, descriptor)) {
-               return default_value;
-       }
-       const MIDIControllerProto &controller_proto =
-               static_cast<const MIDIControllerProto &>(bus_reflection->GetMessage(bus_mapping, descriptor));
-       return controller_proto.controller_number();
+       return get_controller_mapping_helper(bus_mapping, field_number, default_value);
 }
 
 int get_button_mapping(const MIDIMappingProto &mapping_proto, size_t bus_idx, int field_number, int default_value)
@@ -123,14 +116,7 @@ int get_button_mapping(const MIDIMappingProto &mapping_proto, size_t bus_idx, in
        }
 
        const MIDIMappingBusProto &bus_mapping = mapping_proto.bus_mapping(bus_idx);
-       const FieldDescriptor *descriptor = bus_mapping.GetDescriptor()->FindFieldByNumber(field_number);
-       const Reflection *bus_reflection = bus_mapping.GetReflection();
-       if (!bus_reflection->HasField(bus_mapping, descriptor)) {
-               return default_value;
-       }
-       const MIDIButtonProto &bus_proto =
-               static_cast<const MIDIButtonProto &>(bus_reflection->GetMessage(bus_mapping, descriptor));
-       return bus_proto.note_number();
+       return get_button_mapping_helper(bus_mapping, field_number, default_value);
 }
 
 int get_light_mapping(const MIDIMappingProto &mapping_proto, size_t bus_idx, int field_number, int default_value)
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>