From 044859f6d15c82f0836504861dc48593215e854c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 28 Aug 2023 17:00:39 -0500 Subject: [PATCH] GUI: add option to choose between chip menus and chip manager in File menu --- src/gui/gui.cpp | 116 +++++++++++++++++++++++-------------------- src/gui/gui.h | 2 + src/gui/settings.cpp | 8 +++ 3 files changed, 71 insertions(+), 55 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 07be9fefb..ec168f035 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4169,70 +4169,76 @@ bool FurnaceGUI::loop() { ImGui::EndMenu(); } ImGui::Separator(); - if (ImGui::BeginMenu("add chip...")) { - exitDisabledTimer=1; - DivSystem picked=systemPicker(); - if (picked!=DIV_SYSTEM_NULL) { - if (!e->addSystem(picked)) { - showError("cannot add chip! ("+e->getLastError()+")"); - } else { - MARK_MODIFIED; - } - ImGui::CloseCurrentPopup(); - if (e->song.autoSystem) { - autoDetectSystem(); - } - updateWindowTitle(); + if (!settings.classicChipOptions) { + if (ImGui::MenuItem("manage chips")) { + nextWindow=GUI_WINDOW_SYS_MANAGER; } - ImGui::EndMenu(); - } - if (ImGui::BeginMenu("configure chip...")) { - exitDisabledTimer=1; - for (int i=0; isong.systemLen; i++) { - 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,true); - ImGui::TreePop(); - } - } - ImGui::EndMenu(); - } - if (ImGui::BeginMenu("change chip...")) { - exitDisabledTimer=1; - ImGui::Checkbox("Preserve channel positions",&preserveChanPos); - for (int i=0; isong.systemLen; i++) { - if (ImGui::BeginMenu(fmt::sprintf("%d. %s##_SYSC%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { - DivSystem picked=systemPicker(); - if (picked!=DIV_SYSTEM_NULL) { - e->changeSystem(i,picked,preserveChanPos); - MARK_MODIFIED; - if (e->song.autoSystem) { - autoDetectSystem(); - } - updateWindowTitle(); - ImGui::CloseCurrentPopup(); - } - ImGui::EndMenu(); - } - } - ImGui::EndMenu(); - } - if (ImGui::BeginMenu("remove chip...")) { - exitDisabledTimer=1; - ImGui::Checkbox("Preserve channel positions",&preserveChanPos); - for (int i=0; isong.systemLen; i++) { - if (ImGui::MenuItem(fmt::sprintf("%d. %s##_SYSR%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { - if (!e->removeSystem(i,preserveChanPos)) { - showError("cannot remove chip! ("+e->getLastError()+")"); + } else { + if (ImGui::BeginMenu("add chip...")) { + exitDisabledTimer=1; + DivSystem picked=systemPicker(); + if (picked!=DIV_SYSTEM_NULL) { + if (!e->addSystem(picked)) { + showError("cannot add chip! ("+e->getLastError()+")"); } else { MARK_MODIFIED; } + ImGui::CloseCurrentPopup(); if (e->song.autoSystem) { autoDetectSystem(); - updateWindowTitle(); + } + updateWindowTitle(); + } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("configure chip...")) { + exitDisabledTimer=1; + for (int i=0; isong.systemLen; i++) { + 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,true); + ImGui::TreePop(); } } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("change chip...")) { + exitDisabledTimer=1; + ImGui::Checkbox("Preserve channel positions",&preserveChanPos); + for (int i=0; isong.systemLen; i++) { + if (ImGui::BeginMenu(fmt::sprintf("%d. %s##_SYSC%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { + DivSystem picked=systemPicker(); + if (picked!=DIV_SYSTEM_NULL) { + e->changeSystem(i,picked,preserveChanPos); + MARK_MODIFIED; + if (e->song.autoSystem) { + autoDetectSystem(); + } + updateWindowTitle(); + ImGui::CloseCurrentPopup(); + } + ImGui::EndMenu(); + } + } + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("remove chip...")) { + exitDisabledTimer=1; + ImGui::Checkbox("Preserve channel positions",&preserveChanPos); + for (int i=0; isong.systemLen; i++) { + if (ImGui::MenuItem(fmt::sprintf("%d. %s##_SYSR%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { + if (!e->removeSystem(i,preserveChanPos)) { + showError("cannot remove chip! ("+e->getLastError()+")"); + } else { + MARK_MODIFIED; + } + if (e->song.autoSystem) { + autoDetectSystem(); + updateWindowTitle(); + } + } + } + ImGui::EndMenu(); } - ImGui::EndMenu(); } ImGui::BeginDisabled(exitDisabledTimer); ImGui::Separator(); diff --git a/src/gui/gui.h b/src/gui/gui.h index 6b22a2d96..ced96f825 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1569,6 +1569,7 @@ class FurnaceGUI { int capitalMenuBar; int centerPopup; int insIconsStyle; + int classicChipOptions; unsigned int maxUndoSteps; String mainFontPath; String headFontPath; @@ -1742,6 +1743,7 @@ class FurnaceGUI { capitalMenuBar(0), centerPopup(1), insIconsStyle(1), + classicChipOptions(0), maxUndoSteps(100), mainFontPath(""), headFontPath(""), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 7e08be4b5..40fef8210 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -2199,6 +2199,11 @@ void FurnaceGUI::drawSettings() { settings.capitalMenuBar=capitalMenuBarB; } + bool classicChipOptionsB=settings.classicChipOptions; + if (ImGui::Checkbox("Display add/configure/change/remove chip menus in File menu",&classicChipOptionsB)) { + settings.classicChipOptions=classicChipOptionsB; + } + // SUBSECTION ORDERS CONFIG_SUBSECTION("Orders"); // sorry. temporarily disabled until ImGui has a way to add separators in tables arbitrarily. @@ -3191,6 +3196,7 @@ void FurnaceGUI::syncSettings() { settings.capitalMenuBar=e->getConfInt("capitalMenuBar",0); settings.centerPopup=e->getConfInt("centerPopup",1); settings.insIconsStyle=e->getConfInt("insIconsStyle",1); + settings.classicChipOptions=e->getConfInt("classicChipOptions",0); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.headFontSize,2,96); @@ -3337,6 +3343,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.capitalMenuBar,0,1); clampSetting(settings.centerPopup,0,1); clampSetting(settings.insIconsStyle,0,2); + clampSetting(settings.classicChipOptions,0,1); if (settings.exportLoops<0.0) settings.exportLoops=0.0; if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0; @@ -3590,6 +3597,7 @@ void FurnaceGUI::commitSettings() { e->setConf("capitalMenuBar",settings.capitalMenuBar); e->setConf("centerPopup",settings.centerPopup); e->setConf("insIconsStyle",settings.insIconsStyle); + e->setConf("classicChipOptions",settings.classicChipOptions); // colors for (int i=0; i