GUI: batch wave/sample loading

This commit is contained in:
tildearrow 2022-10-28 04:11:27 -05:00
parent d7d744e633
commit c9d7b371e1
1 changed files with 55 additions and 17 deletions

View File

@ -1525,7 +1525,9 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) {
"all files", ".*"},
"compatible files{.fuw,.dmw},.*",
workingDirWave,
dpiScale
dpiScale,
NULL, // TODO
(type==GUI_FILE_WAVE_OPEN)
);
break;
case GUI_FILE_WAVE_SAVE:
@ -1567,7 +1569,9 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) {
"all files", ".*"},
"compatible files{.wav,.dmc,.brr},.*",
workingDirSample,
dpiScale
dpiScale,
NULL, // TODO
(type==GUI_FILE_SAMPLE_OPEN)
);
break;
case GUI_FILE_SAMPLE_OPEN_RAW:
@ -4038,16 +4042,33 @@ bool FurnaceGUI::loop() {
}
break;
case GUI_FILE_SAMPLE_OPEN: {
DivSample* s=e->sampleFromFile(copyOfName.c_str());
if (s==NULL) {
showError(e->getLastError());
} else {
if (e->addSamplePtr(s)==-1) {
showError(e->getLastError());
String errs="there were some errors while loading wavetables:\n";
bool warn=false;
for (String i: fileDialog->getFileName()) {
DivSample* s=e->sampleFromFile(i.c_str());
if (s==NULL) {
if (fileDialog->getFileName().size()>1) {
warn=true;
errs+=fmt::sprintf("- %s: %s\n",i,e->getLastError());
} else {
showError(e->getLastError());
}
} else {
MARK_MODIFIED;
if (e->addSamplePtr(s)==-1) {
if (fileDialog->getFileName().size()>1) {
warn=true;
errs+=fmt::sprintf("- %s: %s\n",i,e->getLastError());
} else {
showError(e->getLastError());
}
} else {
MARK_MODIFIED;
}
}
}
if (warn) {
showWarning(errs,GUI_WARN_GENERIC);
}
break;
}
case GUI_FILE_SAMPLE_OPEN_REPLACE: {
@ -4165,17 +4186,34 @@ bool FurnaceGUI::loop() {
break;
}
case GUI_FILE_WAVE_OPEN: {
DivWavetable* wave=e->waveFromFile(copyOfName.c_str());
if (wave==NULL) {
showError("cannot load wavetable! ("+e->getLastError()+")");
} else {
if (e->addWavePtr(wave)==-1) {
showError("cannot load wavetable! ("+e->getLastError()+")");
String errs="there were some errors while loading wavetables:\n";
bool warn=false;
for (String i: fileDialog->getFileName()) {
DivWavetable* wave=e->waveFromFile(i.c_str());
if (wave==NULL) {
if (fileDialog->getFileName().size()>1) {
warn=true;
errs+=fmt::sprintf("- %s: %s\n",i,e->getLastError());
} else {
showError("cannot load wavetable! ("+e->getLastError()+")");
}
} else {
MARK_MODIFIED;
RESET_WAVE_MACRO_ZOOM;
if (e->addWavePtr(wave)==-1) {
if (fileDialog->getFileName().size()>1) {
warn=true;
errs+=fmt::sprintf("- %s: %s\n",i,e->getLastError());
} else {
showError("cannot load wavetable! ("+e->getLastError()+")");
}
} else {
MARK_MODIFIED;
RESET_WAVE_MACRO_ZOOM;
}
}
}
if (warn) {
showWarning(errs,GUI_WARN_GENERIC);
}
break;
}
case GUI_FILE_WAVE_OPEN_REPLACE: {