add resursive theme element searching

This commit is contained in:
Chris Danford
2004-02-03 04:41:43 +00:00
parent bef6d68d58
commit 79b9d60d9b
2 changed files with 25 additions and 34 deletions
+24 -34
View File
@@ -203,6 +203,25 @@ CString ThemeManager::GetThemeDirFromName( const CString &sThemeName )
return THEMES_DIR + sThemeName + "/"; return THEMES_DIR + sThemeName + "/";
} }
CString ThemeManager::GetPathToAndFallback( CString sThemeName, ElementCategory category, CString sClassName, CString sElement )
{
// search with requested name
CString sRet = GetPathToRaw( sThemeName, category, sClassName, sElement );
if( !sRet.empty() )
return sRet;
// search fallback name (if any)
CString sFallback;
if( m_pIniMetrics->GetValue(sClassName,"Fallback",sFallback) )
{
sRet = GetPathToAndFallback( m_sCurThemeName, category, sFallback, sElement );
if( !sRet.empty() )
return sRet;
}
return "";
}
CString ThemeManager::GetPathToRaw( CString sThemeName, ElementCategory category, CString sClassName, CString sElement ) CString ThemeManager::GetPathToRaw( CString sThemeName, ElementCategory category, CString sClassName, CString sElement )
{ {
try_element_again: try_element_again:
@@ -361,47 +380,22 @@ CString ThemeManager::GetPathTo( ElementCategory category, CString sClassName, C
try_element_again: try_element_again:
CString sFallback;
sFallback = "";
m_pIniMetrics->GetValue(sClassName,"Fallback",sFallback);
// search the requested current theme and requested class // search the current theme
CString ret = GetPathToRaw( m_sCurThemeName, category, sClassName, sElement); CString ret = GetPathToAndFallback( m_sCurThemeName, category, sClassName, sElement);
if( !ret.empty() ) // we found something if( !ret.empty() ) // we found something
{ {
Cache[sFileName] = ret; Cache[sFileName] = ret;
return ret; return ret;
} }
// search the requested current theme and fallback class // search the base theme
if( !sFallback.empty() ) ret = GetPathToAndFallback( BASE_THEME_NAME, category, sClassName, sElement);
{
CString ret = GetPathToRaw( m_sCurThemeName, category, sFallback, sElement);
if( !ret.empty() ) // we found something if( !ret.empty() ) // we found something
{ {
Cache[sFileName] = ret; Cache[sFileName] = ret;
return ret; return ret;
} }
}
// search the base theme and requested class
ret = GetPathToRaw( BASE_THEME_NAME, category, sClassName, sElement);
if( !ret.empty() ) // we found something
{
Cache[sFileName] = ret;
return ret;
}
// search the base theme and fallback class
if( !sFallback.empty() )
{
ret = GetPathToRaw( BASE_THEME_NAME, category, sFallback, sElement);
if( !ret.empty() ) // we found something
{
Cache[sFileName] = ret;
return ret;
}
}
if( bOptional ) if( bOptional )
{ {
@@ -412,11 +406,7 @@ try_element_again:
CString sCategory = ELEMENT_CATEGORY_STRING[category]; CString sCategory = ELEMENT_CATEGORY_STRING[category];
/* We can't fall back on _missing in Other: the file types are unknown. */ /* We can't fall back on _missing in Other: the file types are unknown. */
CString sMessage = "The theme element \"" + sCategory + "/" + sFileName +"\""; CString sMessage = "The theme element \"" + sCategory + "/" + sFileName +"\" is missing.";
if( !sFallback.empty() )
sMessage += " and its fallback \"" + sCategory + "/" + ClassAndElementToFileName(sFallback,sElement) + "\" are missing.";
else
sMessage += " is missing.";
ArchHooks::MessageBoxResult res; ArchHooks::MessageBoxResult res;
if( category != Other ) if( category != Other )
res = HOOKS->MessageBoxAbortRetryIgnore(sMessage, "MissingThemeElement"); res = HOOKS->MessageBoxAbortRetryIgnore(sMessage, "MissingThemeElement");
+1
View File
@@ -63,6 +63,7 @@ public:
RageColor GetMetricC( CString sClassName, CString sValueName ); RageColor GetMetricC( CString sClassName, CString sValueName );
protected: protected:
CString GetPathToAndFallback( CString sThemeName, ElementCategory category, CString sClassName, CString sFile );
CString GetPathToRaw( CString sThemeName, ElementCategory category, CString sClassName, CString sFile ); CString GetPathToRaw( CString sThemeName, ElementCategory category, CString sClassName, CString sFile );
static CString GetThemeDirFromName( const CString &sThemeName ); static CString GetThemeDirFromName( const CString &sThemeName );
CString GetElementDir( CString sThemeName ); CString GetElementDir( CString sThemeName );