You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.5 KiB
104 lines
2.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Helper for the CHudElement class to add themselves to the list of hud elements |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
#include "vgui/IVGui.h" |
|
#include "vgui_controls/MessageMap.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
using namespace vgui; |
|
|
|
// Start with empty list |
|
CBuildFactoryHelper *CBuildFactoryHelper::m_sHelpers = NULL; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Constructs a panel factory |
|
// Input : pfnCreate - fn Ptr to a function which generates a panel |
|
//----------------------------------------------------------------------------- |
|
CBuildFactoryHelper::CBuildFactoryHelper( char const *className, PANELCREATEFUNC func ) |
|
{ |
|
// Make this fatal |
|
if ( HasFactory( className ) ) |
|
{ |
|
Error( "CBuildFactoryHelper: Factory for '%s' already exists!!!!\n", className ); |
|
} |
|
|
|
//List is empty, or element belongs at front, insert here |
|
m_pNext = m_sHelpers; |
|
m_sHelpers = this; |
|
|
|
Assert( func ); |
|
m_CreateFunc = func; |
|
Assert( className ); |
|
m_pClassName = className; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Returns next object in list |
|
// Output : CBuildFactoryHelper |
|
//----------------------------------------------------------------------------- |
|
CBuildFactoryHelper *CBuildFactoryHelper::GetNext( void ) |
|
{ |
|
return m_pNext; |
|
} |
|
|
|
char const *CBuildFactoryHelper::GetClassName() const |
|
{ |
|
return m_pClassName; |
|
} |
|
|
|
vgui::Panel *CBuildFactoryHelper::CreatePanel() |
|
{ |
|
if ( !m_CreateFunc ) |
|
return NULL; |
|
|
|
return ( *m_CreateFunc )(); |
|
} |
|
|
|
// private static meethod |
|
bool CBuildFactoryHelper::HasFactory( char const *className ) |
|
{ |
|
CBuildFactoryHelper *p = m_sHelpers; |
|
while ( p ) |
|
{ |
|
if ( !Q_stricmp( className, p->GetClassName() ) ) |
|
return true; |
|
|
|
p = p->GetNext(); |
|
} |
|
return false; |
|
} |
|
|
|
// static method |
|
vgui::Panel *CBuildFactoryHelper::InstancePanel( char const *className ) |
|
{ |
|
CBuildFactoryHelper *p = m_sHelpers; |
|
while ( p ) |
|
{ |
|
if ( !Q_stricmp( className, p->GetClassName() ) ) |
|
return p->CreatePanel(); |
|
|
|
p = p->GetNext(); |
|
} |
|
return NULL; |
|
} |
|
|
|
// static method |
|
void CBuildFactoryHelper::GetFactoryNames( CUtlVector< char const * >& list ) |
|
{ |
|
list.RemoveAll(); |
|
|
|
CBuildFactoryHelper *p = m_sHelpers; |
|
while ( p ) |
|
{ |
|
list.AddToTail( p->GetClassName() ); |
|
p = p->GetNext(); |
|
} |
|
} |
|
|
|
|
|
|
|
|