283 lines
5.6 KiB
C++
283 lines
5.6 KiB
C++
#include "qpiconfigvaluewidget.h"
|
|
|
|
#include "qpievaluator_p.h"
|
|
|
|
|
|
ConfigValueWidget::ConfigValueWidget(QWidget * parent): QWidget(parent), lay(QBoxLayout::Down, this) {
|
|
lay.setContentsMargins(0, 0, 0, 0);
|
|
w_integer.setRange(INT_MIN, INT_MAX);
|
|
w_float.setRange(-DBL_MAX, DBL_MAX);
|
|
w_float.setDecimals(5);
|
|
active = true;
|
|
lay.addWidget(&w_string);
|
|
lay.addWidget(&w_list);
|
|
lay.addWidget(&w_bool);
|
|
lay.addWidget(&w_integer);
|
|
lay.addWidget(&w_float);
|
|
lay.addWidget(&w_color);
|
|
lay.addWidget(&w_rect);
|
|
lay.addWidget(&w_point);
|
|
lay.addWidget(&w_ip);
|
|
lay.addWidget(&w_enum);
|
|
lay.addWidget(&w_path);
|
|
connect(&w_string, SIGNAL(textChanged(QString)), this, SLOT(valueChanged()));
|
|
connect(&w_list, SIGNAL(valueChanged()), this, SLOT(valueChanged()));
|
|
connect(&w_bool, SIGNAL(toggled(bool)), this, SLOT(valueChanged()));
|
|
connect(&w_integer, SIGNAL(valueChanged(int)), this, SLOT(valueChanged()));
|
|
connect(&w_float, SIGNAL(valueChanged(double)), this, SLOT(valueChanged()));
|
|
connect(&w_color, SIGNAL(colorChanged(QColor)), this, SLOT(valueChanged()));
|
|
connect(&w_rect, SIGNAL(valueChanged(QRectF)), this, SLOT(valueChanged()));
|
|
connect(&w_point, SIGNAL(valueChanged(QPointF)), this, SLOT(valueChanged()));
|
|
connect(&w_ip, SIGNAL(valueChanged(QString)), this, SLOT(valueChanged()));
|
|
connect(&w_enum, SIGNAL(currentIndexChanged(int)), this, SLOT(valueChanged()));
|
|
connect(&w_path, SIGNAL(valueChanged()), this, SLOT(valueChanged()));
|
|
}
|
|
|
|
|
|
void ConfigValueWidget::setType(const QString & t) {
|
|
hideAll();
|
|
type = t.left(1);
|
|
active = false;
|
|
if (type == "e") {
|
|
QStringList en_sl = QPIEvaluator::inBrackets(comment).split(';');
|
|
if (en_sl.size() > 1) {
|
|
w_enum.show();
|
|
w_enum.addItems(en_sl);
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
} else {
|
|
type = "s";
|
|
}
|
|
}
|
|
if (type == "s") {
|
|
w_string.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "l") {
|
|
w_list.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "b") {
|
|
w_bool.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "n") {
|
|
w_integer.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "f") {
|
|
w_float.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "c") {
|
|
w_color.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "r") {
|
|
w_rect.show();
|
|
w_rect.setDecimals(0);
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "a") {
|
|
w_rect.show();
|
|
w_rect.setDecimals(3);
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "p") {
|
|
w_point.show();
|
|
w_point.setDecimals(0);
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "v") {
|
|
w_point.show();
|
|
w_point.setDecimals(3);
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "i") {
|
|
w_ip.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "F") {
|
|
w_path.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "D") {
|
|
w_path.show();
|
|
setValue(value);
|
|
active = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
void ConfigValueWidget::setValue(const QString & v) {
|
|
value = v;
|
|
active = false;
|
|
if (type == "l") {
|
|
w_list.setValue(v.split("%|%"));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "b") {
|
|
w_bool.setChecked(v.toInt() > 0 || v.toLower().trimmed() == "true");
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "n") {
|
|
w_integer.setValue(QString2int(v));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "f") {
|
|
w_float.setValue(v.toDouble());
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "c") {
|
|
w_color.setColor(QString2QColor(v));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "r") {
|
|
w_rect.setValue(QString2QRectF(v));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "a") {
|
|
w_rect.setValue(QString2QRectF(v));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "p") {
|
|
w_point.setValue(QString2QPointF(v));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "v") {
|
|
w_point.setValue(QString2QPointF(v));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "i") {
|
|
w_ip.setIP(v);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "e") {
|
|
w_enum.setCurrentIndex(w_enum.findText(v));
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "F") {
|
|
w_path.is_dir = false;
|
|
w_path.setValue(v);
|
|
active = true;
|
|
return;
|
|
}
|
|
if (type == "D") {
|
|
w_path.is_dir = true;
|
|
w_path.setValue(v);
|
|
active = true;
|
|
return;
|
|
}
|
|
w_string.setText(v);
|
|
active = true;
|
|
}
|
|
|
|
|
|
void ConfigValueWidget::valueChanged() {
|
|
if (!active) return;
|
|
if (type == "l") {
|
|
value = w_list.value().join("%|%");
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "b") {
|
|
value = w_bool.isChecked() ? "true" : "false";
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "n") {
|
|
value = QString::number(w_integer.value());
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "f") {
|
|
value = QString::number(w_float.value());
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "c") {
|
|
value = QColor2QString(w_color.color());
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "r") {
|
|
value = QRectF2QString(w_rect.value());
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "a") {
|
|
value = QRectF2QString(w_rect.value());
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "p") {
|
|
value = QPointF2QString(w_point.value());
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "v") {
|
|
value = QPointF2QString(w_point.value());
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "i") {
|
|
value = w_ip.IP();
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "e") {
|
|
value = w_enum.currentText();
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "F") {
|
|
value = w_path.value();
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
if (type == "D") {
|
|
value = w_path.value();
|
|
emit changed(this, value);
|
|
return;
|
|
}
|
|
value = w_string.text();
|
|
emit changed(this, value);
|
|
}
|