1 /*
2 * Copyright (C) 2013 Andreas Degert
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
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18
19 #pragma once
20
21 #ifndef SRC_HEADERS_MACHINE_H_
22 #define SRC_HEADERS_MACHINE_H_
23
24 // #include <ext/stdio_filebuf.h>
25 #include <boost/iostreams/device/file_descriptor.hpp>
26 #include <boost/iostreams/stream.hpp>
27 #include "jsonrpc_methods.h"
28 #ifdef HAVE_AVAHI
29 #include "avahi_register.h"
30 #endif
31
32 namespace gx_gui { class UiBuilderImpl; }
33
34 enum PluginType {
35 PLUGIN_TYPE_MONO,
36 PLUGIN_TYPE_STEREO,
37 };
38
39 namespace gx_engine {
40
41 class bank_iterator {
42 private:
43 gx_system::PresetBanks::iterator it;
44 public:
bank_iterator(gx_system::PresetBanks::iterator it_)45 bank_iterator(gx_system::PresetBanks::iterator it_): it(it_) {}
~bank_iterator()46 ~bank_iterator() {}
47 bool operator!=(const bank_iterator& i) const { return i.it != it; }
48 bank_iterator& operator++() { ++it; return *this; }
49 gx_system::PresetFileGui* operator->() { return (*it)->get_guiwrapper(); }
50 gx_system::PresetFileGui* operator*() { return (*it)->get_guiwrapper(); }
51 };
52
53 typedef map<string, set<void*> > output_listen_map;
54
55 class GxMachineBase {
56 private:
57 sigc::connection update_timeout;
58 protected:
59 sigc::signal<void,const std::string&, std::vector<gx_system::FileName> > impresp_list;
60 output_listen_map update_map;
61 private:
62 virtual int _get_parameter_value_int(const std::string& id) = 0;
63 virtual int _get_parameter_value_bool(const std::string& id) = 0;
64 virtual float _get_parameter_value_float(const std::string& id) = 0;
65 virtual std::string _get_parameter_value_string(const std::string& id) = 0;
66 virtual sigc::signal<void, int>& _signal_parameter_value_int(const std::string& id) = 0;
67 virtual sigc::signal<void, bool>& _signal_parameter_value_bool(const std::string& id) = 0;
68 virtual sigc::signal<void, float>& _signal_parameter_value_float(const std::string& id) = 0;
69 virtual bool update_parameter() = 0;
70 protected:
71 GxMachineBase();
72 public:
73 virtual ~GxMachineBase();
74 // engine
75 virtual void set_state(GxEngineState state) = 0;
76 virtual GxEngineState get_state() = 0;
77 virtual void load_ladspalist(std::vector<std::string>& old_not_found, ladspa::LadspaPluginList& pluginlist) = 0;
78 virtual void save_ladspalist(ladspa::LadspaPluginList& pluginlist) = 0;
79 virtual void commit_ladspa_changes() = 0;
80 virtual sigc::signal<void,Plugin*,PluginChange::pc>& signal_plugin_changed() = 0;
81 virtual Plugin *pluginlist_lookup_plugin(const std::string& id) const = 0;
82 virtual bool load_unit(gx_gui::UiBuilderImpl& builder, PluginDef* pdef) = 0;
83 virtual void pluginlist_append_rack(UiBuilderBase& ui) = 0;
84 virtual float get_tuner_freq() = 0;
85 virtual float get_tuner_note() = 0;
86 virtual void set_oscilloscope_mul_buffer(int a) = 0;
87 virtual int get_oscilloscope_mul_buffer() = 0;
88 virtual gx_system::CmdlineOptions& get_options() const = 0;
89 virtual void start_socket(sigc::slot<void> quit_mainloop, const Glib::ustring& host, int port) = 0;
90 virtual void stop_socket() = 0;
91 virtual sigc::signal<void,GxEngineState>& signal_state_change() = 0;
92 virtual void tuner_used_for_display(bool on) = 0;
93 virtual void tuner_used_by_midi(bool on) = 0;
94 virtual void tuner_switch(bool on) = 0;
95 virtual const std::vector<std::string>& get_rack_unit_order(PluginType type) = 0;
96 virtual sigc::signal<void,bool>& signal_rack_unit_order_changed() = 0;
97 virtual void remove_rack_unit(const std::string& unit, PluginType type) = 0;
98 virtual void insert_rack_unit(const std::string& unit, const std::string& before, PluginType type) = 0;
99 // tuner_switcher
100 virtual bool get_tuner_switcher_active() = 0;
101 virtual void tuner_switcher_activate(bool v) = 0;
102 virtual void tuner_switcher_deactivate() = 0;
103 virtual void tuner_switcher_toggle(bool v) = 0;
104 virtual sigc::signal<void,const Glib::ustring&,const Glib::ustring&>& tuner_switcher_signal_display() = 0;
105 virtual sigc::signal<void,TunerSwitcher::SwitcherState>& tuner_switcher_signal_set_state() = 0;
106 virtual sigc::signal<void, bool>& tuner_switcher_signal_selection_done() = 0;
107 // preset
108 virtual bool setting_is_preset() = 0;
109 virtual const Glib::ustring& get_current_bank() = 0;
110 virtual gx_system::PresetFileGui *get_current_bank_file() = 0;
111 virtual const Glib::ustring& get_current_name() = 0;
112 virtual gx_system::PresetFileGui* get_bank_file(const Glib::ustring& bank) const = 0;
113 virtual Glib::ustring get_bank_name(int n) = 0;
114 virtual void load_preset(gx_system::PresetFileGui *pf, const Glib::ustring& name) = 0;
115 virtual bool msend_midi_cc(int cc, int pgn, int bgn, int num) = 0;
116 virtual void loadstate() = 0;
117 virtual int bank_size() = 0;
118 virtual int get_bank_index(const Glib::ustring& bank) = 0;
119 virtual void create_default_scratch_preset() = 0;
120 virtual void set_statefilename(const std::string& fn) = 0;
121 virtual void save_to_state(bool preserve_preset=false) = 0;
122 virtual void plugin_preset_list_load(const PluginDef *pdef, gx_preset::UnitPresetList &presetnames) = 0;
123 virtual void plugin_preset_list_set(const PluginDef *pdef, bool factory, const Glib::ustring& name) = 0;
124 virtual void plugin_preset_list_sync_set(const PluginDef *pdef, bool factory, const Glib::ustring& name) = 0;
125 virtual void plugin_preset_list_set_on_idle(const PluginDef *pdef, bool factory, const Glib::ustring& name) = 0;
126 virtual void plugin_preset_list_save(const PluginDef *pdef, const Glib::ustring& name) = 0;
127 virtual void plugin_preset_list_remove(const PluginDef *pdef, const Glib::ustring& name) = 0;
128 virtual void disable_autosave(bool v) = 0;
129 virtual sigc::signal<void>& signal_selection_changed() = 0;
130 virtual sigc::signal<void>& signal_presetlist_changed() = 0;
131 virtual gx_system::PresetFileGui *bank_insert_uri(const Glib::ustring& uri, bool move, int position) = 0;
132 virtual gx_system::PresetFileGui *bank_insert_new(const Glib::ustring& newname) = 0;
133 virtual bool rename_bank(const Glib::ustring& oldname, Glib::ustring& newname) = 0;
134 virtual bool rename_preset(gx_system::PresetFileGui& pf, const Glib::ustring& oldname, const Glib::ustring& newname) = 0;
135 virtual void bank_reorder(const std::vector<Glib::ustring>& neworder) = 0;
136 virtual void reorder_preset(gx_system::PresetFileGui& pf, const std::vector<Glib::ustring>& neworder) = 0;
137 virtual bool bank_check_reparse() = 0;
138 virtual void erase_preset(gx_system::PresetFileGui& pf, const Glib::ustring& name) = 0;
139 virtual void bank_set_flag(gx_system::PresetFileGui *pf, int flag, bool v) = 0;
140 virtual std::string bank_get_filename(const Glib::ustring& bank) = 0;
141 virtual void bank_drag_begin() = 0;
142 virtual gx_system::PresetFileGui *bank_get_file(const Glib::ustring& bank) const = 0;
143 virtual bank_iterator bank_begin() = 0;
144 virtual bank_iterator bank_end() = 0;
145 virtual void pf_append(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& name) = 0;
146 virtual void pf_insert_before(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& pos, const Glib::ustring& name) = 0;
147 virtual void pf_insert_after(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& pos, const Glib::ustring& name) = 0;
148 virtual bool convert_preset(gx_system::PresetFileGui& pf) = 0;
149 virtual bool bank_remove(const Glib::ustring& bank) = 0;
150 virtual void bank_save() = 0;
151 virtual void pf_save(gx_system::PresetFileGui& pf, const Glib::ustring& name) = 0;
152
153 virtual void next_preset_switch() = 0;
154 virtual void previus_preset_switch() = 0;
155 virtual void process_next_preset_switch(bool s) = 0;
156 virtual void process_previus_preset_switch(bool s) = 0;
157
158 // jack
159 virtual gx_jack::GxJack *get_jack() = 0;
160 virtual void set_jack_insert(bool v) = 0;
161 // pmap
162 virtual Parameter& get_parameter(const std::string& id) = 0;
163 virtual void insert_param(Glib::ustring group, Glib::ustring name) = 0;
164 virtual void set_init_values() = 0;
165 void set_update_parameter(void *control, const string& id, bool on=true);
166 virtual bool parameter_hasId(const char *p) = 0;
167 virtual bool parameter_hasId(const std::string& id) = 0;
168 virtual void reset_unit(const PluginDef *pdef) const = 0;
169 virtual bool parameter_unit_has_std_values(const PluginDef *pdef) const = 0;
170 virtual void set_parameter_value(const std::string& id, int value) = 0;
171 virtual void set_parameter_value(const std::string& id, float value) = 0;
172 virtual void set_parameter_value(const std::string& id, bool value) = 0;
173 virtual void set_parameter_value(const std::string& id, const std::string& value) = 0;
set_parameter_value(const std::string & id,double value)174 void set_parameter_value(const std::string& id, double value) { set_parameter_value(id, (float)value); }
175 template <class T> T get_parameter_value (const std::string& id);
176 template <class T> sigc::signal<void, T>& signal_parameter_value(const std::string& id);
177 // MidiControllerList
178 virtual bool midi_get_config_mode(int *ctl = 0) = 0;
179 virtual void midi_set_config_mode(bool v, int ctl=-1) = 0;
180 virtual sigc::signal<void>& signal_midi_changed() = 0;
181 virtual sigc::signal<void, int, int>& signal_midi_value_changed() = 0;
182 virtual void request_midi_value_update() = 0;
183 virtual int midi_size() = 0;
184 virtual midi_controller_list& midi_get(int n) = 0;
185 virtual void midi_deleteParameter(Parameter& param) = 0;
186 virtual void midi_set_current_control(int v) = 0;
187 virtual void midi_modifyCurrent(Parameter& param, float lower, float upper, bool toggle, int toggle_behaviour) = 0;
188 virtual int midi_param2controller(Parameter& param, const MidiController** p) = 0;
189 virtual void set_midi_channel(int s) = 0;
190 virtual void midi_feedback(int c, int v) = 0;
191 virtual bool get_midi_feedback() = 0;
192 virtual void set_midi_feedback(int v) = 0;
193 virtual void on_tuner_freq_changed() = 0;
194 // Convolver
195 virtual void reload_impresp_list(const std::string& path) = 0;
signal_impresp_list()196 sigc::signal<void,const std::string&, std::vector<gx_system::FileName> >& signal_impresp_list() {
197 return impresp_list;
198 }
199 virtual void load_impresp_dirs(std::vector<gx_system::FileName>& dirs) = 0;
200 virtual bool read_audio(const std::string& filename, unsigned int *audio_size, int *audio_chan,
201 int *audio_type, int *audio_form, int *audio_rate, float **buffer) = 0;
202 };
203
get_parameter_value(const std::string & id)204 template <> inline float GxMachineBase::get_parameter_value(const std::string& id) {
205 return _get_parameter_value_float(id);
206 }
207
get_parameter_value(const std::string & id)208 template <> inline int GxMachineBase::get_parameter_value(const std::string& id) {
209 return _get_parameter_value_int(id);
210 }
211
get_parameter_value(const std::string & id)212 template <> inline bool GxMachineBase::get_parameter_value(const std::string& id) {
213 return _get_parameter_value_bool(id);
214 }
215
get_parameter_value(const std::string & id)216 template <> inline std::string GxMachineBase::get_parameter_value(const std::string& id) {
217 return _get_parameter_value_string(id);
218 }
219
signal_parameter_value(const std::string & id)220 template <> inline sigc::signal<void, float>& GxMachineBase::signal_parameter_value(const std::string& id) {
221 return _signal_parameter_value_float(id);
222 }
223
signal_parameter_value(const std::string & id)224 template <> inline sigc::signal<void, int>& GxMachineBase::signal_parameter_value(const std::string& id) {
225 return _signal_parameter_value_int(id);
226 }
227
signal_parameter_value(const std::string & id)228 template <> inline sigc::signal<void, bool>& GxMachineBase::signal_parameter_value(const std::string& id) {
229 return _signal_parameter_value_bool(id);
230 }
231
232
233 class GxMachine: public GxMachineBase {
234 private:
235 gx_system::CmdlineOptions& options;
236 GxEngine engine;
237 gx_jack::GxJack jack;
238 gx_preset::GxSettings settings;
239 TunerSwitcher tuner_switcher;
240 GxService *sock;
241 #ifdef HAVE_AVAHI
242 AvahiService *avahi_service;
243 #endif
244 ParamMap& pmap;
245 Glib::ustring switch_bank;
246 private:
247 void reset_switch_bank();
248 void set_mute_state(int mute);
249 void do_program_change(int pgm);
250 void do_bank_change(int pgm);
251 void edge_toggle_tuner(bool v);
252 void on_impresp(const std::string& path);
253 void exit_handler(bool otherthread);
254 void process_cmdline_bank_preset();
255 virtual int _get_parameter_value_int(const std::string& id);
256 virtual int _get_parameter_value_bool(const std::string& id);
257 virtual float _get_parameter_value_float(const std::string& id);
258 virtual std::string _get_parameter_value_string(const std::string& id);
259 virtual sigc::signal<void, int>& _signal_parameter_value_int(const std::string& id);
260 virtual sigc::signal<void, bool>& _signal_parameter_value_bool(const std::string& id);
261 virtual sigc::signal<void, float>& _signal_parameter_value_float(const std::string& id);
262 virtual bool update_parameter();
263 public:
264 GxMachine(gx_system::CmdlineOptions& options);
265 virtual ~GxMachine();
266 virtual void set_state(GxEngineState state);
267 virtual GxEngineState get_state();
268 virtual void load_ladspalist(std::vector<std::string>& old_not_found, ladspa::LadspaPluginList& pluginlist);
269 virtual void save_ladspalist(ladspa::LadspaPluginList& pluginlist);
270 virtual void commit_ladspa_changes();
271 virtual sigc::signal<void,Plugin*,PluginChange::pc>& signal_plugin_changed();
272 virtual Plugin *pluginlist_lookup_plugin(const std::string& id) const;
273 virtual bool load_unit(gx_gui::UiBuilderImpl& builder, PluginDef* pdef);
274 virtual void pluginlist_append_rack(UiBuilderBase& ui);
275 virtual float get_tuner_freq();
276 virtual float get_tuner_note();
277 virtual void set_oscilloscope_mul_buffer(int a);
278 virtual int get_oscilloscope_mul_buffer();
279 virtual gx_system::CmdlineOptions& get_options() const;
280 virtual void start_socket(sigc::slot<void> quit_mainloop, const Glib::ustring& host, int port);
281 virtual void stop_socket();
282 virtual sigc::signal<void,GxEngineState>& signal_state_change();
283 virtual void tuner_used_for_display(bool on);
284 virtual void tuner_used_by_midi(bool on);
285 virtual void tuner_switch(bool on);
286 virtual const std::vector<std::string>& get_rack_unit_order(PluginType type);
287 virtual sigc::signal<void,bool>& signal_rack_unit_order_changed();
288 virtual void remove_rack_unit(const std::string& unit, PluginType type);
289 virtual void insert_rack_unit(const std::string& unit, const std::string& before, PluginType type);
290 // tuner_switcher
291 virtual bool get_tuner_switcher_active();
292 virtual void tuner_switcher_activate(bool v);
293 virtual void tuner_switcher_deactivate();
294 virtual void tuner_switcher_toggle(bool v);
295 virtual sigc::signal<void,const Glib::ustring&,const Glib::ustring&>& tuner_switcher_signal_display();
296 virtual sigc::signal<void,TunerSwitcher::SwitcherState>& tuner_switcher_signal_set_state();
297 virtual sigc::signal<void, bool>& tuner_switcher_signal_selection_done();
298 // preset
299 virtual bool setting_is_preset();
300 virtual const Glib::ustring& get_current_bank();
301 virtual gx_system::PresetFileGui *get_current_bank_file();
302 virtual const Glib::ustring& get_current_name();
303 virtual gx_system::PresetFileGui* get_bank_file(const Glib::ustring& bank) const;
304 virtual Glib::ustring get_bank_name(int n);
305 virtual void load_preset(gx_system::PresetFileGui *pf, const Glib::ustring& name);
306 virtual bool msend_midi_cc(int cc, int pgn, int bgn, int num);
307 virtual void loadstate();
308 virtual int bank_size();
309 virtual int get_bank_index(const Glib::ustring& bank);
310 virtual void create_default_scratch_preset();
311 virtual void set_statefilename(const std::string& fn);
312 virtual void save_to_state(bool preserve_preset=false);
313 virtual void plugin_preset_list_load(const PluginDef *pdef, gx_preset::UnitPresetList &presetnames);
314 virtual void plugin_preset_list_set(const PluginDef *pdef, bool factory, const Glib::ustring& name);
315 virtual void plugin_preset_list_sync_set(const PluginDef *pdef, bool factory, const Glib::ustring& name);
316 virtual void plugin_preset_list_set_on_idle(const PluginDef *pdef, bool factory, const Glib::ustring& name);
317 virtual void plugin_preset_list_save(const PluginDef *pdef, const Glib::ustring& name);
318 virtual void plugin_preset_list_remove(const PluginDef *pdef, const Glib::ustring& name);
319 virtual void disable_autosave(bool v);
320 virtual sigc::signal<void>& signal_selection_changed();
321 virtual sigc::signal<void>& signal_presetlist_changed();
322 virtual gx_system::PresetFileGui *bank_insert_uri(const Glib::ustring& uri, bool move, int position);
323 virtual gx_system::PresetFileGui *bank_insert_new(const Glib::ustring& newname);
324 virtual bool rename_bank(const Glib::ustring& oldname, Glib::ustring& newname);
325 virtual bool rename_preset(gx_system::PresetFileGui& pf, const Glib::ustring& oldname, const Glib::ustring& newname);
326 virtual void bank_reorder(const std::vector<Glib::ustring>& neworder);
327 virtual void reorder_preset(gx_system::PresetFileGui& pf, const std::vector<Glib::ustring>& neworder);
328 virtual bool bank_check_reparse();
329 virtual void erase_preset(gx_system::PresetFileGui& pf, const Glib::ustring& name);
330 virtual void bank_set_flag(gx_system::PresetFileGui *pf, int flag, bool v);
331 virtual std::string bank_get_filename(const Glib::ustring& bank);
332 virtual void bank_drag_begin();
333 virtual gx_system::PresetFileGui *bank_get_file(const Glib::ustring& bank) const;
334 virtual bank_iterator bank_begin();
335 virtual bank_iterator bank_end();
336 virtual void pf_append(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& name);
337 virtual void pf_insert_before(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& pos, const Glib::ustring& name);
338 virtual void pf_insert_after(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& pos, const Glib::ustring& name);
339 virtual bool convert_preset(gx_system::PresetFileGui& pf);
340 virtual bool bank_remove(const Glib::ustring& bank);
341 virtual void bank_save();
342 virtual void pf_save(gx_system::PresetFileGui& pf, const Glib::ustring& name);
343
344 virtual void next_preset_switch();
345 virtual void previus_preset_switch();
346 virtual void process_next_preset_switch(bool s);
347 virtual void process_previus_preset_switch(bool s);
348
349 // jack
350 virtual gx_jack::GxJack *get_jack();
351 virtual void set_jack_insert(bool v);
352 // pmap
353 virtual Parameter& get_parameter(const char *p);
354 virtual Parameter& get_parameter(const std::string& id);
355 virtual void insert_param(Glib::ustring group, Glib::ustring name);
356 virtual void set_init_values();
357 virtual bool parameter_hasId(const char *p);
358 virtual bool parameter_hasId(const std::string& id);
359 virtual void reset_unit(const PluginDef *pdef) const;
360 virtual bool parameter_unit_has_std_values(const PluginDef *pdef) const;
361 virtual void set_parameter_value(const std::string& id, int value);
362 virtual void set_parameter_value(const std::string& id, bool value);
363 virtual void set_parameter_value(const std::string& id, float value);
364 virtual void set_parameter_value(const std::string& id, const std::string& value);
365 // bool ui_f_update(const std::string& id, float value);
366 // MidiControllerList
367 virtual bool midi_get_config_mode(int *ctl = 0);
368 virtual void midi_set_config_mode(bool v, int ctl=-1);
369 virtual sigc::signal<void>& signal_midi_changed();
370 virtual sigc::signal<void, int, int>& signal_midi_value_changed();
371 virtual void request_midi_value_update();
372 virtual int midi_size();
373 virtual midi_controller_list& midi_get(int n);
374 virtual void midi_deleteParameter(Parameter& param);
375 virtual void midi_set_current_control(int v);
376 virtual void midi_modifyCurrent(Parameter& param, float lower, float upper, bool toggle, int toggle_behaviour);
377 virtual int midi_param2controller(Parameter& param, const MidiController** p);
378 virtual void set_midi_channel(int s);
379 virtual void midi_feedback(int c, int v);
380 virtual bool get_midi_feedback();
381 virtual void set_midi_feedback(int v);
382 virtual void on_tuner_freq_changed();
383 // Convolver
384 virtual void reload_impresp_list(const std::string& path);
385 virtual void load_impresp_dirs(std::vector<gx_system::FileName>& dirs);
386 virtual bool read_audio(const std::string& filename, unsigned int *audio_size, int *audio_chan,
387 int *audio_type, int *audio_form, int *audio_rate, float **buffer);
388 };
389
390 class GxMachineRemote: public GxMachineBase {
391 private:
392 gx_system::CmdlineOptions& options;
393 ParamMap pmap;
394 PluginListBase pluginlist;
395 gx_system::PresetBanks banks;
396 sigc::signal<void,GxEngineState> engine_state_change;
397 sigc::signal<void> selection_changed;
398 sigc::signal<void> presetlist_changed;
399 Glib::RefPtr<Gio::Socket> socket;
400 // __gnu_cxx::stdio_filebuf<char> *writebuf;
401 boost::iostreams::file_descriptor_sink *writebuf;
402 // ostream *os;
403 boost::iostreams::stream<boost::iostreams::file_descriptor_sink> *os;
404 gx_system::JsonWriter *jw;
405 std::vector<gx_system::JsonStringParser*> notify_list;
406 sigc::connection idle_conn;
407 gx_preset::UnitRacks rack_units;
408 sigc::signal<void> midi_changed;
409 sigc::signal<void, int, int> midi_value_changed;
410 ControllerArray midi_controller_map;
411 Glib::ustring current_bank;
412 Glib::ustring current_preset;
413 int bank_drag_get_counter;
414 std::string bank_drag_get_path;
415 sigc::signal<void,const Glib::ustring&,const Glib::ustring&> tuner_switcher_display;
416 sigc::signal<void,TunerSwitcher::SwitcherState> tuner_switcher_set_state;
417 sigc::signal<void, bool> tuner_switcher_selection_done;
418 sigc::signal<void,Plugin*,PluginChange::pc> plugin_changed;
419 private:
420 const jsonrpc_method_def& start_call(jsonrpc_method m_id);
421 void send();
422 void socket_error(int loc);
423 gx_system::JsonStringParser *receive();
424 bool get_bool(gx_system::JsonStringParser *jp);
425 bool socket_input_handler(Glib::IOCondition cond);
426 void add_idle_handler();
427 bool idle_notify_handler();
428 void handle_notify(gx_system::JsonStringParser *jp);
429 void parameter_changed(gx_system::JsonStringParser *jp);
430 int load_remote_ui(const UiBuilder& builder, int form);
431 void report_rpc_error(gx_system::JsonStringParser *jp,
432 const gx_system::JsonException& e, const char *method=0);
433 void throw_error(gx_system::JsonStringParser *jp);
434 void param_signal(Parameter *p);
435 void update_plugins(gx_system::JsonParser *jp);
436 void create_bluetooth_socket(const Glib::ustring& bdaddr);
437 void create_tcp_socket();
438 int midi_get_last_controller_value(int ctl);
439 void midi_set_last_controller_value(int ctl, int v);
440 virtual int _get_parameter_value_int(const std::string& id);
441 virtual int _get_parameter_value_bool(const std::string& id);
442 virtual float _get_parameter_value_float(const std::string& id);
443 virtual std::string _get_parameter_value_string(const std::string& id);
444 virtual sigc::signal<void, int>& _signal_parameter_value_int(const std::string& id);
445 virtual sigc::signal<void, bool>& _signal_parameter_value_bool(const std::string& id);
446 virtual sigc::signal<void, float>& _signal_parameter_value_float(const std::string& id);
447 virtual bool update_parameter();
448
449 public:
450 GxMachineRemote(gx_system::CmdlineOptions& options);
451 virtual ~GxMachineRemote();
452 virtual void set_state(GxEngineState state);
453 virtual GxEngineState get_state();
454 virtual void load_ladspalist(std::vector<std::string>& old_not_found, ladspa::LadspaPluginList& pluginlist);
455 virtual void save_ladspalist(ladspa::LadspaPluginList& pluginlist);
456 virtual void commit_ladspa_changes();
457 virtual sigc::signal<void,Plugin*,PluginChange::pc>& signal_plugin_changed();
458 virtual Plugin *pluginlist_lookup_plugin(const std::string& id) const;
459 virtual bool load_unit(gx_gui::UiBuilderImpl& builder, PluginDef* pdef);
460 virtual void pluginlist_append_rack(UiBuilderBase& ui);
461 virtual float get_tuner_freq();
462 virtual float get_tuner_note();
463 virtual void set_oscilloscope_mul_buffer(int a);
464 virtual int get_oscilloscope_mul_buffer();
465 virtual gx_system::CmdlineOptions& get_options() const;
466 virtual void start_socket(sigc::slot<void> quit_mainloop, const Glib::ustring& host, int port);
467 virtual void stop_socket();
468 virtual sigc::signal<void,GxEngineState>& signal_state_change();
469 virtual void tuner_used_for_display(bool on);
470 virtual void tuner_used_by_midi(bool on);
471 virtual void tuner_switch(bool on);
472 virtual const std::vector<std::string>& get_rack_unit_order(PluginType type);
473 virtual sigc::signal<void,bool>& signal_rack_unit_order_changed();
474 virtual void remove_rack_unit(const std::string& unit, PluginType type);
475 virtual void insert_rack_unit(const std::string& unit, const std::string& before, PluginType type);
476 // tuner_switcher
477 virtual bool get_tuner_switcher_active();
478 virtual void tuner_switcher_activate(bool v);
479 virtual void tuner_switcher_deactivate();
480 virtual void tuner_switcher_toggle(bool v);
481 virtual sigc::signal<void,const Glib::ustring&,const Glib::ustring&>& tuner_switcher_signal_display();
482 virtual sigc::signal<void,TunerSwitcher::SwitcherState>& tuner_switcher_signal_set_state();
483 virtual sigc::signal<void, bool>& tuner_switcher_signal_selection_done();
484 // preset
485 virtual bool setting_is_preset();
486 virtual const Glib::ustring& get_current_bank();
487 virtual gx_system::PresetFileGui *get_current_bank_file();
488 virtual const Glib::ustring& get_current_name();
489 virtual gx_system::PresetFileGui* get_bank_file(const Glib::ustring& bank) const;
490 virtual Glib::ustring get_bank_name(int n);
491 virtual void load_preset(gx_system::PresetFileGui *pf, const Glib::ustring& name);
492 virtual bool msend_midi_cc(int cc, int pgn, int bgn, int num);
493 virtual void loadstate();
494 virtual int bank_size();
495 virtual int get_bank_index(const Glib::ustring& bank);
496 virtual void create_default_scratch_preset();
497 virtual void set_statefilename(const std::string& fn);
498 virtual void save_to_state(bool preserve_preset=false);
499 virtual void plugin_preset_list_load(const PluginDef *pdef, gx_preset::UnitPresetList &presetnames);
500 virtual void plugin_preset_list_set(const PluginDef *pdef, bool factory, const Glib::ustring& name);
501 virtual void plugin_preset_list_sync_set(const PluginDef *pdef, bool factory, const Glib::ustring& name);
502 virtual void plugin_preset_list_set_on_idle(const PluginDef *pdef, bool factory, const Glib::ustring& name);
503 virtual void plugin_preset_list_save(const PluginDef *pdef, const Glib::ustring& name);
504 virtual void plugin_preset_list_remove(const PluginDef *pdef, const Glib::ustring& name);
505 virtual void disable_autosave(bool v);
506 virtual sigc::signal<void>& signal_selection_changed();
507 virtual sigc::signal<void>& signal_presetlist_changed();
508 virtual gx_system::PresetFileGui *bank_insert_uri(const Glib::ustring& uri, bool move, int position);
509 virtual gx_system::PresetFileGui *bank_insert_new(const Glib::ustring& newname);
510 virtual bool rename_bank(const Glib::ustring& oldname, Glib::ustring& newname);
511 virtual bool rename_preset(gx_system::PresetFileGui& pf, const Glib::ustring& oldname, const Glib::ustring& newname);
512 virtual void bank_reorder(const std::vector<Glib::ustring>& neworder);
513 virtual void reorder_preset(gx_system::PresetFileGui& pf, const std::vector<Glib::ustring>& neworder);
514 virtual bool bank_check_reparse();
515 virtual void erase_preset(gx_system::PresetFileGui& pf, const Glib::ustring& name);
516 virtual void bank_set_flag(gx_system::PresetFileGui *pf, int flag, bool v);
517 virtual std::string bank_get_filename(const Glib::ustring& bank);
518 virtual void bank_drag_begin();
519 virtual gx_system::PresetFileGui *bank_get_file(const Glib::ustring& bank) const;
520 virtual bank_iterator bank_begin();
521 virtual bank_iterator bank_end();
522 virtual void pf_append(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& name);
523 virtual void pf_insert_before(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& pos, const Glib::ustring& name);
524 virtual void pf_insert_after(gx_system::PresetFileGui& pf, const Glib::ustring& src, gx_system::PresetFileGui& pftgt, const Glib::ustring& pos, const Glib::ustring& name);
525 virtual bool convert_preset(gx_system::PresetFileGui& pf);
526 virtual bool bank_remove(const Glib::ustring& bank);
527 virtual void bank_save();
528 virtual void pf_save(gx_system::PresetFileGui& pf, const Glib::ustring& name);
529
530 virtual void next_preset_switch();
531 virtual void previus_preset_switch();
532 virtual void process_next_preset_switch(bool s);
533 virtual void process_previus_preset_switch(bool s);
534
535 // jack
536 virtual gx_jack::GxJack *get_jack();
537 virtual void set_jack_insert(bool v);
538 // pmap
539 virtual Parameter& get_parameter(const char *p);
540 virtual Parameter& get_parameter(const std::string& id);
541 virtual void insert_param(Glib::ustring group, Glib::ustring name);
542 virtual void set_init_values();
543 virtual bool parameter_hasId(const char *p);
544 virtual bool parameter_hasId(const std::string& id);
545 virtual void reset_unit(const PluginDef *pdef) const;
546 virtual bool parameter_unit_has_std_values(const PluginDef *pdef) const;
547 virtual void set_parameter_value(const std::string& id, int value);
548 virtual void set_parameter_value(const std::string& id, bool value);
549 virtual void set_parameter_value(const std::string& id, float value);
550 virtual void set_parameter_value(const std::string& id, const std::string& value);
551
552 // MidiControllerList
553 virtual bool midi_get_config_mode(int *ctl = 0);
554 virtual void midi_set_config_mode(bool v, int ctl=-1);
555 virtual sigc::signal<void>& signal_midi_changed();
556 virtual sigc::signal<void, int, int>& signal_midi_value_changed();
557 virtual void request_midi_value_update();
558 virtual int midi_size();
559 virtual midi_controller_list& midi_get(int n);
560 virtual void midi_deleteParameter(Parameter& param);
561 virtual void midi_set_current_control(int v);
562 virtual void midi_modifyCurrent(Parameter& param, float lower, float upper, bool toggle, int toggle_behaviour);
563 virtual int midi_param2controller(Parameter& param, const MidiController** p);
564 virtual void set_midi_channel(int s);
565 virtual void midi_feedback(int c, int v);
566 virtual bool get_midi_feedback();
567 virtual void set_midi_feedback(int v);
568 virtual void on_tuner_freq_changed();
569 // Convolver
570 virtual void reload_impresp_list(const std::string& path);
571 virtual void load_impresp_dirs(std::vector<gx_system::FileName>& dirs);
572 virtual bool read_audio(const std::string& filename, unsigned int *audio_size, int *audio_chan,
573 int *audio_type, int *audio_form, int *audio_rate, float **buffer);
574 };
575
576 } // namespace gx_engine
577
578 #endif // SRC_HEADERS_MACHINE_H_
579