44 float *ParamRegImpl::registerVar_(
const char*
id,
const char* name,
const char* tp,
45 const char* tooltip,
float* var,
float val,
46 float low,
float up,
float step) {
50 assert(strrchr(
id,
'.'));
51 name = strrchr(
id,
'.')+1;
54 if (n && tp[n-1] ==
'A') {
55 if (pmap->
hasId(
id)) {
71 p = pmap->
reg_par(
id, name, var, val, low, up, step);
77 }
else if (tp[0] ==
'B') {
79 p = pmap->
reg_par(
id, name, var, val);
86 if (tooltip && tooltip[0]) {
92 void ParamRegImpl::registerBoolVar_(
const char*
id,
const char* name,
const char* tp,
93 const char* tooltip,
bool* var,
bool val) {
95 if (tooltip && tooltip[0]) {
100 void ParamRegImpl::registerEnumVar_(
const char *
id,
const char* name,
const char* tp,
101 const char* tooltip,
const value_pair* values,
float *var,
102 float val,
float low,
float up,
float step) {
104 assert(strrchr(
id,
'.'));
105 name = strrchr(
id,
'.')+1;
109 if (tooltip && tooltip[0]) {
114 float *ParamRegImpl::registerSharedEnumVar_(
const char *
id,
const char* name,
const char* tp,
115 const char* tooltip,
const value_pair* values,
float *var,
116 float val,
float low,
float up,
float step) {
118 assert(strrchr(
id,
'.'));
119 name = strrchr(
id,
'.')+1;
123 if (n && tp[n-1] ==
'A') {
124 if (pmap->
hasId(
id)) {
137 if (tooltip && tooltip[0]) {
143 void ParamRegImpl::registerIEnumVar_(
const char *
id,
const char* name,
const char* tp,
144 const char* tooltip,
const value_pair* values,
147 assert(strrchr(
id,
'.'));
148 name = strrchr(
id,
'.')+1;
151 if (tooltip && tooltip[0]) {
156 void ParamRegImpl::registerNonMidiVar_(
const char *
id,
bool*var,
bool preset,
bool nosave) {
163 void ParamRegImpl::registerNonMidiFloatVar_(
const char *
id,
float *var,
bool preset,
bool nosave,
164 float val,
float low,
float up,
float step) {
182 p_effect_post_pre(0) {
186 static void delete_plugindef_instance(
PluginDef *p) {
187 free((
void*)(p->
id));
188 free((
void*)(p->
name));
193 for (
const char **q = p->
groups; *q; q++) {
207 p_effect_post_pre(0) {
223 std::vector<std::string> v;
229 const char **pg =
new const char*[v.size()+1];
231 for (std::vector<std::string>::iterator i = v.begin(); i != v.end(); ++i) {
232 *pg++ = strdup(i->c_str());
248 std::string s = p->
id;
249 std::string
id =
"ui."+s;
250 if (pmap.
hasId(
id)) {
251 p_box_visible = &pmap[id].getBool();
254 if (pmap.
hasId(
id)) {
255 p_plug_visible = &pmap[id].getBool();
257 p_on_off = &pmap[s+
".on_off"].getBool();
258 p_position = &pmap[s+
".position"].getInt();
259 p_effect_post_pre = &pmap[s+
".pp"].getInt();
274 for (
const char **p = pdef->
groups; *p; p++) {
304 p_position = param.
reg_non_midi_par(s +
".position", (
int*)0,
true, pos_tmp, -9999, 9999);
306 bool savable =
false;
323 static const value_pair post_pre[] = {{
N_(
"post")}, {
N_(
"pre")}, {0}};
324 p_effect_post_pre = param.
reg_enum_par(s +
".pp",
"select", post_pre, (
int*)0, pp);
345 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); ++p) {
373 pluginmap::const_iterator p =
pmap.find(
id);
374 if (p ==
pmap.end()) {
385 boost::format(
"id not found: %1%") %
id);
391 void* handle = dlopen(path.c_str(), RTLD_LOCAL|RTLD_NOW);
395 boost::format(_(
"Cannot open library: %1%")) % dlerror());
400 const char *dlsym_error = dlerror();
404 boost::format(_(
"Cannot load symbol 'get_gx_plugin': %1%")) % dlsym_error);
408 int n = get_gx_plugin(0, 0);
413 for (
int i = 0; i < n; i++) {
415 if (get_gx_plugin(i, &p) < 0) {
420 gx_print_info(_(
"Plugin Loader"), Glib::ustring::compose(
"loaded[%1]: %2", path, p->
id));
429 if((dp = opendir(path.c_str())) == NULL) {
432 boost::format(_(
"Error opening '%1%'")) % path);
436 while ((dirp = readdir(dp)) != NULL) {
437 string n = dirp->d_name;
438 if (n.size() > 3 && n.compare(n.size()-3,3,
".so") == 0) {
456 boost::format(_(
"Plugin '%1%' has wrong version %2$#4x (current version: %3$#4x)"))
464 #ifndef NDEBUG // avoid unused variable compiler warning 465 size_t n =
pmap.erase(p->
id);
480 pair<pluginmap::iterator,bool> ret =
pmap.insert(
map_pair(
id, pvars));
484 boost::format(_(
"Plugin '%1%' already exists: skipped")) %
id);
499 if (!(p->
flags & mode_mask)) {
515 if (pvars->p_position) {
518 pvars->pos_tmp = plugin_pos[ipos];
543 int ret = add_module(pl, pos, flags);
554 if (
add(*p++, pos, flags) == 0) {
564 if (
add((*p++)(), pos, flags) == 0) {
571 static const char* tr_name(
const char *name) {
572 if (name && name[0]) {
573 return gettext(name);
580 const char **gp = pd->
groups;
584 const char *name = *gp++;
591 id = string(pd->
id) +
"." + id;
593 groups.
insert(
id, tr_name(name));
600 const char **gp = pd->
groups;
604 const char *name = *gp++;
611 id = string(pd->
id) +
"." + id;
646 std::vector<const std::string*> l;
651 if (i->first.compare(0, s.size(), s) == 0) {
652 assert(i->second->isInPreset());
653 l.push_back(&i->first);
657 for (std::vector<const std::string*>::iterator i = l.begin(); i != l.end(); ++i) {
675 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
679 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
685 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
696 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
702 mono.sort(plugin_order);
707 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
710 stereo.push_back(pl);
713 stereo.sort(plugin_order);
723 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
725 if (((pd->
flags & flagmask) == flagvalue) || (!stereo && strcmp(pd->
id,
"ampstack") == 0)) {
726 l.push_back(p->second);
729 l.sort(plugin_order);
734 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
735 p->second->writeJSON(jw);
751 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
754 f(samplerate, p->second->get_pdef());
761 list<Plugin*> pl_mono, pl_stereo;
762 for (pluginmap::iterator p =
pmap.begin(); p !=
pmap.end(); p++) {
764 pl_stereo.push_back(p->second);
766 pl_mono.push_back(p->second);
770 pl_mono.sort(plugin_order);
771 pl_stereo.sort(plugin_order);
777 void printlist(
const char *title,
const list<Plugin*>& modules,
bool header) {
778 if (!getenv(
"GUITARIX_MODULE_DEBUG")) {
781 const char *fmth =
"%1s %-25s %5s %5s %3s %2s %3s %8s\n";
782 const char *fmtl =
"%1s %-25s %5d %5d %3d %2d %3d %8s\n";
785 printf(
"%d %s:\n", ++cnt, title);
786 printf(fmth,
"F",
"id",
"wght",
"pos",
"pre",
"on",
"vis",
"channels");
790 for (list<Plugin*>::const_iterator i = modules.begin(); i != modules.end(); ++i) {
#define PLUGINDEF_VERMINOR_MASK
void write_kv(const char *key, float v)
void registerGroup(PluginDef *pd, ParameterGroups &groups)
void gx_print_info(const char *, const std::string &)
void begin_array(bool nl=false)
sigc::signal< void, int > & signal_changed_int()
BoolParameter * reg_non_midi_par(const string &id, bool *var, bool preset, bool std=false)
void unregisterPlugin(Plugin *pl, ParamMap ¶m, ParameterGroups &groups)
map< string, Parameter * >::const_iterator iterator
void unregister(Parameter *p)
int load_from_path(const string &path, PluginPos pos=PLUGIN_POS_RACK)
sigc::signal< void, const char *, bool > insert_remove
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)
void end_array(bool nl=false)
void printlist(const char *title, const list< Plugin * > &modules, bool header=true)
void set_pdef(PluginDef *p)
void(* inifunc)(unsigned int samplingFreq, PluginDef *plugin)
sigc::signal< void, bool > & signal_changed_bool()
void register_vars(ParamMap ¶m, EngineControl &seq)
void writeJSON(gx_system::JsonWriter &jw)
void set_effect_post_pre(int v) const
Plugin * lookup_plugin(const std::string &id) const
PluginList(EngineControl &seq)
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(* 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)
bool hasId(const string &id) const
void ordered_list(list< Plugin * > &l, bool stereo, int flagmask, int flagvalue)
void set_position(int v) const
void compare_parameter(const char *title, Parameter *p1, Parameter *p2, bool all=false)
void registerParameter(Plugin *pl, ParamMap ¶m, ParamRegImpl &preg)
void write_key(const char *p, bool nl=false)
void gx_print_fatal(const char *, const std::string &)
int load_library(const string &path, PluginPos pos=PLUGIN_POS_RACK)
int insert_plugin(Plugin *pvars)
#define PLUGINDEF_VERMAJOR_MASK
void unregisterParameter(Plugin *pl, ParamMap ¶m)
void(* registerIEnumVar)(const char *id, const char *name, const char *tp, const char *tooltip, const value_pair *values, int *var, int val)
deletefunc delete_instance
void gx_print_error(const char *, const std::string &)
bool read_kv(const char *key, float &v)
void insert(const string &id, const string &group)
void copy_position(const Plugin &plugin)
#define PLUGINDEF_VERSION
registerfunc register_params
void registerPlugin(Plugin *pl, ParamMap ¶m, ParameterGroups &groups)
void unregisterGroup(PluginDef *pd, ParameterGroups &groups)
void delete_module(Plugin *pl)
void begin_object(bool nl=false)
void readJSON(gx_system::JsonParser &jp, ParamMap &pmap)
void erase(const string &id)
virtual bool load(Plugin *p)=0
int get_effect_post_pre() const
void(* registerNonMidiVar)(const char *id, bool *var, bool preset, bool nosave)
PluginDef *(* plugindef_creator)()
ParamRegImpl(ParamMap *pm)
Plugin * find_plugin(const std::string &id) const
FloatParameter * reg_par(const string &id, const string &name, float *var, float std, float lower, float upper, float step)
void update_plugin(Plugin *pvars)
void set_samplerate(int samplerate)
FloatParameter & getFloat()
void gx_print_warning(const char *, const std::string &)
void ordered_mono_list(list< Plugin * > &mono, int mode)
process_stereo_audio stereo_audio
void printlist(bool ordered=true)
void(* registerNonMidiFloatVar)(const char *id, float *var, bool preset, bool nosave, float val, float low, float up, float step)
virtual void set_rack_changed()=0
process_mono_audio mono_audio
void set_desc(const string &desc)
EnumParameter * reg_enum_par(const string &id, const string &name, const value_pair *vl, int *var, int std=0)
void rescueParameter(Plugin *pl, ParamMap ¶m)
string current_value() const
int add(Plugin *pl, PluginPos pos, int flags)
token next(token expect=no_token)
void registerAllPlugins(ParamMap ¶m, ParameterGroups &groups)
void write(float v, bool nl=false)
pair< const std::string, Plugin * > map_pair
bool get_box_visible() const
int check_version(PluginDef *p)
void(* registerBoolVar)(const char *id, const char *name, const char *tp, const char *tooltip, bool *var, bool val)
void ordered_stereo_list(list< Plugin * > &stereo, int mode)
void append_rack(UiBuilderBase &ui)
void end_object(bool nl=false)
void writeJSON(gx_system::JsonWriter &jw)
int(* plugin_inifunc)(unsigned int idx, PluginDef **p)