PrefsMan and Preference depend on each other. PrefsMan is big, and

depends on some higher level code.  Make Preference stand-alone, so
code that only has its own preferences can be used without PrefsMan.
This commit is contained in:
Glenn Maynard
2005-12-31 01:26:29 +00:00
parent aac313fdd3
commit 76e55c2f14
4 changed files with 44 additions and 40 deletions
+34 -3
View File
@@ -1,21 +1,52 @@
#include "global.h"
#include "Preference.h"
#include "PrefsManager.h"
#include "IniFile.h"
#include "RageLog.h"
#include "LuaFunctions.h"
#include "LuaManager.h"
#include "MessageManager.h"
#include "SubscriptionManager.h"
static SubscriptionHandler<IPreference> m_Subscribers;
IPreference::IPreference( const CString& sName ):
m_sName( sName )
{
PrefsManager::Subscribe( this );
m_Subscribers.Subscribe( this );
}
IPreference::~IPreference()
{
PrefsManager::Unsubscribe( this );
m_Subscribers.Unsubscribe( this );
}
IPreference *IPreference::GetPreferenceByName( const CString &sName )
{
FOREACHS( IPreference*, *m_Subscribers.m_pSubscribers, p )
{
if( !(*p)->GetName().CompareNoCase( sName ) )
return *p;
}
return NULL;
}
void IPreference::LoadAllDefaults()
{
FOREACHS_CONST( IPreference*, *m_Subscribers.m_pSubscribers, p )
(*p)->LoadDefault();
}
void IPreference::ReadAllPrefsFromIni( const IniFile &ini, const CString &sSection )
{
FOREACHS_CONST( IPreference*, *m_Subscribers.m_pSubscribers, p )
(*p)->ReadFrom( ini, sSection );
}
void IPreference::SavePrefsToIni( IniFile &ini )
{
FOREACHS_CONST( IPreference*, *m_Subscribers.m_pSubscribers, p )
(*p)->WriteTo( ini );
}
void IPreference::PushValue( lua_State *L ) const
+5
View File
@@ -26,6 +26,11 @@ public:
const CString &GetName() const { return m_sName; }
static IPreference *GetPreferenceByName( const CString &sName );
static void LoadAllDefaults();
static void ReadAllPrefsFromIni( const IniFile &ini, const CString &sSection );
static void SavePrefsToIni( IniFile &ini );
protected:
CString m_sName;
};
+5 -30
View File
@@ -49,32 +49,10 @@ static const CString ScoreEventNames[] = {
XToString( ScoreEvent, NUM_ScoreEvent );
//
// For self-registering prefs
//
#include "SubscriptionManager.h"
template<>
set<IPreference*>* SubscriptionManager<IPreference>::s_pSubscribers = NULL;
void PrefsManager::Subscribe( IPreference *p )
{
SubscriptionManager<IPreference>::Subscribe( p );
}
void PrefsManager::Unsubscribe( IPreference *p )
{
SubscriptionManager<IPreference>::Unsubscribe( p );
}
// XXX deprecated
IPreference *PrefsManager::GetPreferenceByName( const CString &sName )
{
FOREACHS( IPreference*, *SubscriptionManager<IPreference>::s_pSubscribers, p )
{
if( !(*p)->GetName().CompareNoCase( sName ) )
return *p;
}
return NULL;
return IPreference::GetPreferenceByName( sName );
}
bool g_bAutoRestart = false;
@@ -364,8 +342,7 @@ PrefsManager::PrefsManager() :
void PrefsManager::Init()
{
FOREACHS_CONST( IPreference*, *SubscriptionManager<IPreference>::s_pSubscribers, p )
(*p)->LoadDefault();
IPreference::LoadAllDefaults();
m_mapGameNameToGamePrefs.clear();
}
@@ -466,8 +443,7 @@ void PrefsManager::ReadPrefsFromIni( const IniFile &ini, const CString &sSection
// }
// pPref->FromString( sVal );
FOREACHS_CONST( IPreference*, *SubscriptionManager<IPreference>::s_pSubscribers, p )
(*p)->ReadFrom( ini, sSection );
IPreference::ReadAllPrefsFromIni( ini, sSection );
// validate
m_iSongsPerPlay.Set( clamp(m_iSongsPerPlay.Get(),0,MAX_SONGS_PER_PLAY) );
@@ -506,8 +482,7 @@ void PrefsManager::SavePrefsToIni( IniFile &ini )
if( !m_sCurrentGame.Get().empty() )
StoreGamePrefs();
FOREACHS_CONST( IPreference*, *SubscriptionManager<IPreference>::s_pSubscribers, p )
(*p)->WriteTo( ini );
IPreference::SavePrefsToIni( ini );
FOREACHM_CONST( CString, GamePrefs, m_mapGameNameToGamePrefs, iter )
{
-7
View File
@@ -278,13 +278,6 @@ public:
bool MessageIsIgnored( const CString &ID );
void IgnoreMessage( const CString &ID );
//
// For self-registering prefs
//
static void Subscribe( IPreference *p );
static void Unsubscribe( IPreference *p );
// Lua
void PushSelf( lua_State *L );