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(...) 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));
71 bool group_exist(
const string&
id);
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);
109 enum toggle_type { OnOff = 0, Constant = 1, Toggle = 2, Commander = 3, _Count = 4 };
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);
132 void range_warning(
float value,
float lower,
float upper);
135 inline std::string
group_id()
const {
return _id.substr(0, _id.find_last_of(
".")); }
138 boost::noncopyable(),
141 _group(param_group(group_id())),
146 save_in_preset(preset),
157 virtual void trigger_changed();
167 const char *get_typename()
const;
168 bool isFloat()
const {
return v_type == tp_float; }
170 bool isBool()
const {
return v_type == tp_bool; }
171 bool isFile()
const {
return v_type == tp_file; }
172 bool isString()
const {
return v_type == tp_string; }
184 const string&
id()
const {
return _id; }
185 const string&
group()
const {
return _group; }
186 string l_group()
const {
return gettext(_group.c_str()); }
187 const string&
name()
const {
return _name; }
188 string l_name()
const {
return gettext(_name.c_str()); }
189 const string&
desc()
const {
return _desc; }
190 void set_desc(
const string& desc) { _desc = desc; }
191 string l_desc()
const {
return gettext(_desc.c_str()); }
199 virtual void stdJSON_value() = 0;
200 virtual bool on_off_value() = 0;
203 virtual void setJSON_value() = 0;
204 virtual bool compareJSON_value() = 0;
205 virtual bool hasRange()
const;
206 virtual float getLowerAsFloat()
const;
207 virtual float getUpperAsFloat()
const;
208 virtual float getStepAsFloat()
const;
209 virtual const value_pair *getValueNames()
const;
213 FloatParameter& getFloat();
214 IntParameter& getInt();
216 BoolParameter& getBool();
218 StringParameter &getString();
219 sigc::signal<void, float>& signal_changed_float();
220 sigc::signal<void, int>& signal_changed_int();
221 sigc::signal<void, bool>& signal_changed_bool();
222 sigc::signal<void, const Glib::ustring&>& signal_changed_string();
243 virtual bool midi_set(
float n,
float high,
float llimit,
float ulimit);
244 virtual bool midi_set_bpm(
float n,
float high,
float llimit,
float ulimit);
245 virtual void trigger_changed();
256 bool set(
float val)
const;
257 bool ramp_value(
float val);
259 void convert_from_range(
float low,
float up);
261 virtual void stdJSON_value();
262 virtual bool on_off_value();
266 virtual bool compareJSON_value();
267 virtual void setJSON_value();
268 virtual bool hasRange()
const;
269 virtual float getLowerAsFloat()
const;
270 virtual float getUpperAsFloat()
const;
271 virtual float getStepAsFloat()
const;
272 virtual float idx_from_id(
string v_id);
274 float *v,
float sv,
float lv,
float uv,
float tv,
bool ctrl,
bool no_init):
275 Parameter(id, name, tp_float, ctp, preset, ctrl),
276 value(v ? v : &value_storage), std_value(sv),lower(lv),upper(uv),step(tv) {
277 assert(lv <= sv && sv <= uv);
301 virtual const value_pair *getValueNames()
const;
303 int sv,
int low,
bool ctrl,
bool no_init);
305 virtual float idx_from_id(
string v_id);
313 virtual bool midi_set(
float n,
float high,
float llimit,
float ulimit);
314 virtual void trigger_changed();
324 bool set(
int val)
const;
326 virtual void stdJSON_value();
327 virtual bool on_off_value();
330 virtual bool compareJSON_value();
331 virtual void setJSON_value();
332 virtual bool hasRange()
const;
333 virtual float getLowerAsFloat()
const;
334 virtual float getUpperAsFloat()
const;
335 virtual int idx_from_id(
string v_id);
337 int *v,
int sv,
int lv,
int uv,
bool ctrl):
339 value(v ? v : &value_storage), std_value(sv), lower(lv), upper(uv) {
357 virtual const value_pair *getValueNames()
const;
358 virtual int idx_from_id(
string v_id);
370 virtual bool midi_set(
float n,
float high,
float llimit,
float ulimit);
371 virtual void trigger_changed();
380 bool set(
bool val)
const;
381 virtual void stdJSON_value();
383 virtual bool on_off_value();
385 virtual bool compareJSON_value();
386 virtual void setJSON_value();
389 bool *v,
bool sv,
bool ctrl):
390 Parameter(id, name, tp_bool, ctp, preset, ctrl),
391 value(v ? v : &value_storage), std_value(sv) {
412 bool set(
const Glib::RefPtr<Gio::File>& val);
413 void set_path(
const string& path);
414 const Glib::RefPtr<Gio::File>&
get()
const {
return value; }
415 virtual void stdJSON_value();
416 virtual bool on_off_value();
419 virtual bool compareJSON_value();
420 virtual void setJSON_value();
421 FileParameter(
const string&
id,
const string& filename,
bool preset =
false):
422 Parameter(id,
"", tp_file, None, preset, false),
423 value(Gio::File::create_for_path(filename)),
424 std_value(value->dup()) {}
426 Parameter(id,
"", tp_file, None, preset, false),
431 void set_standard(
const string& filename);
432 bool is_equal(
const Glib::RefPtr<Gio::File>& v)
const;
434 string get_path()
const;
435 string get_directory_path()
const;
436 string get_parse_name()
const;
437 string get_display_name()
const;
438 void copy(
const string& destination)
const;
449 sigc::signal<void, const Glib::ustring&>
changed;
452 bool set(
const Glib::ustring& val)
const;
453 const Glib::ustring&
get_value()
const {
return *value; }
454 virtual void stdJSON_value();
455 virtual bool on_off_value();
457 virtual bool compareJSON_value();
458 virtual void setJSON_value();
460 ParameterV(
const string&
id,
const string& name, Glib::ustring *v,
const Glib::ustring& sv,
bool preset =
false)
461 :
Parameter(id, name, tp_string, None, preset, false),
462 value(v ? v : &value_storage), std_value(sv) {
474 inline FloatParameter &Parameter::getFloat() {
476 return static_cast<FloatParameter&
>(*this);
479 inline IntParameter &Parameter::getInt() {
481 return static_cast<IntParameter&
>(*this);
490 inline BoolParameter &Parameter::getBool() {
492 return static_cast<BoolParameter&
>(*this);
500 inline StringParameter &Parameter::getString() {
502 return static_cast<StringParameter&
>(*this);
505 inline sigc::signal<void, float>& Parameter::signal_changed_float() {
506 FloatParameter *p =
dynamic_cast<FloatParameter*
>(
this);
511 inline sigc::signal<void, int>& Parameter::signal_changed_int() {
512 IntParameter *p =
dynamic_cast<IntParameter*
>(
this);
517 inline sigc::signal<void, bool>& Parameter::signal_changed_bool() {
518 BoolParameter *p =
dynamic_cast<BoolParameter*
>(
this);
523 inline sigc::signal<void, const Glib::ustring&>& Parameter::signal_changed_string() {
524 StringParameter *p =
dynamic_cast<StringParameter*
>(
this);
542 void check_p(
const char *p);
554 typedef map<string, Parameter*>::const_iterator
iterator;
555 iterator
begin()
const {
return id_map.begin(); }
556 iterator
end()
const {
return id_map.end(); }
557 bool hasId(
const string&
id)
const {
return id_map.find(
id) != id_map.end(); }
558 bool hasId(
const char *p)
const {
return id_map.find(p) != id_map.end(); }
568 void set_init_values();
569 void reset_unit(
const PluginDef *pdef)
const;
570 bool unit_has_std_values(
const PluginDef *pdef)
const;
573 void unregister(
const string&
id);
574 inline FloatParameter *
reg_par(
const string&
id,
const string& name,
float *var,
float std,
575 float lower,
float upper,
float step,
bool midi=
true) {
576 FloatParameter *p =
new FloatParameter(
id, name, Parameter::Continuous,
true, var, std, lower, upper, step, midi, replace_mode);
581 const string&
id,
const string& name,
float *var,
float std,
float lower,
float upper,
float step) {
582 FloatParameter *p =
new FloatParameter(
id, name, Parameter::Continuous,
false, var, std, lower, upper, step,
false, replace_mode);
586 inline FloatParameter *
reg_par(
const string&
id,
const string& name,
float *var,
float std = 0,
bool midi =
true) {
587 FloatParameter *p =
new FloatParameter(
id, name, Parameter::Switch,
true, var,
std, 0, 1, 1, midi, replace_mode);
591 inline BoolParameter *
reg_par(
const string&
id,
const string& name,
bool *var,
bool std=
false,
bool preset=
true,
bool midi=
true) {
592 BoolParameter * p =
new BoolParameter(
id, name, Parameter::Switch, preset, var,
std, midi);
597 const value_pair *vl,
int *var,
int std = 0,
bool midi=
true) {
603 const string&
id,
const string& name,
const value_pair *vl,
604 int *var,
bool preset,
int std = 0) {
611 int std = 0,
int low = 0,
bool midi=
true) {
617 BoolParameter *p =
new BoolParameter(
id,
"", Parameter::Switch, preset, var,
std,
false);
621 inline IntParameter *
reg_par(
const string&
id,
const string& name,
int *var,
int std,
622 int lower,
int upper,
bool midi) {
623 IntParameter *p =
new IntParameter(
id, name, Parameter::Continuous,
true, var, std, lower, upper, midi);
627 inline IntParameter *
reg_par(
const string&
id,
const string& name,
int *var,
int std,
bool midi) {
628 IntParameter *p =
new IntParameter(
id, name, Parameter::Switch,
true, var, std, 0, 1, midi);
632 inline IntParameter *
reg_non_midi_par(
const string&
id,
int *var,
bool preset,
int std,
int lower,
int upper) {
633 IntParameter *p =
new IntParameter(
id,
"", Parameter::None, preset, var, std, lower, upper,
false);
638 float std = 0,
float lower = 0,
float upper = 1,
float step = 0) {
639 FloatParameter *p =
new FloatParameter(
id,
"", Parameter::Continuous, preset, val,
std, lower, upper, step,
false, replace_mode);
648 inline StringParameter *
reg_string(
const string&
id,
const string& name, Glib::ustring *var,
const string& sv,
bool preset=
false) {
653 inline StringParameter *
reg_preset_string(
const string&
id,
const string& name, Glib::ustring *var,
const string& sv,
bool preset=
true) {
660 void dump(
const string& fmt);
683 modstring(
const string& n,
bool m,
const char* s): name(n), modified(m), std(s) {}
684 explicit modstring(
const char* n): name(n), modified(false), std(n) {}
687 map<int, modstring>
m;
688 string midi_to_note(
int ctr);
689 string ctr_desc(
int ctr);
693 void replace(
int ctr,
const string& name);
714 param(&p), _lower(l), _upper(u), toggle(t), _toggle_behaviour(tt) {}
715 float lower()
const {
return _lower; }
716 float upper()
const {
return _upper; }
722 bool set_midi(
int n,
int last_value,
int *value_set,
bool update);
723 bool set_bpm(
int n,
int last_value);
724 bool set_trans(
int n,
int last_value);
725 void set(
float v,
float high) { param->midi_set(v, high, _lower, _upper); }
751 unsigned int rounded(
float f);
752 bool time_to_bpm(
double time,
unsigned int* bpm_);
758 enum { array_size = 328 };
771 int last_midi_control_value[ControllerArray::array_size];
773 int changed_midi_control_value[ControllerArray::array_size];
796 bool check_midi_values();
800 int size() {
return map.size(); }
801 void set_config_mode(
bool mode,
int ctl=-1);
805 void set_ctr_val(
int ctr,
int val);
806 void set_bpm_val(
unsigned int val);
808 void modifyCurrent(
Parameter& param,
float lower,
float upper,
bool toggle,
int toggle_behaviour);
813 assert(n < ControllerArray::array_size);
return last_midi_control_value[n]; }
815 assert(n < ControllerArray::array_size); last_midi_control_value[n] = v; changed_midi_control_value[n] = 1; }
817 void remove_controlled_parameters(paramlist& plist,
const ControllerArray *m);
822 void compute_midi_in(
void* midi_input_port_buf,
void *arg);
823 void process_trans(
int transport_state);
824 void update_from_controller(
int ctr);
825 void update_from_controllers();
826 void set_midi_channel(
int s);
831 void request_midi_value_update();
836 #endif // SRC_HEADERS_GX_PARAMETER_H_ ParameterV< float > FloatParameter
bool hasParameter(const Parameter &p) const
int get_last_midi_control_value(unsigned int n)
FloatEnumParameter(gx_system::JsonParser &jp)
bool hasId(const char *p) const
IntParameter * reg_par(const string &id, const string &name, int *var, int std, bool midi)
volatile gint bank_change
int param2controller(Parameter ¶m, const MidiController **p)
string operator[](const string &id)
ParameterV(const string &id, const string &name, ctrl_type ctp, bool preset, int *v, int sv, int lv, int uv, bool ctrl)
midi_controller_list & operator[](int n)
modstring(const string &n, bool m, const char *s)
void check_id(Gtk::Widget *w, const std::string &id, gx_engine::GxMachineBase &machine)
Glib::ustring & get_json_value()
int get_current_control()
void set_current_control(int ctl)
sigc::signal< void > & signal_changed()
sigc::signal< void, int, int > midi_value_changed
BoolParameter * reg_non_midi_par(const string &id, bool *var, bool preset, bool std=false)
sigc::signal< void, int > new_mute_state
MidiStandardControllers midi_std_ctr
map< string, Parameter * >::const_iterator iterator
Parameter(const string &id, const string &name, value_type vtp, ctrl_type ctp, bool preset, bool ctrl)
list< Parameter * > paramlist
sigc::signal< void, int > new_bank
const string & name() const
sigc::signal< void, int, int > trigger_midi_feedback
FloatParameter * reg_par_non_preset(const string &id, const string &name, float *var, float std, float lower, float upper, float step)
BoolParameter * reg_par(const string &id, const string &name, bool *var, bool std=false, bool preset=true, bool midi=true)
const string & group() const
void writeJSON(gx_system::JsonWriter &jw) const
const string operator[](int ctr)
string param_group(const string &group_id, bool nowarn=false)
int param2controller(Parameter ¶m, const MidiController **p)
volatile gint program_change
Parameter & operator[](const string &id)
ctrl_type getControlType() const
void compare_parameter(const char *title, Parameter *p1, Parameter *p2, bool all=false)
sigc::signal< void, int > & signal_new_program()
IntParameter * reg_par(const string &id, const string &name, int *var, int std, int lower, int upper, bool midi)
Glib::RefPtr< Gio::File > std_value
EnumParameter(gx_system::JsonParser &jp)
IntParameter * reg_non_midi_par(const string &id, int *var, bool preset, int std, int lower, int upper)
ParameterV< int > IntParameter
sigc::signal< void, float > & signal_changed()
sigc::signal< void > changed
StringParameter * reg_string(const string &id, const string &name, Glib::ustring *var, const string &sv, bool preset=false)
ParameterV< bool > BoolParameter
EnumParameter * reg_enum_par(const string &id, const string &name, const value_pair *vl, int *var, int std=0, bool midi=true)
ParameterGroups & get_group_table()
sigc::signal< void, int, int > & signal_midi_value_changed()
#define debug_check(func,...)
Glib::ustring value_storage
void insert(const string &id, const string &group)
sigc::signal< void > & signal_changed()
map< string, string > groups
std::string group_id() const
FloatEnumParameter * reg_enum_par(const string &id, const string &name, const value_pair *vl, float *var, int std=0, int low=0, bool midi=true)
void set_midi_blocked(bool v)
sigc::signal< void, bool > changed
MidiController(Parameter &p, float l, float u, bool t=false, int tt=0)
const value_pair * value_names
bool hasId(const string &id) const
Glib::Dispatcher mute_chg
sigc::signal< void, int > new_program
bool is_log_display() const
Parameter & getParameter() const
FileParameter(const string &id, bool preset=false)
sigc::signal< void, bool > & signal_changed()
void set_replace_mode(bool mode)
Parameter & operator[](const char *p)
void setNoWarning(bool v)
const value_pair * value_names
void erase(const string &id)
sigc::signal< void, Parameter *, bool > signal_insert_remove()
sigc::signal< void, int > & signal_new_bank()
bool operator==(const Parameter &p) const
list< MidiController > midi_controller_list
const string & desc() const
FileParameter * reg_filepar(const string &id, bool preset=false)
Glib::Dispatcher bank_chg
Glib::RefPtr< Gio::File > value
sigc::signal< void, int > changed
sigc::signal< void > changed
sigc::signal< void, int > & signal_new_mute_state()
sigc::signal< void, const Glib::ustring & > & signal_changed()
void set_desc(const string &desc)
FloatParameter * reg_non_midi_par(const string &id, float *val, bool preset, float std=0, float lower=0, float upper=1, float step=0)
sigc::signal< void, int, int > & signal_trigger_midi_feedback()
int toggle_behaviour() const
sigc::signal< void, float > changed
FileParameter(const string &id, const string &filename, bool preset=false)
const Glib::ustring & get_value() const
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)
ParameterV(const string &id, const string &name, Glib::ustring *v, const Glib::ustring &sv, bool preset=false)
map< string, Parameter * > id_map
void writeJSON(gx_system::JsonWriter &jw) const
static const char * value_label(const value_pair &vp)
ParameterV(const string &id, const string &name, ctrl_type ctp, bool preset, bool *v, bool sv, bool ctrl)
ParameterV< Glib::ustring > StringParameter
bool isControllable() const
Glib::RefPtr< Gio::File > json_value
const string & id() const
sigc::signal< void, Parameter *, bool > insert_remove
const value_pair & get_pair()
FloatParameter * reg_par(const string &id, const string &name, float *var, float std=0, bool midi=true)
sigc::signal< void, const Glib::ustring & > changed
EnumParameter * reg_non_midi_enum_par(const string &id, const string &name, const value_pair *vl, int *var, bool preset, int std=0)
void set_last_midi_control_value(unsigned int n, int v)
sigc::signal< void, int > & signal_changed()
bool get_midi_blocked() const
volatile gint mute_change
StringParameter * reg_preset_string(const string &id, const string &name, Glib::ustring *var, const string &sv, bool preset=true)
FloatParameter * reg_par(const string &id, const string &name, float *var, float std, float lower, float upper, float step, bool midi=true)