void CContextMenuManager::Register(const ContextItemAddonPtr& cm) { if (!cm) return; CSingleLock lock(m_criticalSection); for (const auto& menuItem : cm->GetItems()) { auto it = std::find(m_addonItems.begin(), m_addonItems.end(), menuItem); if (it == m_addonItems.end()) m_addonItems.push_back(menuItem); } }
bool CContextMenuManager::Unregister(const ContextItemAddonPtr& cm) { if (!cm) return false; const auto menuItems = cm->GetItems(); auto it = std::remove_if(m_items.begin(), m_items.end(), [&](const Item& kv) { if (kv.second.IsGroup()) return false; //keep in case other items use them return std::find(menuItems.begin(), menuItems.end(), kv.second) != menuItems.end(); } ); m_items.erase(it, m_items.end()); return true; }
bool CContextMenuManager::Unregister(const ContextItemAddonPtr& cm) { if (!cm) return false; const auto menuItems = cm->GetItems(); CSingleLock lock(m_criticalSection); auto it = std::remove_if(m_addonItems.begin(), m_addonItems.end(), [&](const CContextMenuItem& item) { if (item.IsGroup()) return false; //keep in case other items use them return std::find(menuItems.begin(), menuItems.end(), item) != menuItems.end(); } ); m_addonItems.erase(it, m_addonItems.end()); return true; }
void CContextMenuManager::Register(const ContextItemAddonPtr& cm) { if (!cm) return; for (const auto& menuItem : cm->GetItems()) { auto existing = std::find_if(m_items.begin(), m_items.end(), [&](const Item& kv){ return kv.second == menuItem; }); if (existing != m_items.end()) { if (!menuItem.GetLabel().empty()) existing->second = menuItem; } else { m_items.push_back(std::make_pair(m_nextButtonId, menuItem)); ++m_nextButtonId; } } }