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.
103 lines
3.2 KiB
103 lines
3.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//=============================================================================//
|
|
|
|
#include "dme_controls/AttributeSurfacePropertyPickerPanel.h"
|
|
#include "dme_controls/AttributeTextEntry.h"
|
|
#include "tier1/KeyValues.h"
|
|
#include "filesystem.h"
|
|
|
|
|
|
using namespace vgui;
|
|
|
|
|
|
const char *SURFACEPROP_MANIFEST_FILE = "scripts/surfaceproperties_manifest.txt";
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Constructor
|
|
//-----------------------------------------------------------------------------
|
|
CAttributeSurfacePropertyPickerPanel::CAttributeSurfacePropertyPickerPanel( vgui::Panel *parent, const AttributeWidgetInfo_t &info ) :
|
|
BaseClass( parent, info )
|
|
{
|
|
}
|
|
|
|
CAttributeSurfacePropertyPickerPanel::~CAttributeSurfacePropertyPickerPanel()
|
|
{
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Reads the surface properties
|
|
//-----------------------------------------------------------------------------
|
|
void CAttributeSurfacePropertyPickerPanel::AddSurfacePropertiesToList( PickerList_t &list )
|
|
{
|
|
KeyValues *manifest = new KeyValues( SURFACEPROP_MANIFEST_FILE );
|
|
if ( manifest->LoadFromFile( g_pFullFileSystem, SURFACEPROP_MANIFEST_FILE, "GAME" ) )
|
|
{
|
|
for ( KeyValues *sub = manifest->GetFirstSubKey(); sub != NULL; sub = sub->GetNextKey() )
|
|
{
|
|
if ( Q_stricmp( sub->GetName(), "file" ) )
|
|
continue;
|
|
|
|
KeyValues *file = new KeyValues( SURFACEPROP_MANIFEST_FILE );
|
|
if ( file->LoadFromFile( g_pFullFileSystem, sub->GetString(), "GAME" ) )
|
|
{
|
|
for ( KeyValues *pTrav = file; pTrav; pTrav = pTrav->GetNextKey() )
|
|
{
|
|
int i = list.AddToTail();
|
|
list[i].m_pChoiceString = pTrav->GetName();
|
|
list[i].m_pChoiceValue = pTrav->GetName();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Warning( "Unable to load surface properties file '%s'\n", sub->GetString() );
|
|
}
|
|
file->deleteThis();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Warning( "Unable to load manifest file '%s'\n", SURFACEPROP_MANIFEST_FILE );
|
|
}
|
|
|
|
manifest->deleteThis();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Called when it's time to show the picker
|
|
//-----------------------------------------------------------------------------
|
|
void CAttributeSurfacePropertyPickerPanel::ShowPickerDialog()
|
|
{
|
|
CPickerFrame *pSurfacePropPickerDialog = new CPickerFrame( this, "Select Surface Property", "Surface Property", "surfacePropertyName" );
|
|
PickerList_t surfacePropList;
|
|
AddSurfacePropertiesToList( surfacePropList );
|
|
pSurfacePropPickerDialog->AddActionSignalTarget( this );
|
|
pSurfacePropPickerDialog->DoModal( surfacePropList );
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Called by the picker dialog if a asset was selected
|
|
//-----------------------------------------------------------------------------
|
|
void CAttributeSurfacePropertyPickerPanel::OnPicked( KeyValues *pKeyValues )
|
|
{
|
|
// Get the asset name back
|
|
const char *pSurfacePropertyName = pKeyValues->GetString( "choice", NULL );
|
|
if ( !pSurfacePropertyName || !pSurfacePropertyName[ 0 ] )
|
|
return;
|
|
|
|
// Apply to text panel
|
|
m_pData->SetText( pSurfacePropertyName );
|
|
SetDirty(true);
|
|
if ( IsAutoApply() )
|
|
{
|
|
Apply();
|
|
}
|
|
}
|