]> git.mxchange.org Git - flightgear.git/commitdiff
splash screen: use language resource for translation
authorThorstenB <brehmt@gmail.com>
Fri, 21 Sep 2012 17:36:25 +0000 (19:36 +0200)
committerThorstenB <brehmt@gmail.com>
Fri, 21 Sep 2012 17:36:25 +0000 (19:36 +0200)
Also pimp the progress spinner.

src/Main/locale.cxx
src/Main/main.cxx
src/Viewer/splash.cxx
src/Viewer/splash.hxx

index ae4cedf076e529932965cb4e82f4e4f815ab6792..43ff26ef34593582385cbb380594d12491f7461d 100644 (file)
@@ -161,6 +161,10 @@ FGLocale::selectLanguage(const char *language)
     }
 
     _currentLocale = locale;
+
+    // load resource for system messages (translations for fgfs internal messages)
+    loadResource("sys");
+
     return true;
 }
 
index 8bc9fd32b7be99a119065549e9df2868e1e85199..4dc123c27951416415c6f818b47e3c19419dbb37 100644 (file)
@@ -98,9 +98,9 @@ static void fgLoadInitialScenery()
         }
         else
         {
-            fgSplashProgress("loading scenery");
-            // be nice to loader threads while waiting for initial scenery, reduce to 2fps
-            SGTimeStamp::sleepForMSec(500);
+            fgSplashProgress("loading-scenery");
+            // be nice to loader threads while waiting for initial scenery, reduce to 20fps
+            SGTimeStamp::sleepForMSec(50);
         }
     }
 }
@@ -183,7 +183,6 @@ static void fgIdleFunction ( void ) {
     // our initializations out of the idle callback so that we can get a
     // splash screen up and running right away.
     static int idle_state = 0;
-    static int spin_count = 0;
   
     static osg::ref_ptr<GeneralInitOperation> genOp;
     if ( idle_state == 0 ) {
@@ -212,17 +211,17 @@ static void fgIdleFunction ( void ) {
         if (!guiFinishInit())
             return;
         idle_state++;
-        fgSplashProgress("loading aircraft list");
+        fgSplashProgress("loading-aircraft-list");
 
     } else if ( idle_state == 2 ) {
         idle_state++;
-        fgSplashProgress("loading navigation data");
+        fgSplashProgress("loading-nav-data");
 
     } else if ( idle_state == 3 ) {
         idle_state++;
         fgInitNav();
 
-        fgSplashProgress("initializing scenery system");
+        fgSplashProgress("init-scenery");
 
     } else if ( idle_state == 4 ) {
         idle_state+=2;
@@ -264,11 +263,11 @@ static void fgIdleFunction ( void ) {
         globals->get_scenery()->bind();
         globals->set_tile_mgr( new FGTileMgr );
 
-        fgSplashProgress("loading aircraft");
+        fgSplashProgress("loading-aircraft");
 
     } else if ( idle_state == 6 ) {
         idle_state++;
-        fgSplashProgress("creating subsystems");
+        fgSplashProgress("creating-subsystems");
 
     } else if ( idle_state == 7 ) {
         idle_state++;
@@ -276,7 +275,7 @@ static void fgIdleFunction ( void ) {
         st.stamp();
         fgCreateSubsystems();
         SG_LOG(SG_GENERAL, SG_INFO, "Creating subsystems took:" << st.elapsedMSec());
-        fgSplashProgress("binding subsystems");
+        fgSplashProgress("binding-subsystems");
       
     } else if ( idle_state == 8 ) {
         idle_state++;
@@ -285,16 +284,14 @@ static void fgIdleFunction ( void ) {
         globals->get_subsystem_mgr()->bind();
         SG_LOG(SG_GENERAL, SG_INFO, "Binding subsystems took:" << st.elapsedMSec());
 
-        fgSplashProgress("initing subsystems");
+        fgSplashProgress("init-subsystems");
     } else if ( idle_state == 9 ) {
         SGSubsystem::InitStatus status = globals->get_subsystem_mgr()->incrementalInit();
         if ( status == SGSubsystem::INIT_DONE) {
           ++idle_state;
-          fgSplashProgress("finishing subsystem init");
+          fgSplashProgress("finishing-subsystems");
         } else {
-          const char* spinChars = "-\\|/";
-          string msg = string("initing subsystems ") + spinChars[spin_count++ % 4];
-          fgSplashProgress(msg.c_str());
+          fgSplashProgress("init-subsystems");
         }
       
     } else if ( idle_state == 10 ) {
@@ -329,7 +326,7 @@ static void fgIdleFunction ( void ) {
                 "No METAR available to pick active runway" );
         }
 
-        fgSplashProgress("initializing graphics engine");
+        fgSplashProgress("init-graphics");
 
     } else if ( idle_state == 900 ) {
         idle_state = 1000;
index 06adfccb539b4dbb38b9595cca6c448ff7946cad..65dfce1b9a2505f760682c5306220470a67d0652 100644 (file)
@@ -54,6 +54,7 @@
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
 #include <Main/fg_os.hxx>
+#include <Main/locale.hxx>
 #include "splash.hxx"
 #include "renderer.hxx"
 
@@ -307,10 +308,21 @@ static osg::Node* fgCreateSplashCamera()
   text->setPosition(osg::Vec3(0, -0.92, 0));
   text->setAlignment(osgText::Text::CENTER_CENTER);
   SGPropertyNode* prop = fgGetNode("/sim/startup/splash-progress-text", true);
-  prop->setStringValue("initializing");
+  prop->setStringValue("");
   text->setUpdateCallback(new FGSplashTextUpdateCallback(prop));
   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->setFont(globals->get_fontcache()->getfntpath(fn.c_str()).str());
   text->setCharacterSize(0.08);
@@ -332,6 +344,8 @@ static osg::Node* fgCreateSplashCamera()
   text->setUpdateCallback(new FGSplashTextUpdateCallback(prop));
   geode->addDrawable(text);
 
+  fgSplashProgress("init");
+
   return camera;
 }
 
@@ -370,11 +384,28 @@ void fgSplashInit () {
   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)) {
     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);
 }
index 30643c2abf80d78e2aec7aa7c0324c5e1e0591ec..d6c054dfb56c8dd01376a81b823d18f7ec088df8 100644 (file)
 # error This library requires C++
 #endif
 
-// Initialize the splash screen
+/** Initialize the splash screen */
 void fgSplashInit ();
 
-// Set progress information
-void fgSplashProgress ( const char *text );
+/** Set progress information.
+ * "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();
 
 #endif // _SPLASH_HXX