From 43be1e6d8d769da60b694aa09c58e589bdbc39af Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 18 Jan 2019 01:09:40 +0100 Subject: [PATCH] Make MIDIMappingDialog reuse some of the code from midi_mapper_util.h. --- nageru/midi_mapping_dialog.cpp | 20 +++----------------- shared/midi_mapper_util.h | 24 ++++++++++++++++++------ 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/nageru/midi_mapping_dialog.cpp b/nageru/midi_mapping_dialog.cpp index 0c7683c..a5c1126 100644 --- a/nageru/midi_mapping_dialog.cpp +++ b/nageru/midi_mapping_dialog.cpp @@ -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(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(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) diff --git a/shared/midi_mapper_util.h b/shared/midi_mapper_util.h index 9120fc8..072494e 100644 --- a/shared/midi_mapper_util.h +++ b/shared/midi_mapper_util.h @@ -7,31 +7,43 @@ #include template -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(reflection->GetMessage(msg, descriptor)); - return (controller_proto.controller_number() == controller); + return controller_proto.controller_number(); } template -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 +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(reflection->GetMessage(msg, descriptor)); - return (button_proto.note_number() == note); + return button_proto.note_number(); +} + +template +inline bool match_button_helper(const Proto &msg, int field_number, int note) +{ + return (get_button_mapping_helper(msg, field_number, -1) == note); } template -- 2.39.2