int iKXPlugin::get_user_interface() { if(get_param_count()>0) { // for FXBus it get_param_count() returns 0 if( strcmp(get_plugin_description(IKX_PLUGIN_GUID),"631d8de5-11bc-4c3d-a0d2-f079977fd184")==0 || // prolog strcmp(get_plugin_description(IKX_PLUGIN_GUID),"313149FA-24FB-4f08-9C22-EB38B651BA58")==0 || // xrouting strcmp(get_plugin_description(IKX_PLUGIN_GUID),"ceffc302-ea28-44df-873f-d3df1ba31736")==0 // epilog ) return IKXPLUGIN_NONE; return IKXPLUGIN_SIMPLE; } else return IKXPLUGIN_NONE; }
int iKXPlugin::delete_preset(const char *new_name) { kSettings cfg; char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); cfg.delete_value_abs(full_key,new_name); return 0; }
int iKXPlugin::export_presets(const char *file_name) { unlink(file_name); int cnt=get_param_count(); kSettings cfg; kSettings exp_file(NULL,file_name); char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); exp_file.write_abs("kXPreset","Size",cnt); exp_file.write_abs("kXPreset","Version",PRESET_VERSION); exp_file.write_abs("kXPreset","GUID",get_plugin_description(IKX_PLUGIN_GUID)); int ndx=0; while(1) { char key_name[KX_MAX_STRING+256]; kxparam_t value[256]; if(cfg.enum_abs(ndx,full_key,key_name,sizeof(key_name),(TCHAR *)value,sizeof(value))==0) { char key[KX_MAX_STRING+10]; sprintf(key,"%d.name",ndx); exp_file.write_abs(get_plugin_description(IKX_PLUGIN_GUID),key,key_name); sprintf(key,"%d.data",ndx); exp_file.write_bin_abs(get_plugin_description(IKX_PLUGIN_GUID),key,value,cnt*sizeof(kxparam_t)); } else { break; } ndx++; } return 0; }
void add_plugin_to_menu (gpointer data, gpointer user_data) { static int i=1; GtkPluginManagerMenu *menu=(GtkPluginManagerMenu *) user_data; GtkWidget *item; Plugin *plugin; plugin = PLUGIN(data); /* * Syntax plugins are automatically incorporate to the syntax check system so don't show that plugins here. * TODO: maybe configure this in preferences?? */ if (get_plugin_syntax_type(plugin)==-1){ item = gtk_menu_item_new_image_item(GTK_STOCK_EXECUTE, get_plugin_name(plugin)); gtk_widget_show(item); install_menu_hint(item, (gchar *)get_plugin_description(plugin), &main_window); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(plugin_exec), (gpointer) menu); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); if (i<10) gtk_widget_add_accelerator(item, "activate", menu->priv->accel_group, parse_shortcut(i), GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); i++; } }
int iKXPlugin::save_preset(const char *new_name) { kSettings cfg; char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); kxparam_t *data=0; int cnt=get_param_count(); data=(kxparam_t *)malloc(cnt*sizeof(kxparam_t)); if(data) { get_all_params(data); cfg.write_bin_abs(full_key,new_name,data,cnt*sizeof(kxparam_t)); free(data); } else return -1; return 0; }
int iKXPlugin::populate_presets(HMENU mnu) { // built-in presets first... int need_sep=0; int to_ret=-1; try { const kxparam_t *t=get_plugin_presets(); if(t) { int num=get_param_count(); int ndx=0; while(1) { char *name=(char *)t[0]; if(name==0) break; AppendMenu(mnu,MFT_STRING,IKXPLUGIN_PRESETS_BUILTIN+ndx,name); to_ret=1; need_sep=1; ndx++; t+=(num+1); } } } catch(...) { debug("Incorrect plugin: %d [pointer from populate_presets()]\n",__LINE__); } int ndx=0; kSettings cfg; char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); while(1) { char key_name[KX_MAX_STRING+256]; char value[MAX_PATH]; if(cfg.enum_abs(ndx,full_key,key_name,sizeof(key_name),value,sizeof(value))==0) { if(key_name[0]!='#') { if(need_sep) { AppendMenu(mnu,MFT_SEPARATOR,0,""); need_sep=0; } AppendMenu(mnu,MFT_STRING,IKXPLUGIN_PRESETS_CUSTOM+ndx,key_name); to_ret=0; } } else { break; } ndx++; } return to_ret; }
int iKXPlugin::populate_presets(kMenu *mnu) { // built-in presets first... int need_sep=0; int to_ret=-1; try { const kxparam_t *t=get_plugin_presets(); if(t) { int num=get_param_count(); int ndx=0; while(1) { const char *name=(char *)t[0]; if(name==0) break; mnu->add(name,IKXPLUGIN_PRESETS_BUILTIN+ndx); to_ret=1; need_sep=1; ndx++; t+=(num+1); } } } catch(...) { debug("Incorrect plugin: %d [pointer from populate_presets()]\n",__LINE__); } int ndx=0; kSettings cfg; char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); char *value; value=(char *)malloc((get_param_count()+1)*sizeof(kxparam_t)); while(1) { char key_name[KX_MAX_STRING+256]; if(cfg.enum_abs(ndx,full_key,key_name,sizeof(key_name),value,(get_param_count()+1)*sizeof(kxparam_t))==0) { if(key_name[0]!='#') { if(need_sep) { mnu->separator(); need_sep=0; } mnu->add(key_name,IKXPLUGIN_PRESETS_CUSTOM+ndx); to_ret=0; } } else { break; } ndx++; } free(value); return to_ret; }
int iKXPlugin::import_presets(const char *file_name) { int ori_cnt=get_param_count(); dword cnt=0; kSettings cfg; kSettings exp_file(NULL,file_name); exp_file.read_abs("kXPreset","Version",&cnt); if(cnt<PRESET_VERSION) { debug("kxapi: invalid preset version: %d %d\n",cnt,PRESET_VERSION); return -3; } char tmp_guid[KX_MAX_STRING]; exp_file.read_abs("kXPreset","GUID",tmp_guid,sizeof(tmp_guid)); if(strncmp(tmp_guid,get_plugin_description(IKX_PLUGIN_GUID),KX_MAX_STRING)!=0) { debug("kxapi: invalid preset GUID\n"); return -2; } exp_file.read_abs("kXPreset","Size",&cnt); if((int)cnt!=ori_cnt) { debug("kxapi: invalid preset size [%d.%d]\n",cnt,ori_cnt); return -1; } int ndx=0; char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); while(1) { char key[KX_MAX_STRING+256]; char key_name[KX_MAX_STRING+128]; kxparam_t value[256]; sprintf(key,"%d.name",ndx); if(exp_file.read_abs(get_plugin_description(IKX_PLUGIN_GUID),key,key_name,sizeof(key_name))==0) { sprintf(key,"%d.data",ndx); int sz=sizeof(value); if(exp_file.read_bin_abs(get_plugin_description(IKX_PLUGIN_GUID),key,value,&sz)==0) { if(sz==(int)(cnt*sizeof(kxparam_t))) cfg.write_bin_abs(full_key,key_name,value,cnt*sizeof(kxparam_t)); } } else { break; } ndx++; } return 0; }
int iKXPlugin::get_current_preset(char *ret_name) { int found=0; kxparam_t *data=0; int cnt=get_param_count(); if(cnt) data=(kxparam_t *)malloc(cnt*sizeof(kxparam_t)); if(data) { get_all_params(data); kSettings cfg; char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); int ndx=0; while(1) { char key_name[KX_MAX_STRING+256]; kxparam_t value[256]; if(cfg.enum_abs(ndx,full_key,key_name,sizeof(key_name),(TCHAR *)value,sizeof(value))==0) { if(memcmp(value,data,cnt*sizeof(kxparam_t))==0) { strncpy(ret_name,key_name,KX_MAX_STRING); found=1; goto OK; } } else { break; } ndx++; } // second, check built-in presets try { const kxparam_t *t=get_plugin_presets(); if(t) { int num=get_param_count(); while(1) { char *name=(char *)t[0]; if(name==0) break; if(memcmp(data,&t[1],num*sizeof(kxparam_t))==0) { strncpy(ret_name,name,KX_MAX_STRING); found=1; goto OK; } t+=(num+1); } } } catch(...) { debug("Incorrect plugin: %d [pointer from get_current_preset()]\n",__LINE__); } OK: free(data); } return found?0:-1; }
int iKXPlugin::apply_preset(int ndx) { int success=0; if(ndx>=IKXPLUGIN_PRESETS_CUSTOM && ndx<=IKXPLUGIN_PRESETS_CUSTOM+IKXPLUGIN_MAX_PRESETS) { kSettings cfg; char full_key[127+KX_MAX_STRING]; sprintf(full_key,"Plugins\\%s",get_plugin_description(IKX_PLUGIN_GUID)); char key_name[KX_MAX_STRING+256]; try { dword cnt=get_param_count(); kxparam_t *value=(kxparam_t *)malloc((cnt+1)*sizeof(kxparam_t)); if(value) { // add two 'guard bytes' (due to kSettings.enum_abs limitations...) value[cnt-1]=0x12345678; value[cnt]=0x87654321; if(cfg.enum_abs(ndx-IKXPLUGIN_PRESETS_CUSTOM,full_key,key_name,sizeof(key_name), (char *)value,cnt*sizeof(kxparam_t))==0) { if(value[cnt-1]!=0x12345678 && value[cnt]==0x87654321) { set_all_params(value); success=1; } else { cfg.delete_value_abs(full_key,key_name); debug("kxapi: presets: invalid preset [%d; %s; %s]\n",ndx,key_name,full_key); } } free(value); } else debug("kxapi: presets: not enough memory [%d]\n",cnt); } catch(...) { debug("kxapi: presets: exception when trying to apply preset\n"); }; } if(ndx>=IKXPLUGIN_PRESETS_BUILTIN) { // check built-in presets try { const kxparam_t *t=get_plugin_presets(); if(t) { int num=get_param_count(); set_all_params((kxparam_t *)&t[(num+1)*(ndx-IKXPLUGIN_PRESETS_BUILTIN)+1]); success=1; } } catch(...) { debug("Incorrect plugin: %d [pointer from get_plugin_presets()] -- apply preset()\n",__LINE__); } } if(success) return 0; else return -1; }