FX: Fix to avoid UI crashes for disabled Tone Generators

pull/795/head
Javier Nonis 1 week ago
parent d04b91a67f
commit 4bc87fd777
  1. 24
      src/minidexed.cpp
  2. 22
      src/uimenu.cpp

@ -724,7 +724,12 @@ void CMiniDexed::setInsertFXType (unsigned nType, unsigned nTG)
std::string CMiniDexed::getInsertFXName (unsigned nTG) std::string CMiniDexed::getInsertFXName (unsigned nTG)
{ {
assert (nTG < CConfig::AllToneGenerators); assert (nTG < CConfig::AllToneGenerators);
if (nTG < m_nToneGenerators)
{
assert (m_InsertFX[nTG]);
return m_InsertFX[nTG]->getName(); return m_InsertFX[nTG]->getName();
}
return "";
} }
void CMiniDexed::setMidiFXType (unsigned nType, unsigned nTG) void CMiniDexed::setMidiFXType (unsigned nType, unsigned nTG)
@ -751,7 +756,12 @@ void CMiniDexed::setMidiFXType (unsigned nType, unsigned nTG)
std::string CMiniDexed::getMidiFXName (unsigned nTG) std::string CMiniDexed::getMidiFXName (unsigned nTG)
{ {
assert (nTG < CConfig::AllToneGenerators); assert (nTG < CConfig::AllToneGenerators);
if (nTG < m_nToneGenerators)
{
assert (m_MidiArp[nTG]);
return m_MidiArp[nTG]->getName(); return m_MidiArp[nTG]->getName();
}
return "";
} }
void CMiniDexed::setSendFX1Type (unsigned nType) void CMiniDexed::setSendFX1Type (unsigned nType)
@ -1336,8 +1346,18 @@ int CMiniDexed::GetTGParameter (TTGParameter Parameter, unsigned nTG)
case TGParameterMIDIChannel: return m_nMIDIChannel[nTG]; case TGParameterMIDIChannel: return m_nMIDIChannel[nTG];
case TGParameterSendFX1: return m_nSendFX1[nTG]; case TGParameterSendFX1: return m_nSendFX1[nTG];
case TGParameterReverbSend: return m_nSendFX2[nTG]; case TGParameterReverbSend: return m_nSendFX2[nTG];
case TGParameterInsertFXType: return m_InsertFX[nTG]->getId(); case TGParameterInsertFXType:
case TGParameterMidiFXType: return m_MidiArp[nTG]->getId(); if (nTG < m_nToneGenerators)
{
return m_InsertFX[nTG]->getId();
}
return 0;
case TGParameterMidiFXType:
if (nTG < m_nToneGenerators)
{
return m_MidiArp[nTG]->getId();
}
return 0;
case TGParameterPitchBendRange: return m_nPitchBendRange[nTG]; case TGParameterPitchBendRange: return m_nPitchBendRange[nTG];
case TGParameterPitchBendStep: return m_nPitchBendStep[nTG]; case TGParameterPitchBendStep: return m_nPitchBendStep[nTG];
case TGParameterPortamentoMode: return m_nPortamentoMode[nTG]; case TGParameterPortamentoMode: return m_nPortamentoMode[nTG];

@ -1030,6 +1030,9 @@ void CUIMenu::MenuHandlerMidiFX (CUIMenu *pUIMenu, TMenuEvent Event)
pUIMenu->m_pCurrentMenu = s_MidiFX; pUIMenu->m_pCurrentMenu = s_MidiFX;
} }
// Identify TG
unsigned nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth-1];
switch (Event) switch (Event)
{ {
case MenuEventUpdate: case MenuEventUpdate:
@ -1037,6 +1040,12 @@ void CUIMenu::MenuHandlerMidiFX (CUIMenu *pUIMenu, TMenuEvent Event)
case MenuEventSelect: // push menu case MenuEventSelect: // push menu
assert (pUIMenu->m_nCurrentMenuDepth < MaxMenuDepth); assert (pUIMenu->m_nCurrentMenuDepth < MaxMenuDepth);
// Check if TG is enabled
if (nTG >= pUIMenu->m_pConfig->GetToneGenerators()) {
break;
}
pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pParentMenu; pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pParentMenu;
pUIMenu->m_MenuStackMenu[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pCurrentMenu; pUIMenu->m_MenuStackMenu[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pCurrentMenu;
pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth] pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth]
@ -1082,8 +1091,6 @@ void CUIMenu::MenuHandlerMidiFX (CUIMenu *pUIMenu, TMenuEvent Event)
if (pUIMenu->m_pCurrentMenu) // if this is another menu? if (pUIMenu->m_pCurrentMenu) // if this is another menu?
{ {
// Identify TG
unsigned nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth-1];
// Create TG label // Create TG label
string TG ("TG"); string TG ("TG");
TG += to_string (nTG+1); TG += to_string (nTG+1);
@ -1117,6 +1124,9 @@ void CUIMenu::MenuHandlerInsertFX (CUIMenu *pUIMenu, TMenuEvent Event)
pUIMenu->m_pCurrentMenu = s_InsertFX; pUIMenu->m_pCurrentMenu = s_InsertFX;
} }
// Identify TG
unsigned nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth-1];
switch (Event) switch (Event)
{ {
case MenuEventUpdate: case MenuEventUpdate:
@ -1124,6 +1134,12 @@ void CUIMenu::MenuHandlerInsertFX (CUIMenu *pUIMenu, TMenuEvent Event)
case MenuEventSelect: // push menu case MenuEventSelect: // push menu
assert (pUIMenu->m_nCurrentMenuDepth < MaxMenuDepth); assert (pUIMenu->m_nCurrentMenuDepth < MaxMenuDepth);
// Check if TG is enabled
if (nTG >= pUIMenu->m_pConfig->GetToneGenerators()) {
break;
}
pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pParentMenu; pUIMenu->m_MenuStackParent[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pParentMenu;
pUIMenu->m_MenuStackMenu[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pCurrentMenu; pUIMenu->m_MenuStackMenu[pUIMenu->m_nCurrentMenuDepth] = pUIMenu->m_pCurrentMenu;
pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth] pUIMenu->m_nMenuStackItem[pUIMenu->m_nCurrentMenuDepth]
@ -1169,8 +1185,6 @@ void CUIMenu::MenuHandlerInsertFX (CUIMenu *pUIMenu, TMenuEvent Event)
if (pUIMenu->m_pCurrentMenu) // if this is another menu? if (pUIMenu->m_pCurrentMenu) // if this is another menu?
{ {
// Identify TG
unsigned nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth-1];
// Create TG label // Create TG label
string TG ("TG"); string TG ("TG");
TG += to_string (nTG+1); TG += to_string (nTG+1);

Loading…
Cancel
Save