Beispiel #1
0
bool CContextMenuManager::Execute(unsigned int id, const CFileItemPtr& item)
{
  if (!item)
    return false;

  const ContextItemAddonPtr addon = GetContextItemByID(id);
  if (!addon || !addon->IsVisible(item))
    return false;

  LanguageInvokerPtr invoker(new CContextItemAddonInvoker(&g_pythonParser, item));
  return (CScriptInvocationManager::Get().ExecuteAsync(addon->LibPath(), invoker, addon) != -1);
}
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);
  }
}
Beispiel #3
0
bool CContextMenuManager::Unregister(const ContextItemAddonPtr& cm)
{
  if (!cm)
    return false;

  auto it = std::find_if(m_contextAddons.begin(), m_contextAddons.end(),
      [&](const ValueType& value){ return value.second->ID() == cm->ID(); });

  if (it != m_contextAddons.end())
  {
    m_contextAddons.erase(it);
    return true;
  }
  return false;
}
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;
    }
  }
}