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 <boost/smart_ptr.hpp>
30 #include "pbd/controllable.h"
31 #include "pbd/signals.h"
33 #include "mackie_control_exception.h"
34 #include "midi_byte_array.h"
37 class AutomationControl;
40 namespace ArdourSurface {
50 Control (int id, std::string name, Group& group);
53 int id() const { return _id; }
54 const std::string & name() const { return _name; }
55 Group & group() const { return _group; }
58 void set_in_use (bool);
60 // Keep track of the timeout so it can be updated with more incoming events
61 sigc::connection in_use_connection;
63 virtual MidiByteArray zero() = 0;
65 /** If we are doing an in_use timeout for a fader without touch, this
66 * is its touch button control; otherwise 0.
68 Control* in_use_touch_control;
70 boost::shared_ptr<ARDOUR::AutomationControl> control () const { return normal_ac; }
71 virtual void set_control (boost::shared_ptr<ARDOUR::AutomationControl>);
74 void set_value (float val, PBD::Controllable::GroupControlDisposition gcd = PBD::Controllable::UseGroup);
76 virtual void start_touch (double when);
77 virtual void stop_touch (double when);
80 boost::shared_ptr<ARDOUR::AutomationControl> normal_ac;
83 int _id; /* possibly device-dependent ID */
92 std::ostream & operator << (std::ostream & os, const ArdourSurface::Mackie::Control & control);
94 #endif /* __mackie_controls_h__ */