Load performances after 500ms

performance-menu
probonopd 2 months ago
parent 7293c886dc
commit 5ea35d04cb
  1. 78
      src/uimenu.cpp
  2. 3
      src/uimenu.h

@ -353,7 +353,9 @@ CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed, CConfig *pConfig)
m_nCurrentMenuItem (0), m_nCurrentMenuItem (0),
m_nCurrentSelection (0), m_nCurrentSelection (0),
m_nCurrentParameter (0), m_nCurrentParameter (0),
m_nCurrentMenuDepth (0) m_nCurrentMenuDepth (0),
m_hPerformanceLoadTimer (0),
m_nPendingPerformanceID (0)
{ {
assert (m_pConfig); assert (m_pConfig);
m_nToneGenerators = m_pConfig->GetToneGenerators(); m_nToneGenerators = m_pConfig->GetToneGenerators();
@ -1536,7 +1538,15 @@ void CUIMenu::TimerHandler (TKernelTimerHandle hTimer, void *pParam, void *pCont
CUIMenu *pThis = static_cast<CUIMenu *> (pContext); CUIMenu *pThis = static_cast<CUIMenu *> (pContext);
assert (pThis); assert (pThis);
if (pThis->m_hPerformanceLoadTimer == hTimer)
{
pThis->m_pMiniDexed->SetNewPerformance(pThis->m_nPendingPerformanceID);
pThis->m_hPerformanceLoadTimer = 0;
}
else
{
pThis->EventHandler (MenuEventBack); pThis->EventHandler (MenuEventBack);
}
} }
void CUIMenu::TimerHandlerNoBack (TKernelTimerHandle hTimer, void *pParam, void *pContext) void CUIMenu::TimerHandlerNoBack (TKernelTimerHandle hTimer, void *pParam, void *pContext)
@ -1558,7 +1568,7 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
if (Event == MenuEventUpdate) if (Event == MenuEventUpdate)
{ {
pUIMenu->m_bPerformanceDeleteMode=false; pUIMenu->m_bPerformanceDeleteMode = false;
} }
if (pUIMenu->m_bSplashShow) if (pUIMenu->m_bSplashShow)
@ -1566,7 +1576,7 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
return; return;
} }
if(!pUIMenu->m_bPerformanceDeleteMode) if (!pUIMenu->m_bPerformanceDeleteMode)
{ {
switch (Event) switch (Event)
{ {
@ -1578,7 +1588,6 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
{ {
if (nValue == 0) if (nValue == 0)
{ {
// Wrap around
nValue = nLastPerformance; nValue = nLastPerformance;
} }
else if (nValue > 0) else if (nValue > 0)
@ -1586,8 +1595,12 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
--nValue; --nValue;
} }
} while ((pUIMenu->m_pMiniDexed->IsValidPerformance(nValue) != true) && (nValue != nStart)); } while ((pUIMenu->m_pMiniDexed->IsValidPerformance(nValue) != true) && (nValue != nStart));
pUIMenu->m_nSelectedPerformanceID = nValue; pUIMenu->m_nPendingPerformanceID = nValue;
pUIMenu->m_pMiniDexed->SetNewPerformance(nValue); // Always load on scroll if (pUIMenu->m_hPerformanceLoadTimer)
{
CTimer::Get()->CancelKernelTimer(pUIMenu->m_hPerformanceLoadTimer);
}
pUIMenu->m_hPerformanceLoadTimer = CTimer::Get()->StartKernelTimer(MSEC2HZ(500), TimerHandler, 0, pUIMenu);
break; break;
case MenuEventStepUp: case MenuEventStepUp:
@ -1595,7 +1608,6 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
{ {
if (nValue == nLastPerformance) if (nValue == nLastPerformance)
{ {
// Wrap around
nValue = 0; nValue = 0;
} }
else if (nValue < nLastPerformance) else if (nValue < nLastPerformance)
@ -1603,24 +1615,25 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
++nValue; ++nValue;
} }
} while ((pUIMenu->m_pMiniDexed->IsValidPerformance(nValue) != true) && (nValue != nStart)); } while ((pUIMenu->m_pMiniDexed->IsValidPerformance(nValue) != true) && (nValue != nStart));
pUIMenu->m_nSelectedPerformanceID = nValue; pUIMenu->m_nPendingPerformanceID = nValue;
pUIMenu->m_pMiniDexed->SetNewPerformance(nValue); // Always load on scroll if (pUIMenu->m_hPerformanceLoadTimer)
{
CTimer::Get()->CancelKernelTimer(pUIMenu->m_hPerformanceLoadTimer);
}
pUIMenu->m_hPerformanceLoadTimer = CTimer::Get()->StartKernelTimer(MSEC2HZ(500), TimerHandler, 0, pUIMenu);
break; break;
case MenuEventSelect: case MenuEventSelect:
switch (pUIMenu->m_nCurrentParameter) if (pUIMenu->m_nCurrentParameter == 1)
{ {
case 1:
if (pUIMenu->m_pMiniDexed->IsValidPerformance(pUIMenu->m_nSelectedPerformanceID)) if (pUIMenu->m_pMiniDexed->IsValidPerformance(pUIMenu->m_nSelectedPerformanceID))
{ {
pUIMenu->m_bPerformanceDeleteMode=true; pUIMenu->m_bPerformanceDeleteMode = true;
pUIMenu->m_bConfirmDeletePerformance=false; pUIMenu->m_bConfirmDeletePerformance = false;
} }
break;
default:
break;
} }
break; break;
default: default:
return; return;
} }
@ -1633,22 +1646,22 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
break; break;
case MenuEventStepDown: case MenuEventStepDown:
pUIMenu->m_bConfirmDeletePerformance=false; pUIMenu->m_bConfirmDeletePerformance = false;
break; break;
case MenuEventStepUp: case MenuEventStepUp:
pUIMenu->m_bConfirmDeletePerformance=true; pUIMenu->m_bConfirmDeletePerformance = true;
break; break;
case MenuEventSelect: case MenuEventSelect:
pUIMenu->m_bPerformanceDeleteMode=false; pUIMenu->m_bPerformanceDeleteMode = false;
if (pUIMenu->m_bConfirmDeletePerformance) if (pUIMenu->m_bConfirmDeletePerformance)
{ {
pUIMenu->m_nSelectedPerformanceID = 0; pUIMenu->m_nSelectedPerformanceID = 0;
pUIMenu->m_bConfirmDeletePerformance=false; pUIMenu->m_bConfirmDeletePerformance = false;
pUIMenu->m_pUI->DisplayWrite ("", "Delete", pUIMenu->m_pMiniDexed->DeletePerformance(nValue) ? "Completed" : "Error", false, false); pUIMenu->m_pUI->DisplayWrite("", "Delete", pUIMenu->m_pMiniDexed->DeletePerformance(nValue) ? "Completed" : "Error", false, false);
pUIMenu->m_bSplashShow=true; pUIMenu->m_bSplashShow = true;
CTimer::Get ()->StartKernelTimer (MSEC2HZ (1500), TimerHandlerNoBack, 0, pUIMenu); CTimer::Get()->StartKernelTimer(MSEC2HZ(1500), TimerHandlerNoBack, 0, pUIMenu);
return; return;
} }
else else
@ -1661,26 +1674,26 @@ void CUIMenu::PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event)
} }
} }
if(!pUIMenu->m_bPerformanceDeleteMode) if (!pUIMenu->m_bPerformanceDeleteMode)
{ {
Value = pUIMenu->m_pMiniDexed->GetPerformanceName(nValue); Value = pUIMenu->m_pMiniDexed->GetPerformanceName(nValue);
unsigned nBankNum = pUIMenu->m_pMiniDexed->GetPerformanceBank(); unsigned nBankNum = pUIMenu->m_pMiniDexed->GetPerformanceBank();
std::string nPSelected = "000"; std::string nPSelected = "000";
nPSelected += std::to_string(nBankNum+1); // Convert to user-facing bank number rather than index nPSelected += std::to_string(nBankNum + 1);
nPSelected = nPSelected.substr(nPSelected.length()-3,3); nPSelected = nPSelected.substr(nPSelected.length() - 3, 3);
std::string nPPerf = "000"; std::string nPPerf = "000";
nPPerf += std::to_string(nValue+1); // Convert to user-facing performance number rather than index nPPerf += std::to_string(nValue + 1);
nPPerf = nPPerf.substr(nPPerf.length()-3,3); nPPerf = nPPerf.substr(nPPerf.length() - 3, 3);
nPSelected += ":"+nPPerf; nPSelected += ":" + nPPerf;
pUIMenu->m_pUI->DisplayWrite (pUIMenu->m_pParentMenu[pUIMenu->m_nCurrentMenuItem].Name, nPSelected.c_str(), pUIMenu->m_pUI->DisplayWrite(pUIMenu->m_pParentMenu[pUIMenu->m_nCurrentMenuItem].Name, nPSelected.c_str(),
Value.c_str (), true, true); Value.c_str(), true, true);
} }
else else
{ {
pUIMenu->m_pUI->DisplayWrite ("", "Delete?", pUIMenu->m_bConfirmDeletePerformance ? "Yes" : "No", false, false); pUIMenu->m_pUI->DisplayWrite("", "Delete?", pUIMenu->m_bConfirmDeletePerformance ? "Yes" : "No", false, false);
} }
} }
@ -1986,3 +1999,4 @@ void CUIMenu::EditTGParameterModulation (CUIMenu *pUIMenu, TMenuEvent Event)
nValue > rParam.Minimum, nValue < rParam.Maximum); nValue > rParam.Minimum, nValue < rParam.Maximum);
} }
```

@ -180,6 +180,9 @@ private:
unsigned m_nSelectedPerformanceBankID =0; unsigned m_nSelectedPerformanceBankID =0;
bool m_bSplashShow=false; bool m_bSplashShow=false;
unsigned m_nPendingPerformanceID = 0;
TKernelTimerHandle m_hPerformanceLoadTimer = 0;
}; };
#endif #endif

Loading…
Cancel
Save