#include <limits>
#include <string>
+#include "shared/controller_spin_box.h"
#include "midi_mapper.h"
-#include "midi_mapping.pb.h"
-#include "post_to_main_thread.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"
class QObject;
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)
item->setText(0, QString::fromStdString(control.label + " "));
for (unsigned bus_idx = 0; bus_idx < num_buses; ++bus_idx) {
- QSpinBox *spinner = new QSpinBox(this);
- spinner->setRange(-1, 127);
+ QSpinBox *spinner;
+ if (control_type == ControlType::CONTROLLER) {
+ spinner = new ControllerSpinBox(this);
+ spinner->setRange(-1, 128); // 128 for pitch bend.
+ } else {
+ spinner = new QSpinBox(this);
+ spinner->setRange(-1, 127);
+ }
spinner->setAutoFillBackground(true);
spinner->setSpecialValueText("\u200d"); // Zero-width joiner (ie., empty).
spinner->installEventFilter(this); // So we know when the focus changes.
// 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) {