simplify: ThemeManager::LoadThemeRecursive recurses themes, but
there's no reason for it to actually be a recursive function
This commit is contained in:
@@ -169,14 +169,17 @@ bool ThemeManager::DoesLanguageExist( const CString &sLanguage )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, const CString &sThemeName )
|
void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, const CString &sThemeName_ )
|
||||||
{
|
{
|
||||||
static int depth = 0;
|
CString sThemeName(sThemeName_);
|
||||||
static bool loaded_base = false;
|
|
||||||
depth++;
|
|
||||||
ASSERT_M( depth < 20, "Circular theme fallback references detected." );
|
|
||||||
|
|
||||||
Theme t;
|
bool bLoadedBase = false;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
ASSERT_M( theme.size() < 20, "Circular theme fallback references detected." );
|
||||||
|
|
||||||
|
g_vThemes.push_back( Theme() );
|
||||||
|
Theme &t = g_vThemes.back();
|
||||||
t.iniMetrics = new IniFile;
|
t.iniMetrics = new IniFile;
|
||||||
t.sThemeName = sThemeName;
|
t.sThemeName = sThemeName;
|
||||||
t.iniMetrics->ReadFile( GetMetricsIniPath(sThemeName) );
|
t.iniMetrics->ReadFile( GetMetricsIniPath(sThemeName) );
|
||||||
@@ -187,7 +190,7 @@ void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, const CString &sThem
|
|||||||
bool bIsBaseTheme = !sThemeName.CompareNoCase(BASE_THEME_NAME);
|
bool bIsBaseTheme = !sThemeName.CompareNoCase(BASE_THEME_NAME);
|
||||||
t.iniMetrics->GetValue( "Global", "IsBaseTheme", bIsBaseTheme );
|
t.iniMetrics->GetValue( "Global", "IsBaseTheme", bIsBaseTheme );
|
||||||
if( bIsBaseTheme )
|
if( bIsBaseTheme )
|
||||||
loaded_base = true;
|
bLoadedBase = true;
|
||||||
|
|
||||||
/* Read the fallback theme. If no fallback theme is specified, and we havn't
|
/* Read the fallback theme. If no fallback theme is specified, and we havn't
|
||||||
* already loaded it, fall back on BASE_THEME_NAME. That way, default theme
|
* already loaded it, fall back on BASE_THEME_NAME. That way, default theme
|
||||||
@@ -195,18 +198,14 @@ void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, const CString &sThem
|
|||||||
CString sFallback;
|
CString sFallback;
|
||||||
if( !t.iniMetrics->GetValue("Global","FallbackTheme",sFallback) )
|
if( !t.iniMetrics->GetValue("Global","FallbackTheme",sFallback) )
|
||||||
{
|
{
|
||||||
if( sThemeName.CompareNoCase( BASE_THEME_NAME ) && !loaded_base )
|
if( sThemeName.CompareNoCase( BASE_THEME_NAME ) && !bLoadedBase )
|
||||||
sFallback = BASE_THEME_NAME;
|
sFallback = BASE_THEME_NAME;
|
||||||
}
|
}
|
||||||
if( !sFallback.empty() )
|
|
||||||
LoadThemeRecursive( theme, sFallback );
|
|
||||||
|
|
||||||
g_vThemes.push_front( t );
|
if( sFallback.empty() )
|
||||||
|
return;
|
||||||
if( bIsBaseTheme )
|
sThemeName = sFallback;
|
||||||
loaded_base = false;
|
}
|
||||||
|
|
||||||
depth--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CString ThemeManager::GetDefaultLanguage()
|
CString ThemeManager::GetDefaultLanguage()
|
||||||
|
|||||||
Reference in New Issue
Block a user