LCXL: Add some Mixbus functionality
[ardour.git] / libs / surfaces / launch_control_xl / launch_control_xl.h
index dac2739f15cba04766a4c65fd287a3efd7011163..e69dcca392471756d639b7019d87de83bb214a72 100644 (file)
@@ -138,7 +138,7 @@ public:
 
        enum LEDFlag { Normal = 0xC, Blink = 0x8, DoubleBuffering = 0x0 };
 
-       enum LEDColor { Off=0, RedLow = 1, RedFull = 3, GreenLow = 16, GreenFull = 48, Yellow = 50, AmberLow = 17, AmberFull = 51};
+       enum LEDColor { Off=0, RedLow = 1, RedFull = 3, GreenLow = 16, GreenFull = 48, YellowLow = 34, YellowFull = 51, AmberLow = 18, AmberFull = 35};
 
 
        struct Controller {
@@ -225,6 +225,12 @@ public:
                                void (LaunchControlXL::*release)())
                        : Button(id, press, release), _controller_number(cn) {}
 
+               ControllerButton(ButtonID id, uint8_t cn,
+                               void (LaunchControlXL::*press)(),
+                               void (LaunchControlXL::*release)(),
+                               void (LaunchControlXL::*release_long)())
+                       : Button(id, press, release, release_long), _controller_number(cn) {}
+
 
                uint8_t controller_number() const { return _controller_number; }
 
@@ -271,26 +277,33 @@ public:
                SelectButton(ButtonID id, uint8_t cn, uint8_t index, void (LaunchControlXL::*press)(), LaunchControlXL& l)
                        : ControllerButton(id, cn, press), LED(index, RedFull, l) {}
 
+               SelectButton(ButtonID id, uint8_t cn, uint8_t index,
+                       void (LaunchControlXL::*press)(),
+                       void (LaunchControlXL::*release)(),
+                       void (LaunchControlXL::*release_long)(),
+                       LaunchControlXL& l)
+                       : ControllerButton(id, cn, press, release, release_long), LED(index, RedFull, l) {}
+
                MidiByteArray state_msg(bool light) const;
        };
 
        struct TrackStateButton : public NoteButton, public LED {
                TrackStateButton(ButtonID id, uint8_t nn, uint8_t index, void (LaunchControlXL::*press)(), LaunchControlXL& l)
                        : NoteButton(id, nn, press)
-                       , LED(index, Yellow, l) {}
+                       , LED(index, YellowLow, l) {}
 
                TrackStateButton(ButtonID id, uint8_t nn, uint8_t index, void (LaunchControlXL::*press)(),
                                void (LaunchControlXL::*release)(),
                                LaunchControlXL& l)
                        : NoteButton(id, nn, press, release)
-                       , LED(index, Yellow, l) {}
+                       , LED(index, YellowLow, l) {}
 
                TrackStateButton(ButtonID id, uint8_t nn, uint8_t index, void (LaunchControlXL::*press)(),
                                void (LaunchControlXL::*release)(),
                                void (LaunchControlXL::*release_long)(),
                                LaunchControlXL& l)
                        : NoteButton(id, nn, press, release, release_long)
-                       , LED(index, Yellow, l) {}
+                       , LED(index, YellowLow, l) {}
 
                MidiByteArray state_msg(bool light) const;
        };
@@ -308,9 +321,9 @@ public:
        };
 
        struct Knob : public Controller, public MultiColorLED {
-               Knob(KnobID id, uint8_t cn, uint8_t index, LEDColor color, LaunchControlXL& l)
+               Knob(KnobID id, uint8_t cn, uint8_t index, LaunchControlXL& l)
                        : Controller(cn, 64)
-                       , MultiColorLED(index, color, l)
+                       , MultiColorLED(index, Off, l)
                        , _id(id) {} // knob 50/50 value
 
                KnobID id() const { return _id; }
@@ -335,6 +348,8 @@ public:
        void *get_gui() const;
        void tear_down_gui();
 
+       bool use_fader8master = false;
+
        int set_active(bool yn);
        XMLNode &get_state();
        int set_state(const XMLNode &node, int version);
@@ -352,6 +367,7 @@ public:
 
        void write(const MidiByteArray &);
        void reset(uint8_t chan);
+       void set_fader8master (bool yn);
 
        TrackMode track_mode() const { return _track_mode; }
        void set_track_mode(TrackMode mode);
@@ -446,12 +462,16 @@ private:
        void notify_loop_state_changed();
        void notify_parameter_changed(std::string);
 
+       /* Knob methods */
+
+       Knob** knobs_by_column(uint8_t col, Knob** knob_col);
+       void update_knob_led(uint8_t n);
 
        /* Button methods */
 
        TrackButton* track_button_by_range(uint8_t n, uint8_t first, uint8_t middle);
-       TrackButton* focus_button_by_collumn(uint8_t col) { return track_button_by_range(col, 41, 57) ; }
-       TrackButton* control_button_by_collumn(uint8_t col) { return track_button_by_range(col, 73, 89) ; }
+       TrackButton* focus_button_by_column(uint8_t col) { return track_button_by_range(col, 41, 57) ; }
+       TrackButton* control_button_by_column(uint8_t col) { return track_button_by_range(col, 73, 89) ; }
 
 
        void button_device();
@@ -464,6 +484,8 @@ private:
        void button_select_down();
        void button_select_left();
        void button_select_right();
+       void button_select_left_long_press();
+       void button_select_right_long_press();
 
        void button_track_focus(uint8_t n);
        void button_track_control(uint8_t n);