void onelabGroup::updateParameter(onelab::string &p) { Fl_Tree_Item *n = _tree->find_item(p.getName().c_str()); if(!n) { addParameter(p); return; } Fl_Group *grp = (Fl_Group *)n->widget(); // macro button if(p.getAttribute("Macro") == "Gmsh"){ return; } // non-editable value FIXME if(p.getReadOnly()){ Fl_Output *but = (Fl_Output *)grp->child(0); but->value(p.getValue().c_str()); return; } // simple string (no menu) if(p.getChoices().empty() && p.getKind() != "file"){ Fl_Input *but = (Fl_Input *)grp->child(0); but->value(p.getValue().c_str()); return; } // general string input TODO Fl_Input_Choice *but = (Fl_Input_Choice *)grp->child(0); but->value(p.getValue().c_str()); }
void onelabGroup::updateParameter(onelab::number &p) { Fl_Tree_Item *n = _tree->find_item(p.getName().c_str()); if(!n) { addParameter(p); return; } Fl_Group *grp = (Fl_Group *)n->widget(); // enumeration (display choices as value labels, not numbers) if(p.getChoices().size() && p.getChoices().size() == p.getValueLabels().size()){ Fl_Choice *but = (Fl_Choice *)grp->child(0); //std::vector<Fl_Menu_Item> menu; //std::map<double, std::string> labels(p.getValueLabels()); //for(std::map<double, std::string>::iterator it = labels.begin(); // it != labels.end(); it++){ // char *str = strdup(it->second.c_str()); // _treeStrings.push_back(str); // Fl_Menu_Item menuItem = {str, 0, 0, 0, 0}; // if(highlight) menuItem.labelcolor(c); // menu.push_back(menuItem); //} //Fl_Menu_Item it = {0}; //menu.push_back(it); //but->copy(&menu[0]); for(unsigned int i = 0; i < p.getChoices().size(); i++){ if(p.getValue() == p.getChoices()[i]){ but->value(i); break; } } return; } // check box (boolean choice) if(p.getChoices().size() == 2 && p.getChoices()[0] == 0 && p.getChoices()[1] == 1){ Fl_Check_Button *but = (Fl_Check_Button *)grp->child(0); but->value(p.getValue()); return; } // non-editable value FIXME if(p.getReadOnly()){ outputRange *but = (outputRange *)grp->child(0);; but->value(p.getValue()); but->graph(p.getAttribute("Graph")); return; } // general number input inputRange *but = (inputRange *)grp->child(0); but->value(p.getValue()); but->minimum(p.getMin()); but->maximum(p.getMax()); but->step(p.getStep()); but->choices(p.getChoices()); but->loop(p.getAttribute("Loop")); but->graph(p.getAttribute("Graph")); }
void onelabGroup::addParameter(onelab::parameter &p) { if(!p.getVisible() || CTX::instance()->solver.showInvisibleParameters) return; bool highlight = false; Fl_Color c; if(getFlColor(p.getAttribute("Highlight"), c)) highlight = true; Fl_Tree_Item *n = _tree->add(p.getName().c_str()); if(!n) return; n->labelsize(FL_NORMAL_SIZE + 4); _tree->begin(); int ww = _baseWidth - (n->depth() + 1) * _indent; ww *= _widgetLabelRatio; // FIXME CHANGE THIS int hh = n->labelsize() + 4; Fl_Group *grp = new Fl_Group(1, 1, ww, hh); Fl_Widget *widget = _addParameterWidget(p, ww, hh, n, highlight, c); grp->end(); if(!_enableTreeWidgetResize) grp->resizable(0); _treeWidgets.push_back(grp); widget->copy_label(p.getShortName().c_str()); std::string help = p.getLabel().size() ? p.getLabel() : p.getShortName(); if(p.getHelp().size()) help += ":\n" + p.getHelp(); widget->copy_tooltip(help.c_str()); n->widget(grp); _tree->end(); if(p.getAttribute("Closed") == "1" && p.getPath().size()) _tree->close(p.getPath().c_str(), 0); _tree->redraw(); }
viewButton *onelabGroup::getViewButton(int num) { char tmp[256]; sprintf(tmp, "0Post-processing/View%d", num); Fl_Tree_Item *n = _tree->find_item(tmp); if(n){ Fl_Group *grp = (Fl_Group*)n->widget(); return (viewButton*)grp->child(0); } return 0; }
void onelabGroup::_addSolverMenu(int num) { std::ostringstream path; path << "0Solver/View" << num; Fl_Tree_Item *n = _tree->add(path.str().c_str()); int ww = _baseWidth - (n->depth() + 1) * _indent; int hh = n->labelsize() + 4; _tree->begin(); Fl_Group *grp = new Fl_Group(1, 1, ww, hh); new solverButton(1, 1, ww, hh, num, _tree->color()); grp->end(); if(!_enableTreeWidgetResize) grp->resizable(0); _treeWidgets.push_back(grp); n->widget(grp); _tree->end(); }
void onelabGroup::_addViewMenu(int num) { std::ostringstream path; path << "0Post-processing/View" << num; Fl_Tree_Item *n; if((n = _tree->find_item(path.str().c_str())) != NULL) { // check if the item already exists _tree->remove(n); } n = _tree->add(path.str().c_str()); int ww = _baseWidth - (n->depth() + 1) * _indent; int hh = n->labelsize() + 4; _tree->begin(); Fl_Group *grp = new Fl_Group(1, 1, ww, hh); new viewButton(1, 1, ww, hh, num, _tree->color()); grp->end(); if(!_enableTreeWidgetResize) grp->resizable(0); _treeWidgets.push_back(grp); n->widget(grp); _tree->end(); }
void onelabGroup::_addMenu(const std::string &path, Fl_Callback *callback, void *data) { Fl_Tree_Item *n = _tree->add(path.c_str()); _tree->begin(); int ww = _baseWidth - (n->depth() + 1) * _indent; int hh = n->labelsize() + 4; Fl_Group *grp = new Fl_Group(1, 1, ww, hh); Fl_Button *but = new Fl_Button(1, 1, ww, hh); but->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP); but->callback(callback, data); but->box(FL_FLAT_BOX); but->color(_tree->color()); but->selection_color(_tree->color()); grp->end(); if(!_enableTreeWidgetResize) grp->resizable(0); _treeWidgets.push_back(grp); std::string label = path; std::string::size_type last = path.find_last_of('/'); if(last != std::string::npos) label = path.substr(last + 1); but->copy_label(label.c_str()); n->widget(grp); _tree->end(); }