1 #ifndef _MIDI_MAPPING_DIALOG_H
2 #define _MIDI_MAPPING_DIALOG_H
9 #include "audio_mixer.h"
13 class MIDIMappingDialog;
17 class MIDIMappingProto;
20 class QTreeWidgetItem;
22 class MIDIMappingDialog : public QDialog
27 MIDIMappingDialog(MIDIMapper *mapper);
30 // For use in midi_mapping_dialog.cpp only.
33 int field_number; // In MIDIMappingBusProto.
34 int bank_field_number; // In MIDIMappingProto.
39 void cancel_clicked();
44 static constexpr unsigned num_buses = 8;
46 void add_bank_selector(QTreeWidgetItem *item, const MIDIMappingProto &mapping_proto, int bank_field_number);
48 enum class ControlType { CONTROLLER, BUTTON };
49 void add_controls(const std::string &heading, ControlType control_type,
50 const MIDIMappingProto &mapping_proto, const std::vector<Control> &controls);
51 void fill_controls_from_mapping(const MIDIMappingProto &mapping_proto);
53 std::unique_ptr<MIDIMappingProto> construct_mapping_proto_from_ui();
56 Ui::MIDIMappingDialog *ui;
59 // All controllers actually laid out on the grid (we need to store them
60 // so that we can move values back and forth between the controls and
61 // the protobuf on save/load).
62 struct InstantiatedSpinner {
65 int field_number; // In MIDIMappingBusProto.
67 struct InstantiatedComboBox {
69 int field_number; // In MIDIMappingProto.
71 std::vector<InstantiatedSpinner> controller_spinners;
72 std::vector<InstantiatedSpinner> button_spinners;
73 std::vector<InstantiatedComboBox> bank_combo_boxes;
76 #endif // !defined(_MIDI_MAPPING_DIALOG_H)