Skip to content
Snippets Groups Projects
Commit 44ab0b9e authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

simpler

parent 50ce7e6b
No related branches found
No related tags found
No related merge requests found
...@@ -83,6 +83,7 @@ class GmshSocket{ ...@@ -83,6 +83,7 @@ class GmshSocket{
GMSH_PARAMETER_NOT_FOUND = 29, GMSH_PARAMETER_NOT_FOUND = 29,
GMSH_SPEED_TEST = 30, GMSH_SPEED_TEST = 30,
GMSH_PARAMETER_CLEAR = 31, GMSH_PARAMETER_CLEAR = 31,
GMSH_PARAMETER_UPDATE = 32,
GMSH_OPTION_1 = 100, GMSH_OPTION_1 = 100,
GMSH_OPTION_2 = 101, GMSH_OPTION_2 = 101,
GMSH_OPTION_3 = 102, GMSH_OPTION_3 = 102,
......
...@@ -352,23 +352,16 @@ namespace onelabUtils { ...@@ -352,23 +352,16 @@ namespace onelabUtils {
return redraw; return redraw;
} }
// x is the parameter as on server // update x using y, giving priority to any settings in x that can be set in
// y is the argument of set // the GUI. The value of x is only changed if y is read-only.
// The routine updates x on basis of y.
// If the parameter is not yet defined, set(y) as is
// If the parameter is already defined, priority must be given to the server state
// for all items editable from the GUI, i.e. value, range, Loop, Graph, Closed.
// If y.getReadOnly() is true, the value of y overrides that of x
double updateNumber(onelab::number &x, onelab::number &y, const bool readOnlyRange) double updateNumber(onelab::number &x, onelab::number &y, const bool readOnlyRange)
{ {
bool noRange = true, noChoices = true, noLoop = true; bool noRange = true, noChoices = true, noLoop = true;
bool noGraph = true, noClosed = true; bool noGraph = true, noClosed = true;
if(y.getReadOnly()){ if(y.getReadOnly()){
x.setValue(y.getValue()); // use set value x.setValue(y.getValue());
x.setReadOnly(1); // makes the field "value" non-editable in the GUI x.setReadOnly(true);
} }
double val = x.getValue(); double val = x.getValue();
...@@ -385,7 +378,6 @@ namespace onelabUtils { ...@@ -385,7 +378,6 @@ namespace onelabUtils {
if(x.getAttribute("Graph").size()) noGraph = false; if(x.getAttribute("Graph").size()) noGraph = false;
if(x.getAttribute("Closed").size()) noClosed = false; if(x.getAttribute("Closed").size()) noClosed = false;
// send updated parameter to server
if(noRange){ if(noRange){
bool noRangeEither = true; bool noRangeEither = true;
if(y.getMin() != -onelab::parameter::maxNumber() || if(y.getMin() != -onelab::parameter::maxNumber() ||
...@@ -397,7 +389,7 @@ namespace onelabUtils { ...@@ -397,7 +389,7 @@ namespace onelabUtils {
} }
else{ else{
// if no range/min/max/step info is provided, try to compute a reasonnable // if no range/min/max/step info is provided, try to compute a reasonnable
// range and step (this makes the gui much nicer to use) // range and step (this makes the GUI much nicer to use)
bool isInteger = (floor(val) == val); bool isInteger = (floor(val) == val);
double fact = isInteger ? 5. : 20.; double fact = isInteger ? 5. : 20.;
if(val > 0){ if(val > 0){
...@@ -424,18 +416,18 @@ namespace onelabUtils { ...@@ -424,18 +416,18 @@ namespace onelabUtils {
if(noLoop) x.setAttribute("Loop", y.getAttribute("Loop")); if(noLoop) x.setAttribute("Loop", y.getAttribute("Loop"));
if(noGraph) x.setAttribute("Graph", y.getAttribute("Graph")); if(noGraph) x.setAttribute("Graph", y.getAttribute("Graph"));
if(noClosed) x.setAttribute("Closed", y.getAttribute("Closed")); if(noClosed) x.setAttribute("Closed", y.getAttribute("Closed"));
return val; return val;
} }
// update x using y, giving priority to any settings in x that can be set in
// the GUI. The value of x is only changed if y is read-only.
std::string updateString(onelab::string &x, onelab::string &y) std::string updateString(onelab::string &x, onelab::string &y)
{ {
bool noChoices = true, noClosed = true, noMultipleSelection = true; bool noChoices = true, noClosed = true, noMultipleSelection = true;
if(y.getReadOnly()){ if(y.getReadOnly()){
x.setValue(y.getValue()); // use set value x.setValue(y.getValue());
x.setReadOnly(1); // makes the field "value" non-editable in the GUI x.setReadOnly(true);
} }
std::string val = x.getValue(); std::string val = x.getValue();
......
...@@ -193,105 +193,74 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master) ...@@ -193,105 +193,74 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master)
} }
break; break;
case GmshSocket::GMSH_PARAMETER: case GmshSocket::GMSH_PARAMETER:
case GmshSocket::GMSH_PARAMETER_UPDATE:
{ {
std::string version, type, name; std::string version, ptype, name;
onelab::parameter::getInfoFromChar(message, version, type, name); onelab::parameter::getInfoFromChar(message, version, ptype, name);
if(onelab::parameter::version() != version){ if(onelab::parameter::version() != version){
Msg::Error("OneLab version mismatch (server: %s / client: %s)", Msg::Error("OneLab version mismatch (server: %s / client: %s)",
onelab::parameter::version().c_str(), version.c_str()); onelab::parameter::version().c_str(), version.c_str());
} }
else if(type == "number"){ else if(ptype == "number"){
onelab::number p; p.fromChar(message); set(p); onelab::number p; p.fromChar(message);
if(p.getName() == getName() + "/Progress") if(type == GmshSocket::GMSH_PARAMETER_UPDATE){
if(FlGui::available())
FlGui::instance()->setProgress(p.getLabel().c_str(), p.getValue(),
p.getMin(), p.getMax());
}
else if(type == "string"){
onelab::string p; p.fromChar(message); set(p);
}
else if(type == "region"){
onelab::region p; p.fromChar(message); set(p);
}
else if(type == "function"){
onelab::function p; p.fromChar(message); set(p);
}
else
Msg::Error("Unknown OneLab parameter type: %s", type.c_str());
}
break;
case 32: //case GmshSocket::GMSH_PARAMETER_UPDATE:
{
std::string version, type, name;
onelab::parameter::getInfoFromChar(message, version, type, name);
if(onelab::parameter::version() != version){
Msg::Error("OneLab version mismatch (server: %s / client: %s)",
onelab::parameter::version().c_str(), version.c_str());
}
else if(type == "number"){
onelab::number p;
std::vector<onelab::number> par; get(par, name); std::vector<onelab::number> par; get(par, name);
if(par.size() == 1) { if(par.size()) {
p = par[0]; onelab::number y = p; p = par[0]; onelabUtils::updateNumber(p, y);
onelab::number y; y.fromChar(message); }
onelabUtils::updateNumber(p,y);
} }
else
p.fromChar(message);
set(p); set(p);
if(p.getName() == getName() + "/Progress") if(p.getName() == getName() + "/Progress")
if(FlGui::available()) if(FlGui::available())
FlGui::instance()->setProgress(p.getLabel().c_str(), p.getValue(), FlGui::instance()->setProgress(p.getLabel().c_str(), p.getValue(),
p.getMin(), p.getMax()); p.getMin(), p.getMax());
} }
else if(type == "string"){ else if(ptype == "string"){
onelab::string p; onelab::string p; p.fromChar(message);
if(type == GmshSocket::GMSH_PARAMETER_UPDATE){
std::vector<onelab::string> par; get(par, name); std::vector<onelab::string> par; get(par, name);
if(par.size() == 1){ if(par.size()){
p = par[0]; onelab::string y = p; p = par[0]; onelabUtils::updateString(p,y);
onelab::string y; y.fromChar(message); }
onelabUtils::updateString(p,y);
} }
else
p.fromChar(message);
set(p); set(p);
} }
else if(type == "region"){ else if(ptype == "region"){
onelab::region p; p.fromChar(message); set(p); onelab::region p; p.fromChar(message); set(p);
} }
else if(type == "function"){ else if(ptype == "function"){
onelab::function p; p.fromChar(message); set(p); onelab::function p; p.fromChar(message); set(p);
} }
else else
Msg::Error("Unknown OneLab parameter type: %s", type.c_str()); Msg::Error("Unknown OneLab parameter type: %s", ptype.c_str());
} }
break; break;
case GmshSocket::GMSH_PARAMETER_QUERY: case GmshSocket::GMSH_PARAMETER_QUERY:
{ {
std::string version, type, name, reply; std::string version, ptype, name, reply;
onelab::parameter::getInfoFromChar(message, version, type, name); onelab::parameter::getInfoFromChar(message, version, ptype, name);
if(onelab::parameter::version() != version){ if(onelab::parameter::version() != version){
Msg::Error("OneLab version mismatch (server: %s / client: %s)", Msg::Error("OneLab version mismatch (server: %s / client: %s)",
onelab::parameter::version().c_str(), version.c_str()); onelab::parameter::version().c_str(), version.c_str());
} }
else if(type == "number"){ else if(ptype == "number"){
std::vector<onelab::number> par; get(par, name); std::vector<onelab::number> par; get(par, name);
if(par.size() == 1) reply = par[0].toChar(); if(par.size() == 1) reply = par[0].toChar();
} }
else if(type == "string"){ else if(ptype == "string"){
std::vector<onelab::string> par; get(par, name); std::vector<onelab::string> par; get(par, name);
if(par.size() == 1) reply = par[0].toChar(); if(par.size() == 1) reply = par[0].toChar();
} }
else if(type == "region"){ else if(ptype == "region"){
std::vector<onelab::region> par; get(par, name); std::vector<onelab::region> par; get(par, name);
if(par.size() == 1) reply = par[0].toChar(); if(par.size() == 1) reply = par[0].toChar();
} }
else if(type == "function"){ else if(ptype == "function"){
std::vector<onelab::function> par; get(par, name); std::vector<onelab::function> par; get(par, name);
if(par.size() == 1) reply = par[0].toChar(); if(par.size() == 1) reply = par[0].toChar();
} }
else else
Msg::Error("Unknown OneLab parameter type in query: %s", type.c_str()); Msg::Error("Unknown OneLab parameter type in query: %s", ptype.c_str());
if(reply.size()){ if(reply.size()){
getGmshServer()->SendMessage getGmshServer()->SendMessage
...@@ -306,40 +275,40 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master) ...@@ -306,40 +275,40 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master)
break; break;
case GmshSocket::GMSH_PARAMETER_QUERY_ALL: case GmshSocket::GMSH_PARAMETER_QUERY_ALL:
{ {
std::string version, type, name, reply; std::string version, ptype, name, reply;
std::vector<std::string> replies; std::vector<std::string> replies;
onelab::parameter::getInfoFromChar(message, version, type, name); onelab::parameter::getInfoFromChar(message, version, ptype, name);
if(onelab::parameter::version() != version){ if(onelab::parameter::version() != version){
Msg::Error("OneLab version mismatch (server: %s / client: %s)", Msg::Error("OneLab version mismatch (server: %s / client: %s)",
onelab::parameter::version().c_str(), version.c_str()); onelab::parameter::version().c_str(), version.c_str());
} }
else if(type == "number"){ else if(ptype == "number"){
std::vector<onelab::number> numbers; get(numbers); std::vector<onelab::number> numbers; get(numbers);
for(std::vector<onelab::number>::iterator it = numbers.begin(); for(std::vector<onelab::number>::iterator it = numbers.begin();
it != numbers.end(); it++) replies.push_back((*it).toChar()); it != numbers.end(); it++) replies.push_back((*it).toChar());
} }
else if(type == "string"){ else if(ptype == "string"){
std::vector<onelab::string> strings; get(strings); std::vector<onelab::string> strings; get(strings);
for(std::vector<onelab::string>::iterator it = strings.begin(); for(std::vector<onelab::string>::iterator it = strings.begin();
it != strings.end(); it++) replies.push_back((*it).toChar()); it != strings.end(); it++) replies.push_back((*it).toChar());
} }
else if(type == "region"){ else if(ptype == "region"){
std::vector<onelab::region> regions; get(regions); std::vector<onelab::region> regions; get(regions);
for(std::vector<onelab::region>::iterator it = regions.begin(); for(std::vector<onelab::region>::iterator it = regions.begin();
it != regions.end(); it++) replies.push_back((*it).toChar()); it != regions.end(); it++) replies.push_back((*it).toChar());
} }
else if(type == "function"){ else if(ptype == "function"){
std::vector<onelab::function> functions; get(functions); std::vector<onelab::function> functions; get(functions);
for(std::vector<onelab::function>::iterator it = functions.begin(); for(std::vector<onelab::function>::iterator it = functions.begin();
it != functions.end(); it++) replies.push_back((*it).toChar()); it != functions.end(); it++) replies.push_back((*it).toChar());
} }
else else
Msg::Error("Unknown OneLab parameter type in query: %s", type.c_str()); Msg::Error("Unknown OneLab parameter type in query: %s", ptype.c_str());
for(unsigned int i = 0; i < replies.size(); i++) for(unsigned int i = 0; i < replies.size(); i++)
getGmshServer()->SendMessage getGmshServer()->SendMessage
(GmshSocket::GMSH_PARAMETER_QUERY_ALL, replies[i].size(), &replies[i][0]); (GmshSocket::GMSH_PARAMETER_QUERY_ALL, replies[i].size(), &replies[i][0]);
reply = "Sent all OneLab " + type + "s"; reply = "Sent all OneLab " + ptype + "s";
getGmshServer()->SendMessage getGmshServer()->SendMessage
(GmshSocket::GMSH_PARAMETER_QUERY_END, reply.size(), &reply[0]); (GmshSocket::GMSH_PARAMETER_QUERY_END, reply.size(), &reply[0]);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment