From ce9e9c826fbe22eb29dd9787cc102915b5e0efa7 Mon Sep 17 00:00:00 2001 From: probonopd Date: Sun, 20 Apr 2025 19:34:38 +0200 Subject: [PATCH] Confirmation for Overwrite Like for Delete --- src/uimenu.cpp | 81 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 14 deletions(-) diff --git a/src/uimenu.cpp b/src/uimenu.cpp index 6239f65..e955b63 100644 --- a/src/uimenu.cpp +++ b/src/uimenu.cpp @@ -992,23 +992,76 @@ void CUIMenu::EditOPParameter (CUIMenu *pUIMenu, TMenuEvent Event) void CUIMenu::SavePerformance (CUIMenu *pUIMenu, TMenuEvent Event) { - if (Event != MenuEventUpdate) - { - return; + // Add confirmation before overwriting a performance + static bool bOverwriteMode = false; + static bool bConfirmOverwrite = false; + + if (pUIMenu->m_nCurrentParameter == 0) { // Overwrite + if (!bOverwriteMode) { + if (Event == MenuEventUpdate) { + bOverwriteMode = true; + bConfirmOverwrite = false; + // Show confirmation dialog with performance name + std::string perfName = pUIMenu->m_pMiniDexed->GetPerformanceName(pUIMenu->m_pMiniDexed->GetActualPerformanceID()); + pUIMenu->m_pUI->DisplayWrite("", "Overwrite?", perfName.c_str(), false, false); + return; + } + if (Event == MenuEventStepDown) { + bConfirmOverwrite = false; + std::string perfName = pUIMenu->m_pMiniDexed->GetPerformanceName(pUIMenu->m_pMiniDexed->GetActualPerformanceID()); + pUIMenu->m_pUI->DisplayWrite("", "Overwrite?", perfName.c_str(), false, false); + return; + } + if (Event == MenuEventStepUp) { + bConfirmOverwrite = true; + std::string perfName = pUIMenu->m_pMiniDexed->GetPerformanceName(pUIMenu->m_pMiniDexed->GetActualPerformanceID()); + pUIMenu->m_pUI->DisplayWrite("", "Overwrite?", (perfName + " [Yes]").c_str(), false, false); + return; + } + if (Event == MenuEventSelect) { + if (bConfirmOverwrite) { + bOverwriteMode = false; + bConfirmOverwrite = false; + bool bOK = pUIMenu->m_pMiniDexed->SavePerformance(false); + const char *pMenuName = + pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth-1] + [pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth-1]].Name; + pUIMenu->m_pUI->DisplayWrite (pMenuName, + pUIMenu->m_pParentMenu[pUIMenu->m_nCurrentMenuItem].Name, + bOK ? "Completed" : "Error", + false, false); + CTimer::Get ()->StartKernelTimer (MSEC2HZ (1500), TimerHandler, 0, pUIMenu); + return; + } else { + bOverwriteMode = false; + bConfirmOverwrite = false; + Event = MenuEventUpdate; + } + } + return; + } } - bool bOK = pUIMenu->m_pMiniDexed->SavePerformance (pUIMenu->m_nCurrentParameter == 1); - - const char *pMenuName = - pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth-1] - [pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth-1]].Name; - - pUIMenu->m_pUI->DisplayWrite (pMenuName, - pUIMenu->m_pParentMenu[pUIMenu->m_nCurrentMenuItem].Name, - bOK ? "Completed" : "Error", - false, false); + if (pUIMenu->m_nCurrentParameter == 2) { // Save as default, no confirmation needed + if (Event != MenuEventUpdate) + { + bool bOK = pUIMenu->m_pMiniDexed->SavePerformance(true); + const char *pMenuName = + pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth-1] + [pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth-1]].Name; + pUIMenu->m_pUI->DisplayWrite (pMenuName, + pUIMenu->m_pParentMenu[pUIMenu->m_nCurrentMenuItem].Name, + bOK ? "Completed" : "Error", + false, false); + CTimer::Get ()->StartKernelTimer (MSEC2HZ (1500), TimerHandler, 0, pUIMenu); + } + return; + } - CTimer::Get ()->StartKernelTimer (MSEC2HZ (1500), TimerHandler, 0, pUIMenu); + // New (handled by InputTxt) + if (pUIMenu->m_nCurrentParameter == 1) { + return; + } } string CUIMenu::GetGlobalValueString (unsigned nParameter, int nValue)