diff options
author | Robert Jonsson <spamatica@gmail.com> | 2009-12-27 11:30:35 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2009-12-27 11:30:35 +0000 |
commit | b703eab295330e6f81564fbb39a10a1a2fdd2f54 (patch) | |
tree | e46b5c9a6bc22fd661c15d1d2123f5bf631cef80 /muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.C | |
parent | 5d5fa0fdf913907edbc3d2d29a7548f0cb658c94 (diff) |
moved old qt4 branch
Diffstat (limited to 'muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.C')
-rw-r--r-- | muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.C | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.C b/muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.C new file mode 100644 index 00000000..8bbb2bec --- /dev/null +++ b/muse_qt4_evolution/synti/zynaddsubfx/Params/PresetsStore.C @@ -0,0 +1,181 @@ +/* + ZynAddSubFX - a software synthesizer + + PresetsStore.C - Presets and Clipboard store + Copyright (C) 2002-2005 Nasca Octavian Paul + Author: Nasca Octavian Paul + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License (version 2) for more details. + + You should have received a copy of the GNU General Public License (version 2) + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ +#include <stdlib.h> +#include <string.h> +#include <dirent.h> +#include <sys/stat.h> + +#include "PresetsStore.h" +#include "../Misc/Util.h" + +PresetsStore presetsstore; + +PresetsStore::PresetsStore(){ + clipboard.data=NULL; + clipboard.type[0]=0; + + for (int i=0;i<MAX_PRESETS;i++){ + presets[i].file=NULL; + presets[i].name=NULL; + }; + +}; + +PresetsStore::~PresetsStore(){ + if (clipboard.data!=NULL) delete (clipboard.data); + clearpresets(); +}; + +//Clipboard management + +void PresetsStore::copyclipboard(XMLwrapper *xml,char *type){ + strcpy(clipboard.type,type); + if (clipboard.data!=NULL) delete (clipboard.data); + clipboard.data=xml->getXMLdata(); +}; + +bool PresetsStore::pasteclipboard(XMLwrapper *xml){ + if (clipboard.data!=NULL) xml->putXMLdata(clipboard.data); + else return(false); + return(true); +}; + +bool PresetsStore::checkclipboardtype(char *type){ + //makes LFO's compatible + if ((strstr(type,"Plfo")!=NULL)&&(strstr(clipboard.type,"Plfo")!=NULL)) return(true); + return(strcmp(type,clipboard.type)==0); +}; + +//Presets management +void PresetsStore::clearpresets(){ + for (int i=0;i<MAX_PRESETS;i++){ + if (presets[i].file!=NULL) { + delete(presets[i].file); + presets[i].file=NULL; + }; + if (presets[i].name!=NULL) { + delete(presets[i].name); + presets[i].name=NULL; + }; + }; + +}; + +//a helper function that compares 2 presets[] +int Presets_compar(const void *a,const void *b){ + struct PresetsStore::presetstruct *p1= (PresetsStore::presetstruct *)a; + struct PresetsStore::presetstruct *p2= (PresetsStore::presetstruct *)b; + if (((p1->name)==NULL)||((p2->name)==NULL)) return(0); + + return(strcasecmp(p1->name,p2->name)<0); +}; + + +void PresetsStore::rescanforpresets(char *type){ + clearpresets(); + int presetk=0; + char ftype[MAX_STRING_SIZE]; + snprintf(ftype,MAX_STRING_SIZE,".%s.xpz",type); + + for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){ + if (config.cfg.presetsDirList[i]==NULL) continue; + char *dirname=config.cfg.presetsDirList[i]; + DIR *dir=opendir(dirname); + if (dir==NULL) continue; + struct dirent *fn; + while((fn=readdir(dir))){ + const char *filename=fn->d_name; + if (strstr(filename,ftype)==NULL) continue; + + + presets[presetk].file=new char [MAX_STRING_SIZE]; + presets[presetk].name=new char [MAX_STRING_SIZE]; + char tmpc=dirname[strlen(dirname)-1]; + char *tmps="/"; + if ((tmpc=='/')||(tmpc=='\\')) tmps=""; + snprintf(presets[presetk].file,MAX_STRING_SIZE,"%s%s%s",dirname,tmps,filename); + snprintf(presets[presetk].name,MAX_STRING_SIZE,"%s",filename); + + char *tmp=strstr(presets[presetk].name,ftype); + if (tmp!=NULL) tmp[0]='\0'; + presetk++; if (presetk>=MAX_PRESETS) return; + }; + + closedir(dir); + }; + + //sort the presets + for (int j=0;j<MAX_PRESETS-1;j++){ + for (int i=j+1;i<MAX_PRESETS;i++){ + if (Presets_compar(&presets[i],&presets[j])) { + presetstruct tmp=presets[i]; + presets[i]=presets[j]; + presets[j]=tmp; + }; + }; + }; +}; + +void PresetsStore::copypreset(XMLwrapper *xml,char *type, const char *name){ + char filename[MAX_STRING_SIZE],tmpfilename[MAX_STRING_SIZE]; + + if (config.cfg.presetsDirList[0]==NULL) return; + + snprintf(tmpfilename,MAX_STRING_SIZE,"%s",name); + + //make the filenames legal + for (int i=0;i<(int) strlen(tmpfilename);i++) { + char c=tmpfilename[i]; + if ((c>='0')&&(c<='9')) continue; + if ((c>='A')&&(c<='Z')) continue; + if ((c>='a')&&(c<='z')) continue; + if ((c=='-')||(c==' ')) continue; + tmpfilename[i]='_'; + }; + + char *dirname=config.cfg.presetsDirList[0]; + char tmpc=dirname[strlen(dirname)-1]; + char *tmps="/"; + if ((tmpc=='/')||(tmpc=='\\')) tmps=""; + + snprintf(filename,MAX_STRING_SIZE,"%s%s%s.%s.xpz",dirname,tmps,name,type); + + xml->saveXMLfile(filename); +}; + +bool PresetsStore::pastepreset(XMLwrapper *xml, int npreset){ + npreset--; + if (npreset>=MAX_PRESETS) return(false); + char *filename=presets[npreset].file; + if (filename==NULL) return(false); + bool result=(xml->loadXMLfile(filename)>=0); + return(result); +}; + +void PresetsStore::deletepreset(int npreset){ + npreset--; + if (npreset>=MAX_PRESETS) return; + char *filename=presets[npreset].file; + if (filename==NULL) return; + remove(filename); +}; + |