This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
IndoorMap/params/EditFields.h
root e5e19779d5 worked on android port
opengl1 -> es
2018-01-31 17:15:11 +01:00

166 lines
4.8 KiB
C++

#ifndef EDITFIELDS_H
#define EDITFIELDS_H
#include "fixC11.h"
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include "../mapview/model/IHasParams.h"
class EditFields {
public:
static void get(QGridLayout* lay, IHasParams* elem) {
int r = 0;
for(int i = 0; i < elem->getNumParams(); ++i) {
const Param param = elem->getParamDesc(i);
const ParamValue value = elem->getParamValue(i);
// skip Not-Available entries
if (param.type == ParamType::NOT_AVAILABLE) {continue;}
lay->addWidget(new QLabel(param.name.c_str()),r,0);
switch(param.type) {
case ParamType::BOOL: {
QCheckBox* chk = new QCheckBox( );
chk->setChecked(value.toBool());
if (param.readOnly) {
chk->setEnabled(false);
} else {
chk->connect(chk, &QCheckBox::clicked, [i,elem] (const bool checked) {
elem->setParamValue(i, ParamValue(checked));
});
}
lay->addWidget(chk,r,1);
break;
}
case ParamType::FLOAT: {
const std::string str = std::to_string(value.toFloat());
if (param.readOnly) {
lay->addWidget(new QLabel(str.c_str()),r,1);
} else {
QLineEdit* le = new QLineEdit( str.c_str() );
le->connect(le, &QLineEdit::textChanged, [i,elem] (const QString& str) {
const float val = str.toFloat();
elem->setParamValue(i, ParamValue(val));
});
lay->addWidget(le,r,1);
}
break;
}
case ParamType::DOUBLE: {
const std::string str = std::to_string(value.toDouble());
if (param.readOnly) {
lay->addWidget(new QLabel(str.c_str()),r,1);
} else {
QLineEdit* le = new QLineEdit( str.c_str() );
le->connect(le, &QLineEdit::textChanged, [i,elem] (const QString& str) {
const float val = str.toDouble();
elem->setParamValue(i, ParamValue(val));
});
lay->addWidget(le,r,1);
}
break;
}
case ParamType::INT: {
const std::string str = std::to_string(value.toInt());
QLineEdit* le = new QLineEdit( str.c_str() );
le->connect(le, &QLineEdit::textChanged, [i,elem] (const QString& str) {
const int val = str.toInt();
elem->setParamValue(i, ParamValue(val));
});
lay->addWidget(le,r,1);
break;
}
case ParamType::STRING: {
const std::string str = value.toString();
QLineEdit* le = new QLineEdit( str.c_str() );
le->connect(le, &QLineEdit::textChanged, [i,elem] (const QString& str) {
elem->setParamValue(i, ParamValue(str.toStdString()));
});
lay->addWidget(le,r,1);
break;
}
case ParamType::FILE: {
const std::string str = value.toString();
QLabel* lblFile = new QLabel(str.c_str());
QPushButton* btn = new QPushButton("<");
btn->setMaximumSize(32,32);
btn->connect(btn, &QPushButton::clicked, [i,elem,lblFile] (const bool checked) {
(void) checked;
QString res = QFileDialog::getOpenFileName();
elem->setParamValue(i, ParamValue(res.toStdString()));
lblFile->setText(res);
});
lay->addWidget(lblFile,r,1);
lay->addWidget(btn,r,2);
break;
}
case ParamType::POINT2: {
const Point2 p2 = value.toPoint2();
QWidget* subWidget = new QWidget();
QGridLayout* laySub = new QGridLayout(subWidget); laySub->setMargin(0);
QLineEdit* txtX = new QLineEdit(QString::number(p2.x));
QLineEdit* txtY = new QLineEdit(QString::number(p2.y));
laySub->addWidget(txtX,0,0);
laySub->addWidget(txtY,0,1);
lay->addWidget(subWidget,r,1);
auto onChange = [i,elem,txtX,txtY] (const QString& str) {
(void) str;
elem->setParamValue(i, ParamValue( Point2(txtX->text().toFloat(), txtY->text().toFloat()) ));
};
txtX->connect(txtX, &QLineEdit::textChanged, onChange);
txtY->connect(txtY, &QLineEdit::textChanged, onChange);
break;
}
case ParamType::POINT3: {
const Point3 p3 = value.toPoint3();
QWidget* subWidget = new QWidget();
QGridLayout* laySub = new QGridLayout(subWidget); laySub->setMargin(0);
QLineEdit* txtX = new QLineEdit(QString::number(p3.x));
QLineEdit* txtY = new QLineEdit(QString::number(p3.y));
QLineEdit* txtZ = new QLineEdit(QString::number(p3.z));
laySub->addWidget(txtX,0,0);
laySub->addWidget(txtY,0,1);
laySub->addWidget(txtZ,0,2);
lay->addWidget(subWidget,r,1);
auto onChange = [i,elem,txtX,txtY,txtZ] (const QString& str) {
(void) str;
elem->setParamValue(i, ParamValue( Point3(txtX->text().toFloat(), txtY->text().toFloat(), txtZ->text().toFloat()) ));
};
txtX->connect(txtX, &QLineEdit::textChanged, onChange);
txtY->connect(txtY, &QLineEdit::textChanged, onChange);
txtZ->connect(txtZ, &QLineEdit::textChanged, onChange);
break;
}
case ParamType::NOT_AVAILABLE:
break;
}
++r;
}
}
};
#endif // EDITFIELDS_H