Go to the documentation of this file.
45 float *ParamRegImpl::registerVar_(
const char*
id,
const char* name,
const char* tp,
46 const char* tooltip,
float* var,
float val,
47 float low,
float up,
float step) {
51 assert(strrchr(
id,
'.'));
52 name = strrchr(
id,
'.')+1;
55 if (n && tp[n-1] ==
'A') {
56 if (pmap->
hasId(
id)) {
72 p = pmap->
reg_par(
id, name, var, val, low, up, step);
78 }
else if (tp[0] ==
'B') {
80 p = pmap->
reg_par(
id, name, var, val);
87 if (tooltip && tooltip[0]) {
93 void ParamRegImpl::registerBoolVar_(
const char*
id,
const char* name,
const char* tp,
94 const char* tooltip,
bool* var,
bool val) {
96 if (tooltip && tooltip[0]) {
101 void ParamRegImpl::registerEnumVar_(
const char *
id,
const char* name,
const char* tp,
102 const char* tooltip,
const value_pair* values,
float *var,
103 float val,
float low,
float up,
float step) {
105 assert(strrchr(
id,
'.'));
106 name = strrchr(
id,
'.')+1;
110 if (tooltip && tooltip[0]) {
115 float *ParamRegImpl::registerSharedEnumVar_(
const char *
id,
const char* name,
const char* tp,
116 const char* tooltip,
const value_pair* values,
float *var,
117 float val,
float low,
float up,
float step) {
119 assert(strrchr(
id,
'.'));
120 name = strrchr(
id,
'.')+1;
124 if (n && tp[n-1] ==
'A') {
125 if (pmap->
hasId(
id)) {
131 p2.set_desc(tooltip);
138 if (tooltip && tooltip[0]) {
144 void ParamRegImpl::registerIEnumVar_(
const char *
id,
const char* name,
const char* tp,
145 const char* tooltip,
const value_pair* values,
148 assert(strrchr(
id,
'.'));
149 name = strrchr(
id,
'.')+1;
152 if (tooltip && tooltip[0]) {
157 void ParamRegImpl::registerNonMidiVar_(
const char *
id,
bool*var,
bool preset,
bool nosave) {
164 void ParamRegImpl::registerNonMidiFloatVar_(
const char *
id,
float *var,
bool preset,
bool nosave,
165 float val,
float low,
float up,
float step) {
172 float *ParamRegImpl::registerNonMidiSharedVar_(
const char *
id,
float *var,
bool preset,
bool nosave,
173 float val,
float low,
float up,
float step) {
174 if (pmap->
hasId(
id)) {
180 preset, p.
getFloat().
value, val, low, up, step, preset, nosave);
200 p_effect_post_pre(0) {
204 static void delete_plugindef_instance(
PluginDef *p) {
205 free((
void*)(p->
id));
206 free((
void*)(p->
name));
211 for (
const char **q = p->
groups; *q; q++) {
225 p_effect_post_pre(0) {
241 std::vector<std::string> v;
247 const char **pg =
new const char*[v.size()+1];
249 for (std::vector<std::string>::iterator i = v.begin(); i != v.end(); ++i) {
250 *pg++ = strdup(i->c_str());
266 std::string s = p->
id;
267 std::string
id =
"ui."+s;
268 if (pmap.
hasId(
id)) {
269 p_box_visible = &pmap[id].getBool();
272 if (pmap.
hasId(
id)) {
273 p_plug_visible = &pmap[id].getBool();
275 p_on_off = &pmap[s+
".on_off"].getBool();
276 p_position = &pmap[s+
".position"].getInt();
277 p_effect_post_pre = &pmap[s+
".pp"].getInt();
292 for (
const char **p = pdef->
groups; *p; p++) {
323 p_position = param.
reg_non_midi_par(s +
".position", (
int*)0,
true, pos_tmp, -9999, 9999);
325 bool savable =
false;
342 static const value_pair post_pre[] = {{
N_(
"post")}, {
N_(
"pre")}, {0}};
343 p_effect_post_pre = param.
reg_enum_par(s +
".pp",
"select", post_pre, (
int*)0, pp);
364 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); ++p) {
392 pluginmap::const_iterator p =
pmap.find(
id);
393 if (p ==
pmap.end()) {
404 boost::format(
"id not found: %1%") %
id);
410 void* handle = dlopen(path.c_str(), RTLD_LOCAL|RTLD_NOW);
414 boost::format(_(
"Cannot open library: %1%")) % dlerror());
419 const char *dlsym_error = dlerror();
423 boost::format(_(
"Cannot load symbol 'get_gx_plugin': %1%")) % dlsym_error);
427 int n = get_gx_plugin(0, 0);
432 for (
int i = 0; i < n; i++) {
434 if (get_gx_plugin(i, &p) < 0) {
439 gx_print_info(_(
"Plugin Loader"), Glib::ustring::compose(
"loaded[%1]: %2", path, p->
id));
448 if((dp = opendir(path.c_str())) == NULL) {
451 boost::format(_(
"Error opening '%1%'")) % path);
455 while ((dirp = readdir(dp)) != NULL) {
456 string n = dirp->d_name;
457 if (n.size() > 3 && n.compare(n.size()-3,3,
".so") == 0) {
475 boost::format(_(
"Plugin '%1%' has wrong version %2$#4x (current version: %3$#4x)"))
483 #ifndef NDEBUG // avoid unused variable compiler warning
484 size_t n =
pmap.erase(p->
id);
499 pair<pluginmap::iterator,bool> ret =
pmap.insert(
map_pair(
id, pvars));
503 boost::format(_(
"Plugin '%1%' already exists: skipped")) %
id);
518 if (!(p->
flags & mode_mask)) {
534 if (pvars->p_position) {
537 pvars->pos_tmp = plugin_pos[ipos];
562 int ret = add_module(pl, pos, flags);
573 if (
add(*p++, pos, flags) == 0) {
583 if (
add((*p++)(), pos, flags) == 0) {
590 static const char* tr_name(
const char *name) {
591 if (name && name[0]) {
592 return gettext(name);
599 const char **gp = pd->
groups;
603 const char *name = *gp++;
610 id = string(pd->
id) +
"." + id;
612 groups.
insert(
id, tr_name(name));
619 const char **gp = pd->
groups;
623 const char *name = *gp++;
630 id = string(pd->
id) +
"." + id;
665 std::vector<const std::string*> l;
670 if (i->first.compare(0, s.size(), s) == 0) {
671 assert(i->second->isInPreset());
672 l.push_back(&i->first);
676 for (std::vector<const std::string*>::iterator i = l.begin(); i != l.end(); ++i) {
694 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
698 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
704 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
715 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
722 mono.sort(plugin_order);
733 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
736 stereo.push_back(pl);
740 stereo.sort(plugin_order);
750 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
752 if (((pd->
flags & flagmask) == flagvalue) || (!stereo && strcmp(pd->
id,
"ampstack") == 0)) {
753 l.push_back(p->second);
756 l.sort(plugin_order);
761 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
762 p->second->writeJSON(jw);
778 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
781 f(samplerate, p->second->get_pdef());
788 list<Plugin*> pl_mono, pl_stereo;
789 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
791 pl_stereo.push_back(p->second);
793 pl_mono.push_back(p->second);
797 pl_mono.sort(plugin_order);
798 pl_stereo.sort(plugin_order);
804 void printlist(
const char *title,
const list<Plugin*>& modules,
bool header) {
805 if (!getenv(
"GUITARIX_MODULE_DEBUG")) {
808 const char *fmth =
"%1s %-25s %5s %5s %3s %2s %3s %8s\n";
809 const char *fmtl =
"%1s %-25s %5d %5d %3d %2d %3d %8s\n";
812 printf(
"%d %s:\n", ++cnt, title);
813 printf(fmth,
"F",
"id",
"wght",
"pos",
"pre",
"on",
"vis",
"channels");
817 for (list<Plugin*>::const_iterator i = modules.begin(); i != modules.end(); ++i) {
void registerAllPlugins(ParamMap ¶m, ParameterGroups &groups)
void compare_parameter(const char *title, Parameter *p1, Parameter *p2, bool all=false)
void gx_print_fatal(const char *, const std::string &)
bool get_box_visible() const
void begin_object(bool nl=false)
process_mono_audio mono_audio
PluginDef *(* plugindef_creator)()
void gx_print_info(const char *, const std::string &)
float *(* registerSharedEnumVar)(const char *id, const char *name, const char *tp, const char *tooltip, const value_pair *values, float *var, float val, float low, float up, float step)
registerfunc register_params
float *(* registerNonMidiSharedVar)(const char *id, float *var, bool preset, bool nosave, float val, float low, float up, float step)
void erase(const string &id)
void unregisterPlugin(Plugin *pl, ParamMap ¶m, ParameterGroups &groups)
sigc::signal< void, int > & signal_changed_int()
string current_value() const
void registerParameter(Plugin *pl, ParamMap ¶m, ParamRegImpl &preg)
void write(float v, bool nl=false)
void append_rack(UiBuilderBase &ui)
process_stereo_audio stereo_audio
void register_vars(ParamMap ¶m, EngineControl &seq)
void set_desc(const string &desc)
void gx_print_warning(const char *, const std::string &)
float *(* registerVar)(const char *id, const char *name, const char *tp, const char *tooltip, float *var, float val, float low, float up, float step)
void set_pdef(PluginDef *p)
deletefunc delete_instance
void(* registerEnumVar)(const char *id, const char *name, const char *tp, const char *tooltip, const value_pair *values, float *var, float val, float low, float up, float step)
void update_plugin(Plugin *pvars)
#define PLUGINDEF_VERMAJOR_MASK
int load_from_path(const string &path, PluginPos pos=PLUGIN_POS_RACK)
void(* registerIEnumVar)(const char *id, const char *name, const char *tp, const char *tooltip, const value_pair *values, int *var, int val)
int load_library(const string &path, PluginPos pos=PLUGIN_POS_RACK)
void insert(const string &id, const string &group)
void ordered_list(list< Plugin * > &l, bool stereo, int flagmask, int flagvalue)
void set_position(int v) const
void unregister(Parameter *p)
EnumParameter * reg_enum_par(const string &id, const string &name, const value_pair *vl, int *var, int std=0)
void end_object(bool nl=false)
#define PLUGINDEF_VERMINOR_MASK
sigc::signal< void, const char *, bool > insert_remove
PluginList(EngineControl &seq)
sigc::signal< void, bool > & signal_changed_bool()
token next(token expect=no_token)
void unregisterParameter(Plugin *pl, ParamMap ¶m)
Plugin * find_plugin(const std::string &id) const
void unregisterGroup(PluginDef *pd, ParameterGroups &groups)
void copy_position(const Plugin &plugin)
void delete_module(Plugin *pl)
void write_kv(const char *key, float v)
FloatParameter & getFloat()
int insert_plugin(Plugin *pvars)
void set_samplerate(int samplerate)
void gx_print_error(const char *, const std::string &)
void registerPlugin(Plugin *pl, ParamMap ¶m, ParameterGroups &groups)
void set_effect_post_pre(int v) const
void writeJSON(gx_system::JsonWriter &jw)
void(* registerNonMidiVar)(const char *id, bool *var, bool preset, bool nosave)
bool read_kv(const char *key, float &v)
void begin_array(bool nl=false)
void readJSON(gx_system::JsonParser &jp, ParamMap &pmap)
ParamRegImpl(ParamMap *pm)
pair< const std::string, Plugin * > map_pair
void set_midi_blocked(bool v)
void(* inifunc)(unsigned int samplingFreq, PluginDef *plugin)
void printlist(bool ordered=true)
void printlist(const char *title, const list< Plugin * > &modules, bool header=true)
void(* registerNonMidiFloatVar)(const char *id, float *var, bool preset, bool nosave, float val, float low, float up, float step)
void rescueParameter(Plugin *pl, ParamMap ¶m)
#define PLUGINDEF_VERSION
void write_key(const char *p, bool nl=false)
ParameterV< float > FloatParameter
map< string, Parameter * >::const_iterator iterator
int(* plugin_inifunc)(unsigned int idx, PluginDef **p)
virtual void set_rack_changed()=0
int add(Plugin *pl, PluginPos pos, int flags)
int check_version(PluginDef *p)
void ordered_stereo_list(list< Plugin * > &stereo, int mode)
virtual bool load(Plugin *p)=0
BoolParameter * reg_non_midi_par(const string &id, bool *var, bool preset, bool std=false)
void end_array(bool nl=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)
void writeJSON(gx_system::JsonWriter &jw)
void ordered_mono_list(list< Plugin * > &mono, int mode)
Plugin * lookup_plugin(const std::string &id) const
void(* registerBoolVar)(const char *id, const char *name, const char *tp, const char *tooltip, bool *var, bool val)
int get_effect_post_pre() const
ParameterV< bool > BoolParameter
void registerGroup(PluginDef *pd, ParameterGroups &groups)