From 499195fe67b63e3fdf72f775657f43eba3d6b4bb Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Fri, 16 Dec 2005 20:20:17 +0000
Subject: [PATCH] print option dialogs now also show up when saving files "by
 extension"

---
 Fltk/Callbacks.cpp      | 27 +++++++++----
 Graphics/CreateFile.cpp | 86 +++++++++++++++++++++++------------------
 Graphics/CreateFile.h   |  3 +-
 3 files changed, 70 insertions(+), 46 deletions(-)

diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 8b7633e57d..1b28f88081 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.385 2005-12-16 17:35:32 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.386 2005-12-16 20:20:17 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -594,12 +594,6 @@ void file_merge_cb(CALLBACK_ARGS)
     WID->set_context(menu_post, 0);
 }
 
-int _save_auto(char *name)
-{
-  CreateOutputFile(name, FORMAT_AUTO);
-  return 1;
-}
-
 int _save_options(char *name)
 {
   return options_dialog(name);
@@ -722,6 +716,25 @@ int _save_yuv(char *name)
   return 1;
 }
 
+int _save_auto(char *name)
+{
+  switch(GuessFileFormatFromFileName(name)){
+  case FORMAT_OPT     : return _save_options(name);
+  case FORMAT_MSH     : return _save_msh(name);
+  case FORMAT_PS      : return _save_ps(name);
+  case FORMAT_EPS     : return _save_eps(name);
+  case FORMAT_EPSTEX  : return _save_epstex(name);
+  case FORMAT_PDF     : return _save_pdf(name);
+  case FORMAT_PDFTEX  : return _save_pdftex(name);
+  case FORMAT_JPEGTEX : return _save_jpegtex(name);
+  case FORMAT_JPEG    : return _save_jpeg(name);
+  case FORMAT_GIF     : return _save_gif(name);
+  default :
+    CreateOutputFile(name, FORMAT_AUTO); 
+    return 1;
+  }
+}
+
 typedef struct{
   char *pat;
   int (*func) (char *name);
diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp
index d0d28fa240..d1bc155bf8 100644
--- a/Graphics/CreateFile.cpp
+++ b/Graphics/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.71 2005-12-16 19:17:33 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.72 2005-12-16 20:20:17 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -45,12 +45,55 @@ void FillBuffer(void)
   Draw2d();
 }
 
+int GuessFileFormatFromFileName(char *name)
+{
+  int len;
+  char ext[256];
+
+  for(len = strlen(name) - 1; len >= 0; len--) {
+    if(name[len] == '.') {
+      strcpy(ext, &name[len]);
+      break;
+    }
+  }
+  if(len <= 0)
+    strcpy(ext, "");
+  
+  if(!strcmp(ext, ".geo"))          return FORMAT_GEO;
+  else if(!strcmp(ext, ".opt"))     return FORMAT_OPT;
+  else if(!strcmp(ext, ".msh"))     return FORMAT_MSH;
+  else if(!strcmp(ext, ".unv"))     return FORMAT_UNV;
+  else if(!strcmp(ext, ".p3d"))     return FORMAT_P3D;
+  else if(!strcmp(ext, ".dmg"))     return FORMAT_DMG;
+  else if(!strcmp(ext, ".stl"))     return FORMAT_STL;
+  else if(!strcmp(ext, ".pos"))     return FORMAT_LC;
+  else if(!strcmp(ext, ".gif"))     return FORMAT_GIF;
+  else if(!strcmp(ext, ".jpg"))     return FORMAT_JPEG;
+  else if(!strcmp(ext, ".jpeg"))    return FORMAT_JPEG;
+  else if(!strcmp(ext, ".png"))     return FORMAT_PNG;
+  else if(!strcmp(ext, ".ps"))      return FORMAT_PS;
+  else if(!strcmp(ext, ".eps"))     return FORMAT_EPS;
+  else if(!strcmp(ext, ".pdf"))     return FORMAT_PDF;
+  else if(!strcmp(ext, ".tex"))     return FORMAT_TEX;
+  else if(!strcmp(ext, ".epstex"))  return FORMAT_EPSTEX;
+  else if(!strcmp(ext, ".pdftex"))  return FORMAT_PDFTEX;
+  else if(!strcmp(ext, ".jpegtex")) return FORMAT_JPEGTEX;
+  else if(!strcmp(ext, ".ppm"))     return FORMAT_PPM;
+  else if(!strcmp(ext, ".yuv"))     return FORMAT_YUV;
+  else if(!strcmp(ext, ".gref"))    return FORMAT_GREF;
+  else if(!strcmp(ext, ".Gref"))    return FORMAT_GREF;
+  else if(!strcmp(ext, ".wrl"))     return FORMAT_VRML;
+  else{
+    Msg(GERROR, "Unknown extension '%s' for automatic format detection", ext);
+    return -1;
+  }
+}
+
 void CreateOutputFile(char *name, int format)
 {
   FILE *fp;
   GLint size3d, viewport[4], width, height;
-  char ext[256];
-  int len, res, oldformat, psformat, pssort, psoptions;
+  int res, oldformat, psformat, pssort, psoptions, guess;
 
   if(!name || !strlen(name))
     return;
@@ -65,41 +108,8 @@ void CreateOutputFile(char *name, int format)
   switch (format) {
 
   case FORMAT_AUTO:
-    for(len = strlen(name) - 1; len >= 0; len--) {
-      if(name[len] == '.') {
-        strcpy(ext, &name[len]);
-        break;
-      }
-    }
-    if(len <= 0)
-      strcpy(ext, "");
-
-    if(!strcmp(ext, ".geo"))       CreateOutputFile(name, FORMAT_GEO);
-    else if(!strcmp(ext, ".opt"))  CreateOutputFile(name, FORMAT_OPT);
-    else if(!strcmp(ext, ".msh"))  CreateOutputFile(name, FORMAT_MSH);
-    else if(!strcmp(ext, ".unv"))  CreateOutputFile(name, FORMAT_UNV);
-    else if(!strcmp(ext, ".p3d"))  CreateOutputFile(name, FORMAT_P3D);
-    else if(!strcmp(ext, ".dmg"))  CreateOutputFile(name, FORMAT_DMG);
-    else if(!strcmp(ext, ".stl"))  CreateOutputFile(name, FORMAT_STL);
-    else if(!strcmp(ext, ".pos"))  CreateOutputFile(name, FORMAT_LC);
-    else if(!strcmp(ext, ".gif"))  CreateOutputFile(name, FORMAT_GIF);
-    else if(!strcmp(ext, ".jpg"))  CreateOutputFile(name, FORMAT_JPEG);
-    else if(!strcmp(ext, ".jpeg")) CreateOutputFile(name, FORMAT_JPEG);
-    else if(!strcmp(ext, ".png"))  CreateOutputFile(name, FORMAT_PNG);
-    else if(!strcmp(ext, ".ps"))   CreateOutputFile(name, FORMAT_PS);
-    else if(!strcmp(ext, ".eps"))  CreateOutputFile(name, FORMAT_EPS);
-    else if(!strcmp(ext, ".pdf"))  CreateOutputFile(name, FORMAT_PDF);
-    else if(!strcmp(ext, ".tex"))  CreateOutputFile(name, FORMAT_TEX);
-    else if(!strcmp(ext, ".epstex")) CreateOutputFile(name, FORMAT_EPSTEX);
-    else if(!strcmp(ext, ".pdftex")) CreateOutputFile(name, FORMAT_PDFTEX);
-    else if(!strcmp(ext, ".jpegtex")) CreateOutputFile(name, FORMAT_JPEGTEX);
-    else if(!strcmp(ext, ".ppm"))  CreateOutputFile(name, FORMAT_PPM);
-    else if(!strcmp(ext, ".yuv"))  CreateOutputFile(name, FORMAT_YUV);
-    else if(!strcmp(ext, ".gref")) CreateOutputFile(name, FORMAT_GREF);
-    else if(!strcmp(ext, ".Gref")) CreateOutputFile(name, FORMAT_GREF);
-    else if(!strcmp(ext, ".wrl"))  CreateOutputFile(name, FORMAT_VRML);
-    else
-      Msg(GERROR, "Unknown extension '%s' for automatic format detection", ext);
+    guess = GuessFileFormatFromFileName(name);
+    if(guess >= 0) CreateOutputFile(name, guess);
     break;
 
   case FORMAT_GEO:
diff --git a/Graphics/CreateFile.h b/Graphics/CreateFile.h
index addbfaa69b..c7117d5e53 100644
--- a/Graphics/CreateFile.h
+++ b/Graphics/CreateFile.h
@@ -20,6 +20,7 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-void CreateOutputFile (char *name, int format) ;
+int GuessFileFormatFromFileName(char *name);
+void CreateOutputFile (char *name, int format);
 
 #endif
-- 
GitLab