structure to store set info removed

This commit is contained in:
amarjeetkapoor1 2016-07-15 16:35:57 +05:30
parent f5829d6e67
commit 26d05892ae
7 changed files with 78 additions and 104 deletions

View file

@ -38,8 +38,6 @@
ParameterWidget::ParameterWidget(QWidget *parent) : QWidget(parent)
{
setupUi(this);
getParameterSet("save.json");
setComboBoxForSet();
descriptionShow=true;
autoPreviewTimer.setInterval(500);
autoPreviewTimer.setSingleShot(true);
@ -48,17 +46,28 @@ ParameterWidget::ParameterWidget(QWidget *parent) : QWidget(parent)
connect(checkBoxDetailedDescription,SIGNAL(toggled(bool)),this,SLOT(onDescriptionShow()));
}
void ParameterWidget::setFile(QString jsonFile){
getParameterSet(jsonFile.replace(".scad",".json").toStdString());
setComboBoxForSet();
}
ParameterWidget::~ParameterWidget()
{
}
void ParameterWidget::setComboBoxForSet(){
if(root.empty()){
return;
}
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)));
for(pt::ptree::value_type &v : root.get_child("SET")){
this->comboBox->addItem(QString::fromStdString(v.first),
QVariant(QString::fromStdString(v.first)));
}
this->comboBox->setCurrentText("No Set Selected");
connect(comboBox, SIGNAL(currentIndexChanged(int)),this,SLOT(onSetChanged(int)));
@ -226,28 +235,31 @@ if(groupMap.find("Global")!=groupMap.end()){
void ParameterWidget::applyParameterSet(string setName){
if(root.empty()){
return;
}
string path="SET."+setName;
Parameterset::iterator set=parameterSet.find(setName);
if(set==parameterSet.end()){
qWarning("no set");
return ;
}
SetOfParameter setofparameter=set->second;
for(pt::ptree::value_type &v : root.get_child(path)){
entry_map_t::iterator entry =entries.find(v.first);
try{
if(entry!=entries.end()){
if(entry->second->dvt == Value::NUMBER){
entry->second->value=ValuePtr(v.second.get_value<double>());
}else if(entry->second->dvt== Value::BOOL){
entry->second->value=ValuePtr(v.second.get_value<bool>());
}else if(entry->second->dvt== Value::VECTOR){
for(SetOfParameter::iterator i = setofparameter.begin();i!=setofparameter.end();i++){
//code to written
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());
}else{
entry->second->value=ValuePtr(v.second.data());
}
}
}
catch (std::exception const& e){
std::cerr << e.what() << std::endl;
}
}
}

View file

@ -47,6 +47,7 @@ private:
public:
ParameterWidget(QWidget *parent = 0);
virtual ~ParameterWidget();
void setFile(QString jsonFile);
protected slots:
void onValueChanged();

View file

@ -1,95 +1,50 @@
#include "parameterset.h"
#include "FileModule.h"
#include "modcontext.h"
#include<QDebug>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
// Short alias for this namespace
namespace pt = boost::property_tree;
ParameterSet::ParameterSet()
{
}
void ParameterSet::getParameterSet(string filename){
try{
std::fstream myfile;
myfile.open (filename);
// send your JSON above to the parser below, but populate ss first
pt::ptree root;
pt::read_json(myfile, root);
for(pt::ptree::value_type &v : root.get_child("SET")) {
// The data function is used to access the data stored in a node.
SetOfParameter setofparameter;
std::cout<<"model name"<<v.first<<std::endl;
for(pt::ptree::value_type &vi : v.second){
setofparameter[vi.first]=vi.second.data();
}
parameterSet[v.first]=setofparameter;
}
myfile.close();
}
catch (std::exception const& e)
{
std::cerr << e.what() << std::endl;
}
}
void ParameterSet::print(){
for(Parameterset::iterator it=parameterSet.begin();it!=parameterSet.end();it++){
SetOfParameter setofparameter=(*it).second;
for(SetOfParameter::iterator i=setofparameter.begin();i!=setofparameter.end(); i++){
std::cout<<i->first<<" ";
}
std::fstream myfile;
myfile.open (filename);
// send your JSON above to the parser below, but populate ss first
if(myfile.is_open()){
pt::read_json(myfile, this->root);
}
myfile.close();
}
void ParameterSet::applyParameterSet(FileModule *fileModule,string setName)
{
if (fileModule == NULL) {
return;
}
try{
if (fileModule == NULL ||root.empty()) {
return;
}
ModuleContext ctx;
string path="SET."+setName;
for (AssignmentList::iterator it = fileModule->scope.assignments.begin();it != fileModule->scope.assignments.end();it++) {
Parameterset::iterator set=parameterSet.find(setName);
if(set==parameterSet.end()){
qWarning("no set");
return ;
}
SetOfParameter setofparameter=set->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);
const ValuePtr defaultValue = assignment->expr.get()->evaluate(&ctx);
if(defaultValue->type()== Value::STRING){
assignment->expr = shared_ptr<Expression>(new Literal(ValuePtr(i->second)));
}else if(defaultValue->type()== Value::BOOL){
assignment->expr = shared_ptr<Expression>(new Literal(ValuePtr(i->second=="true")));
}else{
assignment->expr = shared_ptr<Expression>(new Literal(ValuePtr(QString::fromStdString(i->second).toDouble()))) ;
}
for(pt::ptree::value_type &v : root.get_child(path)){
if(v.first== (*it).name){
Assignment *assignment;
assignment=&(*it);
const ValuePtr defaultValue = assignment->expr.get()->evaluate(&ctx);
if(defaultValue->type()== Value::NUMBER){
assignment->expr = shared_ptr<Expression>(new Literal(ValuePtr(v.second.get_value<double>()))) ;
}else if(defaultValue->type()== Value::BOOL){
assignment->expr = shared_ptr<Expression>(new Literal(ValuePtr(v.second.get_value<bool>())));
}else{
assignment->expr = shared_ptr<Expression>(new Literal(ValuePtr(v.second.data())));
}
}
}
}
}
}
catch (std::exception const& e)
{
std::cerr << e.what() << std::endl;
}
}

View file

@ -3,23 +3,28 @@
#include"expression.h"
#include "FileModule.h"
#include<map>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
namespace pt = boost::property_tree;
using namespace std;
class ParameterSet
{
protected:
pt::ptree root;
typedef map<string,string >SetOfParameter;
typedef map<string,SetOfParameter> Parameterset;
Parameterset parameterSet;
typedef map<string,pt::ptree::value_type> Parameterset;
Parameterset parameterSet;
public:
ParameterSet();
void getParameterSet(string filename);
void print();
void applyParameterSet(FileModule *fileModule,string setName);
};

View file

@ -31,7 +31,7 @@ void ParameterText::on_Changed()
void ParameterText::setValue()
{
this->stackedWidget->setCurrentWidget(this->pageText);
this->lineEdit->setText(QString::fromStdString(object->defaultValue->toString()));
this->lineEdit->setText(QString::fromStdString(object->value->toString()));
if(object->values->toDouble()>0){
this->lineEdit->setMaxLength(object->values->toDouble());
}

View file

@ -41,7 +41,7 @@ void ParameterVector::on_Changed(double)
void ParameterVector::setValue()
{
this->stackedWidget->setCurrentWidget(this->pageVector);
Value::VectorType vec = object->defaultValue->toVector();
Value::VectorType vec = object->value->toVector();
if (vec.size() < 4) {
this->doubleSpinBox4->hide();
this->doubleSpinBox4->setReadOnly(true);

View file

@ -176,6 +176,7 @@ MainWindow::MainWindow(const QString &filename)
{
setupUi(this);
this->parameterWidget->setFile(filename);
editorDockTitleWidget = new QWidget();
consoleDockTitleWidget = new QWidget();
parameterDockTitleWidget = new QWidget();