X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=midi_mapping_dialog.h;h=5a1ec3f425a9b4caada9a8fe768e1cb26717636c;hb=d3e48df512d9476d3849227067792a3537bb094e;hp=efc770d28a1cc81433bd73cda828acd2e138062e;hpb=a94d4fe6192a2f0111515b952dc53f5bda8324db;p=nageru diff --git a/midi_mapping_dialog.h b/midi_mapping_dialog.h index efc770d..5a1ec3f 100644 --- a/midi_mapping_dialog.h +++ b/midi_mapping_dialog.h @@ -1,21 +1,24 @@ #ifndef _MIDI_MAPPING_DIALOG_H #define _MIDI_MAPPING_DIALOG_H +#include #include +#include +#include +#include #include #include #include -#include -#include "audio_mixer.h" #include "midi_mapper.h" -#include "mixer.h" + +class QEvent; +class QObject; namespace Ui { class MIDIMappingDialog; } // namespace Ui -class MIDIMapper; class MIDIMappingProto; class QComboBox; class QSpinBox; @@ -51,17 +54,41 @@ public: void set_compressor_threshold(unsigned bus_idx, float value) override {} void set_fader(unsigned bus_idx, float value) override {} + void toggle_mute(unsigned bus_idx) override {} void toggle_locut(unsigned bus_idx) override {} void toggle_auto_gain_staging(unsigned bus_idx) override {} void toggle_compressor(unsigned bus_idx) override {} void clear_peak(unsigned bus_idx) override {} + void toggle_limiter() override {} + void toggle_auto_makeup_gain() override {} + + void clear_all_highlights() override {} + + void highlight_locut(bool highlight) override {} + void highlight_limiter_threshold(bool highlight) override {} + void highlight_makeup_gain(bool highlight) override {} + + void highlight_treble(unsigned bus_idx, bool highlight) override {} + void highlight_mid(unsigned bus_idx, bool highlight) override {} + void highlight_bass(unsigned bus_idx, bool highlight) override {} + void highlight_gain(unsigned bus_idx, bool highlight) override {} + void highlight_compressor_threshold(unsigned bus_idx, bool highlight) override {} + void highlight_fader(unsigned bus_idx, bool highlight) override {} + + void highlight_mute(unsigned bus_idx, bool highlight) override {} + void highlight_toggle_locut(unsigned bus_idx, bool highlight) override {} + void highlight_toggle_auto_gain_staging(unsigned bus_idx, bool highlight) override {} + void highlight_toggle_compressor(unsigned bus_idx, bool highlight) override {} + void highlight_clear_peak(unsigned bus_idx, bool highlight) override {} + void highlight_toggle_limiter(bool highlight) override {} + void highlight_toggle_auto_makeup_gain(bool highlight) override {} // Raw events; used for the editor dialog only. void controller_changed(unsigned controller) override; void note_on(unsigned note) override; public slots: - void guess_clicked(); + void guess_clicked(bool limit_to_group); void ok_clicked(); void cancel_clicked(); void save_clicked(); @@ -70,29 +97,47 @@ public slots: private: static constexpr unsigned num_buses = 8; + // Each spinner belongs to exactly one group, corresponding to the + // subheadings in the UI. This is so that we can extrapolate data + // across only single groups if need be. + enum class SpinnerGroup { + ALL_GROUPS = -1, + PER_BUS_CONTROLLERS, + PER_BUS_BUTTONS, + PER_BUS_LIGHTS, + GLOBAL_CONTROLLERS, + GLOBAL_BUTTONS, + GLOBAL_LIGHTS + }; + void add_bank_selector(QTreeWidgetItem *item, const MIDIMappingProto &mapping_proto, int bank_field_number); - enum class ControlType { CONTROLLER, BUTTON }; + enum class ControlType { CONTROLLER, BUTTON, LIGHT }; void add_controls(const std::string &heading, ControlType control_type, + SpinnerGroup spinner_group, const MIDIMappingProto &mapping_proto, const std::vector &controls); void fill_controls_from_mapping(const MIDIMappingProto &mapping_proto); // Tries to find a source bus and an offset to it that would give // a consistent offset for the rest of the mappings in this bus. - // Returns -1 for the bus (the first element) if no consistent offset - // can be found. - std::pair guess_offset(unsigned bus_idx); - bool bus_is_empty(unsigned bus_idx); + // Returns -1 for the bus if no consistent offset can be found. + std::pair guess_offset(unsigned bus_idx, SpinnerGroup spinner_group); + bool bus_is_empty(unsigned bus_idx, SpinnerGroup spinner_group); void update_guess_button_state(); - int find_focus_bus(); + struct FocusInfo { + int bus_idx; // -1 for none. + SpinnerGroup spinner_group; + int field_number; + }; + FocusInfo find_focus() const; std::unique_ptr construct_mapping_proto_from_ui(); Ui::MIDIMappingDialog *ui; MIDIMapper *mapper; ControllerReceiver *old_receiver; - int last_focus_bus_idx{-1}; + FocusInfo last_focus{-1, SpinnerGroup::ALL_GROUPS, -1}; // All controllers actually laid out on the grid (we need to store them // so that we can move values back and forth between the controls and @@ -100,6 +145,7 @@ private: struct InstantiatedSpinner { QSpinBox *spinner; unsigned bus_idx; + SpinnerGroup spinner_group; int field_number; // In MIDIMappingBusProto. }; struct InstantiatedComboBox { @@ -108,10 +154,15 @@ private: }; std::vector controller_spinners; std::vector button_spinners; + std::vector light_spinners; std::vector bank_combo_boxes; // Keyed on bus index, then field number. - std::map> spinners; + struct SpinnerAndGroup { + QSpinBox *spinner; + SpinnerGroup group; + }; + std::map> spinners; }; #endif // !defined(_MIDI_MAPPING_DIALOG_H)