]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/gui.cxx
remove old .cvsignore files
[flightgear.git] / src / GUI / gui.cxx
index a0bc37319fa4a6af01548f4d8bdd708f77a903ca..1ae94dbb093a925eea17b7c2490d07a0232424f3 100644 (file)
@@ -18,7 +18,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
  * $Id$
  **************************************************************************/
 
 #include <simgear/compiler.h>
 
-#ifdef HAVE_WINDOWS_H
-#  include <windows.h>
-#endif
+#include <string>
 
-#include <simgear/misc/props.hxx>
-#include <simgear/misc/props_io.hxx>
-#include <simgear/misc/exception.hxx>
+#include <simgear/structure/exception.hxx>
 #include <simgear/misc/sg_path.hxx>
+#include <simgear/props/props.hxx>
+#include <simgear/props/props_io.hxx>
 
 #include <plib/pu.h>
 
-#include <Include/general.hxx>
+#include <Main/main.hxx>
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
+#include <Main/WindowSystemAdapter.hxx>
+#include <GUI/new_gui.hxx>
 
 #include "gui.h"
-#include "gui_local.hxx"
-#include "net_dlg.hxx"
-#include "preset_dlg.hxx"
-
-
-// main.cxx hack, should come from an include someplace
-extern void fgInitVisuals( void );
-extern void fgReshape( int width, int height );
-extern void fgRenderFrame( void );
+#include "layout.hxx"
 
-extern void initDialog (void);
-extern void mkDialogInit (void);
-extern void ConfirmExitDialogInit(void);
+#include <osg/GraphicsContext>
 
+using namespace flightgear;
 
 puFont guiFnt = 0;
-fntTexFont *guiFntHandle = 0;
-int gui_menu_on = 0;
-puMenuBar    *mainMenuBar = 0;
-//static puButton     *hideMenuButton = 0;
-
-
-struct fg_gui_t {
-       char *name;
-       char **submenu;
-       puCallback *cb;
-} *Menu;
-unsigned int Menu_size;
-
-void initMenu()
-{
-     SGPropertyNode main;
-
-     try {
-         fgLoadProps("menu.xml", &main);
-     } catch (const sg_exception &ex) {
-         SG_LOG(SG_GENERAL, SG_ALERT, "Error processing the menu file.");
-         return;
-     }
-
-     SG_LOG(SG_GENERAL, SG_INFO, "Reading menu entries.");
-
-     // Make the menu bar
-     mainMenuBar = new puMenuBar ();
-
-     SGPropertyNode *menu = main.getChild("menu");
-     SGPropertyNode *locale = globals->get_locale();
-
-     vector<SGPropertyNode_ptr>submenu = menu->getChildren("submenu");
-
-     Menu_size = 1+submenu.size();
-     Menu = (fg_gui_t *)calloc(Menu_size, sizeof(fg_gui_t));
-
-     for (unsigned int h = 0; h < submenu.size(); h++) {
-
-         vector<SGPropertyNode_ptr>option = submenu[h]->getChildren("option");
-
-         //
-         // Make sure all entries will fit into allocated memory
-         //
-         Menu[h].submenu = (char **)calloc(1+option.size(), sizeof(char *));
-         Menu[h].cb = (puCallback *)calloc(1+option.size(), sizeof(puCallback));
-
-         for (unsigned int i = 0; i < option.size(); i++) {
-
-             SGPropertyNode *name = option[i]->getNode("name");
-             SGPropertyNode *call = option[i]->getNode("call");
-             SGPropertyNode *sep = option[i]->getNode("seperator");
-
-             int pos = option.size()-i-1;
-             if (sep) {
-                Menu[h].submenu[pos] = strdup("----------");
-             } else if (call && strcmp(call->getStringValue(), "")) {
-                 string text = locale->getStringValue( name->getStringValue(),
-                                                       "strings/null" );
-                 Menu[h].submenu[pos]
-                     = strdup(text.c_str());
-             } else {
-                 Menu[h].submenu[pos] = strdup("not specified");
-             }
-
-             Menu[h].cb[pos] = NULL;
-             for (unsigned int j=0; __fg_gui_fn[j].fn; j++)
-                 if (call &&
-                     !strcmp(call->getStringValue(), __fg_gui_fn[j].name) )
-                 {
-                     Menu[h].cb[pos] = __fg_gui_fn[j].fn;
-                     break;
-                 }
-         }
-
-         SGPropertyNode *name = submenu[h]->getNode("name");
-         string text = locale->getStringValue( name->getStringValue(),
-                                               "strings/null" );
-
-         Menu[h].name = strdup(text.c_str());
-         mainMenuBar->add_submenu(Menu[h].name, Menu[h].submenu, Menu[h].cb);
-
-    }
-
-    mainMenuBar->close();
-}
-
-
-// FIXME: Has to be called from somewhere
-//        or better yet, turn the menu into a class of its own
-void destroyMenu(void) {
-    for(unsigned int i=0; i < Menu_size; i++) {
-
-        free(Menu[i].name);
-
-                                // FIXME: don't use strdup/free
-        for(unsigned int j=0; Menu[i].submenu[j] != NULL; j++)
-           free(Menu[i].submenu[j]);
-    }
-}
-
-
 
 
 /* -------------------------------------------------------------------------
 init the gui
 _____________________________________________________________________*/
 
-
-void guiInit()
+namespace
+{
+class GUIInitOperation : public GraphicsContextOperation
 {
-    char *mesa_win_state;
-
-    // Initialize PUI
-    puInit();
-    puSetDefaultStyle         ( PUSTYLE_SMALL_BEVELLED ); //PUSTYLE_DEFAULT
-    puSetDefaultColourScheme  (0.8, 0.8, 0.8, 0.4);
-
-    initDialog();
-
-    // Next check home directory
-    SGPath fntpath;
-    char* envp = ::getenv( "FG_FONTS" );
-    if ( envp != NULL ) {
-        fntpath.set( envp );
-    } else {
-        fntpath.set( globals->get_fg_root() );
-       fntpath.append( "Fonts" );
+public:
+    GUIInitOperation() : GraphicsContextOperation(std::string("GUI init"))
+    {
     }
-
-    // Install our fast fonts
-    SGPropertyNode *locale = globals->get_locale();
-    fntpath.append(locale->getStringValue("font", "typewriter.txf"));
-    guiFntHandle = new fntTexFont ;
-    guiFntHandle -> load ( (char *)fntpath.c_str() ) ;
-    puFont GuiFont ( guiFntHandle, 15 ) ;
-    puSetDefaultFonts( GuiFont, GuiFont ) ;
-    guiFnt = puGetDefaultLabelFont();
+    void run(osg::GraphicsContext* gc)
+    {
+        WindowSystemAdapter* wsa = WindowSystemAdapter::getWSA();
+        wsa->puInitialize();
+        puSetDefaultStyle         ( PUSTYLE_SMALL_SHADED ); //PUSTYLE_DEFAULT
+        puSetDefaultColourScheme  (0.8, 0.8, 0.9, 1);
+
+        FGFontCache *fc = globals->get_fontcache();
+        fc->initializeFonts();
+        puFont *GuiFont
+            = fc->get(globals->get_locale()->getStringValue("font",
+                                                            "typewriter.txf"),
+                      15);
+        puSetDefaultFonts(*GuiFont, *GuiFont);
+        guiFnt = puGetDefaultLabelFont();
+
+        LayoutWidget::setDefaultFont(GuiFont, 15);
   
-    if (!fgHasNode("/sim/startup/mouse-pointer")) {
-        // no preference specified for mouse pointer, attempt to autodetect...
-        // Determine if we need to render the cursor, or if the windowing
-        // system will do it.  First test if we are rendering with glide.
-        if ( strstr ( general.get_glRenderer(), "Glide" ) ) {
-            // Test for the MESA_GLX_FX env variable
-            if ( (mesa_win_state = getenv( "MESA_GLX_FX" )) != NULL) {
-                // test if we are fullscreen mesa/glide
-                if ( (mesa_win_state[0] == 'f') ||
-                     (mesa_win_state[0] == 'F') ) {
-                    puShowCursor ();
-                }
-            }
+        if (!fgHasNode("/sim/startup/mouse-pointer")) {
+            // no preference specified for mouse pointer
+        } else if ( !fgGetBool("/sim/startup/mouse-pointer") ) {
+            // don't show pointer
+        } else {
+            // force showing pointer
+            puShowCursor();
         }
-//        mouse_active = ~mouse_active;
-    } else if ( !fgGetBool("/sim/startup/mouse-pointer") ) {
-        // don't show pointer
-    } else {
-        // force showing pointer
-        puShowCursor();
-//        mouse_active = ~mouse_active;
     }
-       
-    // MOUSE_VIEW mode stuff
-       initMouseQuat();
-
-    // Set up our Dialog Boxes
-    ConfirmExitDialogInit();
-    fgPresetInit();
-       
-#ifdef FG_NETWORK_OLK
-    NewNetIdInit();
-    NewNetFGDInit();
-#endif
-
-    mkDialogInit();
+};
 
-    initMenu();
-    
-    // Set up menu bar toggle
-    gui_menu_on = ~0;
+osg::ref_ptr<GUIInitOperation> initOp;
+}
 
-    if (!strcmp(fgGetString("/sim/flight-model"), "ada")) {
-        guiToggleMenu(); // Menu off by default
+void guiStartInit(osg::GraphicsContext* gc)
+{
+    if (gc) {
+        initOp = new GUIInitOperation;
+        gc->add(initOp.get());
     }
 }
+
+bool guiFinishInit()
+{
+    if (!initOp.valid())
+        return true;
+    if (!initOp->isFinished())
+        return false;
+    initOp = 0;
+    return true;
+}
+