]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/FGPUIMenuBar.cxx
Move viewer-related sources to separate folder.
[flightgear.git] / src / GUI / FGPUIMenuBar.cxx
index a7d8ba0eb4c81e14cd41a9bdcf48b92885f86ef3..98884b7d36d7fa8259d8b4a4b570f488ce0ba79a 100644 (file)
@@ -10,6 +10,7 @@
 #include <simgear/props/props_io.hxx>
 
 #include <Main/globals.hxx>
+#include <Main/locale.hxx>
 #include <Main/fg_props.hxx>
 
 #include "new_gui.hxx"
@@ -139,7 +140,15 @@ FGPUIMenuBar::fireItem (puObject * item)
 void
 FGPUIMenuBar::make_menu (SGPropertyNode * node)
 {
-    const char * name = strdup(node->getStringValue("label"));
+    string s = getLocalizedLabel(node);
+
+    // hack: map at least some UTF-8 characters to Latin1, since FG fonts are
+    // Latin1 (or plain ASCII, which is a subset). This hack can be removed once
+    // the PLIB/OSG port is complete (OSG has full UTF-8 support! :) ).
+    FGLocale::utf8toLatin1(s);
+
+    const char* name = strdup(s.c_str());
+
     vector<SGPropertyNode_ptr> item_nodes = node->getChildren("item");
 
     int array_size = item_nodes.size();
@@ -152,7 +161,18 @@ FGPUIMenuBar::make_menu (SGPropertyNode * node)
          i++, j--) {
 
                                 // Set up the PUI entries for this item
-        items[j] = strdup((char *)item_nodes[i]->getStringValue("label"));
+        string label = getLocalizedLabel(item_nodes[i]);
+        FGLocale::utf8toLatin1(label);
+
+        // append the keyboard hint to the menu entry
+        const char* key = item_nodes[i]->getStringValue("key", 0);
+        if (key)
+        {
+            label.append("           <");
+            label.append(key);
+            label.append(">");
+        }
+        items[j] = strdup(label.c_str());
         callbacks[j] = menu_callback;
 
                                 // Load all the bindings for this item
@@ -314,7 +334,9 @@ FGPUIMenuBar::make_object_map(SGPropertyNode * node)
     }
 }
 
-struct EnabledListener : SGPropertyChangeListener {
+namespace { 
+  
+  struct EnabledListener : SGPropertyChangeListener {
     void valueChanged(SGPropertyNode *node) {
         NewGUI * gui = (NewGUI *)globals->get_subsystem("gui");
         if (!gui)
@@ -325,6 +347,8 @@ struct EnabledListener : SGPropertyChangeListener {
     }
 };
 
+} // of anonymous namespace
+
 void
 FGPUIMenuBar::add_enabled_listener(SGPropertyNode * node)
 {