void OpenModelica::setInputParametersXml(QDomDocument &doc,MOParameters *parameters) { QDomElement xfmi = doc.firstChildElement("fmiModelDescription"); QDomElement oldxfmi = xfmi; QDomElement xExp = xfmi.firstChildElement("DefaultExperiment"); QDomElement oldxExp = xExp; double starttime = parameters->value(OpenModelicaParameters::str(OpenModelicaParameters::STARTTIME),0).toDouble(); double stoptime = parameters->value(OpenModelicaParameters::str(OpenModelicaParameters::STOPTIME),1).toDouble(); int nbIntervals = parameters->value(OpenModelicaParameters::str(OpenModelicaParameters::NBINTERVALS),2).toInt(); double stepSize = (stoptime-starttime)/nbIntervals; MOParameter * curParam; MOParameterListed* curParamListed; for(int i=0;i<parameters->size();i++) { curParam = parameters->at(i); if(!curParam->name().contains(" ")) // remove old parameters, temporary { if(curParam->name()==OpenModelicaParameters::str(OpenModelicaParameters::SOLVER)) { curParamListed = dynamic_cast<MOParameterListed*>(curParam); xExp.setAttribute(curParamListed->name(),curParamListed->strValue()); } else if(curParam->name()==OpenModelicaParameters::str(OpenModelicaParameters::OUTPUT)) { curParamListed = dynamic_cast<MOParameterListed*>(curParam); xExp.setAttribute(curParamListed->name(),curParamListed->strValue()); } else if (curParam->name()==OpenModelicaParameters::str(OpenModelicaParameters::NBINTERVALS)) { xExp.setAttribute("stepSize",QString::number(stepSize)); } else { xExp.setAttribute(curParam->name(),curParam->value().toString()); } } } // update xfmi with new vars xfmi.replaceChild(xExp,oldxExp); doc.replaceChild(xfmi,oldxfmi); }
void MOParametersWidget::updateEnabled() { MOParameter* curParam; QWidget* curWidget; for(int i=0;i<_localParameters->size();i++) { curParam = _localParameters->at(i); curWidget = _mapValueWidgets.value(curParam,NULL); if(curWidget) { curWidget->setEnabled(_localParameters->shouldBeEnabled(curParam->name())); } } }
QGridLayout* WidgetParameters::buildLayoutFromParameters() { //Adding Layout QGridLayout *mainLayout = new QGridLayout(this); // get groups QMultiMap<QString,MOParameter*> groupmap = _localParameters->groupmap(); QStringList groups = groupmap.uniqueKeys(); QStringList paramNames; for(int i=0;i<_localParameters->size();i++) paramNames.push_back(_localParameters->at(i)->name()); QPushButton *newPush; MOParameter* parameter; MOParameterListed *paramList; QList<MOParameter*> groupParameters; QGridLayout *curLayout; QGroupBox *curBox; // create group box for(int iG=0;iG<groups.size();iG++) { int iRow=0; if(groups.size()>1) { curBox = new QGroupBox(groups.at(iG),this); curLayout = new QGridLayout(curBox); } else curLayout = mainLayout; groupParameters = groupmap.values(groups.at(iG)); // to reproduce parameters order, start from the end // it seems MultiMap behaves like a pile for(int iP=groupParameters.size()-1;iP>=0;iP--) { parameter = groupParameters.at(iP); // add setting QString dispName; if(parameter->name().contains("/")) dispName = parameter->name().section("/",1,-1); else dispName = parameter->name(); curLayout->addWidget(new QLabel(parameter->description()),iRow,0); //boxLayout->addWidget(new QLabel(dispName),iRow,0); int type = parameter->getFieldValue(MOParameter::TYPE).toInt(); QWidget *valueWidget; QVariant value = parameter->getFieldValue(MOParameter::VALUE); switch(type) { case MOParameter::STRING : valueWidget = new QLineEdit(this); ((QLineEdit*)valueWidget)->setText(value.toString()); connect(((QLineEdit*)valueWidget),SIGNAL(textChanged(QString)),this,SLOT(onValueChanged())); break; case MOParameter::FILEPATH : valueWidget = new QLineEdit(this); ((QLineEdit*)valueWidget)->setText(value.toString()); connect(((QLineEdit*)valueWidget),SIGNAL(textChanged(QString)),this,SLOT(onValueChanged())); // add button newPush = new QPushButton("...",this); newPush->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Preferred); _pathsMap.insert(newPush,((QLineEdit*)valueWidget)); curLayout->addWidget(newPush,iRow,2); connect(newPush,SIGNAL(clicked()),this,SLOT(onSelectFileClicked())); break; case MOParameter::FOLDERPATH : valueWidget = new QLineEdit(this); ((QLineEdit*)valueWidget)->setText(value.toString()); connect(((QLineEdit*)valueWidget),SIGNAL(textChanged(QString)),this,SLOT(onValueChanged())); //add button newPush = new QPushButton("...",this); newPush->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Preferred); _pathsMap.insert(newPush,((QLineEdit*)valueWidget)); curLayout->addWidget(newPush,iRow,2); connect(newPush,SIGNAL(clicked()),this,SLOT(onSelectFolderClicked())); break; case MOParameter::DOUBLE : valueWidget = new QScienceSpinBox(this); ((QScienceSpinBox*)valueWidget)->setMinimum(parameter->getFieldValue(MOParameter::MIN).toDouble()); ((QScienceSpinBox*)valueWidget)->setMaximum(parameter->getFieldValue(MOParameter::MAX).toDouble()); ((QScienceSpinBox*)valueWidget)->setDecimals(10); ((QScienceSpinBox*)valueWidget)->setValue(value.toDouble()); connect(((QScienceSpinBox*)valueWidget),SIGNAL(valueChanged(double)),this,SLOT(onValueChanged())); break; case MOParameter::INT : valueWidget = new QSpinBox(this); ((QSpinBox*)valueWidget)->setMinimum(parameter->getFieldValue(MOParameter::MIN).toInt()); ((QSpinBox*)valueWidget)->setMaximum(parameter->getFieldValue(MOParameter::MAX).toInt()); ((QSpinBox*)valueWidget)->setValue(value.toInt()); connect(((QSpinBox*)valueWidget),SIGNAL(valueChanged(int)),this,SLOT(onValueChanged())); break; case MOParameter::BOOL : valueWidget = new QCheckBox(this); Qt::CheckState state; if(value.toBool()) state = Qt::Checked; else state = Qt::Unchecked; connect(((QCheckBox*)valueWidget),SIGNAL(stateChanged(int)),this,SLOT(onValueChanged())); ((QCheckBox*)valueWidget)->setCheckState(state); break; case MOParameter::LIST : //if is a list, param should be a MOParameterListed valueWidget = new QComboBox(this); paramList = dynamic_cast<MOParameterListed*>(parameter); if(paramList) { //adding list items in qcombobox for(int iValue = 0 ; iValue<paramList->mapList().keys().size();iValue++) { ((QComboBox*)valueWidget)->addItem( paramList->mapList().values().at(iValue), paramList->mapList().keys().at(iValue)); } // set current index ((QComboBox*)valueWidget)->setCurrentIndex(((QComboBox*)valueWidget)->findData(value)); connect(((QComboBox*)valueWidget),SIGNAL(currentIndexChanged(int)),this,SLOT(onValueChanged())); } break; default : valueWidget = new QLineEdit(this); ((QLineEdit*)valueWidget)->setText(value.toString()); connect(((QLineEdit*)valueWidget),SIGNAL(textChanged(QString)),this,SLOT(onValueChanged())); break; } curLayout->addWidget(valueWidget,iRow,1); valueWidget->setEnabled(_editable); // store (to save data when click ok) _mapValueWidgets.insert(parameter,valueWidget); _paramNames.push_back(parameter->name()); _paramTypes.push_back(type); iRow++; } if(groups.size()>1) { curBox->setLayout(curLayout); mainLayout->addWidget(curBox); } } if(_editable) updateEnabled(); //update return mainLayout; }