]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/gui_funcs.cxx
FGFontCache::initializeFonts() now portable across platform through the use of plib
[flightgear.git] / src / GUI / gui_funcs.cxx
index 413c65bd5b1b6aa54d2681df85dda452c0817eab..7c4a5171cd8679c68054d4ec8a3c95c844a8c1a6 100644 (file)
@@ -89,7 +89,6 @@
 
 #include "gui.h"
 #include "gui_local.hxx"
-#include "sgVec3Slider.hxx"
 
 SG_USING_STD(string);
 SG_USING_STD(cout);
@@ -102,14 +101,6 @@ extern void fgUpdateHUD( GLfloat x_start, GLfloat y_start,
 #endif
 
 
-// TODO: remove after the last hardcoded dialog has died
-char *gui_msg_OK     = "OK";
-char *gui_msg_NO     = "NO";
-char *gui_msg_YES    = "YES";
-char *gui_msg_CANCEL = "CANCEL";
-char *gui_msg_RESET  = "RESET";
-
-
 const __fg_gui_fn_t __fg_gui_fn[] = {
 
         // File
@@ -531,13 +522,9 @@ void fgHiResDumpWrapper ( puObject *obj ) {
 
 
 // do a screen snap shot
-void fgDumpSnapShot () {
+bool fgDumpSnapShot () {
     bool show_pu_cursor = false;
-    char *filename = new char [24];
-    static int count = 1;
-
-    static const SGPropertyNode *master_freeze
-       = fgGetNode("/sim/freeze/master");
+    static SGConstPropertyNode_ptr master_freeze = fgGetNode("/sim/freeze/master");
 
     bool freeze = master_freeze->getBoolValue();
     if ( !freeze ) {
@@ -546,15 +533,14 @@ void fgDumpSnapShot () {
 
     TurnCursorOff();
     if ( !puCursorIsHidden() ) {
-       show_pu_cursor = true;
-       puHideCursor();
+        show_pu_cursor = true;
+        puHideCursor();
     }
     fgSetBool("/sim/signals/screenshot", true);
 
     FGRenderer *renderer = globals->get_renderer();
-//     renderer->init();
     renderer->resize( fgGetInt("/sim/startup/xsize"),
-                        fgGetInt("/sim/startup/ysize") );
+                      fgGetInt("/sim/startup/ysize") );
 
     // we need two render frames here to clear the menu and cursor
     // ... not sure why but doing an extra fgRenderFrame() shouldn't
@@ -562,26 +548,36 @@ void fgDumpSnapShot () {
     renderer->update( true );
     renderer->update( true );
 
+    string dir = fgGetString("/sim/paths/screenshot-dir", fgGetString("/sim/fg-current"));
+    SGPath path(dir + '/');
+    if (path.create_dir( 0755 )) {
+        SG_LOG(SG_GENERAL, SG_ALERT, "Cannot create screenshot directory '"
+                << dir << "'. Trying home directory.");
+        dir = fgGetString("/sim/fg-home");
+    }
+
+    char filename[24];
+    static int count = 1;
     while (count < 1000) {
-        FILE *fp;
         snprintf(filename, 24, "fgfs-screen-%03d.ppm", count++);
-        if ( (fp = fopen(filename, "r")) == NULL )
+
+        SGPath p(dir);
+        p.append(filename);
+        if (!p.exists()) {
+            path.set(p.str());
             break;
-        fclose(fp);
+        }
     }
 
-    int result = sg_glDumpWindow(filename,
+    int result = sg_glDumpWindow(path.c_str(),
                                  fgGetInt("/sim/startup/xsize"),
                                  fgGetInt("/sim/startup/ysize"));
-    fgSetString("/sim/last-screenshot", result ? filename : "");
 
+    fgSetString("/sim/paths/screenshot-last", path.c_str());
     fgSetBool("/sim/signals/screenshot", false);
-    //mkDialog (message.c_str());
-
-    delete [] filename;
 
     if ( show_pu_cursor ) {
-       puShowCursor();
+        puShowCursor();
     }
 
     TurnCursorOn();
@@ -589,9 +585,10 @@ void fgDumpSnapShot () {
     if ( !freeze ) {
         fgSetBool("/sim/freeze/master", false);
     }
+    return result != 0;
 }
 
-// do a screen snap shot
+// do an entire scenegraph dump
 void fgDumpSceneGraph()
 {
     char *filename = new char [24];
@@ -617,7 +614,52 @@ void fgDumpSceneGraph()
     }
 
     if ( fgDumpSceneGraphToFile(filename)) {
-       message = "Scene graphe saved to \"";
+       message = "Entire scene graph saved to \"";
+       message += filename;
+       message += "\".";
+    } else {
+        message = "Failed to save to \"";
+       message += filename;
+       message += "\".";
+    }
+
+    mkDialog (message.c_str());
+
+    delete [] filename;
+
+    if ( !freeze ) {
+        fgSetBool("/sim/freeze/master", false);
+    }
+}
+
+    
+// do an terrain branch dump
+void fgDumpTerrainBranch()
+{
+    char *filename = new char [24];
+    string message;
+    static int count = 1;
+
+    FGRenderer *renderer = globals->get_renderer();
+
+    static const SGPropertyNode *master_freeze
+       = fgGetNode("/sim/freeze/master");
+
+    bool freeze = master_freeze->getBoolValue();
+    if ( !freeze ) {
+        fgSetBool("/sim/freeze/master", true);
+    }
+
+    while (count < 1000) {
+        FILE *fp;
+        snprintf(filename, 24, "fgfs-graph-%03d.osg", count++);
+        if ( (fp = fopen(filename, "r")) == NULL )
+            break;
+        fclose(fp);
+    }
+
+    if ( fgDumpTerrainBranchToFile(filename)) {
+       message = "Terrain graph saved to \"";
        message += filename;
        message += "\".";
     } else {