commit 36f2b1f238748b3113576d543f708f0e3dfcba6e
parent 99420bfa7fc96b2d3217e91311680204ef41b4d3
Author: paulnasca <paulnasca>
Date: Mon, 23 Aug 2004 19:14:20 +0000
*** empty log message ***
Diffstat:
7 files changed, 108 insertions(+), 14 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -700,5 +700,6 @@
22 Aug 2004 - Corectata o eroare de compilare
- Makefile-ul modificat, a.i. make-ul sa se opreasca in caz de eroare
- Terminat managerul de preset-uri
+23 Aug 2004 - Adaugata posibilitatea de a se vedea direct din lista cu bancile de instrumente
\ No newline at end of file
diff --git a/src/Misc/Bank.C b/src/Misc/Bank.C
@@ -40,12 +40,15 @@
#define FORCE_BANK_DIR_FILE ".bankdir"
Bank::Bank(){
+
+
ZERO(defaultinsname,PART_MAX_NAME_LEN);
snprintf(defaultinsname,PART_MAX_NAME_LEN,"%s"," ");
for (int i=0;i<BANK_SIZE;i++){
ins[i].used=false;
ins[i].filename=NULL;
+ ins[i].info.PADsynth_used=false;
};
dirname=NULL;
clearbank();
@@ -467,10 +470,22 @@ int Bank::addtobank(int pos, const char *filename, const char* name){
int len=strlen(filename)+1+strlen(dirname);
ins[pos].filename=new char[len+1];
snprintf(ins[pos].filename,len+1,"%s/%s",dirname,filename);
+
+ //see if PADsynth is used
+ XMLwrapper *xml=new XMLwrapper();
+ xml->checkfileinformation(ins[pos].filename);
+
+ ins[pos].info.PADsynth_used=xml->information.PADsynth_used;
+ delete(xml);
return(0);
};
+bool Bank::isPADsynth_used(unsigned int ninstrument){
+ return(ins[ninstrument].info.PADsynth_used);
+};
+
+
void Bank::deletefrombank(int pos){
if ((pos<0)||(pos>=BANK_SIZE)) return;
ins[pos].used=false;
diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h
@@ -43,6 +43,7 @@ class Bank{
char *getname(unsigned int ninstrument);
char *getnamenumbered(unsigned int ninstrument);
void setname(unsigned int ninstrument,const char *newname,int newslot);//if newslot==-1 then this is ignored, else it will be put on that slot
+ bool isPADsynth_used(unsigned int ninstrument);
//returns 0 if the slot is not empty or 1 if the slot is empty
int emptyslot(unsigned int ninstrument);
@@ -86,6 +87,9 @@ class Bank{
bool used;
char name[PART_MAX_NAME_LEN+1];
char *filename;
+ struct{
+ bool PADsynth_used;
+ } info;
}ins[BANK_SIZE];
char *dirname;
diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C
@@ -70,6 +70,8 @@ XMLwrapper::XMLwrapper(){
minimal=true;
stackpos=0;
+
+ information.PADsynth_used=false;
tree=mxmlNewElement(MXML_NO_PARENT,"?xml");
mxmlElementSetAttr(tree,"version","1.0");
@@ -80,9 +82,12 @@ XMLwrapper::XMLwrapper(){
mxmlElementSetAttr(doctype,"ZynAddSubFX-data",NULL);
node=root=mxmlNewElement(tree,"ZynAddSubFX-data");
-
+
mxmlElementSetAttr(root,"version-major","1");
mxmlElementSetAttr(root,"version-minor","0");
+
+ //make the empty branch that will contain the information parameters
+ info=addparams0("INFORMATION");
//save zynaddsubfx specifications
beginbranch("BASE_PARAMETERS");
@@ -95,20 +100,66 @@ XMLwrapper::XMLwrapper(){
addpar("max_addsynth_voices",NUM_VOICES);
endbranch();
-
+
};
XMLwrapper::~XMLwrapper(){
if (tree!=NULL) mxmlDelete(tree);
};
+bool XMLwrapper::checkfileinformation(char *filename){
+ stackpos=0;
+ information.PADsynth_used=false;
+
+ if (tree!=NULL) mxmlDelete(tree);tree=NULL;
+ char *xmldata=doloadfile(filename);
+ if (xmldata==NULL) return(-1);//the file could not be loaded or uncompressed
+
+
+ char *start=strstr(xmldata,"<INFORMATION>");
+ char *end=strstr(xmldata,"</INFORMATION>");
+
+ if ((start==NULL)||(end==NULL)||(start>end)) {
+ delete(xmldata);
+ return(false);
+ };
+ end+=strlen("</INFORMATION>");
+ end[0]='\0';
+
+ tree=mxmlNewElement(MXML_NO_PARENT,"?xml");
+ node=root=mxmlLoadString(tree,xmldata,MXML_OPAQUE_CALLBACK);
+ if (root==NULL) {
+ delete(xmldata);
+ mxmlDelete(tree);
+ tree=NULL;
+ return(false);
+ };
+
+ root=mxmlFindElement(tree,tree,"INFORMATION",NULL,NULL,MXML_DESCEND);
+ push(root);
+
+ if (root==NULL){
+ delete(xmldata);
+ mxmlDelete(tree);
+ tree=NULL;
+ return(false);
+ };
+
+ information.PADsynth_used=getparbool("PADsynth_used",false);
+
+ exitbranch();
+ if (tree!=NULL) mxmlDelete(tree);
+ delete(xmldata);
+ tree=NULL;
+
+ return(true);
+};
+
/* SAVE XML members */
int XMLwrapper::saveXMLfile(char *filename){
- xml_k=0;
- ZERO(tabs,STACKSIZE+2);
- char *xmldata=mxmlSaveAllocString(tree,XMLwrapper_whitespace_callback);
+ char *xmldata=getXMLdata();
if (xmldata==NULL) return(-2);
int compression=config.cfg.GzipCompression;
@@ -127,10 +178,17 @@ int XMLwrapper::saveXMLfile(char *filename){
char *XMLwrapper::getXMLdata(){
xml_k=0;
ZERO(tabs,STACKSIZE+2);
- char *xmldata=mxmlSaveAllocString(tree,XMLwrapper_whitespace_callback);
+ mxml_node_t *oldnode=node;
+
+ node=info;
+ //Info storing
+ addparbool("PADsynth_used",information.PADsynth_used);
+
+ node=oldnode;
+ char *xmldata=mxmlSaveAllocString(tree,XMLwrapper_whitespace_callback);
+
return(xmldata);
-
};
@@ -206,7 +264,6 @@ int XMLwrapper::loadXMLfile(const char *filename){
stackpos=0;
-
char *xmldata=doloadfile(filename);
if (xmldata==NULL) return(-1);//the file could not be loaded or uncompressed
diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h
@@ -109,6 +109,15 @@ class XMLwrapper{
REALTYPE getparreal(char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max);
bool minimal;//false if all parameters will be stored (used only for clipboard)
+
+ struct {
+ bool PADsynth_used;
+ }information;
+
+ //opens a file and parse only the "information" data on it
+ //returns "true" if all went ok or "false" on errors
+ bool checkfileinformation(char *filename);
+
private:
int dosavefile(char *filename,int compression,char *xmldata);
@@ -118,6 +127,7 @@ class XMLwrapper{
mxml_node_t *tree;//all xml data
mxml_node_t *root;//xml data used by zynaddsubfx
mxml_node_t *node;//current node
+ mxml_node_t *info;//this node is used to store the information about the data
//adds params like this:
// <name>
diff --git a/src/Params/PADnoteParameters.C b/src/Params/PADnoteParameters.C
@@ -525,6 +525,8 @@ void PADnoteParameters::applyparameters(bool lockmutex){
void PADnoteParameters::add2XML(XMLwrapper *xml){
+ xml->information.PADsynth_used=true;
+
xml->addparbool("stereo",PStereo);
xml->addpar("mode",Pmode);
xml->addpar("bandwidth",Pbandwidth);
diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl
@@ -66,17 +66,23 @@ bank=bank_;
nselected=nselected_;
box(FL_THIN_UP_BOX);
align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
+
highlight=0;
refresh();} {}
}
Function {refresh()} {} {
- code {if (bank->emptyslot(nslot)) color(46);
- else color(51);
+ code {if (bank->emptyslot(nslot)) {
+ color(46);
+} else {
+ if (bank->isPADsynth_used(nslot)) color(26);
+ else color(51);
+};
if (*nselected==nslot) color(6);
-label(bank->getnamenumbered(nslot));} {}
+label(bank->getnamenumbered(nslot));} {selected
+ }
}
decl {int *what,*whatslot,nslot,highlight, *nselected;} {}
decl {void (BankProcess_:: *fnc)(void);} {}
@@ -206,7 +212,7 @@ refreshmainwindow();} open
label {Refresh bank list}
callback {rescan_for_banks();
banklist->value(0);}
- tooltip {Refresh the bank list (rescan)} xywh {230 8 105 20} box THIN_UP_BOX labelsize 12
+ tooltip {Refresh the bank list (rescan)} xywh {230 8 105 20} box THIN_UP_BOX color 50 labelsize 12
}
}
}
@@ -300,8 +306,7 @@ if (mode==4){//swap
bs[slot]->refresh();
};
};
-if (mode!=4) refreshmainwindow();} {selected
- }
+if (mode!=4) refreshmainwindow();} {}
}
Function {refreshmainwindow()} {} {
code {bankuiwindow->label(bank->bankfiletitle);