2 Copyright (C) 2006,2007 John Anderson
3 Copyright (C) 2012 Paul Davis
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __mackie_controls_h__
21 #define __mackie_controls_h__
28 #include "pbd/signals.h"
30 #include "mackie_control_exception.h"
56 fader_touch_button_base_id = 0x68,
57 vselect_button_base_id = 0x20,
58 select_button_base_id = 0x18,
59 mute_button_base_id = 0x10,
60 solo_button_base_id = 0x08,
61 recenable_button_base_id = 0x0,
65 Control (int id, int ordinal, std::string name, Group& group);
68 virtual const Led & led() const { throw MackieControlException ("no led available"); }
70 /// type() << 8 + midi id of the control. This
71 /// provides a unique id for any control on the surface.
72 int id() const { return (type() << 8) + _id; }
74 /// the value of the second bytes of the message. It's
75 /// the id of the control, but only guaranteed to be
76 /// unique within the control type.
77 int raw_id() const { return _id; }
79 /// The 1-based number of the control
80 int ordinal() const { return _ordinal; }
82 const std::string & name() const { return _name; }
83 const Group & group() const { return _group; }
84 virtual bool accepts_feedback() const { return true; }
86 virtual type_t type() const = 0;
88 /// Return true if this control is the one and only Jog Wheel
89 virtual bool is_jog() const { return false; }
92 void set_in_use (bool);
94 /// Keep track of the timeout so it can be updated with more incoming events
95 sigc::connection in_use_connection;
97 /** If we are doing an in_use timeout for a fader without touch, this
98 * is its touch button control; otherwise 0.
100 Control* in_use_touch_control;
110 std::ostream & operator << (std::ostream & os, const Control & control);
114 #endif /* __mackie_controls_h__ */