void CUIExtensionUIHelper::UpdateMenu(CCmdUI* pCmdUI, CMenuIconMgr& mgrIcon, BOOL bEnabled) const { if (pCmdUI->m_pMenu) { ASSERT(m_nStartID == pCmdUI->m_nID); // delete existing tool entries and their icons first int nExt; for (nExt = 0; nExt < m_nSize; nExt++) { pCmdUI->m_pMenu->DeleteMenu(m_nStartID + nExt, MF_BYCOMMAND); mgrIcon.DeleteImage(m_nStartID + nExt); } // if we have any tools to add we do it here int nNumExt = m_mgrUIExt.GetNumUIExtensions(); if (nNumExt) { int nPos = 0; UINT nFlags = MF_BYPOSITION | MF_STRING | (bEnabled ? 0 : MF_GRAYED); for (nExt = 0; nExt < m_nSize && nExt < nNumExt; nExt++) { CString sMenuItem, sText = m_mgrUIExt.GetUIExtensionMenuText(nExt); if (nPos < 9) { sMenuItem.Format(_T("&%d %s"), nPos + 1, sText); } else { sMenuItem = sText; } pCmdUI->m_pMenu->InsertMenu(pCmdUI->m_nIndex++, nFlags, m_nStartID + nExt, sMenuItem); // icon HICON hIcon = m_mgrUIExt.GetUIExtensionIcon(nExt); mgrIcon.AddImage(m_nStartID + nExt, hIcon); nPos++; } // update end menu count pCmdUI->m_nIndex--; // point to last menu added pCmdUI->m_nIndexMax = pCmdUI->m_pMenu->GetMenuItemCount(); pCmdUI->m_bEnableChanged = TRUE; // all the added items are enabled } else // if nothing to add just re-add placeholder { pCmdUI->m_pMenu->InsertMenu(pCmdUI->m_nIndex, MF_BYPOSITION | MF_STRING | MF_GRAYED, m_nStartID, _T("3rd Party Extensions")); } } }
void CToolsHelper::UpdateMenu(CCmdUI* pCmdUI, const CUserToolArray& tools, CMenuIconMgr& iconMgr) { if (pCmdUI->m_pMenu) { CUserToolArray aTools; aTools.Copy(tools); // delete existing tool entries and their icons first for (int nTool = 0; nTool < m_nSize; nTool++) { pCmdUI->m_pMenu->DeleteMenu(pCmdUI->m_nID + nTool, MF_BYCOMMAND); iconMgr.DeleteImage(m_nStartID + nTool); } // if we have any tools to add we do it here if (aTools.GetSize()) { // add valid tools only by first removing invalid items int nTool = aTools.GetSize(); while (nTool--) { if (aTools[nTool].sToolName.IsEmpty() || aTools[nTool].sToolPath.IsEmpty()) aTools.RemoveAt(nTool); } if (aTools.GetSize()) { CSysImageList sil; // for menu icons VERIFY(sil.Initialize()); int nPos = 0; for (nTool = 0; nTool < aTools.GetSize(); nTool++) { const USERTOOL& tool = aTools[nTool]; CString sMenuItem; if (nPos < 9) sMenuItem.Format(_T("&%d %s"), nPos + 1, tool.sToolName); else sMenuItem = tool.sToolName; pCmdUI->m_pMenu->InsertMenu(pCmdUI->m_nIndex++, MF_BYPOSITION | MF_STRING, m_nStartID + nTool, sMenuItem); iconMgr.SetImage(m_nStartID + nTool, GetToolIcon(sil, tool)); nPos++; } // update end menu count pCmdUI->m_nIndex--; // point to last menu added pCmdUI->m_nIndexMax = pCmdUI->m_pMenu->GetMenuItemCount(); pCmdUI->m_bEnableChanged = TRUE; // all the added items are enabled } } // if nothing to add just re-add placeholder if (!aTools.GetSize()) { pCmdUI->m_pMenu->InsertMenu(pCmdUI->m_nIndex, MF_BYPOSITION | MF_STRING | MF_GRAYED, m_nStartID, CEnString(IDS_USERDEFINEDTOOLS)); } } }