diff --git a/Common/Context.h b/Common/Context.h index 2f85aa0bf28d14c3b2c4e1c6d6f8e9256fc1d8fc..6014f4c8ed84dbbf72313c6d2aa8047f8e949d52 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -259,7 +259,8 @@ class CTX { std::string socketName, pythonInterpreter, octaveInterpreter; std::string name[NUM_SOLVERS], extension[NUM_SOLVERS]; std::string executable[NUM_SOLVERS], remoteLogin[NUM_SOLVERS]; - int autoSaveDatabase, autoArchiveOutputFiles, autoMesh, autoMergeFile; + int autoSaveDatabase, autoLoadDatabase; + int autoArchiveOutputFiles, autoMesh, autoMergeFile; int autoShowViews, autoShowLastStep, autoCheck, showInvisibleParameters; }solver; // print options diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index e998901bc093fbeefd59ba0c920324e2972fefe7..7fd61995c77f1e2770b509ca4567570a0428456a 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -1294,8 +1294,10 @@ StringXNumber SolverOptions_Number[] = { "Automatically archive output files after each computation" }, { F|O, "AutoCheck" , opt_solver_auto_check , 1. , "Automatically check model every time a parameter is changed" }, - { F|O, "AutoSaveDatabase" , opt_solver_auto_save_database , 0. , - "Automatically save database after each computation" }, + { F|O, "AutoLoadDatabase" , opt_solver_auto_load_database , 0. , + "Automatically load the ONELAB database when launching a solver" }, + { F|O, "AutoSaveDatabase" , opt_solver_auto_save_database , 1. , + "Automatically save the ONELAB database after each computation" }, { F|O, "AutoMesh" , opt_solver_auto_mesh , 1. , "Automatically mesh if necesssary (0: never remesh; 1: on startup, use existing " "mesh on disk if available; 2: always remesh)" }, diff --git a/Common/Options.cpp b/Common/Options.cpp index ca0760cb2e82a884d8f845d033c9a1a3e173aa92..a16ea965800e4063c2b44f38a46a347bd2e681b1 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -6585,6 +6585,13 @@ double opt_solver_plugins(OPT_ARGS_NUM) return CTX::instance()->solver.plugins; } +double opt_solver_auto_load_database(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) + CTX::instance()->solver.autoLoadDatabase = (int)val; + return CTX::instance()->solver.autoLoadDatabase; +} + double opt_solver_auto_save_database(OPT_ARGS_NUM) { if(action & GMSH_SET) diff --git a/Common/Options.h b/Common/Options.h index 71afb1ac843ce364613c4d7dc00de26ea8a54e9b..0fd4df55eec3a20908e33b8700d5e5964b61b5cf 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -546,6 +546,7 @@ double opt_mesh_ignore_part_bound(OPT_ARGS_NUM); double opt_solver_listen(OPT_ARGS_NUM); double opt_solver_timeout(OPT_ARGS_NUM); double opt_solver_plugins(OPT_ARGS_NUM); +double opt_solver_auto_load_database(OPT_ARGS_NUM); double opt_solver_auto_save_database(OPT_ARGS_NUM); double opt_solver_auto_archive_output_files(OPT_ARGS_NUM); double opt_solver_auto_check(OPT_ARGS_NUM); diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp index fe15adf551d0089baa11c293a4cff92ad19a2ffe..8001f6e54f02341f959f6c00e46d919668203ac7 100644 --- a/Fltk/onelabGroup.cpp +++ b/Fltk/onelabGroup.cpp @@ -201,7 +201,8 @@ void onelab_cb(Fl_Widget *w, void *data) if(action == "compute" && (CTX::instance()->solver.autoSaveDatabase || CTX::instance()->solver.autoArchiveOutputFiles)){ - std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db"; + std::vector<std::string> split = SplitFileName(GModel::current()->getFileName()); + std::string db = split[0] + split[1] + ".db"; if(CTX::instance()->solver.autoArchiveOutputFiles) archiveOutputFiles(db); if(CTX::instance()->solver.autoSaveDatabase) saveDb(db); } @@ -221,6 +222,8 @@ void onelab_option_cb(Fl_Widget *w, void *data) double val = ((Fl_Menu_*)w)->mvalue()->value() ? 1. : 0.; if(what == "save") CTX::instance()->solver.autoSaveDatabase = val; + else if(what == "load") + CTX::instance()->solver.autoLoadDatabase = val; else if(what == "archive") CTX::instance()->solver.autoArchiveOutputFiles = val; else if(what == "check"){ @@ -464,7 +467,9 @@ onelabGroup::onelabGroup(int x, int y, int w, int h, const char *l) _gearOptionsStart = _gear->menu()->size(); - _gear->add("Save && load database automatically", 0, onelab_option_cb, (void*)"save", + _gear->add("Save database automatically", 0, onelab_option_cb, (void*)"save", + FL_MENU_TOGGLE); + _gear->add("Load database automatically", 0, onelab_option_cb, (void*)"load", FL_MENU_TOGGLE); _gear->add("Archive output files automatically", 0, onelab_option_cb, (void*)"archive", FL_MENU_TOGGLE); @@ -1253,7 +1258,8 @@ std::string onelabGroup::getPath(Fl_Tree_Item *item) void onelabGroup::updateGearMenu() { Fl_Menu_Item* menu = (Fl_Menu_Item*)_gear->menu(); - int values[8] = {CTX::instance()->solver.autoSaveDatabase, + int values[9] = {CTX::instance()->solver.autoSaveDatabase, + CTX::instance()->solver.autoLoadDatabase, CTX::instance()->solver.autoArchiveOutputFiles, CTX::instance()->solver.autoCheck, CTX::instance()->solver.autoMesh, @@ -1261,7 +1267,7 @@ void onelabGroup::updateGearMenu() CTX::instance()->solver.autoShowViews, CTX::instance()->solver.autoShowLastStep, CTX::instance()->solver.showInvisibleParameters}; - for(int i = 0; i < 8; i++){ + for(int i = 0; i < 9; i++){ int idx = _gearOptionsStart - 1 + i; if(values[i]) menu[idx].set(); @@ -1365,8 +1371,9 @@ void solver_cb(Fl_Widget *w, void *data) FlGui::instance()->onelab->rebuildSolverList(); } - if(CTX::instance()->solver.autoSaveDatabase){ - std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db"; + if(CTX::instance()->solver.autoLoadDatabase){ + std::vector<std::string> split = SplitFileName(GModel::current()->getFileName()); + std::string db = split[0] + split[1] + ".db"; if(!StatFile(db)){ loadDb(db); CTX::instance()->launchSolverAtStartup = -1;