void CAbstractVstEditor::UpdateMacroMenu() //---------------------------------------- { CString label, macroName, macroText; char paramName[128]; bool greyed; int macroType,nParam,action; CModDoc* pModDoc = m_pVstPlugin->GetModDoc(); if (!pModDoc) { return; } CMenu* pInfoMenu = m_pMenu->GetSubMenu(2); pInfoMenu->DeleteMenu(2, MF_BYPOSITION); if (m_pMacroMenu->m_hMenu) { m_pMacroMenu->DestroyMenu(); } if (!m_pMacroMenu->m_hMenu) { m_pMacroMenu->CreatePopupMenu(); } for (int nMacro=0; nMacro<NUM_MACROS; nMacro++) { action=NULL; greyed=true; macroText = pModDoc->GetSoundFile()->m_MidiCfg.szMidiSFXExt[nMacro]; macroType = pModDoc->GetMacroType(macroText); switch (macroType) { case sfx_unused: macroName = "Unused. Learn Param..."; action=ID_LEARN_MACRO_FROM_PLUGGUI+nMacro; greyed=false; break; case sfx_cutoff: macroName = "Set Filter Cutoff"; break; case sfx_reso: macroName = "Set Filter Resonance"; break; case sfx_mode: macroName = "Set Filter Mode"; break; case sfx_drywet: macroName = "Set plugin dry/wet ratio"; greyed=false; break; case sfx_plug: { nParam = pModDoc->MacroToPlugParam(macroText); m_pVstPlugin->GetParamName(nParam, paramName, sizeof(paramName)); if (paramName[0] == 0) { strcpy(paramName, "N/A for this plug"); } else { greyed=false; } macroName.Format("%d - %s", nParam, paramName); break; } case sfx_custom: default: macroName.Format("Custom: %s", macroText); greyed=false; } label.Format("SF%X: %s", nMacro, macroName); m_pMacroMenu->AppendMenu(MF_STRING|(greyed?MF_GRAYED:0), action, label); } pInfoMenu->InsertMenu(2, MF_BYPOSITION|MF_POPUP, (UINT)m_pMacroMenu->m_hMenu, "&Macros"); }