]> git.sesse.net Git - nageru/blobdiff - futatabi/midi_mapper.h
Add infrastructure for MIDI lights that are controllers instead of notes.
[nageru] / futatabi / midi_mapper.h
index fd16089c55e6ff7329b68f454e5c8ffeedab32b5..c1d6639858d1c697795692e05f16d6883a5263db 100644 (file)
@@ -45,6 +45,13 @@ public:
 
 class MIDIMapper : public MIDIReceiver {
 public:
+       // Converts conveniently from a bool.
+       enum LightState {
+               Off = 0,
+               On = 1,
+               Blinking = 2
+       };
+
        MIDIMapper(ControllerReceiver *receiver);
        virtual ~MIDIMapper();
        void set_midi_mapping(const MIDIMappingProto &new_mapping);
@@ -56,7 +63,7 @@ public:
 
        void refresh_lights();
 
-       void set_preview_enabled(bool enabled) {
+       void set_preview_enabled(LightState enabled) {
                preview_enabled_light = enabled;
                refresh_lights();
        }
@@ -64,11 +71,11 @@ public:
                queue_enabled_light = enabled;
                refresh_lights();
        }
-       void set_play_enabled(bool enabled) {
+       void set_play_enabled(LightState enabled) {
                play_enabled_light = enabled;
                refresh_lights();
        }
-       void set_locked(bool locked) {
+       void set_locked(LightState locked) {
                locked_light = locked;
                refresh_lights();
        }
@@ -99,10 +106,10 @@ private:
        int num_controller_banks;  // Under <mu>.
        std::atomic<int> current_controller_bank{0};
 
-       std::atomic<bool> preview_enabled_light{false};
+       std::atomic<LightState> preview_enabled_light{Off};
        std::atomic<bool> queue_enabled_light{false};
-       std::atomic<bool> play_enabled_light{false};
-       std::atomic<bool> locked_light{true};
+       std::atomic<LightState> play_enabled_light{Off};
+       std::atomic<LightState> locked_light{On};
        std::atomic<int> current_highlighted_camera{-1};
 
        MIDIDevice midi_device;