mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-04 20:05:05 +00:00
GUI: add advanced VGM export menu
does NOT work yet!
This commit is contained in:
parent
b2d2da1f1c
commit
496501803f
4 changed files with 58 additions and 3 deletions
|
@ -625,6 +625,29 @@ DivInstrumentType DivEngine::getPreferInsType(int chan) {
|
||||||
return DIV_INS_FM;
|
return DIV_INS_FM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DivEngine::isVGMExportable(DivSystem which) {
|
||||||
|
switch (which) {
|
||||||
|
case DIV_SYSTEM_GENESIS:
|
||||||
|
case DIV_SYSTEM_GENESIS_EXT:
|
||||||
|
case DIV_SYSTEM_SMS:
|
||||||
|
case DIV_SYSTEM_GB:
|
||||||
|
case DIV_SYSTEM_PCE:
|
||||||
|
case DIV_SYSTEM_NES:
|
||||||
|
case DIV_SYSTEM_ARCADE:
|
||||||
|
case DIV_SYSTEM_YM2151:
|
||||||
|
case DIV_SYSTEM_YM2612:
|
||||||
|
case DIV_SYSTEM_YM2610:
|
||||||
|
case DIV_SYSTEM_YM2610_EXT:
|
||||||
|
case DIV_SYSTEM_AY8910:
|
||||||
|
case DIV_SYSTEM_AY8930:
|
||||||
|
case DIV_SYSTEM_SAA1099:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const char* DivEngine::getEffectDesc(unsigned char effect, int chan) {
|
const char* DivEngine::getEffectDesc(unsigned char effect, int chan) {
|
||||||
switch (effect) {
|
switch (effect) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
|
|
|
@ -234,6 +234,9 @@ class DivEngine {
|
||||||
// notify wavetable change
|
// notify wavetable change
|
||||||
void notifyWaveChange(int wave);
|
void notifyWaveChange(int wave);
|
||||||
|
|
||||||
|
// returns whether a system is VGM compatible
|
||||||
|
bool isVGMExportable(DivSystem which);
|
||||||
|
|
||||||
// save config
|
// save config
|
||||||
bool saveConf();
|
bool saveConf();
|
||||||
|
|
||||||
|
|
|
@ -4038,9 +4038,34 @@ bool FurnaceGUI::loop() {
|
||||||
}
|
}
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
if (ImGui::MenuItem("export VGM...")) {
|
if (ImGui::BeginMenu("export VGM...")) {
|
||||||
|
ImGui::Text("settings:");
|
||||||
|
ImGui::Checkbox("loop",&vgmExportLoop);
|
||||||
|
ImGui::Text("systems to export:");;
|
||||||
|
bool hasOneAtLeast=false;
|
||||||
|
for (int i=0; i<e->song.systemLen; i++) {
|
||||||
|
ImGui::BeginDisabled(!e->isVGMExportable(e->song.system[i]));
|
||||||
|
ImGui::Checkbox(fmt::sprintf("%d. %s##_SYSV%d",i+1,e->getSystemName(e->song.system[i]),i).c_str(),&willExport[i]);
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
if (!e->isVGMExportable(e->song.system[i])) {
|
||||||
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) {
|
||||||
|
ImGui::SetTooltip("this system is not supported by the VGM format!");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (willExport[i]) hasOneAtLeast=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::Text("select the systems you wish to export,");
|
||||||
|
ImGui::Text("but only up to 2 of each type.");
|
||||||
|
if (hasOneAtLeast) {
|
||||||
|
if (ImGui::MenuItem("click to export")) {
|
||||||
openFileDialog(GUI_FILE_EXPORT_VGM);
|
openFileDialog(GUI_FILE_EXPORT_VGM);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
ImGui::Text("nothing to export");
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if (ImGui::BeginMenu("add system...")) {
|
if (ImGui::BeginMenu("add system...")) {
|
||||||
sysAddOption(DIV_SYSTEM_GENESIS);
|
sysAddOption(DIV_SYSTEM_GENESIS);
|
||||||
|
@ -4742,6 +4767,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
modified(false),
|
modified(false),
|
||||||
displayError(false),
|
displayError(false),
|
||||||
displayExporting(false),
|
displayExporting(false),
|
||||||
|
vgmExportLoop(true),
|
||||||
curFileDialog(GUI_FILE_OPEN),
|
curFileDialog(GUI_FILE_OPEN),
|
||||||
warnAction(GUI_WARN_OPEN),
|
warnAction(GUI_WARN_OPEN),
|
||||||
scrW(1280),
|
scrW(1280),
|
||||||
|
@ -4869,4 +4895,6 @@ FurnaceGUI::FurnaceGUI():
|
||||||
valueKeys[SDLK_d]=13;
|
valueKeys[SDLK_d]=13;
|
||||||
valueKeys[SDLK_e]=14;
|
valueKeys[SDLK_e]=14;
|
||||||
valueKeys[SDLK_f]=15;
|
valueKeys[SDLK_f]=15;
|
||||||
|
|
||||||
|
memset(willExport,1,32*sizeof(bool));
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,7 +162,8 @@ class FurnaceGUI {
|
||||||
|
|
||||||
String workingDir, fileName, clipboard, warnString, errorString, lastError, curFileName;
|
String workingDir, fileName, clipboard, warnString, errorString, lastError, curFileName;
|
||||||
|
|
||||||
bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting;
|
bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop;
|
||||||
|
bool willExport[32];
|
||||||
|
|
||||||
FurnaceGUIFileDialogs curFileDialog;
|
FurnaceGUIFileDialogs curFileDialog;
|
||||||
FurnaceGUIWarnings warnAction;
|
FurnaceGUIWarnings warnAction;
|
||||||
|
|
Loading…
Reference in a new issue