zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit bb746e22f526051ac22f4d4c5d4483d546f03b85
parent f67a86c462093ea830c9b057472fc1fa4efa7dc8
Author: paulnasca <paulnasca>
Date:   Sat, 12 Jun 2004 21:04:12 +0000

*** empty log message ***

Diffstat:
MChangeLog | 1+
Msrc/Misc/Bank.C | 48++++++++++++++++++++++++++++++++++++++++++------
Msrc/Misc/Bank.h | 13++++++++++---
Msrc/UI/BankUI.fl | 42+++++++++++++++++++++++++++++++-----------
Msrc/globals.h | 8--------
5 files changed, 84 insertions(+), 28 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -567,6 +567,7 @@ 26 Mai 2004 - Playerul merge bine cu un canal midi (rezolvata problema cu timing-ul) 03 Iun 2004 - Adaugata partea de play speed la interfata 06 Iun 2004 - Adaugata functia sigmoid la distorsionare +12 Iun 2004 - Modificat modul cum este realizat bank-urile, adica directoarele de bank-uri exista in anumite directoare si aceste directoare sunt cautate automat de bankuri; adaugat optiunea de a se folosi mai multe bank-uri diff --git a/src/Misc/Bank.C b/src/Misc/Bank.C @@ -90,12 +90,12 @@ Bank::Bank(){ // loadbank("bank_xml"); - - + for (int i=0;i<MAX_NUM_BANKS;i++){ + banks[i].dir=NULL; + banks[i].name=NULL; + }; bankfiletitle=dirname; - - rescanforbanks(); }; Bank::~Bank(){ @@ -117,6 +117,10 @@ Bank::~Bank(){ //**************// }; + for (int i=0;i<MAX_NUM_BANKS;i++){ + if (banks[i].dir!=NULL) delete (banks[i].dir); + if (banks[i].name!=NULL) delete (banks[i].name); + }; clearbank(); }; @@ -265,6 +269,7 @@ int Bank::loadbank(const char *bankdirname){ if (dirname!=NULL) delete(dirname); dirname=new char[strlen(bankdirname)+1]; snprintf(dirname,strlen(bankdirname)+1,"%s",bankdirname); + bankfiletitle=dirname; // printf("%s/\n",bankdirname); struct dirent *fn; @@ -339,6 +344,15 @@ int Bank::locked(){ void Bank::rescanforbanks(){ int start=0,end=0; + + for (int i=0;i<MAX_NUM_BANKS;i++){ + if (banks[i].dir!=NULL) delete (banks[i].dir); + if (banks[i].name!=NULL) delete (banks[i].name); + banks[i].dir=NULL; + banks[i].name=NULL; + }; + + char *dirlist=config.cfg.bankRootDirList; int dirlistlen=strlen(dirlist); char *currentrootdir=new char [dirlistlen]; @@ -355,6 +369,11 @@ void Bank::rescanforbanks(){ start=end+2; }; delete(currentrootdir); + + for (int i=0;i<MAX_NUM_BANKS;i++){ + if (banks[i].dir==NULL) continue; + printf("* %s = %s\n",banks[i].name,banks[i].dir); + }; }; @@ -405,7 +424,24 @@ void Bank::scanrootdir(char *rootdir){ closedir(d); - if (isbank) printf("%s = %s\n",bank.dir,bank.name); + if (isbank) { +// printf("%s = %s\n",bank.name,bank.dir); + int pos=-1; + for (int i=1;i<MAX_NUM_BANKS;i++){ //banks[0] e liber intotdeauna + if (banks[i].name==NULL) { + pos=i; + break; + }; + }; + + if (pos>=0) { + banks[pos].name=new char[maxdirsize]; + banks[pos].dir=new char[maxdirsize]; + snprintf(banks[pos].name,maxdirsize,"%s",bank.name); + snprintf(banks[pos].dir,maxdirsize,"%s",bank.dir); + }; + + }; }; @@ -425,7 +461,7 @@ void Bank::scanrootdir(char *rootdir){ void Bank::clearbank(){ for (int i=0;i<BANK_SIZE;i++) deletefrombank(i); if (dirname!=NULL) delete(dirname); - dirname=NULL; + bankfiletitle=dirname=NULL; }; int Bank::addtobank(int pos, const char *filename, const char* name){ diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h @@ -29,6 +29,13 @@ #define BANK_SIZE 128 +/* + * The max. number of banks that are used + */ +#define MAX_NUM_BANKS 400 + + + class Bank{ public: Bank(); @@ -54,11 +61,11 @@ class Bank{ void rescanforbanks(); struct bankstruct{ - char dir[maxdirsize]; - char name[maxdirsize]; + char *dir; + char *name; }; -/// banks[ + bankstruct banks[MAX_NUM_BANKS]; private: diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl @@ -86,8 +86,8 @@ class BankUI {open : {public BankProcess_} Function {make_window()} {open } { Fl_Window bankuiwindow { - label Bank selected - xywh {16 205 770 485} type Double + label Bank + xywh {57 89 770 485} 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.");} visible } { @@ -121,7 +121,7 @@ class BankUI {open : {public BankProcess_} code0 {o->box(FL_NO_BOX);} code1 {for (int i=100;i<128;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank);};} } {} - Fl_Group {} {open + Fl_Group {} { xywh {5 437 321 42} box ENGRAVED_BOX } { Fl_Light_Button writebutton { @@ -185,14 +185,23 @@ for (int i=0;i<128;i++) bs[i]->refresh(); refreshmainwindow();} xywh {439 438 105 40} box PLASTIC_UP_BOX color 175 labelfont 1 labelsize 15 labelcolor 0 align 128 } - Fl_Choice {} { - label Bank open + Fl_Choice banklist { + label Bank + callback {int n=o->value(); +char *dirname=bank->banks[n].dir; +if (dirname==NULL) return; + +if (bank->loadbank(dirname)==2) + fl_alert("Error: Could not load the bank from the directory\\n%s.",dirname); +for (int i=0;i<128;i++) bs[i]->refresh(); +refreshmainwindow();} open selected xywh {5 20 205 20} down_box BORDER_BOX labelfont 1 align 5 textfont 1 textsize 12 - } { - menuitem {} { - label Pads - xywh {0 0 100 20} labelfont 1 labelsize 12 - } + } {} + Fl_Button {} { + label Refresh + callback {rescan_for_banks(); +banklist->value(0);} + tooltip {Refresh the bank list (rescan)} xywh {215 20 40 20} box THIN_UP_BOX labelsize 10 } } } @@ -214,7 +223,8 @@ delete(bankuiwindow);} {} code {bankuiwindow->show();} {} } Function {init(Fl_Valuator *cbwig_)} {} { - code {cbwig=cbwig_;} {} + code {cbwig=cbwig_; +rescan_for_banks();} {} } Function {process()} {return_type void } { @@ -277,6 +287,16 @@ if (bank->locked()){ clearbutton->activate(); };} {} } + Function {rescan_for_banks()} {open + } { + code {banklist->clear(); +banklist->add(" "); +bank->rescanforbanks(); + +for (int i=1;i<MAX_NUM_BANKS;i++) { + if (bank->banks[i].name!=NULL) banklist->add(bank->banks[i].name); +};} {} + } decl {BankSlot *bs[128];} {} decl {int slot,what;//"what"=what button is pressed} {} decl {int mode,*npart;} {} diff --git a/src/globals.h b/src/globals.h @@ -142,14 +142,6 @@ extern int OSCIL_SIZE; #define FF_MAX_FORMANTS 12 #define FF_MAX_SEQUENCE 8 - -/* - * The max. number of banks that are used - */ - -#define MAX_NUM_BANK 256 - - #define LOG_2 0.693147181 #define PI 3.1415926536 #define LOG_10 2.302585093