fix ScreenManager stuff not being reloaded on theme change and F2

This commit is contained in:
Glenn Maynard
2004-09-16 22:45:55 +00:00
parent 3b74066091
commit 338ab88e4f
2 changed files with 38 additions and 14 deletions
+17 -1
View File
@@ -341,7 +341,14 @@ void ScreenSystemLayer::Update( float fDeltaTime )
ScreenManager::ScreenManager() ScreenManager::ScreenManager()
{ {
m_SystemLayer = new ScreenSystemLayer; m_SystemLayer = NULL;
/* By the time this is constructed, THEME has already been set up and set to
* the current theme. Call ThemeChanged(), to handle the starting theme
* and set up m_SystemLayer. */
ASSERT( THEME );
ASSERT( !THEME->GetCurThemeName().empty() );
this->ThemeChanged();
m_ScreenBuffered = NULL; m_ScreenBuffered = NULL;
@@ -362,14 +369,23 @@ ScreenManager::~ScreenManager()
delete m_SystemLayer; delete m_SystemLayer;
} }
/* This is called when we start up, and when the theme changes or is reloaded. */
void ScreenManager::ThemeChanged() void ScreenManager::ThemeChanged()
{ {
LOG->Trace( "ScreenManager::ThemeChanged" );
// reload common sounds // reload common sounds
m_soundStart.Load( THEME->GetPathS("Common","start") ); m_soundStart.Load( THEME->GetPathS("Common","start") );
m_soundCoin.Load( THEME->GetPathS("Common","coin") ); m_soundCoin.Load( THEME->GetPathS("Common","coin") );
m_soundInvalid.Load( THEME->GetPathS("Common","invalid") ); m_soundInvalid.Load( THEME->GetPathS("Common","invalid") );
m_soundScreenshot.Load( THEME->GetPathS("Common","screenshot") ); m_soundScreenshot.Load( THEME->GetPathS("Common","screenshot") );
m_soundBack.Load( THEME->GetPathS("Common","back") ); m_soundBack.Load( THEME->GetPathS("Common","back") );
// reload system layer
delete m_SystemLayer;
m_SystemLayer = NULL; // new ScreenSystemLayer may throw
m_SystemLayer = new ScreenSystemLayer;
m_SystemLayer->RefreshCreditsMessages();
} }
void ScreenManager::EmptyDeleteQueue() void ScreenManager::EmptyDeleteQueue()
+21 -13
View File
@@ -75,7 +75,7 @@ CString ClassAndElementToFileName( const CString &sClassName, const CString &sEl
ThemeManager::ThemeManager() ThemeManager::ThemeManager()
{ {
m_sCurThemeName = BASE_THEME_NAME; // Use the base theme for now. It's up to PrefsManager to change this. m_sCurThemeName = ""; // Use the base theme for now. It's up to PrefsManager to change this.
CStringArray arrayThemeNames; CStringArray arrayThemeNames;
GetThemeNames( arrayThemeNames ); GetThemeNames( arrayThemeNames );
@@ -178,14 +178,17 @@ void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, CString sThemeName )
void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage ) void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage )
{ {
if( !DoesThemeExist(sThemeName) ) if( !DoesThemeExist(sThemeName) )
m_sCurThemeName = BASE_THEME_NAME; sThemeName = BASE_THEME_NAME;
else
m_sCurThemeName = sThemeName;
if( !DoesLanguageExist(sLanguage) ) if( !DoesLanguageExist(sLanguage) )
m_sCurLanguage = BASE_LANGUAGE; sLanguage = BASE_LANGUAGE;
else LOG->Trace("ThemeManager::SwitchThemeAndLanguage: \"%s\", \"%s\"",
m_sCurLanguage = sLanguage; sThemeName.c_str(), m_sCurThemeName.c_str() );
if( sThemeName == m_sCurThemeName && sLanguage == m_sCurLanguage )
return;
m_sCurThemeName = sThemeName;
m_sCurLanguage = sLanguage;
// clear theme path cache // clear theme path cache
int i; int i;
@@ -197,10 +200,6 @@ void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage
// load current theme // load current theme
LoadThemeRecursive( g_vThemes, m_sCurThemeName ); LoadThemeRecursive( g_vThemes, m_sCurThemeName );
// reload common sounds
if ( SCREENMAN != NULL )
SCREENMAN->ThemeChanged();
CString sMetric; CString sMetric;
for( i = 0; GetCommandlineArgument( "metric", &sMetric, i ); ++i ) for( i = 0; GetCommandlineArgument( "metric", &sMetric, i ); ++i )
{ {
@@ -217,6 +216,10 @@ void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage
LOG->MapLog("theme", "Theme: %s", sThemeName.c_str()); LOG->MapLog("theme", "Theme: %s", sThemeName.c_str());
LOG->MapLog("language", "Language: %s", sLanguage.c_str()); LOG->MapLog("language", "Language: %s", sLanguage.c_str());
// reload common sounds
if ( SCREENMAN != NULL )
SCREENMAN->ThemeChanged();
} }
CString ThemeManager::GetThemeDirFromName( const CString &sThemeName ) CString ThemeManager::GetThemeDirFromName( const CString &sThemeName )
@@ -484,7 +487,12 @@ bool ThemeManager::HasMetric( CString sClassName, CString sValueName )
void ThemeManager::ReloadMetrics() void ThemeManager::ReloadMetrics()
{ {
SwitchThemeAndLanguage(m_sCurThemeName, m_sCurLanguage); // force a reload of the metrics cache // force a reload of the metrics cache
const CString sThemeName = m_sCurThemeName, sCurLanguage = m_sCurLanguage;
m_sCurThemeName = "";
m_sCurLanguage = "";
SwitchThemeAndLanguage( sThemeName, sCurLanguage );
if( SCREENMAN ) if( SCREENMAN )
SCREENMAN->SystemMessage( "Reloaded metrics" ); SCREENMAN->SystemMessage( "Reloaded metrics" );