#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"
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)
}
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)
#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>