localizable smpackage dialogs
This commit is contained in:
@@ -9,6 +9,8 @@ const RString SpecialFiles::LANGUAGES_SUBDIR = "Languages/";
|
|||||||
const RString SpecialFiles::BASE_LANGUAGE = "en";
|
const RString SpecialFiles::BASE_LANGUAGE = "en";
|
||||||
const RString SpecialFiles::METRICS_FILE = "metrics.ini";
|
const RString SpecialFiles::METRICS_FILE = "metrics.ini";
|
||||||
const RString SpecialFiles::CACHE_DIR = "Cache/";
|
const RString SpecialFiles::CACHE_DIR = "Cache/";
|
||||||
|
const RString SpecialFiles::BASE_THEME_NAME = "default";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (c) 2003-2005 Chris Danford
|
* (c) 2003-2005 Chris Danford
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ namespace SpecialFiles
|
|||||||
extern const RString BASE_LANGUAGE;
|
extern const RString BASE_LANGUAGE;
|
||||||
extern const RString METRICS_FILE;
|
extern const RString METRICS_FILE;
|
||||||
extern const RString CACHE_DIR;
|
extern const RString CACHE_DIR;
|
||||||
|
extern const RString BASE_THEME_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -15,6 +15,10 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "Foreach.h"
|
#include "Foreach.h"
|
||||||
#include "ThemeMetric.h"
|
#include "ThemeMetric.h"
|
||||||
|
#include "SubscriptionManager.h"
|
||||||
|
template<>
|
||||||
|
set<IThemeMetric*>* SubscriptionManager<IThemeMetric>::s_pSubscribers = NULL;
|
||||||
|
|
||||||
#include "LuaManager.h"
|
#include "LuaManager.h"
|
||||||
#include "ScreenDimensions.h"
|
#include "ScreenDimensions.h"
|
||||||
#include "Command.h"
|
#include "Command.h"
|
||||||
@@ -36,9 +40,6 @@ XToString( ElementCategory, NUM_ElementCategory );
|
|||||||
StringToX( ElementCategory );
|
StringToX( ElementCategory );
|
||||||
|
|
||||||
|
|
||||||
const RString BASE_THEME_NAME = "default";
|
|
||||||
|
|
||||||
|
|
||||||
struct Theme
|
struct Theme
|
||||||
{
|
{
|
||||||
RString sThemeName;
|
RString sThemeName;
|
||||||
@@ -224,19 +225,19 @@ void ThemeManager::LoadThemeMetrics( deque<Theme> &theme, const RString &sThemeN
|
|||||||
if( sLanguage.CompareNoCase(SpecialFiles::BASE_LANGUAGE) )
|
if( sLanguage.CompareNoCase(SpecialFiles::BASE_LANGUAGE) )
|
||||||
ini.ReadFile( GetLanguageIniPath(sThemeName,sLanguage) );
|
ini.ReadFile( GetLanguageIniPath(sThemeName,sLanguage) );
|
||||||
|
|
||||||
bool bIsBaseTheme = !sThemeName.CompareNoCase(BASE_THEME_NAME);
|
bool bIsBaseTheme = !sThemeName.CompareNoCase(SpecialFiles::BASE_THEME_NAME);
|
||||||
ini.GetValue( "Global", "IsBaseTheme", bIsBaseTheme );
|
ini.GetValue( "Global", "IsBaseTheme", bIsBaseTheme );
|
||||||
if( bIsBaseTheme )
|
if( bIsBaseTheme )
|
||||||
bLoadedBase = 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 SpecialFiles::BASE_THEME_NAME. That way, default theme
|
||||||
* fallbacks can be disabled with "FallbackTheme=". */
|
* fallbacks can be disabled with "FallbackTheme=". */
|
||||||
RString sFallback;
|
RString sFallback;
|
||||||
if( !ini.GetValue("Global","FallbackTheme",sFallback) )
|
if( !ini.GetValue("Global","FallbackTheme",sFallback) )
|
||||||
{
|
{
|
||||||
if( sThemeName.CompareNoCase( BASE_THEME_NAME ) && !bLoadedBase )
|
if( sThemeName.CompareNoCase( SpecialFiles::BASE_THEME_NAME ) && !bLoadedBase )
|
||||||
sFallback = BASE_THEME_NAME;
|
sFallback = SpecialFiles::BASE_THEME_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We actually want to load themes bottom-to-top, loading fallback themes
|
/* We actually want to load themes bottom-to-top, loading fallback themes
|
||||||
@@ -281,7 +282,7 @@ void ThemeManager::SwitchThemeAndLanguage( const RString &sThemeName_, const RSt
|
|||||||
RString sThemeName = sThemeName_;
|
RString sThemeName = sThemeName_;
|
||||||
RString sLanguage = sLanguage_;
|
RString sLanguage = sLanguage_;
|
||||||
if( !DoesThemeExist(sThemeName) )
|
if( !DoesThemeExist(sThemeName) )
|
||||||
sThemeName = BASE_THEME_NAME;
|
sThemeName = SpecialFiles::BASE_THEME_NAME;
|
||||||
|
|
||||||
/* We havn't actually loaded the theme yet, so we can't check whether sLanguage
|
/* We havn't actually loaded the theme yet, so we can't check whether sLanguage
|
||||||
* exists. Just check for empty. */
|
* exists. Just check for empty. */
|
||||||
@@ -317,8 +318,11 @@ void ThemeManager::SwitchThemeAndLanguage( const RString &sThemeName_, const RSt
|
|||||||
}
|
}
|
||||||
|
|
||||||
// reload subscribers
|
// reload subscribers
|
||||||
FOREACHS_CONST( IThemeMetric*, *g_Subscribers.m_pSubscribers, p )
|
if( SubscriptionManager<IThemeMetric>::s_pSubscribers )
|
||||||
(*p)->Read();
|
{
|
||||||
|
FOREACHS_CONST( IThemeMetric*, *g_Subscribers.m_pSubscribers, p )
|
||||||
|
(*p)->Read();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThemeManager::RunLuaScripts( const RString &sMask )
|
void ThemeManager::RunLuaScripts( const RString &sMask )
|
||||||
@@ -638,11 +642,11 @@ try_element_again:
|
|||||||
sCategory.c_str(),
|
sCategory.c_str(),
|
||||||
sFileName.c_str(),
|
sFileName.c_str(),
|
||||||
GetThemeDirFromName(m_sCurThemeName).c_str(),
|
GetThemeDirFromName(m_sCurThemeName).c_str(),
|
||||||
GetThemeDirFromName(BASE_THEME_NAME).c_str() );
|
GetThemeDirFromName(SpecialFiles::BASE_THEME_NAME).c_str() );
|
||||||
|
|
||||||
/* Err? */
|
/* Err? */
|
||||||
if(sFileName == "_missing")
|
if(sFileName == "_missing")
|
||||||
RageException::Throw("'_missing' isn't present in '%s%s'", GetThemeDirFromName(BASE_THEME_NAME).c_str(), sCategory.c_str() );
|
RageException::Throw("'_missing' isn't present in '%s%s'", GetThemeDirFromName(SpecialFiles::BASE_THEME_NAME).c_str(), sCategory.c_str() );
|
||||||
|
|
||||||
Cache[sFileName] = GetPath( category, "", "_missing" );
|
Cache[sFileName] = GetPath( category, "", "_missing" );
|
||||||
return Cache[sFileName];
|
return Cache[sFileName];
|
||||||
@@ -651,7 +655,7 @@ try_element_again:
|
|||||||
sCategory.c_str(),
|
sCategory.c_str(),
|
||||||
sFileName.c_str(),
|
sFileName.c_str(),
|
||||||
GetThemeDirFromName(m_sCurThemeName).c_str(),
|
GetThemeDirFromName(m_sCurThemeName).c_str(),
|
||||||
GetThemeDirFromName(BASE_THEME_NAME).c_str() );
|
GetThemeDirFromName(SpecialFiles::BASE_THEME_NAME).c_str() );
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -694,6 +698,8 @@ bool ThemeManager::GetMetricRawRecursive( const RString &sClassName_, const RStr
|
|||||||
ASSERT( sValueName != "" );
|
ASSERT( sValueName != "" );
|
||||||
RString sClassName( sClassName_ );
|
RString sClassName( sClassName_ );
|
||||||
|
|
||||||
|
ASSERT( g_pIniMetrics );
|
||||||
|
|
||||||
int n = 100;
|
int n = 100;
|
||||||
while( n-- )
|
while( n-- )
|
||||||
{
|
{
|
||||||
@@ -743,7 +749,7 @@ try_metric_again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
RString sCurMetricPath = GetMetricsIniPath(m_sCurThemeName);
|
RString sCurMetricPath = GetMetricsIniPath(m_sCurThemeName);
|
||||||
RString sDefaultMetricPath = GetMetricsIniPath(BASE_THEME_NAME);
|
RString sDefaultMetricPath = GetMetricsIniPath(SpecialFiles::BASE_THEME_NAME);
|
||||||
|
|
||||||
RString sError = ssprintf( "Theme metric '%s : %s' could not be found in '%s' or '%s'.",
|
RString sError = ssprintf( "Theme metric '%s : %s' could not be found in '%s' or '%s'.",
|
||||||
sClassName.c_str(),
|
sClassName.c_str(),
|
||||||
@@ -900,8 +906,23 @@ void ThemeManager::GetMetric( const RString &sClassName, const RString &sValueNa
|
|||||||
|
|
||||||
RString ThemeManager::GetString( const RString &sClassName, const RString &sValueName )
|
RString ThemeManager::GetString( const RString &sClassName, const RString &sValueName )
|
||||||
{
|
{
|
||||||
|
// TODO: Are there esacpe rules for this?
|
||||||
|
DEBUG_ASSERT( sValueName.find('=') == sValueName.npos );
|
||||||
|
|
||||||
// TODO: Change this to GetMetricRaw and write stubs for missing strings into every language file.
|
// TODO: Change this to GetMetricRaw and write stubs for missing strings into every language file.
|
||||||
return GetMetric( sClassName, sValueName );
|
RString s = GetMetric( sClassName, sValueName );
|
||||||
|
|
||||||
|
// Language strings may not be empty. Empty strings are considered to need translation
|
||||||
|
if( s.empty() )
|
||||||
|
{
|
||||||
|
RString sFile = GetLanguageIniPath( m_sCurThemeName, m_sCurLanguage );
|
||||||
|
IniFile ini;
|
||||||
|
ini.ReadFile( sFile );
|
||||||
|
s = sValueName;
|
||||||
|
ini.SetValue( sClassName, sValueName, s );
|
||||||
|
ini.WriteFile( sFile );
|
||||||
|
}
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThemeManager::GetMetricsThatBeginWith( const RString &sClassName_, const RString &sValueName, set<RString> &vsValueNamesOut )
|
void ThemeManager::GetMetricsThatBeginWith( const RString &sClassName_, const RString &sValueName, set<RString> &vsValueNamesOut )
|
||||||
@@ -935,7 +956,7 @@ void ThemeManager::GetMetricsThatBeginWith( const RString &sClassName_, const RS
|
|||||||
|
|
||||||
RString ThemeManager::GetBlankGraphicPath()
|
RString ThemeManager::GetBlankGraphicPath()
|
||||||
{
|
{
|
||||||
return SpecialFiles::THEMES_DIR + BASE_THEME_NAME + "/" + ElementCategoryToString(EC_GRAPHICS) + "/_blank.png";
|
return SpecialFiles::THEMES_DIR + SpecialFiles::BASE_THEME_NAME + "/" + ElementCategoryToString(EC_GRAPHICS) + "/_blank.png";
|
||||||
}
|
}
|
||||||
|
|
||||||
// lua start
|
// lua start
|
||||||
|
|||||||
@@ -194,9 +194,6 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath=".\smpackage\MainMenuDlg.h">
|
RelativePath=".\smpackage\MainMenuDlg.h">
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\smpackage\resource.h">
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\smpackage\ShowComment.cpp">
|
RelativePath=".\smpackage\ShowComment.cpp">
|
||||||
</File>
|
</File>
|
||||||
@@ -262,11 +259,14 @@
|
|||||||
RelativePath="menu.bmp">
|
RelativePath="menu.bmp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="smpackage.ICO">
|
RelativePath=".\smpackage\resource.h">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="res\smpackage.ico">
|
RelativePath="res\smpackage.ico">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="smpackage.ICO">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\smpackage\smpackage.rc">
|
RelativePath=".\smpackage\smpackage.rc">
|
||||||
</File>
|
</File>
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ BOOL LanguagesDlg::OnInitDialog()
|
|||||||
{
|
{
|
||||||
CDialog::OnInitDialog();
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
|
SMPackageUtil::LocalizeDialogAndContents( *this );
|
||||||
|
|
||||||
vector<RString> vs;
|
vector<RString> vs;
|
||||||
GetDirListing( SpecialFiles::THEMES_DIR+"*", vs, true );
|
GetDirListing( SpecialFiles::THEMES_DIR+"*", vs, true );
|
||||||
StripCvs( vs );
|
StripCvs( vs );
|
||||||
|
|||||||
@@ -173,6 +173,8 @@ BOOL MainMenuDlg::OnInitDialog()
|
|||||||
CDialog::OnInitDialog();
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
// TODO: Add extra initialization here
|
// TODO: Add extra initialization here
|
||||||
|
SMPackageUtil::LocalizeDialogAndContents( *this );
|
||||||
|
|
||||||
TCHAR szCurDir[MAX_PATH];
|
TCHAR szCurDir[MAX_PATH];
|
||||||
GetCurrentDirectory( ARRAYSIZE(szCurDir), szCurDir );
|
GetCurrentDirectory( ARRAYSIZE(szCurDir), szCurDir );
|
||||||
GetDlgItem( IDC_EDIT_INSTALLATION )->SetWindowText( szCurDir );
|
GetDlgItem( IDC_EDIT_INSTALLATION )->SetWindowText( szCurDir );
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "ProductInfo.h"
|
#include "ProductInfo.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageFileManager.h"
|
#include "RageFileManager.h"
|
||||||
|
#include "ThemeManager.h"
|
||||||
|
|
||||||
void SMPackageUtil::WriteStepManiaInstallDirs( const vector<RString>& asInstallDirsToWrite )
|
void SMPackageUtil::WriteStepManiaInstallDirs( const vector<RString>& asInstallDirsToWrite )
|
||||||
{
|
{
|
||||||
@@ -210,6 +211,23 @@ RString SMPackageUtil::GetLanguageCodeFromDisplayString( const RString &sDisplay
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SMPackageUtil::LocalizeDialogAndContents( CDialog &dlg )
|
||||||
|
{
|
||||||
|
CString s1;
|
||||||
|
dlg.GetWindowText( s1 );
|
||||||
|
RString sGroup = "Tools-"+s1;
|
||||||
|
dlg.SetWindowText( THEME->GetString(sGroup,"DialogCaption") );
|
||||||
|
|
||||||
|
for( CWnd *pChild = dlg.GetTopWindow(); pChild != NULL; pChild = pChild->GetNextWindow() )
|
||||||
|
{
|
||||||
|
pChild->GetWindowText( s1 );
|
||||||
|
if( s1.IsEmpty() )
|
||||||
|
continue;
|
||||||
|
pChild->SetWindowText( THEME->GetString(sGroup,RString(s1)) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static const RString TEMP_MOUNT_POINT = "/@package/";
|
static const RString TEMP_MOUNT_POINT = "/@package/";
|
||||||
|
|
||||||
RageFileOsAbsolute::~RageFileOsAbsolute()
|
RageFileOsAbsolute::~RageFileOsAbsolute()
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
#include "RageFileManager.h"
|
#include "RageFileManager.h"
|
||||||
#include "arch/arch.h"
|
#include "arch/arch.h"
|
||||||
#include "LuaManager.h"
|
#include "LuaManager.h"
|
||||||
|
#include "ThemeManager.h"
|
||||||
|
#include "SpecialFiles.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
@@ -109,6 +111,8 @@ BOOL CSmpackageApp::InitInstance()
|
|||||||
|
|
||||||
FILEMAN = new RageFileManager( "" );
|
FILEMAN = new RageFileManager( "" );
|
||||||
LUA = new LuaManager();
|
LUA = new LuaManager();
|
||||||
|
THEME = new ThemeManager();
|
||||||
|
THEME->SwitchThemeAndLanguage( SpecialFiles::BASE_THEME_NAME, SpecialFiles::BASE_LANGUAGE );
|
||||||
|
|
||||||
|
|
||||||
// Show the Manager Dialog
|
// Show the Manager Dialog
|
||||||
@@ -117,6 +121,7 @@ BOOL CSmpackageApp::InitInstance()
|
|||||||
// if (nResponse == IDOK)
|
// if (nResponse == IDOK)
|
||||||
|
|
||||||
|
|
||||||
|
SAFE_DELETE( THEME );
|
||||||
SAFE_DELETE( LUA );
|
SAFE_DELETE( LUA );
|
||||||
SAFE_DELETE( FILEMAN );
|
SAFE_DELETE( FILEMAN );
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ namespace SMPackageUtil
|
|||||||
RString GetLanguageCodeFromDisplayString( const RString &sDisplayString );
|
RString GetLanguageCodeFromDisplayString( const RString &sDisplayString );
|
||||||
|
|
||||||
bool GetFileContentsOsAbsolute( const RString &sAbsoluteOsFile, RString &sOut );
|
bool GetFileContentsOsAbsolute( const RString &sAbsoluteOsFile, RString &sOut );
|
||||||
|
|
||||||
|
void LocalizeDialogAndContents( CDialog &dlg );
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "RageFile.h"
|
#include "RageFile.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user