GUI: prevent exit from being clicked by accident

issue #361
This commit is contained in:
tildearrow 2023-05-24 01:58:12 -05:00
parent 0c0efaea50
commit ab29b82e78
2 changed files with 20 additions and 1 deletions

View File

@ -3791,6 +3791,7 @@ bool FurnaceGUI::loop() {
} }
} }
if (ImGui::BeginMenu("open recent")) { if (ImGui::BeginMenu("open recent")) {
exitDisabledTimer=1;
for (int i=0; i<(int)recentFile.size(); i++) { for (int i=0; i<(int)recentFile.size(); i++) {
String item=recentFile[i]; String item=recentFile[i];
if (ImGui::MenuItem(item.c_str())) { if (ImGui::MenuItem(item.c_str())) {
@ -3837,6 +3838,7 @@ bool FurnaceGUI::loop() {
} }
ImGui::Separator(); ImGui::Separator();
if (ImGui::BeginMenu("export audio...")) { if (ImGui::BeginMenu("export audio...")) {
exitDisabledTimer=1;
if (ImGui::MenuItem("one file")) { if (ImGui::MenuItem("one file")) {
openFileDialog(GUI_FILE_EXPORT_AUDIO_ONE); openFileDialog(GUI_FILE_EXPORT_AUDIO_ONE);
} }
@ -3855,6 +3857,7 @@ bool FurnaceGUI::loop() {
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("export VGM...")) { if (ImGui::BeginMenu("export VGM...")) {
exitDisabledTimer=1;
ImGui::Text("settings:"); ImGui::Text("settings:");
if (ImGui::BeginCombo("format version",fmt::sprintf("%d.%.2x",vgmExportVersion>>8,vgmExportVersion&0xff).c_str())) { if (ImGui::BeginCombo("format version",fmt::sprintf("%d.%.2x",vgmExportVersion>>8,vgmExportVersion&0xff).c_str())) {
for (int i=0; i<7; i++) { for (int i=0; i<7; i++) {
@ -3943,6 +3946,7 @@ bool FurnaceGUI::loop() {
} }
if (numZSMCompat > 0) { if (numZSMCompat > 0) {
if (ImGui::BeginMenu("export ZSM...")) { if (ImGui::BeginMenu("export ZSM...")) {
exitDisabledTimer=1;
ImGui::Text("Commander X16 Zsound Music File"); ImGui::Text("Commander X16 Zsound Music File");
if (ImGui::InputInt("Tick Rate (Hz)",&zsmExportTickRate,1,2)) { if (ImGui::InputInt("Tick Rate (Hz)",&zsmExportTickRate,1,2)) {
if (zsmExportTickRate<1) zsmExportTickRate=1; if (zsmExportTickRate<1) zsmExportTickRate=1;
@ -3963,6 +3967,7 @@ bool FurnaceGUI::loop() {
} }
if (numAmiga && settings.iCannotWait) { if (numAmiga && settings.iCannotWait) {
if (ImGui::BeginMenu("export Amiga validation data...")) { if (ImGui::BeginMenu("export Amiga validation data...")) {
exitDisabledTimer=1;
ImGui::Text( ImGui::Text(
"this is NOT ROM export! only use for making sure the\n" "this is NOT ROM export! only use for making sure the\n"
"Furnace Amiga emulator is working properly by\n" "Furnace Amiga emulator is working properly by\n"
@ -3993,6 +3998,7 @@ bool FurnaceGUI::loop() {
} }
} }
if (ImGui::BeginMenu("export command stream...")) { if (ImGui::BeginMenu("export command stream...")) {
exitDisabledTimer=1;
ImGui::Text( ImGui::Text(
"this option exports a text or binary file which\n" "this option exports a text or binary file which\n"
"contains a dump of the internal command stream\n" "contains a dump of the internal command stream\n"
@ -4010,6 +4016,7 @@ bool FurnaceGUI::loop() {
} }
ImGui::Separator(); ImGui::Separator();
if (ImGui::BeginMenu("add chip...")) { if (ImGui::BeginMenu("add chip...")) {
exitDisabledTimer=1;
DivSystem picked=systemPicker(); DivSystem picked=systemPicker();
if (picked!=DIV_SYSTEM_NULL) { if (picked!=DIV_SYSTEM_NULL) {
if (!e->addSystem(picked)) { if (!e->addSystem(picked)) {
@ -4026,6 +4033,7 @@ bool FurnaceGUI::loop() {
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("configure chip...")) { if (ImGui::BeginMenu("configure chip...")) {
exitDisabledTimer=1;
for (int i=0; i<e->song.systemLen; i++) { for (int i=0; i<e->song.systemLen; i++) {
if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSP%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSP%d",i+1,getSystemName(e->song.system[i]),i).c_str())) {
drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true); drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true);
@ -4035,6 +4043,7 @@ bool FurnaceGUI::loop() {
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("change chip...")) { if (ImGui::BeginMenu("change chip...")) {
exitDisabledTimer=1;
ImGui::Checkbox("Preserve channel positions",&preserveChanPos); ImGui::Checkbox("Preserve channel positions",&preserveChanPos);
for (int i=0; i<e->song.systemLen; i++) { for (int i=0; i<e->song.systemLen; i++) {
if (ImGui::BeginMenu(fmt::sprintf("%d. %s##_SYSC%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { if (ImGui::BeginMenu(fmt::sprintf("%d. %s##_SYSC%d",i+1,getSystemName(e->song.system[i]),i).c_str())) {
@ -4054,6 +4063,7 @@ bool FurnaceGUI::loop() {
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("remove chip...")) { if (ImGui::BeginMenu("remove chip...")) {
exitDisabledTimer=1;
ImGui::Checkbox("Preserve channel positions",&preserveChanPos); ImGui::Checkbox("Preserve channel positions",&preserveChanPos);
for (int i=0; i<e->song.systemLen; i++) { for (int i=0; i<e->song.systemLen; i++) {
if (ImGui::MenuItem(fmt::sprintf("%d. %s##_SYSR%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { if (ImGui::MenuItem(fmt::sprintf("%d. %s##_SYSR%d",i+1,getSystemName(e->song.system[i]),i).c_str())) {
@ -4070,6 +4080,7 @@ bool FurnaceGUI::loop() {
} }
ImGui::EndMenu(); ImGui::EndMenu();
} }
ImGui::BeginDisabled(exitDisabledTimer);
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem("restore backup",BIND_FOR(GUI_ACTION_OPEN_BACKUP))) { if (ImGui::MenuItem("restore backup",BIND_FOR(GUI_ACTION_OPEN_BACKUP))) {
doAction(GUI_ACTION_OPEN_BACKUP); doAction(GUI_ACTION_OPEN_BACKUP);
@ -4082,7 +4093,10 @@ bool FurnaceGUI::loop() {
quit=true; quit=true;
} }
} }
ImGui::EndDisabled();
ImGui::EndMenu(); ImGui::EndMenu();
} else {
exitDisabledTimer=0;
} }
if (ImGui::BeginMenu("edit")) { if (ImGui::BeginMenu("edit")) {
ImGui::Text("..."); ImGui::Text("...");
@ -5818,6 +5832,10 @@ bool FurnaceGUI::loop() {
WAKE_UP; WAKE_UP;
} }
if (!ImGui::IsMouseDown(ImGuiMouseButton_Left)) {
exitDisabledTimer=0;
}
wheelX=0; wheelX=0;
wheelY=0; wheelY=0;
wantScrollList=false; wantScrollList=false;
@ -6566,6 +6584,7 @@ FurnaceGUI::FurnaceGUI():
oldBeat(-1), oldBeat(-1),
oldBar(-1), oldBar(-1),
curGroove(-1), curGroove(-1),
exitDisabledTimer(0),
soloTimeout(0.0f), soloTimeout(0.0f),
exportFadeOut(5.0), exportFadeOut(5.0),
editControlsOpen(true), editControlsOpen(true),

View File

@ -1607,7 +1607,7 @@ class FurnaceGUI {
int curIns, curWave, curSample, curOctave, curOrder, prevIns, oldRow, oldOrder, oldOrder1, editStep, exportLoops, soloChan,orderEditMode, orderCursor; int curIns, curWave, curSample, curOctave, curOrder, prevIns, oldRow, oldOrder, oldOrder1, editStep, exportLoops, soloChan,orderEditMode, orderCursor;
int loopOrder, loopRow, loopEnd, isClipping, extraChannelButtons, newSongCategory, latchTarget; int loopOrder, loopRow, loopEnd, isClipping, extraChannelButtons, newSongCategory, latchTarget;
int wheelX, wheelY, dragSourceX, dragSourceXFine, dragSourceY, dragDestinationX, dragDestinationXFine, dragDestinationY, oldBeat, oldBar; int wheelX, wheelY, dragSourceX, dragSourceXFine, dragSourceY, dragDestinationX, dragDestinationXFine, dragDestinationY, oldBeat, oldBar;
int curGroove; int curGroove, exitDisabledTimer;
float soloTimeout; float soloTimeout;
double exportFadeOut; double exportFadeOut;