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()
{
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;
@@ -362,14 +369,23 @@ ScreenManager::~ScreenManager()
delete m_SystemLayer;
}
/* This is called when we start up, and when the theme changes or is reloaded. */
void ScreenManager::ThemeChanged()
{
LOG->Trace( "ScreenManager::ThemeChanged" );
// reload common sounds
m_soundStart.Load( THEME->GetPathS("Common","start") );
m_soundCoin.Load( THEME->GetPathS("Common","coin") );
m_soundInvalid.Load( THEME->GetPathS("Common","invalid") );
m_soundScreenshot.Load( THEME->GetPathS("Common","screenshot") );
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()
+21 -13
View File
@@ -75,7 +75,7 @@ CString ClassAndElementToFileName( const CString &sClassName, const CString &sEl
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;
GetThemeNames( arrayThemeNames );
@@ -178,14 +178,17 @@ void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, CString sThemeName )
void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage )
{
if( !DoesThemeExist(sThemeName) )
m_sCurThemeName = BASE_THEME_NAME;
else
m_sCurThemeName = sThemeName;
sThemeName = BASE_THEME_NAME;
if( !DoesLanguageExist(sLanguage) )
m_sCurLanguage = BASE_LANGUAGE;
else
m_sCurLanguage = sLanguage;
sLanguage = BASE_LANGUAGE;
LOG->Trace("ThemeManager::SwitchThemeAndLanguage: \"%s\", \"%s\"",
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
int i;
@@ -197,10 +200,6 @@ void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage
// load current theme
LoadThemeRecursive( g_vThemes, m_sCurThemeName );
// reload common sounds
if ( SCREENMAN != NULL )
SCREENMAN->ThemeChanged();
CString sMetric;
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("language", "Language: %s", sLanguage.c_str());
// reload common sounds
if ( SCREENMAN != NULL )
SCREENMAN->ThemeChanged();
}
CString ThemeManager::GetThemeDirFromName( const CString &sThemeName )
@@ -484,7 +487,12 @@ bool ThemeManager::HasMetric( CString sClassName, CString sValueName )
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 )
SCREENMAN->SystemMessage( "Reloaded metrics" );