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