commit 139137f85ff5421383d3aea8f150c371c471685d
parent 80d9775dc6690e5cdb346e6d760b09c093c975ed
Author: paulnasca <paulnasca>
Date: Fri, 6 Feb 2004 21:39:59 +0000
*** empty log message ***
Diffstat:
8 files changed, 100 insertions(+), 32 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -523,5 +523,7 @@
03 Feb 2004 - Continuat de scris suportul XML - inceput sa salvezi cativa parametrii
04 Feb 2004 - Se salveaza parametrii XML la master, part, filter, lfo, envelope, resonance si adnote (partial)
05 Feb 2004 - Se salveaza toti parametrii in XML
-
+06 Feb 2004 - Adaugat salvarea de instrument in XML
+ - Adaugat export la bank intr-un director XML si decis ca bank-ul sa fie un director cu mai multe fisiere xml de forma XXXX-nume.xml sau XXXX-nume.xml.gz
+
diff --git a/src/Misc/Master.C b/src/Misc/Master.C
@@ -24,7 +24,8 @@
#include "Master.h"
#include <stdio.h>
-
+#include <sys/stat.h>
+#include <sys/types.h>
Master::Master(){
int npart,nefx;
@@ -690,6 +691,35 @@ void Master::saveloadbuf(Buffer *buf){
};
};
+void Master::exportbankasxmldirectory(const char *directory){
+ char filename[1000],nostr[10];
+ Part *tmppart=new Part(µtonal,fft,&mutex);
+ tmppart->Penabled=1;
+
+ mkdir(directory,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+ for (int slot=0;slot<128;slot++){
+ instrumentdefaultsbuf.changemode(0);
+ tmppart->saveloadbuf(&instrumentdefaultsbuf,1);
+ bank.loadfromslot(slot,&slbuf);
+ slbuf.changemode(0);
+ tmppart->saveloadbuf(&slbuf,1);
+ snprintf((char *)tmppart->kit[0].Pname,PART_MAX_NAME_LEN,bank.getname(slot));
+ snprintf((char *)tmppart->Pname,PART_MAX_NAME_LEN,bank.getname(slot));
+ if (bank.emptyslot(slot)) continue;
+
+ snprintf(nostr,10,"%4d",slot+1);
+ for (int i=0;i<strlen(nostr);i++) if (nostr[i]==' ') nostr[i]='0';
+
+ snprintf(filename,1000,"%s/%s-%s.xml",directory,nostr,bank.getname(slot));
+ printf("%s\n",filename);
+ tmppart->saveXML(filename);
+ };
+
+
+ delete (tmppart);
+};
+
+
void Master::add2XML(XMLwrapper *xml){
@@ -707,9 +737,6 @@ void Master::add2XML(XMLwrapper *xml){
xml->endbranch();
};
- xml->beginbranch("INSERTION_EFFECTS");
- xml->endbranch();
-
xml->beginbranch("SYSTEM_EFFECTS");
for (int nefx=0;nefx<NUM_SYS_EFX;nefx++){
xml->beginbranch("SYSEFFECT",nefx);
diff --git a/src/Misc/Master.h b/src/Misc/Master.h
@@ -41,7 +41,9 @@ class Master{
public:
Master();
~Master();
+
void saveloadbuf(Buffer *buf);
+ void exportbankasxmldirectory(const char *directory);
//saves all settings to a XML file
//returns 0 for ok, 1 if there is a existing file or -1 if there is an error
diff --git a/src/Misc/Part.C b/src/Misc/Part.C
@@ -980,7 +980,7 @@ void Part::add2XML(XMLwrapper *xml){
xml->addparbool("polymode",Ppolymode);
xml->addpar("keylimit",Pkeylimit);
- xml->beginbranch("INSTRUMENTKIT");
+ xml->beginbranch("INSTRUMENT");
add2XMLinstrument(xml);
xml->endbranch();
@@ -999,3 +999,18 @@ void Part::add2XML(XMLwrapper *xml){
};
};
+int Part::saveXML(char *filename){
+
+ //sa pun aici un test daca exista fisierul
+
+ XMLwrapper *xml;
+ xml=new XMLwrapper();
+
+ xml->beginbranch("INSTRUMENT");
+ add2XMLinstrument(xml);
+ xml->endbranch();
+
+ xml->saveXMLfile(filename,0);
+ delete (xml);
+ return(0);
+};
diff --git a/src/Misc/Part.h b/src/Misc/Part.h
@@ -56,6 +56,11 @@ class Part{
void saveloadbuf(Buffer *buf,int instrumentonly);
//instrumentonly: 0 - save all, 1 - save only instrumnet, 2 - save only instrument without the name(used in bank)
+
+ //saves the instrument settings to a XML file
+ //returns 0 for ok, 1 if there is a existing file or -1 if there is an error
+ int saveXML(char *filename);
+
void add2XML(XMLwrapper *xml);
void add2XMLinstrument(XMLwrapper *xml);
diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C
@@ -47,9 +47,6 @@ XMLwrapper::XMLwrapper(){
node=root=mxmlNewElement(tree,"zynaddsubfx-data");
-// mxml_node_t *tmp=mxmlNewElement(root,"test1");
-// tmp=mxmlNewElement(tmp,"PARAM11");
-// tmp=mxmlNewElement(tmp,"test3");
};
XMLwrapper::~XMLwrapper(){
@@ -76,20 +73,20 @@ int XMLwrapper::saveXMLfile(char *filename,int compression){
void XMLwrapper::addpar(char *name,int val){
- addparams2("PARAM","name",name,"value",int2str(val));
+ addparams2("param","name",name,"value",int2str(val));
};
void XMLwrapper::addparreal(char *name,REALTYPE val){
- addparams2("PARAMREAL","name",name,"value",real2str(val));
+ addparams2("paramreal","name",name,"value",real2str(val));
};
void XMLwrapper::addparbool(char *name,int val){
- if (val!=0) addparams2("BOOLPARAM","name",name,"value","yes");
- else addparams2("BOOLPARAM","name",name,"value","no");
+ if (val!=0) addparams2("boolparam","name",name,"value","yes");
+ else addparams2("boolparam","name",name,"value","no");
};
void XMLwrapper::addparstr(char *name,char *val){
- addparams2("STRPARAM","name",name,"value",val);
+ addparams2("strparam","name",name,"value",val);
};
diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl
@@ -34,7 +34,7 @@ class BankProcess_ {} {
}
}
-class BankSlot {open : {public Fl_Button,BankProcess_}
+class BankSlot {: {public Fl_Button,BankProcess_}
} {
Function {BankSlot(int x,int y, int w, int h, const char *label=0):Fl_Button(x,y,w,h,label)} {} {
code {what=NULL;
@@ -55,8 +55,7 @@ int tmp=Fl_Button::handle(event);
if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)();
return(tmp);} {}
}
- Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_)} {open
- } {
+ Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_)} {} {
code {nslot=nslot_;
what=what_;
whatslot=whatslot_;
@@ -68,35 +67,34 @@ align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
highlight=0;
refresh();} {}
}
- Function {refresh()} {open
- } {
+ Function {refresh()} {} {
code {if (bank->emptyslot(nslot)) color(46);
else color(51);
//printf("%s\\n",bank->getnamenumbered(nslot));
-label(bank->getnamenumbered(nslot));} {selected
- }
+label(bank->getnamenumbered(nslot));} {}
}
decl {int *what,*whatslot,nslot,highlight;} {}
decl {void (BankProcess_:: *fnc)(void);} {}
decl {BankProcess_ *bp;} {}
}
-class BankUI {: {public BankProcess_}
+class BankUI {open : {public BankProcess_}
} {
- Function {make_window()} {} {
+ Function {make_window()} {open
+ } {
Fl_Window bankuiwindow {
label Bank
- xywh {16 205 770 430} type Double hide
+ xywh {16 205 770 430} type Double
code0 {o->label(bank->bankfiletitle);}
- code1 {if (bank->bankfiletitle==NULL) o->label ("Choose a bank to use by pressing the 'Load/Use Bank from file...' button or choose 'New Bank...' to make a new bank.");}
+ code1 {if (bank->bankfiletitle==NULL) o->label ("Choose a bank to use by pressing the 'Load/Use Bank from file...' button or choose 'New Bank...' to make a new bank.");} visible
} {
Fl_Button {} {
label Close
callback {bankuiwindow->hide();}
- xywh {543 402 72 24} box THIN_UP_BOX
+ xywh {555 402 60 24} box THIN_UP_BOX
}
Fl_Pack {} {
xywh {6 6 150 375} box BORDER_BOX
@@ -146,7 +144,7 @@ class BankUI {: {public BankProcess_}
}
}
Fl_Button loadusebankfile {
- label {Load/Use Bank from file...}
+ label {Use Bank from file...}
callback {const char *filename;
filename=fl_file_chooser("Load and use Bank from file:","(*.bnk_zyn)",NULL,0);
if (filename==NULL) return;
@@ -154,7 +152,7 @@ if (bank->loadfilebank(filename)==2)
fl_alert("Error: Could not load the bank from the file..");
for (int i=0;i<128;i++) bs[i]->refresh();
refreshmainwindow();}
- xywh {336 387 105 39} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128
+ xywh {330 387 74 39} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128
}
Fl_Button {} {
label {Save Bank...}
@@ -176,7 +174,7 @@ if (result==1) {
if (result!=0) fl_alert("Error: Could not save the bank to the file..");
refreshmainwindow();}
- xywh {444 387 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128
+ xywh {410 387 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128
}
Fl_Button {} {
label {New Bank...}
@@ -198,14 +196,20 @@ if (result==1) {
if (result!=0) fl_alert("Error: Could not save the bank to the file..");
for (int i=0;i<128;i++) bs[i]->refresh();
refreshmainwindow();}
- xywh {444 408 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128
+ xywh {410 408 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128
}
Fl_Check_Button {} {
label {auto close}
callback {config.cfg.BankUIAutoClose=(int) o->value();}
- tooltip {automatically close the bank window if the instrument is loaded} xywh {545 385 65 15} down_box DOWN_BOX labelsize 10
+ tooltip {automatically close the bank window if the instrument is loaded} xywh {555 385 60 15} down_box DOWN_BOX labelsize 10
code0 {o->value(config.cfg.BankUIAutoClose);}
}
+ Fl_Button {} {
+ label {XML export}
+ callback {const char *tmp=fl_input("Enter the directory:","bank_xml");
+if (tmp!=NULL) master->exportbankasxmldirectory(tmp);} selected
+ xywh {508 390 37 35} box PLASTIC_UP_BOX labelsize 11 align 128
+ }
}
}
Function {BankUI(Master *master_,int *npart_)} {} {
diff --git a/src/UI/MasterUI.fl b/src/UI/MasterUI.fl
@@ -375,7 +375,7 @@ if (fl_ask("Exit and leave the unsaved data?")) *exitprogram=1;
xywh {149 197 390 465} type Double
code0 {setfilelabel(NULL);} non_modal visible
} {
- Fl_Menu_Bar mastermenu {selected
+ Fl_Menu_Bar mastermenu {open
xywh {0 0 690 25}
} {
submenu {} {
@@ -553,6 +553,22 @@ if (result!=0) fl_alert("Error: Could not save the file.");}
xywh {10 10 100 20}
} {
menuitem {} {
+ label {&Save As XML (EXPERIMENTAL)...}
+ callback {char *filename;
+\#define EXT ".xml"
+filename=fl_file_chooser("Save:","(*"EXT")",NULL,0);
+if (filename==NULL) return;
+filename=fl_filename_setext(filename,EXT);
+\#undef EXT
+
+pthread_mutex_lock(&master->mutex);
+master->part[npart]->saveXML(filename);
+pthread_mutex_unlock(&master->mutex);
+
+updatepanel();} selected
+ xywh {20 20 100 20} divider
+ }
+ menuitem {} {
label {&New Instrument...}
callback {if (fl_ask("Clear instrument's parameters ?")){
int npart=(int)npartcounter->value();