commit 7b4a3a32f8aa14e66f8d4e9637f18af38cf4041a
parent 2749f19d371c9b1bcb572681b61592e283d601a3
Author: paulnasca <paulnasca>
Date: Sun, 29 Feb 2004 11:31:47 +0000
*** empty log message ***
Diffstat:
6 files changed, 90 insertions(+), 46 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -548,5 +548,7 @@
27 Feb 2004 - Corectate erori la snprintf ( nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori
- Micsorat timpul de marire amplitudine la ADnote (doar in cazul cand amplitudinea creste brusc ca la un LFO expdown)
- Corectata o eroare foarte veche la LFO amplitudine (amplitudinea nu scadea corespunzator)
+28 Feb 2004 - Se poate incarca instrumente din Bank
+
diff --git a/src/Misc/Bank.C b/src/Misc/Bank.C
@@ -41,6 +41,7 @@ Bank::Bank(){
ins[i].used=false;
ins[i].filename=NULL;
};
+ dirname=NULL;
clearbank();
@@ -57,12 +58,17 @@ Bank::~Bank(){
* Get the name of an instrument from the bank
*/
char *Bank::getname (unsigned char ninstrument){
+ if (emptyslot(ninstrument)) return (defaultinsname);
+ return (ins[ninstrument].name);
};
/*
* Get the numbered name of an instrument from the bank
*/
char *Bank::getnamenumbered (unsigned char ninstrument){
+ if (emptyslot(ninstrument)) return (defaultinsname);
+ snprintf(tmpinsname[ninstrument],PART_MAX_NAME_LEN+15,"%d. %s",ninstrument+1,getname(ninstrument));
+ return(tmpinsname[ninstrument]);
};
/*
@@ -76,6 +82,10 @@ void Bank::setname(unsigned char ninstrument,const char *newname){
* Check if there is no instrument on a slot from the bank
*/
int Bank::emptyslot(unsigned char ninstrument){
+ if (ninstrument>=BANK_SIZE) return (1);
+
+ if (ins[ninstrument].used) return (0);
+ else return(1);
};
/*
@@ -93,8 +103,21 @@ void Bank::savetoslot(unsigned char ninstrument,const char *name,XMLwrapper *buf
/*
* Loads the instrument from the bank to a buffer
*/
-void Bank::loadfromslot(unsigned char ninstrument,XMLwrapper *buf){
+void Bank::loadfromslot(unsigned char ninstrument,Part *part){
+ if (emptyslot(ninstrument)) return;
+ if ((dirname==NULL)||(ins[ninstrument].filename==NULL)) return;
+
+ part->defaultsinstrument();
+
+ char tmpfilename[1001];
+ memset(tmpfilename,0,1001);
+ snprintf(tmpfilename,1000,"%s/%s",dirname,ins[ninstrument].filename);
+
+ printf("load: %s\n",tmpfilename);
+
+ part->loadXMLinstrument(tmpfilename);
+
};
@@ -104,43 +127,62 @@ void Bank::loadfromslot(unsigned char ninstrument,XMLwrapper *buf){
*/
int Bank::loadbank(const char *bankdirname){
DIR *dir=opendir(bankdirname);
-
clearbank();
if (dir==NULL) return(-1);
+ if (dirname!=NULL) delete(dirname);
+ dirname=new char[strlen(bankdirname)+1];
+ snprintf(dirname,strlen(bankdirname)+1,"%s",bankdirname);
+
printf("%s/\n",bankdirname);
struct dirent *fn;
- while(fn=readdir(dir)){
+ while ((fn=readdir(dir))){
if (fn->d_type!=DT_REG) continue;//this is not a regular file
const char *filename= fn->d_name;
//sa verific daca e si extensia dorita
//verify if the name is like this NNNN-name (where N is a digit)
- int no=0,startname=0;
+ int no=0;
+ unsigned int startname=0;
- for (int i=0;i<4;i++) {
+ for (unsigned int i=0;i<4;i++) {
if (strlen(filename)<=i) break;
- if ((filename[i]>='0')&&(filename[i]<='9')) no=no*10+(filename[i]-'0');
- else if (startname!=0) startname=i;
+ if ((filename[i]>='0')&&(filename[i]<='9')) {
+ no=no*10+(filename[i]-'0');
+ startname++;
+ };
};
+ if ((startname+1)<strlen(filename)) startname++;//to take out the "-"
+
+ char name[PART_MAX_NAME_LEN+1];
+ memset(name,0,PART_MAX_NAME_LEN+1);
+ snprintf(name,PART_MAX_NAME_LEN,"%s",filename);
+
+ for (int i=strlen(name)-1;i>=2;i--){
+ if (name[i]=='.') {
+ name[i]='\0';
+ break;
+ };
+ };
if (no!=0){//the instrument position in the bank is found
- addtobank(no-1,filename,&filename[startname]);
+ addtobank(no-1,filename,&name[startname]);
} else {
- addtobank(-1,filename,filename);
+ addtobank(-1,filename,name);
};
};
closedir(dir);
+ return(0);
};
/*
@@ -155,11 +197,12 @@ int Bank::newbank(const char *newbankdirname, int overwrite){
int Bank::locked(){
};
-
// private stuff
void Bank::clearbank(){
for (int i=0;i<BANK_SIZE;i++) deletefrombank(i);
+ if (dirname!=NULL) delete(dirname);
+ dirname=NULL;
};
int Bank::addtobank(int pos, const char *filename, const char* name){
@@ -186,11 +229,10 @@ int Bank::addtobank(int pos, const char *filename, const char* name){
ins[pos].used=true;
snprintf(ins[pos].name,PART_MAX_NAME_LEN,"%s",name);
- snprintf(tmpinsname[pos],PART_MAX_NAME_LEN+10,"%d. %s",pos,name);
-
+ snprintf(tmpinsname[pos],PART_MAX_NAME_LEN+10," ");
int len=strlen(filename);
ins[pos].filename=new char[len+1];
- snprintf(ins[pos].filename,len,"%s",filename);
+ snprintf(ins[pos].filename,len+1,"%s",filename);
return(0);
};
diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h
@@ -25,6 +25,7 @@
#include "../globals.h"
#include "XMLwrapper.h"
+#include "Part.h"
#define BANK_SIZE 128
@@ -38,7 +39,7 @@ class Bank{
int emptyslot(unsigned char ninstrument);
void clearslot(unsigned char ninstrument);
void savetoslot(unsigned char ninstrument,const char *name,XMLwrapper *xml);
- void loadfromslot(unsigned char ninstrument,XMLwrapper *xml);
+ void loadfromslot(unsigned char ninstrument,Part *part);
int loadbank(const char *bankdirname);
// int savebank(const char *newbankfilename,int overwrite);
@@ -65,6 +66,8 @@ class Bank{
char name[PART_MAX_NAME_LEN+1];
char *filename;
}ins[BANK_SIZE];
+
+ char *dirname;
};
#endif
diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl
@@ -24,13 +24,13 @@ decl {\#include <FL/Fl_File_Chooser.H>} {public
decl {\#include "../Misc/Master.h"} {public
}
-decl {\#include "../Misc/OldBank.h"} {public
+decl {\#include "../Misc/Bank.h"} {selected public
}
class BankProcess_ {} {
Function {process()} {return_type {virtual void}
} {}
- decl {OldBank *bank;} {public
+ decl {Bank *bank;} {public
}
}
@@ -55,7 +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_,OldBank *bank_)} {} {
+ Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_)} {} {
code {nslot=nslot_;
what=what_;
whatslot=whatslot_;
@@ -81,15 +81,15 @@ label(bank->getnamenumbered(nslot));} {}
decl {BankProcess_ *bp;} {}
}
-class BankUI {open : {public BankProcess_}
+class BankUI {: {public BankProcess_}
} {
Function {make_window()} {open
} {
Fl_Window bankuiwindow {
label Bank
- xywh {16 205 770 430} type Double
+ xywh {16 205 770 430} type Double hide
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.");} visible
+ 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.");}
} {
Fl_Button {} {
label Close
@@ -148,7 +148,7 @@ class BankUI {open : {public BankProcess_}
callback {const char *filename;
filename=fl_file_chooser("Load and use Bank from file:","(*.bnk_zyn)",NULL,0);
if (filename==NULL) return;
-if (bank->loadfilebank(filename)==2)
+if (bank->loadbank(filename)==2)
fl_alert("Error: Could not load the bank from the file..");
for (int i=0;i<128;i++) bs[i]->refresh();
refreshmainwindow();}
@@ -164,10 +164,12 @@ filename=fl_filename_setext(filename,EXT);
\#undef EXT
if (filename==NULL) return;
-int result=bank->savefilebank(filename,0);
+//int result=bank->savebank(filename,0);
+int result=0;
if (result==1) {
if (fl_ask("The file exists. \\nOverwrite it?")){
- result=bank->savefilebank(filename,1);
+// result=bank->savebank(filename,1);
+ result=0;
} else return;
};
@@ -186,10 +188,10 @@ filename=fl_filename_setext(filename,EXT);
\#undef EXT
if (filename==NULL) return;
-int result=bank->newfilebank(filename,0);
+int result=bank->newbank(filename,0);
if (result==1) {
if (fl_ask("The file exists. \\nOverwrite it?")){
- result=bank->newfilebank(filename,1);
+ result=bank->newbank(filename,1);
} else return;
};
@@ -207,7 +209,7 @@ refreshmainwindow();}
Fl_Button {} {
label {XML export}
callback {const char *tmp=fl_input("Enter the directory:","bank_xml");
-if (tmp!=NULL) master->exportbankasxmldirectory(tmp);} selected
+if (tmp!=NULL) master->exportbankasxmldirectory(tmp);}
xywh {508 390 37 35} box PLASTIC_UP_BOX labelsize 11 align 128
}
}
@@ -216,7 +218,7 @@ if (tmp!=NULL) master->exportbankasxmldirectory(tmp);} selected
code {fnc=&BankProcess_::process;
master=master_;
npart=npart_;
-bank=&master_->oldbank;
+bank=&master_->bank;
what=0;
make_window();
mode=1;} {}
@@ -246,11 +248,9 @@ if ((what==1)&&(mode==2)){//save(write) to slot
if (!bank->emptyslot(slot))
if (!fl_ask("Overwrite the slot no. %d ?",slot+1)) goto nooverwriteslot;
pthread_mutex_lock(&master->mutex);
- slbuf.changemode(1);
- slbuf.changeminimal(1);
master->part[*npart]->saveloadbuf(&slbuf,2);
bank->setname(slot,(char *)master->part[*npart]->Pname);
- bank->savetoslot(slot,(char *)master->part[*npart]->Pname,&slbuf);
+ bank->savetoslot(slot,(char *)master->part[*npart]->Pname,NULL);
pthread_mutex_unlock(&master->mutex);
bs[slot]->refresh();
@@ -261,10 +261,7 @@ if ((what==1)&&(mode==2)){//save(write) to slot
if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot
pthread_mutex_lock(&master->mutex);
- master->part[*npart]->defaultsinstrument();
- bank->loadfromslot(slot,&slbuf);
- slbuf.changemode(0);
- master->part[*npart]->saveloadbuf(&slbuf,1);
+ bank->loadfromslot(slot,master->part[*npart]);
pthread_mutex_unlock(&master->mutex);
if (master->part[*npart]->disablekitloading==0){
snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN
diff --git a/src/UI/PartUI.fl b/src/UI/PartUI.fl
@@ -1,5 +1,5 @@
# data file for the Fltk User Interface Designer (fluid)
-version 1.0104
+version 1.0200
header_name {.h}
code_name {.cc}
decl {//Copyright (c) 2002-2003 Nasca Octavian Paul} {}
@@ -44,7 +44,7 @@ class PartSysEffSend {: {public Fl_Group}
Function {make_window()} {private
} {
Fl_Window syseffsend {
- private xywh {584 83 90 35} hide
+ private xywh {584 83 90 35} type Double hide
class Fl_Group
} {
Fl_Dial {} {
@@ -90,7 +90,7 @@ class PartKitItem {: {public Fl_Group}
Function {make_window()} {private
} {
Fl_Window partkititem {
- private xywh {149 528 590 27} hide
+ private xywh {149 528 590 27} type Double hide
class Fl_Group
} {
Fl_Group partkititemgroup {
@@ -260,7 +260,7 @@ class PartUI {: {public Fl_Group,PartUI_}
Function {make_window()} {private
} {
Fl_Window partgroup {
- private xywh {149 400 385 180} hide
+ private xywh {149 400 385 180} type Double hide
class Fl_Group
} {
Fl_Group partgroupui {
@@ -342,8 +342,8 @@ if (event==FL_RIGHT_MOUSE){
} else {
if (event==FL_LEFT_MOUSE) bankui->show();
else infowin->show();
-};}
- tooltip {left mousebutton - to choose/save/.. from/to bank or right mousebutton to change the name or middle button to change the instrument information} xywh {155 5 135 20} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 12 align 20
+};} selected
+ tooltip {left mousebutton - to choose/save/.. from/to bank or right mousebutton to change the name or middle button to change the instrument information} xywh {155 5 135 20} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 12 align 84
code0 {o->label((char *)part->Pname);}
}
Fl_Box {} {
@@ -463,7 +463,7 @@ maxkcounter->do_callback();}
}
Fl_Window ctlwindow {
label Controllers
- private xywh {46 404 420 130} hide
+ private xywh {46 404 420 130} type Double hide
} {
Fl_Check_Button {} {
label Expr
@@ -582,7 +582,7 @@ if (part->ctl.sustain.receive==0) {
label {t.dn/up}
callback {int x=(int) o->value();
-part->ctl.portamento.updowntimestretch=x;} selected
+part->ctl.portamento.updowntimestretch=x;}
tooltip {Portamento time stretch (up/down)} xywh {285 60 25 25} labelsize 10 maximum 127 step 1
code0 {o->value(part->ctl.portamento.updowntimestretch);}
class WidgetPDial
@@ -616,7 +616,7 @@ part->ctl.portamento.updowntimestretch=x;} selected
}
Fl_Window partfx {
label {Part's Insert Effects}
- private xywh {110 483 390 145} hide
+ private xywh {110 483 390 145} type Double hide
} {
Fl_Counter inseffnocounter {
label {Ins.Effect No.}
@@ -713,7 +713,7 @@ part->Pefxroute[ninseff]=x;}
}
Fl_Window instrumentkitlist {
label {Instrument Kit}
- xywh {70 61 590 370} hide
+ xywh {70 61 590 370} type Double hide
} {
Fl_Button {} {
label {Close Window}
@@ -809,7 +809,7 @@ if (part->Pkitmode==0) {
}
Fl_Window swapwindow {
label {Swap/Copy item}
- xywh {384 262 205 100} hide modal
+ xywh {384 262 205 100} type Double hide modal
} {
Fl_Counter swap2counter {
label to
@@ -865,7 +865,7 @@ subsynenabledcheck->value(part->kit[0].Psubenabled);}
}
Fl_Window infowin {
label {Instrument Info}
- xywh {224 184 366 343} hide
+ xywh {224 184 366 343} type Double hide
} {
Fl_Input {} {
label {Author and Copyright}
diff --git a/src/default.bnk_zyn b/src/default.bnk_zyn
Binary files differ.