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.
114 lines
3.8 KiB
114 lines
3.8 KiB
//============ Copyright (c) Valve Corporation, All rights reserved. ============
|
|
|
|
#ifndef DMEUSERSETTINGS_H
|
|
#define DMEUSERSETTINGS_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "datamodel/dmelement.h"
|
|
#include "idmeusersettingschangedlistener.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class CDmeUserSettings : public CDmElement
|
|
{
|
|
DEFINE_ELEMENT( CDmeUserSettings, CDmElement );
|
|
|
|
public:
|
|
static CDmeUserSettings *SharedUserSettings();
|
|
|
|
template< class T> static void InitSettingsValue( const char *pRegistryPath, const T& value);
|
|
template< class T> static void SetSettingsValue( const char *pRegistryPath, const T& value);
|
|
template< class T > static const T& GetSettingsValue( const char *pRegistryPath, const T& defaultValue );
|
|
virtual CDmeUserSettings *GetUserSettingsForRegistryPath( const char *pRegistryPath );
|
|
|
|
virtual void OnAttributeChanged( CDmAttribute *pAttribute );
|
|
|
|
virtual void AddUserSettingsChangedListener( IDmeUserSettingsChangedListener *pListener );
|
|
|
|
protected:
|
|
|
|
|
|
private:
|
|
CDmAttribute *FindAttributeForRegistryPath( const char *pRegistryPath );
|
|
const char *FindRegistryPathForAttribute( CDmAttribute *pAttribute );
|
|
|
|
bool RegistryPathHasValue( const char *pRegistryPath );
|
|
void SetAttributeFromRegistry( CDmAttribute *pAttribute, const char *pRegistryPath );
|
|
void SetRegistryFromAttribute( CDmAttribute *pAttribute, const char *pRegistryPath );
|
|
|
|
void GetAttributeNameFromRegistryPath( const char *pRegistryPath, char *pAttributeName, int nAttributeNameLength );
|
|
void SetAttributeForRegistryPathInDatabase( CDmAttribute *pAttribute, const char *pRegistryPath );
|
|
|
|
void CreateRegistryEntryAndValueKey( const char *pRegistryPath, char *pEntryKey, int nEntryKeyLength, char *pValueKey, int nValueKeyLength );
|
|
bool GetRegistryString(const char *pRegistryPath, char *pStringValue, int nStringValueLen);
|
|
bool SetRegistryString(const char *pRegistryPath, const char *pStringValue);
|
|
|
|
static CUtlVector< IDmeUserSettingsChangedListener * > s_UserSettingsChangedListeners;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
template< class T >
|
|
void CDmeUserSettings::InitSettingsValue( const char *pRegistryPath, const T& value )
|
|
{
|
|
CDmAttribute *pAttribute = SharedUserSettings()->FindAttributeForRegistryPath( pRegistryPath );
|
|
if( pAttribute )
|
|
{
|
|
SharedUserSettings()->SetAttributeFromRegistry( pAttribute, pRegistryPath );
|
|
}
|
|
else
|
|
{
|
|
CDmElement *pUserSettingGroup = SharedUserSettings()->GetUserSettingsForRegistryPath( pRegistryPath );
|
|
char pAttributeName[255];
|
|
SharedUserSettings()->GetAttributeNameFromRegistryPath( pRegistryPath, pAttributeName, 255);
|
|
if( pUserSettingGroup )
|
|
{
|
|
pAttribute = pUserSettingGroup->InitValue( pAttributeName, value );
|
|
if( pAttribute )
|
|
{
|
|
pAttribute->AddFlag( FATTRIB_HAS_CALLBACK );
|
|
SharedUserSettings()->SetAttributeForRegistryPathInDatabase( pAttribute, pRegistryPath );
|
|
if( SharedUserSettings()->RegistryPathHasValue( pRegistryPath ) )
|
|
{
|
|
SharedUserSettings()->SetAttributeFromRegistry( pAttribute, pRegistryPath );
|
|
}
|
|
else
|
|
{
|
|
SharedUserSettings()->SetRegistryFromAttribute( pAttribute, pRegistryPath );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template< class T >
|
|
void CDmeUserSettings::SetSettingsValue( const char *pRegistryPath, const T& value )
|
|
{
|
|
CDmAttribute *pAttribute = SharedUserSettings()->FindAttributeForRegistryPath( pRegistryPath );
|
|
if( pAttribute )
|
|
{
|
|
pAttribute->SetValue( value );
|
|
}
|
|
else
|
|
{
|
|
InitSettingsValue( pRegistryPath, value );
|
|
}
|
|
}
|
|
|
|
template< class T >
|
|
const T& CDmeUserSettings::GetSettingsValue( const char *pRegistryPath, const T& defaultValue )
|
|
{
|
|
CDmAttribute *pAttribute = SharedUserSettings()->FindAttributeForRegistryPath( pRegistryPath );
|
|
if( pAttribute )
|
|
{
|
|
return pAttribute->GetValue< T >( defaultValue );
|
|
}
|
|
else
|
|
{
|
|
return defaultValue;
|
|
}
|
|
}
|
|
|
|
#endif // DMEUSERSETTINGS_H
|