]> git.mxchange.org Git - flightgear.git/commitdiff
Nicolas: make screenshot target dir configurable (idea and first draft)
authormfranz <mfranz>
Sat, 26 Apr 2008 22:34:46 +0000 (22:34 +0000)
committermfranz <mfranz>
Sat, 26 Apr 2008 22:34:46 +0000 (22:34 +0000)
         --prop:sim/paths/screenshot-dir=/tmp

src/GUI/gui.h
src/GUI/gui_funcs.cxx
src/Main/fg_commands.cxx

index 02717d4084cdce6550dba96f3face6ae4df2a5a6..c4ec4962cc893e390c9b5683301c5b125c1ced07 100644 (file)
@@ -46,7 +46,7 @@ extern void mkDialog(const char *txt);
 extern void guiErrorMessage(const char *txt);
 extern void guiErrorMessage(const char *txt, const sg_throwable &throwable);
 
-extern void fgDumpSnapShot();
+extern bool fgDumpSnapShot();
 extern void fgDumpSceneGraph();
 extern void fgDumpTerrainBranch();
 
index acad392eec52b5262895bf988955a5fde63fd906..4a3bd8793eb9a1d48fb5298add0c3ebe742a0870 100644 (file)
@@ -102,14 +102,6 @@ extern void fgUpdateHUD( GLfloat x_start, GLfloat y_start,
 #endif
 
 
-// TODO: remove after the last hardcoded dialog has died
-const char *gui_msg_OK     = "OK";
-const char *gui_msg_NO     = "NO";
-const char *gui_msg_YES    = "YES";
-const char *gui_msg_CANCEL = "CANCEL";
-const char *gui_msg_RESET  = "RESET";
-
-
 const __fg_gui_fn_t __fg_gui_fn[] = {
 
         // File
@@ -531,13 +523,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 +534,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 +549,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,6 +586,7 @@ void fgDumpSnapShot () {
     if ( !freeze ) {
         fgSetBool("/sim/freeze/master", false);
     }
+    return result != 0;
 }
 
 // do an entire scenegraph dump
index dfc8f92c7308b77204a8f5912714eb337ae9f775..c25e36e5f07ba15ef1dd2b74eb2df1288c4a8a54 100644 (file)
@@ -463,8 +463,7 @@ do_view_cycle (const SGPropertyNode * arg)
 static bool
 do_screen_capture (const SGPropertyNode * arg)
 {
-  fgDumpSnapShot();
-  return true;
+  return fgDumpSnapShot();
 }
 
 static bool