1
0
Fork 0

splash screen: use language resource for translation

Also pimp the progress spinner.
This commit is contained in:
ThorstenB 2012-09-21 19:36:25 +02:00
parent db3c70e235
commit 88592bfe71
4 changed files with 56 additions and 23 deletions

View file

@ -161,6 +161,10 @@ FGLocale::selectLanguage(const char *language)
} }
_currentLocale = locale; _currentLocale = locale;
// load resource for system messages (translations for fgfs internal messages)
loadResource("sys");
return true; return true;
} }

View file

@ -98,9 +98,9 @@ static void fgLoadInitialScenery()
} }
else else
{ {
fgSplashProgress("loading scenery"); fgSplashProgress("loading-scenery");
// be nice to loader threads while waiting for initial scenery, reduce to 2fps // be nice to loader threads while waiting for initial scenery, reduce to 20fps
SGTimeStamp::sleepForMSec(500); SGTimeStamp::sleepForMSec(50);
} }
} }
} }
@ -183,7 +183,6 @@ static void fgIdleFunction ( void ) {
// our initializations out of the idle callback so that we can get a // our initializations out of the idle callback so that we can get a
// splash screen up and running right away. // splash screen up and running right away.
static int idle_state = 0; static int idle_state = 0;
static int spin_count = 0;
static osg::ref_ptr<GeneralInitOperation> genOp; static osg::ref_ptr<GeneralInitOperation> genOp;
if ( idle_state == 0 ) { if ( idle_state == 0 ) {
@ -212,17 +211,17 @@ static void fgIdleFunction ( void ) {
if (!guiFinishInit()) if (!guiFinishInit())
return; return;
idle_state++; idle_state++;
fgSplashProgress("loading aircraft list"); fgSplashProgress("loading-aircraft-list");
} else if ( idle_state == 2 ) { } else if ( idle_state == 2 ) {
idle_state++; idle_state++;
fgSplashProgress("loading navigation data"); fgSplashProgress("loading-nav-data");
} else if ( idle_state == 3 ) { } else if ( idle_state == 3 ) {
idle_state++; idle_state++;
fgInitNav(); fgInitNav();
fgSplashProgress("initializing scenery system"); fgSplashProgress("init-scenery");
} else if ( idle_state == 4 ) { } else if ( idle_state == 4 ) {
idle_state+=2; idle_state+=2;
@ -264,11 +263,11 @@ static void fgIdleFunction ( void ) {
globals->get_scenery()->bind(); globals->get_scenery()->bind();
globals->set_tile_mgr( new FGTileMgr ); globals->set_tile_mgr( new FGTileMgr );
fgSplashProgress("loading aircraft"); fgSplashProgress("loading-aircraft");
} else if ( idle_state == 6 ) { } else if ( idle_state == 6 ) {
idle_state++; idle_state++;
fgSplashProgress("creating subsystems"); fgSplashProgress("creating-subsystems");
} else if ( idle_state == 7 ) { } else if ( idle_state == 7 ) {
idle_state++; idle_state++;
@ -276,7 +275,7 @@ static void fgIdleFunction ( void ) {
st.stamp(); st.stamp();
fgCreateSubsystems(); fgCreateSubsystems();
SG_LOG(SG_GENERAL, SG_INFO, "Creating subsystems took:" << st.elapsedMSec()); SG_LOG(SG_GENERAL, SG_INFO, "Creating subsystems took:" << st.elapsedMSec());
fgSplashProgress("binding subsystems"); fgSplashProgress("binding-subsystems");
} else if ( idle_state == 8 ) { } else if ( idle_state == 8 ) {
idle_state++; idle_state++;
@ -285,16 +284,14 @@ static void fgIdleFunction ( void ) {
globals->get_subsystem_mgr()->bind(); globals->get_subsystem_mgr()->bind();
SG_LOG(SG_GENERAL, SG_INFO, "Binding subsystems took:" << st.elapsedMSec()); SG_LOG(SG_GENERAL, SG_INFO, "Binding subsystems took:" << st.elapsedMSec());
fgSplashProgress("initing subsystems"); fgSplashProgress("init-subsystems");
} else if ( idle_state == 9 ) { } else if ( idle_state == 9 ) {
SGSubsystem::InitStatus status = globals->get_subsystem_mgr()->incrementalInit(); SGSubsystem::InitStatus status = globals->get_subsystem_mgr()->incrementalInit();
if ( status == SGSubsystem::INIT_DONE) { if ( status == SGSubsystem::INIT_DONE) {
++idle_state; ++idle_state;
fgSplashProgress("finishing subsystem init"); fgSplashProgress("finishing-subsystems");
} else { } else {
const char* spinChars = "-\\|/"; fgSplashProgress("init-subsystems");
string msg = string("initing subsystems ") + spinChars[spin_count++ % 4];
fgSplashProgress(msg.c_str());
} }
} else if ( idle_state == 10 ) { } else if ( idle_state == 10 ) {
@ -329,7 +326,7 @@ static void fgIdleFunction ( void ) {
"No METAR available to pick active runway" ); "No METAR available to pick active runway" );
} }
fgSplashProgress("initializing graphics engine"); fgSplashProgress("init-graphics");
} else if ( idle_state == 900 ) { } else if ( idle_state == 900 ) {
idle_state = 1000; idle_state = 1000;

View file

@ -54,6 +54,7 @@
#include <Main/globals.hxx> #include <Main/globals.hxx>
#include <Main/fg_props.hxx> #include <Main/fg_props.hxx>
#include <Main/fg_os.hxx> #include <Main/fg_os.hxx>
#include <Main/locale.hxx>
#include "splash.hxx" #include "splash.hxx"
#include "renderer.hxx" #include "renderer.hxx"
@ -307,10 +308,21 @@ static osg::Node* fgCreateSplashCamera()
text->setPosition(osg::Vec3(0, -0.92, 0)); text->setPosition(osg::Vec3(0, -0.92, 0));
text->setAlignment(osgText::Text::CENTER_CENTER); text->setAlignment(osgText::Text::CENTER_CENTER);
SGPropertyNode* prop = fgGetNode("/sim/startup/splash-progress-text", true); SGPropertyNode* prop = fgGetNode("/sim/startup/splash-progress-text", true);
prop->setStringValue("initializing"); prop->setStringValue("");
text->setUpdateCallback(new FGSplashTextUpdateCallback(prop)); text->setUpdateCallback(new FGSplashTextUpdateCallback(prop));
geode->addDrawable(text); geode->addDrawable(text);
osgText::Text* spinnertext = new osgText::Text;
spinnertext->setFont(globals->get_fontcache()->getfntpath(fn.c_str()).str());
spinnertext->setCharacterSize(0.06);
spinnertext->setColor(osg::Vec4(1, 1, 1, 1));
spinnertext->setPosition(osg::Vec3(0, -0.97, 0));
spinnertext->setAlignment(osgText::Text::CENTER_CENTER);
prop = fgGetNode("/sim/startup/splash-progress-spinner", true);
prop->setStringValue("");
spinnertext->setUpdateCallback(new FGSplashTextUpdateCallback(prop));
geode->addDrawable(spinnertext);
text = new osgText::Text; text = new osgText::Text;
text->setFont(globals->get_fontcache()->getfntpath(fn.c_str()).str()); text->setFont(globals->get_fontcache()->getfntpath(fn.c_str()).str());
text->setCharacterSize(0.08); text->setCharacterSize(0.08);
@ -332,6 +344,8 @@ static osg::Node* fgCreateSplashCamera()
text->setUpdateCallback(new FGSplashTextUpdateCallback(prop)); text->setUpdateCallback(new FGSplashTextUpdateCallback(prop));
geode->addDrawable(text); geode->addDrawable(text);
fgSplashProgress("init");
return camera; return camera;
} }
@ -370,11 +384,28 @@ void fgSplashInit () {
globals->get_renderer()->splashinit(); globals->get_renderer()->splashinit();
} }
void fgSplashProgress ( const char *text ) { void fgSplashProgress( const char *identifier ) {
const char* spinChars = "-\\|/";
static int spin_count = 0;
string spin_status = string("");
if (identifier[0] != 0)
spin_status += spinChars[spin_count++ % 4];
fgSetString("/sim/startup/splash-progress-spinner", spin_status);
const char* text = "";
if (identifier[0] != 0)
{
string id = string("splash/") + identifier;
text = globals->get_locale()->getLocalizedString(id.c_str(),
"sys", "<incomplete language resource>");
}
if (!strcmp(fgGetString("/sim/startup/splash-progress-text"), text)) { if (!strcmp(fgGetString("/sim/startup/splash-progress-text"), text)) {
return; return;
} }
SG_LOG( SG_VIEW, SG_INFO, "Splash screen progress " << text ); SG_LOG( SG_VIEW, SG_INFO, "Splash screen progress " << identifier );
fgSetString("/sim/startup/splash-progress-text", text); fgSetString("/sim/startup/splash-progress-text", text);
} }

View file

@ -31,13 +31,14 @@
# error This library requires C++ # error This library requires C++
#endif #endif
// Initialize the splash screen /** Initialize the splash screen */
void fgSplashInit (); void fgSplashInit ();
// Set progress information /** Set progress information.
void fgSplashProgress ( const char *text ); * "identifier" references an element of the language resource. */
void fgSplashProgress ( const char *identifier );
// Retrieve the splash screen node ... /** Retrieve the splash screen node */
osg::Node* fgCreateSplashNode(); osg::Node* fgCreateSplashNode();
#endif // _SPLASH_HXX #endif // _SPLASH_HXX