diff --git a/libs/piqt_widgets/pivaluetree_edit.cpp b/libs/piqt_widgets/pivaluetree_edit.cpp index d722921..aee2019 100644 --- a/libs/piqt_widgets/pivaluetree_edit.cpp +++ b/libs/piqt_widgets/pivaluetree_edit.cpp @@ -115,6 +115,7 @@ void PIValueTreeEdit::build() { } if (i.hasChildren() || i.isArray()) { auto * ve = new PIValueTreeEdit(); + ve->setGroupingEnabled(is_grouping); ve->setValue(i); if (is_grouping) { auto * gb = new QGroupBox(); diff --git a/libs/piqt_widgets/pivariant_edit.h b/libs/piqt_widgets/pivariant_edit.h index b6fdef8..2469457 100644 --- a/libs/piqt_widgets/pivariant_edit.h +++ b/libs/piqt_widgets/pivariant_edit.h @@ -37,6 +37,7 @@ class PIVariantEdit; class QAD_PIQT_UTILS_EXPORT PIVariantEditorBase: public QWidget { friend class PIVariantEdit; public: + PIVariantEditorBase() {createBoxLayout();} virtual ~PIVariantEditorBase() {} virtual void setValue(const PIVariant & v) = 0; diff --git a/libs/piqt_widgets/pivariant_edit_widgets.cpp b/libs/piqt_widgets/pivariant_edit_widgets.cpp index bdaa30d..e3ff624 100644 --- a/libs/piqt_widgets/pivariant_edit_widgets.cpp +++ b/libs/piqt_widgets/pivariant_edit_widgets.cpp @@ -1,49 +1,115 @@ #include "pivariant_edit_widgets.h" +#include "pivarianttypes.h" #include "pivaluetree.h" #include #include -REGISTER_PIVARIANTEDITOR(bool, PIVariantEditorBool); -REGISTER_PIVARIANTEDITOR( short, PIVariantEditorInt); -REGISTER_PIVARIANTEDITOR(ushort, PIVariantEditorInt); -REGISTER_PIVARIANTEDITOR( int, PIVariantEditorInt); -REGISTER_PIVARIANTEDITOR(uint, PIVariantEditorInt); -REGISTER_PIVARIANTEDITOR(float , PIVariantEditorDouble); -REGISTER_PIVARIANTEDITOR(double, PIVariantEditorDouble); +REGISTER_PIVARIANTEDITOR(bool, PIVariantEditors::Bool); +REGISTER_PIVARIANTEDITOR( short, PIVariantEditors::Int); +REGISTER_PIVARIANTEDITOR(ushort, PIVariantEditors::Int); +REGISTER_PIVARIANTEDITOR( int, PIVariantEditors::Int); +REGISTER_PIVARIANTEDITOR(uint, PIVariantEditors::Int); +REGISTER_PIVARIANTEDITOR(float , PIVariantEditors::Double); +REGISTER_PIVARIANTEDITOR(double, PIVariantEditors::Double); +REGISTER_PIVARIANTEDITOR(PIString, PIVariantEditors::String); +REGISTER_PIVARIANTEDITOR(PITime, PIVariantEditors::Time); +REGISTER_PIVARIANTEDITOR(PIDate, PIVariantEditors::Date); +REGISTER_PIVARIANTEDITOR(PIDateTime, PIVariantEditors::DateTime); +REGISTER_PIVARIANTEDITOR(PIVariantTypes::Color, PIVariantEditors::Color); -PIVariantMap PIVariantEditorInt::defaultAttributes() const { +PIVariantMap PIVariantEditors::Int::defaultAttributes() const { return { {PIValueTree::attributeMinimum, widget->minimum()}, {PIValueTree::attributeMaximum, widget->maximum()}, {PIValueTree::attributeSingleStep, widget->singleStep()}, + {PIValueTree::attributePrefix, Q2PIString(widget->prefix())}, + {PIValueTree::attributeSuffix, Q2PIString(widget->suffix())}, }; } -void PIVariantEditorInt::applyAttributes(const PIVariantMap & a) { +void PIVariantEditors::Int::applyAttributes(const PIVariantMap & a) { widget->setRange(a.value(PIValueTree::attributeMinimum, widget->minimum()).toInt(), a.value(PIValueTree::attributeMaximum, widget->maximum()).toInt()); widget->setSingleStep(a.value(PIValueTree::attributeSingleStep, widget->singleStep()).toInt()); + widget->setPrefix(PI2QString(a.value(PIValueTree::attributePrefix, Q2PIString(widget->prefix())).toString())); + widget->setSuffix(PI2QString(a.value(PIValueTree::attributeSuffix, Q2PIString(widget->suffix())).toString())); + widget->setReadOnly(a.value(PIValueTree::attributeReadOnly, widget->isReadOnly()).toBool()); } -PIVariantMap PIVariantEditorDouble::defaultAttributes() const { +PIVariantMap PIVariantEditors::Double::defaultAttributes() const { return { {PIValueTree::attributeMinimum, widget->minimum()}, {PIValueTree::attributeMaximum, widget->maximum()}, {PIValueTree::attributeSingleStep, widget->singleStep()}, + {PIValueTree::attributeDecimals, widget->decimals()}, + {PIValueTree::attributePrefix, Q2PIString(widget->prefix())}, + {PIValueTree::attributeSuffix, Q2PIString(widget->suffix())}, }; } -void PIVariantEditorDouble::applyAttributes(const PIVariantMap & a) { +void PIVariantEditors::Double::applyAttributes(const PIVariantMap & a) { widget->setRange(a.value(PIValueTree::attributeMinimum, widget->minimum()).toDouble(), a.value(PIValueTree::attributeMaximum, widget->maximum()).toDouble()); widget->setSingleStep(a.value(PIValueTree::attributeSingleStep, widget->singleStep()).toDouble()); + widget->setDecimals(a.value(PIValueTree::attributeDecimals, widget->decimals()).toInt()); + widget->setPrefix(PI2QString(a.value(PIValueTree::attributePrefix, Q2PIString(widget->prefix())).toString())); + widget->setSuffix(PI2QString(a.value(PIValueTree::attributeSuffix, Q2PIString(widget->suffix())).toString())); + widget->setReadOnly(a.value(PIValueTree::attributeReadOnly, widget->isReadOnly()).toBool()); } + + + +PIVariantMap PIVariantEditors::String::defaultAttributes() const { + return { + }; +} + + +void PIVariantEditors::String::applyAttributes(const PIVariantMap & a) { + widget->setReadOnly(a.value(PIValueTree::attributeReadOnly, widget->isReadOnly()).toBool()); +} + + + + +PIVariantMap PIVariantEditors::Color::defaultAttributes() const { + return { + {"useAlpha", widget->useAlphaChannel()}, + }; +} + + +void PIVariantEditors::Color::applyAttributes(const PIVariantMap & a) { + widget->setUseAlphaChannel(a.value("useAlpha", widget->useAlphaChannel()).toBool()); + widget->setEnabled(!a.value(PIValueTree::attributeReadOnly, !widget->isEnabled()).toBool()); +} + + + + +void PIVariantEditors::Time::applyAttributes(const PIVariantMap & a) { + widget->setReadOnly(a.value(PIValueTree::attributeReadOnly, widget->isReadOnly()).toBool()); +} + + + + +void PIVariantEditors::Date::applyAttributes(const PIVariantMap & a) { + widget->setReadOnly(a.value(PIValueTree::attributeReadOnly, widget->isReadOnly()).toBool()); +} + + + + +void PIVariantEditors::DateTime::applyAttributes(const PIVariantMap & a) { + widget->setReadOnly(a.value(PIValueTree::attributeReadOnly, widget->isReadOnly()).toBool()); +} diff --git a/libs/piqt_widgets/pivariant_edit_widgets.h b/libs/piqt_widgets/pivariant_edit_widgets.h index 9a88e2c..d772343 100644 --- a/libs/piqt_widgets/pivariant_edit_widgets.h +++ b/libs/piqt_widgets/pivariant_edit_widgets.h @@ -21,67 +21,144 @@ #define pivariant_edit_widgets_H #include "pivariant_edit.h" +#include #include #include #include +#include +#include +#include +#include + +namespace PIVariantEditors { -class QAD_PIQT_UTILS_EXPORT PIVariantEditorBool: public PIVariantEditorBase { +class QAD_PIQT_UTILS_EXPORT Bool: public PIVariantEditorBase { public: - PIVariantEditorBool() { - createBoxLayout(); + Bool() { widget = new QCheckBox(); layout()->addWidget(widget); } - void setValue(const PIVariant & v) override {widget->setChecked(v.toBool());} PIVariant value() const override {return widget->isChecked();} - private: QCheckBox * widget; - }; -class QAD_PIQT_UTILS_EXPORT PIVariantEditorInt: public PIVariantEditorBase { +class QAD_PIQT_UTILS_EXPORT Int: public PIVariantEditorBase { public: - PIVariantEditorInt() { - createBoxLayout(); + Int() { widget = new QSpinBox(); + widget->setRange(-std::numeric_limits::max(), std::numeric_limits::max()); layout()->addWidget(widget); } - void setValue(const PIVariant & v) override {widget->setValue(v.toInt());} PIVariant value() const override {return widget->value();} PIVariantMap defaultAttributes() const override; - private: void applyAttributes(const PIVariantMap & a) override; - QSpinBox * widget; - }; -class QAD_PIQT_UTILS_EXPORT PIVariantEditorDouble: public PIVariantEditorBase { +class QAD_PIQT_UTILS_EXPORT Double: public PIVariantEditorBase { public: - PIVariantEditorDouble() { - createBoxLayout(); + Double() { widget = new QDoubleSpinBox(); widget->setRange(-std::numeric_limits::max(), std::numeric_limits::max()); layout()->addWidget(widget); } - void setValue(const PIVariant & v) override {widget->setValue(v.toDouble());} PIVariant value() const override {return widget->value();} PIVariantMap defaultAttributes() const override; - private: void applyAttributes(const PIVariantMap & a) override; - QDoubleSpinBox * widget; }; +class QAD_PIQT_UTILS_EXPORT String: public PIVariantEditorBase { +public: + String() { + widget = new CLineEdit(); + layout()->addWidget(widget); + } + void setValue(const PIVariant & v) override {widget->setText(PI2QString(v.toString()));} + PIVariant value() const override {return Q2PIString(widget->text());} + PIVariantMap defaultAttributes() const override; +private: + void applyAttributes(const PIVariantMap & a) override; + CLineEdit * widget; + +}; + + +class QAD_PIQT_UTILS_EXPORT Color: public PIVariantEditorBase { +public: + Color() { + widget = new ColorButton(); + layout()->addWidget(widget); + } + void setValue(const PIVariant & v) override {widget->setColor(PI2QColor(v.toColor()));} + PIVariant value() const override {return Q2PIColor(widget->color());} + PIVariantMap defaultAttributes() const override; +private: + void applyAttributes(const PIVariantMap & a) override; + ColorButton * widget; +}; + + +class QAD_PIQT_UTILS_EXPORT Time: public PIVariantEditorBase { +public: + Time() { + widget = new QTimeEdit(); + widget->setDisplayFormat("h:mm:ss"); + layout()->addWidget(widget); + } + void setValue(const PIVariant & v) override {widget->setTime(PI2QTime(v.toTime()));} + PIVariant value() const override {return Q2PITime(widget->time());} + PIVariantMap defaultAttributes() const override {return {};} +private: + void applyAttributes(const PIVariantMap & a) override; + QTimeEdit * widget; +}; + + +class QAD_PIQT_UTILS_EXPORT Date: public PIVariantEditorBase { +public: + Date() { + widget = new QDateEdit(); + widget->setDisplayFormat("d.MM.yyyy"); + layout()->addWidget(widget); + } + void setValue(const PIVariant & v) override {widget->setDate(PI2QDate(v.toDate()));} + PIVariant value() const override {return Q2PIDate(widget->date());} + PIVariantMap defaultAttributes() const override {return {};} +private: + void applyAttributes(const PIVariantMap & a) override; + QDateEdit * widget; +}; + + +class QAD_PIQT_UTILS_EXPORT DateTime: public PIVariantEditorBase { +public: + DateTime() { + widget = new QDateTimeEdit(); + widget->setDisplayFormat("d.MM.yyyy h:mm:ss"); + layout()->addWidget(widget); + } + void setValue(const PIVariant & v) override {widget->setDateTime(PI2QDateTime(v.toDateTime()));} + PIVariant value() const override {return Q2PIDateTime(widget->dateTime());} + PIVariantMap defaultAttributes() const override {return {};} +private: + void applyAttributes(const PIVariantMap & a) override; + QDateTimeEdit * widget; +}; + + +}; + + #endif diff --git a/libs/widgets/colorbutton.cpp b/libs/widgets/colorbutton.cpp index db173bb..fc359de 100644 --- a/libs/widgets/colorbutton.cpp +++ b/libs/widgets/colorbutton.cpp @@ -107,7 +107,7 @@ void ColorButton::changeEvent(QEvent * e) { void ColorButton::clicked() { - QColor ret = QColorDialog::getColor(color(), this, tr("Choose color"), options); + QColor ret = QColorDialog::getColor(color(), nullptr, tr("Choose color"), options); if (!ret.isValid()) return; setColor(ret); }