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);
  }
}
示例#2
0
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;
}
示例#4
0
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;
    }
  }
}