diff --git a/src/Parameter/ParameterWidget.cc b/src/Parameter/ParameterWidget.cc index 1f3e2edb..3b057bf0 100644 --- a/src/Parameter/ParameterWidget.cc +++ b/src/Parameter/ParameterWidget.cc @@ -38,7 +38,8 @@ ParameterWidget::ParameterWidget(QWidget *parent) : QWidget(parent) { setupUi(this); - + getParameterSet("save.json"); + setComboBoxForSet(); descriptionShow=true; autoPreviewTimer.setInterval(500); autoPreviewTimer.setSingleShot(true); @@ -51,6 +52,26 @@ ParameterWidget::~ParameterWidget() { } +void ParameterWidget::setComboBoxForSet(){ + + this->comboBox->addItem("No Set Selected", + QVariant(QString::fromStdString(""))); + for(Parameterset::iterator it=parameterSet.begin();it != parameterSet.end();it++){ + this->comboBox->addItem(QString::fromStdString(it->first), + QVariant(QString::fromStdString(it->first))); + } + this->comboBox->setCurrentText("No Set Selected"); + connect(comboBox, SIGNAL(currentIndexChanged(int)),this,SLOT(onSetChanged(int))); +} + +void ParameterWidget::onSetChanged(int idx){ + + const string v = comboBox->itemData(idx).toString().toUtf8().constData(); + applyParameterSet(v); + emit previewRequested(); + +} + void ParameterWidget::onDescriptionShow() { if(checkBoxDetailedDescription->isChecked()){ @@ -203,4 +224,30 @@ if(groupMap.find("Global")!=groupMap.end()){ end(); } +void ParameterWidget::applyParameterSet(string setName){ + + + Parameterset::iterator set=parameterSet.find(setName); + if(set==parameterSet.end()){ + qWarning("no set"); + return ; + } + SetOfParameter setofparameter=set->second; + + for(SetOfParameter::iterator i = setofparameter.begin();i!=setofparameter.end();i++){ + + entry_map_t::iterator entry =entries.find(i->first); + if(entry!=entries.end()){ + if(entry->second->dvt == Value::STRING){ + entry->second->value=ValuePtr(i->second); + }else if(entry->second->dvt== Value::BOOL){ + entry->second->value=ValuePtr(i->second=="true"); + } + else{ + entry->second->value=ValuePtr(QString::fromStdString(i->second).toDouble()); + } + } + } + +} diff --git a/src/Parameter/ParameterWidget.h b/src/Parameter/ParameterWidget.h index 504f22f4..87a1ffb6 100644 --- a/src/Parameter/ParameterWidget.h +++ b/src/Parameter/ParameterWidget.h @@ -31,8 +31,9 @@ #include "parameterextractor.h" #include "ui_ParameterWidget.h" #include "groupwidget.h" +#include "parameterset.h" -class ParameterWidget : public QWidget, public Ui::ParameterWidget, public ParameterExtractor +class ParameterWidget : public QWidget, public Ui::ParameterWidget, public ParameterExtractor, public ParameterSet { Q_OBJECT private: @@ -51,6 +52,7 @@ protected slots: void onValueChanged(); void onPreviewTimerElapsed(); void onDescriptionShow(); + void onSetChanged(int idx); signals: @@ -61,5 +63,7 @@ protected: void begin(); void addEntry(class ParameterVirtualWidget *entry); void end(); + void setComboBoxForSet(); + void applyParameterSet(string setName); }; diff --git a/src/Parameter/parameterset.cpp b/src/Parameter/parameterset.cpp index cce99634..b69de2d6 100644 --- a/src/Parameter/parameterset.cpp +++ b/src/Parameter/parameterset.cpp @@ -16,7 +16,7 @@ ParameterSet::ParameterSet() { } -bool ParameterSet::getParameterSet(string filename){ +void ParameterSet::getParameterSet(string filename){ try{ std::fstream myfile; @@ -32,15 +32,13 @@ bool ParameterSet::getParameterSet(string filename){ SetOfParameter setofparameter; std::cout<<"model name"<second; + ModuleContext ctx; for (AssignmentList::iterator it = fileModule->scope.assignments.begin();it != fileModule->scope.assignments.end();it++) { for(SetOfParameter::iterator i = setofparameter.begin();i!=setofparameter.end();i++){ if(i->first== (*it).name){ Assignment *assignment; - assignment=&(*it); + assignment=&(*it); + const ValuePtr defaultValue = assignment->expr.get()->evaluate(&ctx); + if(defaultValue->type()== Value::STRING){ assignment->expr = shared_ptr(new Literal(ValuePtr(i->second))); + }else if(defaultValue->type()== Value::BOOL){ + assignment->expr = shared_ptr(new Literal(ValuePtr(i->second=="true"))); + }else{ + assignment->expr = shared_ptr(new Literal(ValuePtr(QString::fromStdString(i->second).toDouble()))) ; + } } } diff --git a/src/Parameter/parameterset.h b/src/Parameter/parameterset.h index b4e67da9..b7acc53c 100644 --- a/src/Parameter/parameterset.h +++ b/src/Parameter/parameterset.h @@ -10,6 +10,7 @@ using namespace std; class ParameterSet { +protected: typedef mapSetOfParameter; typedef map Parameterset; Parameterset parameterSet; @@ -17,7 +18,7 @@ class ParameterSet public: ParameterSet(); - bool getParameterSet(string filename); + void getParameterSet(string filename); void print(); void applyParameterSet(FileModule *fileModule,string setName);