Ardour  9.8-236-gb896344c8d
c1_control.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2026 Holger Dehnhardt <holger@dehnhardt.org>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 #ifndef ardour_surface_console1_button_h
19 #define ardour_surface_console1_button_h
20 
21 #include "ardour/debug.h"
22 #include "console1.h"
23 
24 namespace ArdourSurface {
25 
27 
29 {
30  public:
32  {
37  METER
38  };
39 
41  : console1 (console1)
42  , _id (id)
43  {
44  }
45 
46  virtual ~Controller () {}
47 
49  ControllerID id () const { return _id; }
50 
51  virtual ControllerType get_type () { return CONTROLLER; }
52 
53  protected:
55 };
56 
58 {
59  public:
61  ControllerID id,
62  std::function<void (uint32_t)> action,
63  std::function<void (uint32_t)> shift_action = 0,
64  std::function<void (uint32_t)> plugin_action = 0,
65  std::function<void (uint32_t)> plugin_shift_action = 0 )
67  , action (action)
71  {
72  console1->buttons.insert (std::make_pair (id, this));
73  }
74 
76 
77  void set_action (std::function<void (uint32_t)> new_action) { action = new_action; }
78  void set_plugin_action (std::function<void (uint32_t)> new_action) { plugin_action = new_action; }
79  void set_plugin_shift_action (std::function<void (uint32_t)> new_action) { plugin_shift_action = new_action; }
80 
81  virtual void set_led_state (bool onoff)
82  {
83  // DEBUG_TRACE(DEBUG::Console1, "ControllerButton::set_led_state ...\n");
84  MIDI::byte buf[3];
85  buf[0] = 0xB0;
86  buf[1] = _id;
87  buf[2] = onoff ? 127 : 0;
88 
89  console1->write (buf, 3);
90  }
91 
92  virtual void set_led_value (uint32_t val)
93  {
94  // DEBUG_TRACE(DEBUG::Console1, "ControllerButton::set_led_state ...\n");
95  MIDI::byte buf[3];
96  buf[0] = 0xB0;
97  buf[1] = _id;
98  buf[2] = val;
99 
100  console1->write (buf, 3);
101  }
102  std::function<void (uint32_t)> action;
103  std::function<void (uint32_t)> shift_action;
104  std::function<void (uint32_t)> plugin_action;
105  std::function<void (uint32_t)> plugin_shift_action;
106 };
107 
109 {
110  public:
112  ControllerID id,
113  std::vector<uint32_t> state_values,
114  std::function<void (uint32_t)> action,
115  std::function<void (uint32_t)> shift_action = 0,
116  std::function<void (uint32_t)> plugin_action = 0,
117  std::function<void (uint32_t)> plugin_shift_action = 0
118  )
119  : Controller (console1, id)
120  , action (action)
125  {
126  console1->multi_buttons.insert (std::make_pair (id, this));
127  }
128 
130 
131  virtual void set_led_state (uint32_t state)
132  {
133  if (state >= state_values.size ())
134  return;
135  MIDI::byte buf[3];
136  buf[0] = 0xB0;
137  buf[1] = _id;
138  buf[2] = state_values[state];
139 
140  console1->write (buf, 3);
141  }
142 
143  void set_action (std::function<void (uint32_t)> new_action) { action = new_action; }
144  void set_plugin_action (std::function<void (uint32_t)> new_action) { plugin_action = new_action; }
145  void set_plugin_shift_action (std::function<void (uint32_t)> new_action) { plugin_shift_action = new_action; }
146 
147  uint32_t state_count () { return state_values.size (); }
148 
149  std::function<void (uint32_t)> action;
150  std::function<void (uint32_t)> shift_action;
151  std::function<void (uint32_t)> plugin_action;
152  std::function<void (uint32_t)> plugin_shift_action;
153 
154  private:
155  std::vector<uint32_t> state_values;
156 };
157 
158 class Meter : public Controller
159 {
160  public:
162  ControllerID id,
163  std::function<void ()> action,
164  std::function<void ()> shift_action = 0)
165  : Controller (console1, id)
166  , action (action)
168  {
169  console1->meters.insert (std::make_pair (id, this));
170  }
171 
173 
174  virtual void set_value (uint32_t value)
175  {
176  MIDI::byte buf[3];
177  buf[0] = 0xB0;
178  buf[1] = _id;
179  buf[2] = value;
180 
181  console1->write (buf, 3);
182  }
183  std::function<void ()> action;
184  std::function<void ()> shift_action;
185 };
186 
187 class Encoder : public Controller
188 {
189  public:
191  ControllerID id,
192  std::function<void (uint32_t)> action,
193  std::function<void (uint32_t)> shift_action = 0,
194  std::function<void (uint32_t)> plugin_action = 0,
195  std::function<void (uint32_t)> plugin_shift_action = 0)
196  : Controller (console1, id)
197  , action (action)
201  {
202  console1->encoders.insert (std::make_pair (id, this));
203  }
204 
206 
207  void set_action (std::function<void (uint32_t)> new_action) { action = new_action; }
208  void set_plugin_action (std::function<void (uint32_t)> new_action) { plugin_action = new_action; }
209  void set_plugin_shift_action (std::function<void (uint32_t)> new_action) { plugin_shift_action = new_action; }
210 
211  virtual void set_value (uint32_t value)
212  {
213  MIDI::byte buf[3];
214  buf[0] = 0xB0;
215  buf[1] = _id;
216  buf[2] = value;
217 
218  console1->write (buf, 3);
219  }
220  std::function<void (uint32_t)> action;
221  std::function<void (uint32_t val)> shift_action;
222  std::function<void (uint32_t val)> plugin_action;
223  std::function<void (uint32_t val)> plugin_shift_action;
224 
225  PBD::Signal<void(uint32_t)>* plugin_signal;
226 };
227 
228 }
229 #endif // ardour_surface_console1_button_h
MultiStateButtonMap multi_buttons
Definition: console1.h:400
ControllerButton(Console1 *console1, ControllerID id, std::function< void(uint32_t)> action, std::function< void(uint32_t)> shift_action=0, std::function< void(uint32_t)> plugin_action=0, std::function< void(uint32_t)> plugin_shift_action=0)
Definition: c1_control.h:60
virtual void set_led_state(bool onoff)
Definition: c1_control.h:81
std::function< void(uint32_t)> shift_action
Definition: c1_control.h:103
void set_plugin_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:78
std::function< void(uint32_t)> action
Definition: c1_control.h:102
std::function< void(uint32_t)> plugin_shift_action
Definition: c1_control.h:105
void set_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:77
std::function< void(uint32_t)> plugin_action
Definition: c1_control.h:104
void set_plugin_shift_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:79
virtual void set_led_value(uint32_t val)
Definition: c1_control.h:92
virtual ControllerType get_type()
Definition: c1_control.h:51
ControllerID id() const
Definition: c1_control.h:49
Controller(Console1 *console1, ControllerID id)
Definition: c1_control.h:40
std::function< void(uint32_t)> action
Definition: c1_control.h:220
void set_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:207
std::function< void(uint32_t val)> plugin_shift_action
Definition: c1_control.h:223
ControllerType get_type()
Definition: c1_control.h:205
std::function< void(uint32_t val)> plugin_action
Definition: c1_control.h:222
Encoder(Console1 *console1, ControllerID id, std::function< void(uint32_t)> action, std::function< void(uint32_t)> shift_action=0, std::function< void(uint32_t)> plugin_action=0, std::function< void(uint32_t)> plugin_shift_action=0)
Definition: c1_control.h:190
void set_plugin_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:208
void set_plugin_shift_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:209
virtual void set_value(uint32_t value)
Definition: c1_control.h:211
PBD::Signal< void(uint32_t)> * plugin_signal
Definition: c1_control.h:225
std::function< void(uint32_t val)> shift_action
Definition: c1_control.h:221
std::function< void()> action
Definition: c1_control.h:183
virtual void set_value(uint32_t value)
Definition: c1_control.h:174
ControllerType get_type()
Definition: c1_control.h:172
Meter(Console1 *console1, ControllerID id, std::function< void()> action, std::function< void()> shift_action=0)
Definition: c1_control.h:161
std::function< void()> shift_action
Definition: c1_control.h:184
void set_plugin_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:144
void set_plugin_shift_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:145
std::function< void(uint32_t)> shift_action
Definition: c1_control.h:150
MultiStateButton(Console1 *console1, ControllerID id, std::vector< uint32_t > state_values, std::function< void(uint32_t)> action, std::function< void(uint32_t)> shift_action=0, std::function< void(uint32_t)> plugin_action=0, std::function< void(uint32_t)> plugin_shift_action=0)
Definition: c1_control.h:111
std::function< void(uint32_t)> plugin_shift_action
Definition: c1_control.h:152
virtual void set_led_state(uint32_t state)
Definition: c1_control.h:131
std::function< void(uint32_t)> plugin_action
Definition: c1_control.h:151
std::function< void(uint32_t)> action
Definition: c1_control.h:149
void set_action(std::function< void(uint32_t)> new_action)
Definition: c1_control.h:143
std::vector< uint32_t > state_values
Definition: c1_control.h:155
void write(const MidiByteArray &)