commit bb746e22f526051ac22f4d4c5d4483d546f03b85
parent f67a86c462093ea830c9b057472fc1fa4efa7dc8
Author: paulnasca <paulnasca>
Date: Sat, 12 Jun 2004 21:04:12 +0000
*** empty log message ***
Diffstat:
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