diff --git a/Common/onelab.h b/Common/onelab.h index 2e9dfaf53ebb21163cdb89be3e89d72d82087f92..f5403813ac2f66a927138dfd643b10ae2d7d520f 100644 --- a/Common/onelab.h +++ b/Common/onelab.h @@ -378,12 +378,17 @@ namespace onelab{ } public: parameterSpace(){} - ~parameterSpace() + ~parameterSpace(){ clear(); } + void clear() { std::set<parameter*> ps; _getAllParameters(ps); for(std::set<parameter*>::iterator it = ps.begin(); it != ps.end(); it++) delete *it; + _numbers.clear(); + _strings.clear(); + _regions.clear(); + _functions.clear(); } bool set(number &p, bool value=true){ return _set(p, _numbers, value); } bool set(string &p, bool value=true){ return _set(p, _strings, value); } @@ -487,6 +492,7 @@ namespace onelab{ if(!_server) _server = new server(address); return _server; } + void clear(){ _parameterSpace.clear(); } template <class T> bool set(T &p, bool value=true) { return _parameterSpace.set(p, value); diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp index 209667350d268e1dc9af74f9ccfaba2d1e72dd9d..d292e4472f85d15914d9a1d39d83b902b1e2c51f 100644 --- a/Fltk/graphicWindow.cpp +++ b/Fltk/graphicWindow.cpp @@ -55,7 +55,7 @@ static void gmsh_forward(Fl_Color c) static void gmsh_back(Fl_Color c) { - fl_rotate(180); + fl_rotate(180); gmsh_forward(c); } @@ -93,6 +93,23 @@ static void gmsh_clscale(Fl_Color c) bl; vv(-0.2,0.2); vv(0.9,0.2); vv(-0.2,-0.9); el; } +static void gmsh_gear(Fl_Color c) +{ + fl_color(c); + fl_line_style(FL_SOLID, 2); + fl_begin_line(); fl_arc(0.0, 0.0, 0.5, 0.0, 360.0); fl_end_line(); + for(int i = 0; i < 8; i++){ + fl_rotate(i * 360./8.); + fl_begin_complex_polygon(); + fl_vertex(0.5, -0.13); + fl_vertex(1.0, -0.13); + fl_vertex(1.0, 0.13); + fl_vertex(0.5, 0.13); + fl_end_complex_polygon(); + } + fl_line_style(FL_SOLID); +} + #undef vv #undef bl #undef el @@ -469,6 +486,7 @@ graphicWindow::graphicWindow(bool main, int numTiles) fl_add_symbol("gmsh_rotate", gmsh_rotate, 1); fl_add_symbol("gmsh_models", gmsh_models, 1); fl_add_symbol("gmsh_clscale", gmsh_clscale, 1); + fl_add_symbol("gmsh_gear", gmsh_gear, 1); first = false; } diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp index ac80ac1e7b8328e4741726be989c9fe02c45f199..c8212de00987e52dc6f9e1a3e1507a4ce464ad6c 100644 --- a/Fltk/onelabWindow.cpp +++ b/Fltk/onelabWindow.cpp @@ -74,12 +74,16 @@ bool onelab::localNetworkClient::run(const std::string &what) _pid = 0; onelabGmshServer *server = new onelabGmshServer(this); - std::string sockname = "localhost:1631"; - std::string command = _commandLine + " " + what + " -onelab " + sockname + " &"; + std::string sockname = CTX::instance()->solver.socketName; + std::string command = _commandLine + " " + what + " -onelab " + sockname; +#if !defined(WIN32) + command += " &"; +#endif int sock; try{ - sock = server->Start(command.c_str(), sockname.c_str(), 30); + sock = server->Start(command.c_str(), sockname.c_str(), + CTX::instance()->solver.timeout); } catch(const char *err){ Msg::Error("%s (on socket '%s')", err, sockname.c_str()); @@ -228,6 +232,14 @@ void onelab_cb(Fl_Widget *w, void *data) if(!data) return; std::string action((const char*)data); + if(action == "reset"){ + onelab::server::instance()->clear(); + if(onelab::server::instance()->findClient("Gmsh") != + onelab::server::instance()->lastClient()) + geometry_reload_cb(0, 0); + action = "initial check"; + } + if(action == "choose model"){ if(fileChooser(FILE_CHOOSER_SINGLE, "Choose", "*.pro")) FlGui::instance()->onelab->setModelName(fileChooserGetName(1)); @@ -252,8 +264,10 @@ void onelab_cb(Fl_Widget *w, void *data) } else if(action == "compute"){ geometry_reload_cb(0, 0); - mesh_3d_cb(0, 0); - mesh_save_cb(0, (void*)"force overwrite"); + if(FlGui::instance()->onelab->meshAuto()){ + mesh_3d_cb(0, 0); + mesh_save_cb(0, (void*)"force overwrite"); + } onelab::server::instance()->setChanged(false, "Gmsh"); } } @@ -349,6 +363,16 @@ onelabWindow::onelabWindow(int deltaFontSize) _butt[1] = new Fl_Button(width - 2*WB - 2*BB, height - WB - BH, BB, BH, "Check"); _butt[1]->callback(onelab_cb, (void*)"check"); + static Fl_Menu_Item gear_menu[] = { + {"Reset database", 0, onelab_cb, (void*)"reset"}, + {"Mesh automatically", 0, 0, 0, FL_MENU_TOGGLE}, + {0} + }; + gear_menu[1].set(); + _gear = new Fl_Menu_Button + (_butt[1]->x() - WB - BB/2, _butt[1]->y(), BB/2, BH, "@-1gmsh_gear"); + _gear->menu(gear_menu); + Fl_Box *resbox = new Fl_Box(WB, height - BH - 3 * WB, WB, WB); _win->resizable(resbox); @@ -358,6 +382,7 @@ onelabWindow::onelabWindow(int deltaFontSize) FL_NORMAL_SIZE += deltaFontSize; + // FIXME adding GetDP client onelab::server::instance()->registerClient (new onelab::localNetworkClient("GetDP", opt_solver_executable0(0, GMSH_GET, ""))); diff --git a/Fltk/onelabWindow.h b/Fltk/onelabWindow.h index f775a09effc630b90ec82181c6dae7176c14f17b..64dc094af6588659ecaea5a4169afc5dc4b153e9 100644 --- a/Fltk/onelabWindow.h +++ b/Fltk/onelabWindow.h @@ -21,6 +21,7 @@ class onelabWindow{ Fl_Tree *_tree; Fl_Button *_butt[2]; Fl_Input *_model; + Fl_Menu_Button *_gear; std::vector<Fl_Widget*> _treeWidgets; public: onelabWindow(int deltaFontSize=0); @@ -31,6 +32,7 @@ class onelabWindow{ void show(){ _win->show(); } std::string getModelName(){ return _model->value(); } void setModelName(const std::string &name){ _model->value(name.c_str()); } + int meshAuto(){ return _gear->menu()[1].value(); } std::string getPath(Fl_Tree_Item *item) { char path[1024];