diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp index b066e75d1eb6d0ff0c34ae1833da292ca8370ab9..9aeafbe1abd6fe8c0a4e6a36a43e9ac16b0a84ed 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 18c1ed86d9a357229286bcb678130a276fdc1cb8..94d982c7f4dfde0f51e81aa3b2c09247105af3de 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 c8212de00987e52dc6f9e1a3e1507a4ce464ad6c..ff54177f1f36a033c896d4bfd076f68fe11178c1 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"); }