From 76e55c2f14f8d459eeead6949b5d2596c194efdc Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 31 Dec 2005 01:26:29 +0000 Subject: [PATCH] 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. --- stepmania/src/Preference.cpp | 37 +++++++++++++++++++++++++++++++--- stepmania/src/Preference.h | 5 +++++ stepmania/src/PrefsManager.cpp | 35 +++++--------------------------- stepmania/src/PrefsManager.h | 7 ------- 4 files changed, 44 insertions(+), 40 deletions(-) diff --git a/stepmania/src/Preference.cpp b/stepmania/src/Preference.cpp index 3568529409..2e360a3cd7 100644 --- a/stepmania/src/Preference.cpp +++ b/stepmania/src/Preference.cpp @@ -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 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 diff --git a/stepmania/src/Preference.h b/stepmania/src/Preference.h index cc1da5567c..3c42a7d309 100644 --- a/stepmania/src/Preference.h +++ b/stepmania/src/Preference.h @@ -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; }; diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index c545220457..0151b9661f 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -49,32 +49,10 @@ static const CString ScoreEventNames[] = { XToString( ScoreEvent, NUM_ScoreEvent ); -// -// For self-registering prefs -// -#include "SubscriptionManager.h" -template<> -set* SubscriptionManager::s_pSubscribers = NULL; - -void PrefsManager::Subscribe( IPreference *p ) -{ - SubscriptionManager::Subscribe( p ); -} - -void PrefsManager::Unsubscribe( IPreference *p ) -{ - SubscriptionManager::Unsubscribe( p ); -} - +// XXX deprecated IPreference *PrefsManager::GetPreferenceByName( const CString &sName ) { - FOREACHS( IPreference*, *SubscriptionManager::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::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::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::s_pSubscribers, p ) - (*p)->WriteTo( ini ); + IPreference::SavePrefsToIni( ini ); FOREACHM_CONST( CString, GamePrefs, m_mapGameNameToGamePrefs, iter ) { diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index c093142302..3098fac338 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -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 );