From 205d5242b2231d2a74f830aac9c6d7a4158569b2 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Wed, 14 Dec 2011 13:04:30 +0000 Subject: [PATCH] better stop/kill --- Fltk/onelabWindow.cpp | 39 +++++++++++++++++++++++++++------------ Fltk/onelabWindow.h | 1 + 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp index 2c1213507a..43d43654e4 100644 --- a/Fltk/onelabWindow.cpp +++ b/Fltk/onelabWindow.cpp @@ -492,11 +492,6 @@ void onelab_cb(Fl_Widget *w, void *data) if(!data) return; std::string action((const char*)data); - if(action == "stop"){ - FlGui::instance()->onelab->deactivate("kill"); - return; - } - if(action == "reset"){ // clear everything except model names std::vector<onelab::string> modelNames; @@ -593,9 +588,6 @@ void onelab_cb(Fl_Widget *w, void *data) if(ps.size()) what += " " + ps[0].getValue(); c->run(what); } - else if(action == "kill"){ - c->kill(); - } if(action == "compute") FlGui::instance()->onelab->checkForErrors(c->getName()); @@ -608,10 +600,35 @@ void onelab_cb(Fl_Widget *w, void *data) } while(!FlGui::instance()->onelab->stop() && action == "compute" && incrementLoop()); + FlGui::instance()->onelab->stop(false); FlGui::instance()->onelab->activate(); FlGui::instance()->onelab->show(); } +void onelab_stop_cb(Fl_Widget *w, void *data) +{ + if(!data) return; + std::string action((const char*)data); + + FlGui::instance()->onelab->stop(true); + + if(action == "stop"){ + FlGui::instance()->onelab->deactivate("kill"); + return; + } + + // Iterate over all other clients + for(onelab::server::citer it = onelab::server::instance()->firstClient(); + it != onelab::server::instance()->lastClient(); it++){ + onelab::client *c = it->second; + if(c->getName() == "Gmsh" || // local Gmsh client + c->getName() == "Listen" || // unknown client connecting through "-listen" + c->getName() == "GmshRemote") // distant post-processing Gmsh client + continue; + c->kill(); + } +} + static void onelab_check_button_cb(Fl_Widget *w, void *data) { if(!data) return; @@ -886,7 +903,6 @@ void onelabWindow::checkForErrors(const std::string &client) void onelabWindow::activate() { - _stop = false; _butt[0]->label("Compute"); _butt[0]->callback(onelab_cb, (void*)"compute"); _butt[1]->activate(); @@ -894,9 +910,8 @@ void onelabWindow::activate() void onelabWindow::deactivate(const std::string &how) { - _stop = (how == "stop") ? false : true; - _butt[0]->label((how == "stop") ? "Stop" : "Kill"); - _butt[0]->callback(onelab_cb, (how == "stop") ? (void*)"stop" : (void*)"kill"); + _butt[0]->label(how == "stop" ? "Stop" : "Kill"); + _butt[0]->callback(onelab_stop_cb, (how == "stop") ? (void*)"stop" : (void*)"kill"); _butt[1]->deactivate(); } diff --git a/Fltk/onelabWindow.h b/Fltk/onelabWindow.h index 8cf3abb36e..a4a266cac7 100644 --- a/Fltk/onelabWindow.h +++ b/Fltk/onelabWindow.h @@ -53,6 +53,7 @@ class onelabWindow{ void removeSolver(const std::string &name); void checkForErrors(const std::string &client); bool stop(){ return _stop; } + void stop(bool val){ _stop = val; } }; void onelab_cb(Fl_Widget *w, void *data); -- GitLab