GUI: improve the buttons

This commit is contained in:
tildearrow 2023-12-22 19:18:23 -05:00
parent c65debad68
commit 27f4f6830e
3 changed files with 150 additions and 124 deletions

View file

@ -21,8 +21,9 @@
#include "guiConst.h" #include "guiConst.h"
#include "../fileutils.h" #include "../fileutils.h"
#include "misc/cpp/imgui_stdlib.h" #include "misc/cpp/imgui_stdlib.h"
#include <imgui.h>
void FurnaceGUI::drawExportAudio() { void FurnaceGUI::drawExportAudio(bool onWindow) {
exitDisabledTimer=1; exitDisabledTimer=1;
ImGui::RadioButton("one file",&audioExportType,0); ImGui::RadioButton("one file",&audioExportType,0);
@ -35,7 +36,13 @@ void FurnaceGUI::drawExportAudio() {
if (exportFadeOut<0.0) exportFadeOut=0.0; if (exportFadeOut<0.0) exportFadeOut=0.0;
} }
if (ImGui::Button("Export")) { if (onWindow) {
ImGui::Separator();
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
ImGui::SameLine();
}
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
switch (audioExportType) { switch (audioExportType) {
case 0: case 0:
openFileDialog(GUI_FILE_EXPORT_AUDIO_ONE); openFileDialog(GUI_FILE_EXPORT_AUDIO_ONE);
@ -51,7 +58,7 @@ void FurnaceGUI::drawExportAudio() {
} }
} }
void FurnaceGUI::drawExportVGM() { void FurnaceGUI::drawExportVGM(bool onWindow) {
exitDisabledTimer=1; exitDisabledTimer=1;
ImGui::Text("settings:"); ImGui::Text("settings:");
@ -129,16 +136,25 @@ void FurnaceGUI::drawExportVGM() {
} }
ImGui::Text("select the chip you wish to export, but only up to %d of each type.",(vgmExportVersion>=0x151)?2:1); ImGui::Text("select the chip you wish to export, but only up to %d of each type.",(vgmExportVersion>=0x151)?2:1);
if (hasOneAtLeast) { if (hasOneAtLeast) {
if (ImGui::Button("Export")) { if (onWindow) {
ImGui::Separator();
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
ImGui::SameLine();
}
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
openFileDialog(GUI_FILE_EXPORT_VGM); openFileDialog(GUI_FILE_EXPORT_VGM);
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
} else { } else {
ImGui::Text("nothing to export"); ImGui::Text("nothing to export");
if (onWindow) {
ImGui::Separator();
if (ImGui::Button("Cancel",ImVec2(400.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
}
} }
} }
void FurnaceGUI::drawExportZSM() { void FurnaceGUI::drawExportZSM(bool onWindow) {
exitDisabledTimer=1; exitDisabledTimer=1;
ImGui::Text("Commander X16 Zsound Music File"); ImGui::Text("Commander X16 Zsound Music File");
@ -149,13 +165,18 @@ void FurnaceGUI::drawExportZSM() {
ImGui::Checkbox("loop",&zsmExportLoop); ImGui::Checkbox("loop",&zsmExportLoop);
ImGui::SameLine(); ImGui::SameLine();
ImGui::Checkbox("optimize size",&zsmExportOptimize); ImGui::Checkbox("optimize size",&zsmExportOptimize);
if (ImGui::Button("Export")) { if (onWindow) {
ImGui::Separator();
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
ImGui::SameLine();
}
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
openFileDialog(GUI_FILE_EXPORT_ZSM); openFileDialog(GUI_FILE_EXPORT_ZSM);
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
} }
void FurnaceGUI::drawExportAmigaVal() { void FurnaceGUI::drawExportAmigaVal(bool onWindow) {
exitDisabledTimer=1; exitDisabledTimer=1;
ImGui::Text( ImGui::Text(
@ -167,7 +188,12 @@ void FurnaceGUI::drawExportAmigaVal() {
ImGui::Text("Directory"); ImGui::Text("Directory");
ImGui::SameLine(); ImGui::SameLine();
ImGui::InputText("##AVDPath",&workingDirROMExport); ImGui::InputText("##AVDPath",&workingDirROMExport);
if (ImGui::Button("Bake Data")) { if (onWindow) {
ImGui::Separator();
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
ImGui::SameLine();
}
if (ImGui::Button("Bake Data",ImVec2(200.0f*dpiScale,0))) {
std::vector<DivROMExportOutput> out=e->buildROM(DIV_ROM_AMIGA_VALIDATION); std::vector<DivROMExportOutput> out=e->buildROM(DIV_ROM_AMIGA_VALIDATION);
if (workingDirROMExport.size()>0) { if (workingDirROMExport.size()>0) {
if (workingDirROMExport[workingDirROMExport.size()-1]!=DIR_SEPARATOR) workingDirROMExport+=DIR_SEPARATOR_STR; if (workingDirROMExport[workingDirROMExport.size()-1]!=DIR_SEPARATOR) workingDirROMExport+=DIR_SEPARATOR_STR;
@ -187,19 +213,24 @@ void FurnaceGUI::drawExportAmigaVal() {
} }
} }
void FurnaceGUI::drawExportText() { void FurnaceGUI::drawExportText(bool onWindow) {
exitDisabledTimer=1; exitDisabledTimer=1;
ImGui::Text( ImGui::Text(
"this option exports the song to a text file.\n" "this option exports the song to a text file.\n"
); );
if (ImGui::Button("Export")) { if (onWindow) {
ImGui::Separator();
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
ImGui::SameLine();
}
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
openFileDialog(GUI_FILE_EXPORT_TEXT); openFileDialog(GUI_FILE_EXPORT_TEXT);
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
} }
void FurnaceGUI::drawExportCommand() { void FurnaceGUI::drawExportCommand(bool onWindow) {
exitDisabledTimer=1; exitDisabledTimer=1;
ImGui::Text( ImGui::Text(
@ -209,120 +240,118 @@ void FurnaceGUI::drawExportCommand() {
"technical/development use only!" "technical/development use only!"
); );
if (ImGui::Button("Export (binary)")) { if (onWindow) {
ImGui::Separator();
if (ImGui::Button("Cancel",ImVec2(133.3f*dpiScale,0))) ImGui::CloseCurrentPopup();
ImGui::SameLine();
}
if (ImGui::Button("Export (binary)",ImVec2(133.3f*dpiScale,0))) {
openFileDialog(GUI_FILE_EXPORT_CMDSTREAM_BINARY); openFileDialog(GUI_FILE_EXPORT_CMDSTREAM_BINARY);
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
if (ImGui::Button("Export (text)")) { ImGui::SameLine();
if (ImGui::Button("Export (text)",ImVec2(133.3f*dpiScale,0))) {
openFileDialog(GUI_FILE_EXPORT_CMDSTREAM); openFileDialog(GUI_FILE_EXPORT_CMDSTREAM);
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
} }
void FurnaceGUI::drawExport() { void FurnaceGUI::drawExport() {
ImVec2 avail=ImGui::GetContentRegionAvail(); if (settings.exportOptionsLayout==1 || curExportType==GUI_EXPORT_NONE) {
avail.y-=ImGui::GetFrameHeightWithSpacing(); if (ImGui::BeginTabBar("ExportTypes")) {
if (ImGui::BeginTabItem("Audio")) {
if (ImGui::BeginChild("sysPickerC",avail,false)) { drawExportAudio(true);
if (settings.exportOptionsLayout==1 || curExportType==GUI_EXPORT_NONE) { ImGui::EndTabItem();
if (ImGui::BeginTabBar("ExportTypes")) {
if (ImGui::BeginTabItem("Audio")) {
drawExportAudio();
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("VGM")) {
drawExportVGM();
ImGui::EndTabItem();
}
int numZSMCompat=0;
for (int i=0; i<e->song.systemLen; i++) {
if ((e->song.system[i]==DIV_SYSTEM_VERA) || (e->song.system[i]==DIV_SYSTEM_YM2151)) numZSMCompat++;
}
if (numZSMCompat>0) {
if (ImGui::BeginTabItem("ZSM")) {
drawExportZSM();
ImGui::EndTabItem();
}
}
int numAmiga=0;
for (int i=0; i<e->song.systemLen; i++) {
if (e->song.system[i]==DIV_SYSTEM_AMIGA) numAmiga++;
}
if (numAmiga && settings.iCannotWait) {
if (ImGui::BeginTabItem("Amiga Validation")) {
drawExportAmigaVal();
ImGui::EndTabItem();
}
}
if (ImGui::BeginTabItem("Text")) {
drawExportText();
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Command Stream")) {
drawExportCommand();
ImGui::EndTabItem();
}
ImGui::EndTabBar();
} }
} else switch (curExportType) { if (ImGui::BeginTabItem("VGM")) {
case GUI_EXPORT_AUDIO: drawExportVGM(true);
drawExportAudio(); ImGui::EndTabItem();
break; }
case GUI_EXPORT_VGM: int numZSMCompat=0;
drawExportVGM(); for (int i=0; i<e->song.systemLen; i++) {
break; if ((e->song.system[i]==DIV_SYSTEM_VERA) || (e->song.system[i]==DIV_SYSTEM_YM2151)) numZSMCompat++;
case GUI_EXPORT_ZSM: }
drawExportZSM(); if (numZSMCompat>0) {
break; if (ImGui::BeginTabItem("ZSM")) {
case GUI_EXPORT_AMIGA_VAL: drawExportZSM(true);
drawExportAmigaVal(); ImGui::EndTabItem();
break;
case GUI_EXPORT_TEXT:
drawExportText();
break;
case GUI_EXPORT_CMD_STREAM:
drawExportCommand();
break;
default:
ImGui::Text("congratulations! you've unlocked a secret panel.");
if (ImGui::Button("Toggle hidden systems")) {
settings.hiddenSystems=!settings.hiddenSystems;
ImGui::CloseCurrentPopup();
} }
if (ImGui::Button("Toggle all instrument types")) { }
settings.displayAllInsTypes=!settings.displayAllInsTypes; int numAmiga=0;
ImGui::CloseCurrentPopup(); for (int i=0; i<e->song.systemLen; i++) {
if (e->song.system[i]==DIV_SYSTEM_AMIGA) numAmiga++;
}
if (numAmiga && settings.iCannotWait) {
if (ImGui::BeginTabItem("Amiga Validation")) {
drawExportAmigaVal(true);
ImGui::EndTabItem();
} }
if (ImGui::Button("Set pitch linearity to Partial")) { }
e->song.linearPitch=1; if (ImGui::BeginTabItem("Text")) {
ImGui::CloseCurrentPopup(); drawExportText(true);
} ImGui::EndTabItem();
if (ImGui::Button("Enable multi-threading settings")) { }
settings.showPool=1; if (ImGui::BeginTabItem("Command Stream")) {
ImGui::CloseCurrentPopup(); drawExportCommand(true);
} ImGui::EndTabItem();
if (ImGui::Button("Set fat to max")) { }
ImGuiStyle& sty=ImGui::GetStyle(); ImGui::EndTabBar();
sty.FramePadding=ImVec2(20.0f*dpiScale,20.0f*dpiScale);
sty.ItemSpacing=ImVec2(10.0f*dpiScale,10.0f*dpiScale);
sty.ItemInnerSpacing=ImVec2(10.0f*dpiScale,10.0f*dpiScale);
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Set muscle and fat to zero")) {
ImGuiStyle& sty=ImGui::GetStyle();
sty.FramePadding=ImVec2(0,0);
sty.ItemSpacing=ImVec2(0,0);
sty.ItemInnerSpacing=ImVec2(0,0);
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Tell tildearrow this must be a mistake")) {
showError("yeah, it's a bug. write a bug report in the GitHub page and tell me how did you get here.");
ImGui::CloseCurrentPopup();
}
break;
} }
} else switch (curExportType) {
case GUI_EXPORT_AUDIO:
drawExportAudio(true);
break;
case GUI_EXPORT_VGM:
drawExportVGM(true);
break;
case GUI_EXPORT_ZSM:
drawExportZSM(true);
break;
case GUI_EXPORT_AMIGA_VAL:
drawExportAmigaVal(true);
break;
case GUI_EXPORT_TEXT:
drawExportText(true);
break;
case GUI_EXPORT_CMD_STREAM:
drawExportCommand(true);
break;
default:
ImGui::Text("congratulations! you've unlocked a secret panel.");
if (ImGui::Button("Toggle hidden systems")) {
settings.hiddenSystems=!settings.hiddenSystems;
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Toggle all instrument types")) {
settings.displayAllInsTypes=!settings.displayAllInsTypes;
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Set pitch linearity to Partial")) {
e->song.linearPitch=1;
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Enable multi-threading settings")) {
settings.showPool=1;
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Set fat to max")) {
ImGuiStyle& sty=ImGui::GetStyle();
sty.FramePadding=ImVec2(20.0f*dpiScale,20.0f*dpiScale);
sty.ItemSpacing=ImVec2(10.0f*dpiScale,10.0f*dpiScale);
sty.ItemInnerSpacing=ImVec2(10.0f*dpiScale,10.0f*dpiScale);
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Set muscle and fat to zero")) {
ImGuiStyle& sty=ImGui::GetStyle();
sty.FramePadding=ImVec2(0,0);
sty.ItemSpacing=ImVec2(0,0);
sty.ItemInnerSpacing=ImVec2(0,0);
ImGui::CloseCurrentPopup();
}
if (ImGui::Button("Tell tildearrow this must be a mistake")) {
showError("yeah, it's a bug. write a bug report in the GitHub page and tell me how did you get here.");
ImGui::CloseCurrentPopup();
}
break;
} }
ImGui::EndChild();
ImGui::Separator();
if (ImGui::Button("Cancel")) ImGui::CloseCurrentPopup();
} }

View file

@ -5420,11 +5420,8 @@ bool FurnaceGUI::loop() {
ImGui::EndPopup(); ImGui::EndPopup();
} }
if (ImGui::BeginPopupModal("Export",NULL,ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoScrollWithMouse|ImGuiWindowFlags_NoScrollbar)) { if (ImGui::BeginPopupModal("Export",NULL,ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoScrollWithMouse|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::SetWindowPos(ImVec2(((canvasW)-ImGui::GetWindowSize().x)*0.5,((canvasH)-ImGui::GetWindowSize().y)*0.5)); ImGui::SetWindowPos(ImVec2(((canvasW)-ImGui::GetWindowSize().x)*0.5,((canvasH)-ImGui::GetWindowSize().y)*0.5));
if (ImGui::GetWindowSize().x<newSongMinSize.x || ImGui::GetWindowSize().y<newSongMinSize.y) {
ImGui::SetWindowSize(newSongMinSize,ImGuiCond_Always);
}
drawExport(); drawExport();
ImGui::EndPopup(); ImGui::EndPopup();
} }

View file

@ -2305,7 +2305,7 @@ class FurnaceGUI {
int pianoOffset, pianoOffsetEdit; int pianoOffset, pianoOffsetEdit;
int pianoView, pianoInputPadMode; int pianoView, pianoInputPadMode;
//effect sorting // effect sorting
bool effectsShow[10]; bool effectsShow[10];
// TX81Z // TX81Z
@ -2349,12 +2349,12 @@ class FurnaceGUI {
int audioExportType; int audioExportType;
FurnaceGUIExportTypes curExportType; FurnaceGUIExportTypes curExportType;
void drawExportAudio(); void drawExportAudio(bool onWindow=false);
void drawExportVGM(); void drawExportVGM(bool onWindow=false);
void drawExportZSM(); void drawExportZSM(bool onWindow=false);
void drawExportAmigaVal(); void drawExportAmigaVal(bool onWindow=false);
void drawExportText(); void drawExportText(bool onWindow=false);
void drawExportCommand(); void drawExportCommand(bool onWindow=false);
void drawSSGEnv(unsigned char type, const ImVec2& size); void drawSSGEnv(unsigned char type, const ImVec2& size);
void drawWaveform(unsigned char type, bool opz, const ImVec2& size); void drawWaveform(unsigned char type, bool opz, const ImVec2& size);