]> git.sesse.net Git - nageru/blobdiff - nageru/midi_mapping_dialog.cpp
Unbreak showing the first two channels in the tally JSON.
[nageru] / nageru / midi_mapping_dialog.cpp
index 7eec6d285d123c43f82b3233a471ee845f872590..8352729960422e6a761f8b70bd7c339a9750029f 100644 (file)
 #include <limits>
 #include <string>
 
-#include "controller_spin_box.h"
+#include "shared/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"
 
@@ -87,6 +88,18 @@ vector<MIDIMappingDialog::Control> global_lights = {
        { "Auto makeup gain is on",   MIDIMappingBusProto::kAutoMakeupGainIsOnFieldNumber, 0 },
 };
 
+vector<MIDIMappingDialog::Control> global_video = {
+       { "Switch video channel",     MIDIMappingBusProto::kSwitchVideoChannelFieldNumber, MIDIMappingProto::kSwitchVideoChannelBankFieldNumber },
+       { "Apply transition",         MIDIMappingBusProto::kApplyTransitionFieldNumber, MIDIMappingProto::kApplyTransitionBankFieldNumber },
+};
+
+vector<MIDIMappingDialog::Control> main_ui = {
+       { "Previous audio view",       MIDIMappingBusProto::kPrevAudioViewFieldNumber, MIDIMappingProto::kPrevAudioViewBankFieldNumber },
+       { "Next audio view",           MIDIMappingBusProto::kNextAudioViewFieldNumber, MIDIMappingProto::kNextAudioViewBankFieldNumber },
+       { "Begin new video segment",   MIDIMappingBusProto::kBeginNewVideoSegmentFieldNumber, MIDIMappingProto::kBeginNewVideoSegmentBankFieldNumber },
+       { "Exit Nageru",               MIDIMappingBusProto::kExitFieldNumber, MIDIMappingProto::kExitBankFieldNumber },
+};
+
 namespace {
 
 int get_bank(const MIDIMappingProto &mapping_proto, int bank_field_number, int default_value)
@@ -104,16 +117,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 +128,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)
@@ -176,8 +174,10 @@ MIDIMappingDialog::MIDIMappingDialog(MIDIMapper *mapper)
        add_controls("Per-bus controllers", ControlType::CONTROLLER, SpinnerGroup::PER_BUS_CONTROLLERS, mapping_proto, per_bus_controllers);
        add_controls("Per-bus buttons", ControlType::BUTTON, SpinnerGroup::PER_BUS_BUTTONS, mapping_proto, per_bus_buttons);
        add_controls("Per-bus lights", ControlType::LIGHT, SpinnerGroup::PER_BUS_LIGHTS, mapping_proto, per_bus_lights);
+       add_controls("Video mixing", ControlType::BUTTON, SpinnerGroup::GLOBAL_BUTTONS, mapping_proto, global_video);
        add_controls("Global controllers", ControlType::CONTROLLER, SpinnerGroup::GLOBAL_CONTROLLERS, mapping_proto, global_controllers);
        add_controls("Global buttons", ControlType::BUTTON, SpinnerGroup::GLOBAL_BUTTONS, mapping_proto, global_buttons);
+       add_controls("Main UI", ControlType::BUTTON, SpinnerGroup::GLOBAL_BUTTONS, mapping_proto, main_ui);
        add_controls("Global lights", ControlType::LIGHT, SpinnerGroup::GLOBAL_LIGHTS, mapping_proto, global_lights);
        fill_controls_from_mapping(mapping_proto);
 
@@ -543,6 +543,10 @@ pair<int, int> MIDIMappingDialog::guess_offset(unsigned bus_idx, MIDIMappingDial
                        // The bus has a controller set that the source bus doesn't set.
                        return not_found;
                }
+               if (source_spinner->value() == MIDIReceiver::PITCH_BEND_CONTROLLER) {
+                       // It's impossible to interpolate across the pitch bend.
+                       return not_found;
+               }
 
                int candidate_offset = spinner->value() - source_spinner->value();
                if (!found_offset) {