Go to the documentation of this file.
28 #ifndef SRC_HEADERS_GX_PARAMETER_H_
29 #define SRC_HEADERS_GX_PARAMETER_H_
31 namespace gx_system {
class JsonWriter;
class JsonParser; }
36 #define debug_check(func, ...) func(__VA_ARGS__)
38 #define debug_check(...)
49 map<string, string> groups;
52 map<string, bool> used;
53 void group_exists(
const string&
id);
54 void group_is_new(
const string&
id);
55 friend string param_group(
const string& group_id,
bool nowarn);
62 inline string get(
const string&
id) {
return groups[id]; }
67 inline void insert(
const string&
id,
const string& group) {
69 groups.insert(pair<string, string>(
id, group));
72 inline void erase(
const string&
id) {
73 #ifndef NDEBUG // avoid unused variable warning in release mode
74 size_t n = groups.erase(
id);
87 string param_group(
const string& group_id,
bool nowarn =
false);
111 virtual bool midi_set(
float n,
float high,
float llimit,
float ulimit);
112 virtual bool midi_set_bpm(
float n,
float high,
float llimit,
float ulimit);
113 virtual void trigger_changed();
133 inline std::string
group_id()
const {
return _id.substr(0,
_id.find_last_of(
".")); }
136 boost::noncopyable(),
173 const string&
id()
const {
return _id; }
216 Parameter* p2,
bool all =
false);
232 virtual bool midi_set(
float n,
float high,
float llimit,
float ulimit);
233 virtual bool midi_set_bpm(
float n,
float high,
float llimit,
float ulimit);
234 virtual void trigger_changed();
244 bool set(
float val)
const;
245 bool ramp_value(
float val);
247 void convert_from_range(
float low,
float up);
248 virtual void stdJSON_value();
249 virtual bool on_off_value();
253 virtual bool compareJSON_value();
254 virtual void setJSON_value();
255 virtual bool hasRange()
const;
256 virtual float getLowerAsFloat()
const;
257 virtual float getUpperAsFloat()
const;
258 virtual float getStepAsFloat()
const;
259 virtual float idx_from_id(
string v_id);
261 float *v,
float sv,
float lv,
float uv,
float tv,
bool ctrl,
bool no_init):
262 Parameter(id, name, tp_float, ctp, preset, ctrl),
263 value(v ? v : &value_storage), std_value(sv),lower(lv),upper(uv),step(tv) {
264 set(no_init ? *value : sv);
287 int sv,
int low,
bool ctrl,
bool no_init);
297 virtual bool midi_set(
float n,
float high,
float llimit,
float ulimit);
298 virtual void trigger_changed();
307 bool set(
int val)
const;
309 virtual void stdJSON_value();
310 virtual bool on_off_value();
313 virtual bool compareJSON_value();
314 virtual void setJSON_value();
315 virtual bool hasRange()
const;
316 virtual float getLowerAsFloat()
const;
317 virtual float getUpperAsFloat()
const;
318 virtual int idx_from_id(
string v_id);
320 int *v,
int sv,
int lv,
int uv,
bool ctrl):
322 value(v ? v : &value_storage), std_value(sv), lower(lv), upper(uv) {
353 virtual bool midi_set(
float n,
float high,
float llimit,
float ulimit);
354 virtual void trigger_changed();
362 bool set(
bool val)
const;
363 virtual void stdJSON_value();
365 virtual bool on_off_value();
367 virtual bool compareJSON_value();
368 virtual void setJSON_value();
371 bool *v,
bool sv,
bool ctrl):
372 Parameter(id, name, tp_bool, ctp, preset, ctrl),
373 value(v ? v : &value_storage), std_value(sv) {
394 bool set(
const Glib::RefPtr<Gio::File>& val);
396 const Glib::RefPtr<Gio::File>&
get()
const {
return value; }
403 FileParameter(
const string&
id,
const string& filename,
bool preset =
false):
405 value(Gio::File::create_for_path(filename)),
414 bool is_equal(
const Glib::RefPtr<Gio::File>& v)
const;
420 void copy(
const string& destination)
const;
431 sigc::signal<void, const Glib::ustring&>
changed;
434 bool set(
const Glib::ustring& val)
const;
435 const Glib::ustring&
get_value()
const {
return *value; }
436 virtual void stdJSON_value();
437 virtual bool on_off_value();
439 virtual bool compareJSON_value();
440 virtual void setJSON_value();
442 ParameterV(
const string&
id,
const string& name, Glib::ustring *v,
const Glib::ustring& sv,
bool preset =
false)
443 :
Parameter(id, name, tp_string, None, preset, false),
444 value(v ? v : &value_storage), std_value(sv) {
517 map<string, Parameter*> id_map;
519 sigc::signal<void,Parameter*,bool> insert_remove;
522 void check_id(
const string&
id);
523 void check_p(
const char *p);
535 typedef map<string, Parameter*>::const_iterator
iterator;
538 bool hasId(
const string&
id)
const {
return id_map.find(
id) != id_map.end(); }
539 bool hasId(
const char *p)
const {
return id_map.find(p) != id_map.end(); }
556 float lower,
float upper,
float step) {
557 FloatParameter *p =
new FloatParameter(
id, name,
Parameter::Continuous,
true, var, std, lower, upper, step,
true, replace_mode);
562 const string&
id,
const string& name,
float *var,
float std,
float lower,
float upper,
float step) {
563 FloatParameter *p =
new FloatParameter(
id, name,
Parameter::Continuous,
false, var, std, lower, upper, step,
false, replace_mode);
568 FloatParameter *p =
new FloatParameter(
id, name,
Parameter::Switch,
true, var, std, 0, 1, 1,
true, replace_mode);
572 inline BoolParameter *
reg_par(
const string&
id,
const string& name,
bool *var,
bool std=
false,
bool preset=
true) {
578 const value_pair *vl,
int *var,
int std = 0) {
584 const string&
id,
const string& name,
const value_pair *vl,
585 int *var,
bool preset,
int std = 0) {
592 int std = 0,
int low = 0) {
608 float std = 0,
float lower = 0,
float upper = 1,
float step = 0) {
609 FloatParameter *p =
new FloatParameter(
id,
"",
Parameter::Continuous, preset, val, std, lower, upper, step,
false, replace_mode);
618 inline StringParameter *
reg_string(
const string&
id,
const string& name, Glib::ustring *var,
const string& sv,
bool preset=
false) {
630 void dump(
const string& fmt);
653 modstring(
const string& n,
bool m,
const char* s): name(n), modified(m), std(s) {}
654 explicit modstring(
const char* n): name(n), modified(
false), std(n) {}
655 modstring(): name(
""), modified(
false), std(0) {}
657 map<int, modstring> m;
658 string midi_to_note(
int ctr);
659 string ctr_desc(
int ctr);
662 const string operator[](
int ctr) {
return m[ctr].name; }
663 void replace(
int ctr,
const string& name);
678 float _lower, _upper;
680 int _toggle_behaviour;
684 param(&p), _lower(l), _upper(u), toggle(t), _toggle_behaviour(tt) {}
685 float lower()
const {
return _lower; }
686 float upper()
const {
return _upper; }
687 bool is_toggle()
const {
return toggle; }
695 void set(
float v,
float high) { param->midi_set(v, high, _lower, _upper); }
742 int last_midi_control;
744 volatile gint program_change;
745 volatile gint mute_change;
746 volatile gint bank_change;
752 Glib::Dispatcher pgm_chg;
753 Glib::Dispatcher mute_chg;
754 Glib::Dispatcher bank_chg;
755 Glib::Dispatcher val_chg;
756 sigc::signal<void> changed;
757 sigc::signal<void,int> new_program;
758 sigc::signal<void,int> new_mute_state;
759 sigc::signal<void,int> new_bank;
760 sigc::signal<void, int, int> midi_value_changed;
766 bool check_midi_values();
770 int size() {
return map.size(); }
803 #endif // SRC_HEADERS_GX_PARAMETER_H_
bool is_equal(const Glib::RefPtr< Gio::File > &v) const
void compare_parameter(const char *title, Parameter *p1, Parameter *p2, bool all=false)
void request_midi_value_update()
void set_last_midi_control_value(unsigned int n, int v)
void set_current_control(int ctl)
sigc::signal< void > & signal_changed()
int get_current_control()
void readJSON(gx_system::JsonParser &jp, ParamMap ¶m)
const char * get_typename() const
void range_warning(float value, float lower, float upper)
void set_replace_mode(bool mode)
virtual void serializeJSON(gx_system::JsonWriter &jw)
string get_parse_name() const
string get(const string &id)
void set_midi_channel(int s)
FloatParameter * reg_par_non_preset(const string &id, const string &name, float *var, float std, float lower, float upper, float step)
static gx_system::JsonParser & jp_next(gx_system::JsonParser &jp, const char *key)
void writeJSON_one(gx_system::JsonWriter &jw, Parameter *p)
virtual float getUpperAsFloat() const
sigc::signal< void, const Glib::ustring & > changed
void set_config_mode(bool mode, int ctl=-1)
bool set(const Glib::RefPtr< Gio::File > &val)
sigc::signal< void, Parameter *, bool > signal_insert_remove()
sigc::signal< void, int > changed
StringParameter * reg_string(const string &id, const string &name, Glib::ustring *var, const string &sv, bool preset=false)
virtual const value_pair * getValueNames() const
StringParameter & getString()
ctrl_type getControlType() const
virtual void serializeJSON(gx_system::JsonWriter &jw)
Parameter & getParameter() const
bool hasParameter(const Parameter &p) const
virtual bool on_off_value()=0
const value_pair * value_names
int param2controller(Parameter ¶m, const MidiController **p)
virtual const value_pair * getValueNames() const
void erase(const string &id)
int param2controller(Parameter ¶m, const MidiController **p)
sigc::signal< void, int > & signal_changed_int()
virtual void stdJSON_value()
list< MidiController > midi_controller_list
void readJSON(gx_system::JsonParser &jp)
const string & desc() const
EnumParameter & getEnum()
bool deleteParameter(Parameter &p)
void set_desc(const string &desc)
ParameterV< Glib::ustring > StringParameter
sigc::signal< void, int > & signal_new_program()
void writeJSON(gx_system::JsonWriter &jw) const
virtual bool hasRange() const
virtual float idx_from_id(string v_id)
void update_from_controllers()
virtual void writeJSON(gx_system::JsonWriter &jw) const
Glib::RefPtr< Gio::File > std_value
virtual float getStepAsFloat() const
sigc::signal< void, float > & signal_changed()
virtual bool compareJSON_value()
sigc::signal< void > changed
virtual void serializeJSON(gx_system::JsonWriter &jw)
void reset_unit(const PluginDef *pdef) const
void insert(const string &id, const string &group)
FileParameter(const string &id, bool preset=false)
void unregister(Parameter *p)
bool isControllable() const
EnumParameter * reg_enum_par(const string &id, const string &name, const value_pair *vl, int *var, int std=0)
bool set_bpm(int n, int last_value)
MidiStandardControllers()
virtual void serializeJSON(gx_system::JsonWriter &jw)
ParameterV(const string &id, const string &name, ctrl_type ctp, bool preset, bool *v, bool sv, bool ctrl)
virtual int idx_from_id(string v_id)
void compute_midi_in(void *midi_input_port_buf, void *arg)
const value_pair * value_names
BoolParameter & getBool()
sigc::signal< void, const Glib::ustring & > & signal_changed_string()
sigc::signal< void, bool > & signal_changed_bool()
friend string param_group(const string &group_id, bool nowarn)
const string & group() const
EnumParameter * reg_non_midi_enum_par(const string &id, const string &name, const value_pair *vl, int *var, bool preset, int std=0)
#define debug_check(func,...)
sigc::signal< void, int, int > & signal_midi_value_changed()
unsigned int rounded(float f)
virtual void setJSON_value()
void dump(gx_system::JsonWriter *jw)
FloatParameter & getFloat()
string param_group(const string &group_id, bool nowarn=false)
void set_ctr_val(int ctr, int val)
sigc::signal< void, int > & signal_new_bank()
const value_pair & get_pair()
bool group_exist(const string &id)
const Glib::ustring & get_value() const
virtual void setJSON_value()=0
sigc::signal< void > & signal_changed()
Glib::RefPtr< Gio::File > value
static const char * value_label(const value_pair &vp)
FileParameter * reg_filepar(const string &id, bool preset=false)
MidiStandardControllers midi_std_ctr
ParameterGroups & get_group_table()
int toggle_behaviour() const
FileParameter & getFile()
virtual bool on_off_value()
bool unit_has_std_values(const PluginDef *pdef) const
sigc::signal< void, const Glib::ustring & > & signal_changed()
void readJSON(gx_system::JsonParser &jp)
virtual void writeJSON(gx_system::JsonWriter &jw) const
void replace(int ctr, const string &name)
void writeJSON(gx_system::JsonWriter &jw) const
bool set_midi(int n, int last_value, bool update)
virtual void readJSON_value(gx_system::JsonParser &jp)=0
ParameterV(const string &id, const string &name, Glib::ustring *v, const Glib::ustring &sv, bool preset=false)
sigc::signal< void, float > changed
void update_from_controller(int ctr)
update all controlled parameters with last received value from MIDI controller ctr.
ParameterV(const string &id, const string &name, ctrl_type ctp, bool preset, float *v, float sv, float lv, float uv, float tv, bool ctrl, bool no_init)
MidiController(Parameter &p, float l, float u, bool t=false, int tt=0)
void set_controller_array(const ControllerArray &m)
void set_path(const string &path)
void writeJSON(gx_system::JsonWriter &jw) const
Parameter(const string &id, const string &name, value_type vtp, ctrl_type ctp, bool preset, bool ctrl)
virtual void writeJSON(gx_system::JsonWriter &jw) const =0
Parameter * readJSON_one(gx_system::JsonParser &jp)
void writeJSON(gx_system::JsonWriter &jw)
void set_midi_blocked(bool v)
const Glib::RefPtr< Gio::File > & get() const
ParameterV(const string &id, const string &name, ctrl_type ctp, bool preset, int *v, int sv, int lv, int uv, bool ctrl)
const string & id() const
sigc::signal< void, int > & signal_new_mute_state()
Parameter & operator[](const string &id)
bool set_trans(int n, int last_value)
void set_bpm_val(unsigned int val)
virtual void writeJSON(gx_system::JsonWriter &jw) const
bool time_to_bpm(double time, unsigned int *bpm_)
void dump(const string &fmt)
Glib::ustring value_storage
void set_standard(const string &filename)
void copy(const string &destination) const
StringParameter * reg_preset_string(const string &id, const string &name, Glib::ustring *var, const string &sv, bool preset=true)
list< Parameter * > paramlist
virtual bool compareJSON_value()=0
ParameterV< float > FloatParameter
void deleteParameter(Parameter ¶m)
virtual void readJSON_value(gx_system::JsonParser &jp)
map< string, Parameter * >::const_iterator iterator
string operator[](const string &id)
Glib::RefPtr< Gio::File > json_value
void set(float v, float high)
ParameterV< int > IntParameter
void process_trans(int transport_state)
BoolParameter * reg_non_midi_par(const string &id, bool *var, bool preset, bool std=false)
bool hasId(const string &id) const
FloatParameter * reg_par(const string &id, const string &name, float *var, float std, float lower, float upper, float step)
virtual const value_pair * getValueNames() const
void check_id(Gtk::Widget *w, const std::string &id, gx_engine::GxMachineBase &machine)
sigc::signal< void, int > & signal_changed()
sigc::signal< void, float > & signal_changed_float()
friend void compare_parameter(const char *title, Parameter *p1, Parameter *p2, bool all)
EnumParameter(gx_system::JsonParser &jp)
virtual void stdJSON_value()=0
string get_display_name() const
string get_directory_path() const
virtual void readJSON_value(gx_system::JsonParser &jp)
void remove_controlled_parameters(paramlist &plist, const ControllerArray *m)
sigc::signal< void, bool > changed
virtual float getLowerAsFloat() const
bool operator==(const Parameter &p) const
FloatEnumParameter(gx_system::JsonParser &jp)
int get_last_midi_control_value(unsigned int n)
virtual void readJSON_value(gx_system::JsonParser &jp)
sigc::signal< void, bool > & signal_changed()
const string & name() const
void writeJSON(gx_system::JsonWriter &jw) const
ParameterV< bool > BoolParameter
FileParameter(const string &id, const string &filename, bool preset=false)
std::string group_id() const
const string operator[](int ctr)
void modifyCurrent(Parameter ¶m, float lower, float upper, bool toggle, int toggle_behaviour)
static MidiController * readJSON(gx_system::JsonParser &jp, ParamMap ¶m)
midi_controller_list & operator[](int n)