From 8c8c9e778d1f7f83c65b524537179d07f59382dd Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Tue, 18 Oct 2011 06:31:31 +0000
Subject: [PATCH] exchange mesh file name through onelab, too!

---
 Fltk/menuWindow.cpp   |  8 +-------
 Fltk/menuWindow.h     |  1 -
 Fltk/onelabWindow.cpp | 36 +++++++++++++++++++++++++++++++-----
 3 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp
index b066e75d1e..9aeafbe1ab 100644
--- a/Fltk/menuWindow.cpp
+++ b/Fltk/menuWindow.cpp
@@ -1595,12 +1595,6 @@ static void geometry_physical_add_cb(Fl_Widget *w, void *data)
 
 void mesh_save_cb(Fl_Widget *w, void *data)
 {
-  bool force_overwrite = false;
-  if(data){
-    std::string str((const char*)data);
-    if(str == "force overwrite") force_overwrite = true;
-  }
-
   std::string name = CTX::instance()->outputFileName;
   if(name.empty()){
     if(CTX::instance()->mesh.fileFormat == FORMAT_AUTO)
@@ -1608,7 +1602,7 @@ void mesh_save_cb(Fl_Widget *w, void *data)
     else
       name = GetDefaultFileName(CTX::instance()->mesh.fileFormat);
   }
-  if(!force_overwrite && CTX::instance()->confirmOverwrite) {
+  if(CTX::instance()->confirmOverwrite) {
     if(!StatFile(name))
       if(!fl_choice("File '%s' already exists.\n\nDo you want to replace it?",
                     "Cancel", "Replace", 0, name.c_str()))
diff --git a/Fltk/menuWindow.h b/Fltk/menuWindow.h
index 18c1ed86d9..94d982c7f4 100644
--- a/Fltk/menuWindow.h
+++ b/Fltk/menuWindow.h
@@ -91,7 +91,6 @@ void geometry_reload_cb(Fl_Widget *w, void *data);
 void mesh_1d_cb(Fl_Widget *w, void *data);
 void mesh_2d_cb(Fl_Widget *w, void *data);
 void mesh_3d_cb(Fl_Widget *w, void *data);
-void mesh_save_cb(Fl_Widget *w, void *data);
 void help_about_cb(Fl_Widget *w, void *data);
 
 #endif
diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp
index c8212de009..ff54177f1f 100644
--- a/Fltk/onelabWindow.cpp
+++ b/Fltk/onelabWindow.cpp
@@ -15,6 +15,7 @@
 #include "OS.h"
 #include "StringUtils.h"
 #include "OpenFile.h"
+#include "CreateFile.h"
 #include "drawContext.h"
 #include "PView.h"
 #include "FlGui.h"
@@ -227,6 +228,27 @@ bool onelab::localNetworkClient::kill()
   return false;
 }
 
+static void save_mesh(onelab::client *c)
+{
+  std::vector<onelab::string> ps;
+  c->get(ps, "Gmsh/MshFileName");
+  if(ps.size()){
+    CreateOutputFile(ps[0].getValue(), CTX::instance()->mesh.fileFormat);
+  }
+  else{
+    std::string name = CTX::instance()->outputFileName;
+    if(name.empty()){
+      if(CTX::instance()->mesh.fileFormat == FORMAT_AUTO)
+        name = GetDefaultFileName(FORMAT_MSH);
+      else
+        name = GetDefaultFileName(CTX::instance()->mesh.fileFormat);
+    }
+    onelab::string o("Gmsh/MshFileName", name, "Mesh name");
+    c->set(o);
+    CreateOutputFile(o.getValue(), CTX::instance()->mesh.fileFormat);
+  }
+}
+
 void onelab_cb(Fl_Widget *w, void *data)
 {
   if(!data) return;
@@ -255,10 +277,14 @@ void onelab_cb(Fl_Widget *w, void *data)
   // the Gmsh client is special: it always gets executed first. (The
   // meta-model will allow more flexibility: but in the simple GUI we
   // can assume this)
-  if(onelab::server::instance()->findClient("Gmsh") != 
-     onelab::server::instance()->lastClient()){
-    // reload geometry and/or mesh if Gmsh parameters have been modified
-    if(onelab::server::instance()->getChanged("Gmsh")){
+  onelab::server::citer it = onelab::server::instance()->findClient("Gmsh");
+  if(it != onelab::server::instance()->lastClient()){
+    static std::string gmshModelName = GModel::current()->getName();
+    // reload geometry and/or mesh it if Gmsh parameters have been
+    // modified or if the geometrical model has changed
+    if(onelab::server::instance()->getChanged("Gmsh") ||
+       gmshModelName != GModel::current()->getName()){
+      gmshModelName = GModel::current()->getName();
       if(action == "check"){
         geometry_reload_cb(0, 0);
       }
@@ -266,7 +292,7 @@ void onelab_cb(Fl_Widget *w, void *data)
         geometry_reload_cb(0, 0);
         if(FlGui::instance()->onelab->meshAuto()){
           mesh_3d_cb(0, 0);
-          mesh_save_cb(0, (void*)"force overwrite");
+          save_mesh(it->second);
         }
         onelab::server::instance()->setChanged(false, "Gmsh");
       }
-- 
GitLab