sigc::connection vblank_connection;
sigc::connection periodic_connection;
+ enum ModifierState {
+ None = 0,
+ ModShift = 0x1,
+ ModSelect = 0x2,
+ };
+
+ ModifierState modifier_state;
+
static const int cols;
static const int rows;
static const int pixels_per_row;
int open ();
int close ();
bool redraw ();
- int bitblt_to_device_frame_buffer ();
+ int blit_to_device_frame_buffer ();
bool vblank ();
enum ButtonID {
struct LED
{
enum State {
- Off,
+ NoTransition,
OneShot24th,
OneShot16th,
OneShot8th,
};
enum Colors {
+ Black = 0,
Red = 127,
Green = 126,
Blue = 125,
White = 122
};
- LED (uint8_t e) : _extra (e), _color_index (0), _state (Off) {}
+ LED (uint8_t e) : _extra (e), _color_index (0), _state (NoTransition) {}
virtual ~LED() {}
uint8_t extra () const { return _extra; }
, x (xx)
, y (yy) {}
- MidiByteArray state_msg () const { return MidiByteArray (3, 0x90|_state, _extra, (_state == Off) ? 0 : _color_index); }
+ MidiByteArray state_msg () const { return MidiByteArray (3, 0x90|_state, _extra, _color_index); }
int coord () const { return (y * 8) + x; }
int note_number() const { return extra(); }
, id (bb)
, press_method (&Push2::relax)
, release_method (&Push2::relax)
+ , long_press_method (&Push2::relax)
{}
Button (ButtonID bb, uint8_t ex, void (Push2::*press)())
, id (bb)
, press_method (press)
, release_method (&Push2::relax)
+ , long_press_method (&Push2::relax)
{}
Button (ButtonID bb, uint8_t ex, void (Push2::*press)(), void (Push2::*release)())
, id (bb)
, press_method (press)
, release_method (release)
+ , long_press_method (&Push2::relax)
+ {}
+
+ Button (ButtonID bb, uint8_t ex, void (Push2::*press)(), void (Push2::*release)(), void (Push2::*long_press)())
+ : LED (ex)
+ , id (bb)
+ , press_method (press)
+ , release_method (release)
+ , long_press_method (long_press)
{}
- MidiByteArray state_msg () const { return MidiByteArray (3, 0xb0|_state, _extra, (_state == Off) ? 0 : _color_index); }
+ MidiByteArray state_msg () const { return MidiByteArray (3, 0xb0|_state, _extra, _color_index); }
int controller_number() const { return extra(); }
ButtonID id;
void (Push2::*press_method)();
void (Push2::*release_method)();
+ void (Push2::*long_press_method)();
+ sigc::connection timeout_connection;
};
struct ColorButton : public Button {
ColorButton (ButtonID bb, uint8_t ex, void (Push2::*press)(), void (Push2::*release)())
: Button (bb, ex, press, release) {}
+
+ ColorButton (ButtonID bb, uint8_t ex, void (Push2::*press)(), void (Push2::*release)(), void (Push2::*long_press)())
+ : Button (bb, ex, press, release, long_press) {}
};
struct WhiteButton : public Button {
WhiteButton (ButtonID bb, uint8_t ex, void (Push2::*press)(), void (Push2::*release)())
: Button (bb, ex, press, release) {}
+
+ WhiteButton (ButtonID bb, uint8_t ex, void (Push2::*press)(), void (Push2::*release)(), void (Push2::*long_press)())
+ : Button (bb, ex, press, release, long_press) {}
};
void relax () {}
/* map of Buttons by ButtonID */
typedef std::map<ButtonID,Button*> IDButtonMap;
IDButtonMap id_button_map;
+ std::set<ButtonID> buttons_down;
+ std::set<ButtonID> consumed;
+
+ bool button_long_press_timeout (ButtonID id);
+ void start_press_timeout (Button&, ButtonID);
+
+ void init_buttons (bool startup);
+ void init_touch_strip ();
/* map of Pads by note number */
typedef std::map<int,Pad*> NNPadMap;
void button_metronome ();
void button_repeat ();
void button_solo ();
+ void button_fixed_length ();
+ void button_new ();
+ void button_browse ();
+ void button_clip ();
+ void button_upper (uint32_t n);
+ void button_lower (uint32_t n);
+ void button_upper_1 () { button_upper (0); }
+ void button_upper_2 () { button_upper (1); }
+ void button_upper_3 () { button_upper (2); }
+ void button_upper_4 () { button_upper (3); }
+ void button_upper_5 () { button_upper (4); }
+ void button_upper_6 () { button_upper (5); }
+ void button_upper_7 () { button_upper (6); }
+ void button_upper_8 () { button_upper (7); }
+ void button_lower_1 () { button_lower (0); }
+ void button_lower_2 () { button_lower (1); }
+ void button_lower_3 () { button_lower (2); }
+ void button_lower_4 () { button_lower (3); }
+ void button_lower_5 () { button_lower (4); }
+ void button_lower_6 () { button_lower (5); }
+ void button_lower_7 () { button_lower (6); }
+ void button_lower_8 () { button_lower (7); }
+ void button_undo ();
+ void button_fwd32t ();
+ void button_fwd32 ();
+ void button_fwd16t ();
+ void button_fwd16 ();
+ void button_fwd8t ();
+ void button_fwd8 ();
+ void button_fwd4t ();
+ void button_fwd4 ();
+ void button_add_track ();
+ void button_stop ();
+ void button_shift_press ();
+ void button_shift_release ();
+ void button_shift_long_press ();
+ void button_select_press ();
+ void button_select_release ();
+ void button_select_long_press ();
+ void button_page_left ();
+ void button_page_right ();
+
+ void start_shift ();
+ void end_shift ();
+ void start_select ();
+ void end_select ();
+
+ /* encoders */
+
+ void strip_vpot (int, int);
+ void other_vpot (int, int);
+ void strip_vpot_touch (int, bool);
+ void other_vpot_touch (int, bool);
/* widgets */
Glib::RefPtr<Pango::Layout> upper_layout[8];
Glib::RefPtr<Pango::Layout> mid_layout[8];
Glib::RefPtr<Pango::Layout> lower_layout[8];
+
+ void splash ();
+ ARDOUR::microseconds_t splash_start;
+
+ /* stripables */
+
+ int32_t bank_start;
+ PBD::ScopedConnectionList stripable_connections;
+ boost::shared_ptr<ARDOUR::Stripable> stripable[8];
+ boost::shared_ptr<ARDOUR::Stripable> master;
+ boost::shared_ptr<ARDOUR::Stripable> monitor;
+
+ void solo_change (int);
+ void mute_change (int);
+ void stripable_property_change (PBD::PropertyChange const& what_changed, int which);
+
+ void switch_bank (uint32_t base);
};