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