add widget type to numeric PIVariantEdit

This commit is contained in:
2022-12-20 16:11:19 +03:00
parent cce1b6a0c4
commit fe2a8077a4
3 changed files with 248 additions and 90 deletions

View File

@@ -36,6 +36,35 @@
namespace PIVariantEditors {
class QAD_PIQT_UTILS_EXPORT NumberBase: public PIVariantEditorBase {
Q_OBJECT
public:
NumberBase();
void setValueNumeric(double v);
double valueNumeric() const;
PIVariantMap attributes() const override;
static PIVariantMap defaultAttributes();
static PIVariantTypes::Enum createTypes();
void retranslate() override;
protected:
void applyAttributes(const PIVariantMap & a) override;
enum Type {
tInvalid,
tSpinBox,
tSlider,
tSpinSlider,
tEvalSpinBox,
tScrollSpinBox,
};
Type type = tInvalid;
PIString prefix, suffix;
QWidget * widget = nullptr;
bool is_int = false;
};
class QAD_PIQT_UTILS_EXPORT Bool: public PIVariantEditorBase {
Q_OBJECT
@@ -52,47 +81,29 @@ private:
};
class QAD_PIQT_UTILS_EXPORT Int: public PIVariantEditorBase {
class QAD_PIQT_UTILS_EXPORT Int: public NumberBase {
Q_OBJECT
public:
Int() {
widget = new QSpinBox();
widget->setRange(-std::numeric_limits<int>::max(), std::numeric_limits<int>::max());
layout()->addWidget(widget);
Int(): NumberBase() {
is_int = true;
applyAttributes(NumberBase::defaultAttributes());
}
void setValue(const PIVariant & v) override { widget->setValue(v.toInt()); }
PIVariant value() const override { return widget->value(); }
PIVariantMap attributes() const override;
static PIVariantMap defaultAttributes();
void retranslate();
private:
void applyAttributes(const PIVariantMap & a) override;
PIString prefix, suffix;
QSpinBox * widget;
void setValue(const PIVariant & v) override { setValueNumeric(v.toInt()); }
PIVariant value() const override { return piRoundd(valueNumeric()); }
};
class QAD_PIQT_UTILS_EXPORT Double: public PIVariantEditorBase {
class QAD_PIQT_UTILS_EXPORT Double: public NumberBase {
Q_OBJECT
public:
Double() {
widget = new QDoubleSpinBox();
widget->setRange(-std::numeric_limits<float>::max(), std::numeric_limits<float>::max());
layout()->addWidget(widget);
Double(): NumberBase() {
is_int = false;
applyAttributes(NumberBase::defaultAttributes());
}
void setValue(const PIVariant & v) override { widget->setValue(v.toDouble()); }
PIVariant value() const override { return widget->value(); }
PIVariantMap attributes() const override;
static PIVariantMap defaultAttributes();
void retranslate();
private:
void applyAttributes(const PIVariantMap & a) override;
PIString prefix, suffix;
QDoubleSpinBox * widget;
void setValue(const PIVariant & v) override { setValueNumeric(v.toDouble()); }
PIVariant value() const override { return valueNumeric(); }
};