SystemTray::Handle SystemTray::Add(RF_Mem::AutoPointer<TrayIcon>& NewTrayIcon)
{
    auto iconHandle = m_PImpl->m_Backend->AddIcon(*NewTrayIcon.Get());
    m_PImpl->m_Lookup[iconHandle] = NewTrayIcon.Get();
    m_PImpl->m_Icons.PushBack(NewTrayIcon);
    return iconHandle;
}
void Collector::RegisterComponentManager(RF_Mem::AutoPointer<BaseComponentProcessor>& ComponentManager)
{
    // check if one of the components is already known
    for(RF_Type::Size i = 0; i < ComponentManager->ComponentTypes().Count(); ++i)
    {
        if(m_ComponentManagerLookup.ContainsKey(ComponentManager->ComponentTypes()(i)))
        {
            RF_IO::LogDebug("The component %d is already registered!\n", ComponentManager->ComponentTypes()(i));
            return;
        }
    }

    // register all new components
    for(RF_Type::Size i = 0; i < ComponentManager->ComponentTypes().Count(); ++i)
    {
        m_ComponentManagerLookup[ComponentManager->ComponentTypes()(i)] = ComponentManager.Get();
    }    

    ComponentManager->Setup(*m_Allocator, m_Attributes);
    m_ComponentManagers.Resize(m_ComponentManagers.Count()+1);
    m_ComponentManagers(m_ComponentManagers.Count()-1)=ComponentManager;
}