From 884c7a094a464eb5ba52ba0dfa8739b7a5d2d57b Mon Sep 17 00:00:00 2001 From: parker Date: Wed, 23 Jul 2025 20:31:02 +0100 Subject: [PATCH] feat(parameter): persistant parameter value --- src/Engine/Parameter/Parameter.cpp | 9 ++++ src/Engine/Parameter/Parameter.h | 4 +- src/Gui/Parameters/AbstractFormParm.cpp | 52 ++++++++++++++--------- src/Gui/Parameters/AbstractFormParm.h | 5 +++ src/Gui/Parameters/AbstractSliderParm.cpp | 8 +++- src/Gui/Parameters/AbstractSliderParm.h | 6 ++- 6 files changed, 60 insertions(+), 24 deletions(-) diff --git a/src/Engine/Parameter/Parameter.cpp b/src/Engine/Parameter/Parameter.cpp index 500aea5..6399446 100644 --- a/src/Engine/Parameter/Parameter.cpp +++ b/src/Engine/Parameter/Parameter.cpp @@ -13,3 +13,12 @@ std::string enzo::prm::Parameter::getName() const return template_.getName(); } +enzo::bt::floatT enzo::prm::Parameter::evalFloat() const +{ + return floatValue_; +} +void enzo::prm::Parameter::setFloat(bt::floatT value) +{ + floatValue_ = value; +} + diff --git a/src/Engine/Parameter/Parameter.h b/src/Engine/Parameter/Parameter.h index 30e6bc2..e2ce818 100644 --- a/src/Engine/Parameter/Parameter.h +++ b/src/Engine/Parameter/Parameter.h @@ -9,8 +9,8 @@ class Parameter public: Parameter(Template prmTemplate); std::string getName() const; - inline bt::floatT evalFloat() const {return floatValue_;} - inline void setFloat(bt::floatT value) {floatValue_ = value;} + bt::floatT evalFloat() const; + void setFloat(bt::floatT value); private: Template template_; bt::floatT floatValue_ = 0; diff --git a/src/Gui/Parameters/AbstractFormParm.cpp b/src/Gui/Parameters/AbstractFormParm.cpp index 97ae266..64f605a 100644 --- a/src/Gui/Parameters/AbstractFormParm.cpp +++ b/src/Gui/Parameters/AbstractFormParm.cpp @@ -2,32 +2,46 @@ #include "Gui/Parameters/AbstractSliderParm.h" #include #include +#include enzo::ui::AbstractFormParm::AbstractFormParm(std::weak_ptr parameter) +: parameter_{parameter} { - std::string name; - if(auto sharedParameter=parameter.lock()) + if(auto sharedParameter=parameter_.lock()) { - name = sharedParameter->getName(); + std::string name = sharedParameter->getName(); + auto label = new QLabel(QString::fromStdString(name+":")); + label->setStyleSheet("QLabel{background: none}"); + label->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + + auto slider = new AbstractSliderParm(); + connect(slider, &AbstractSliderParm::valueChanged, this, &AbstractFormParm::changeValue); + slider->setValue(sharedParameter->evalFloat()); + + mainLayout_ = new QHBoxLayout(); + mainLayout_->addWidget(label); + mainLayout_->addWidget(slider); + mainLayout_->setContentsMargins(0,0,0,0); + + setFixedHeight(24); + setProperty("class", "Parameter"); + setStyleSheet(".Parameter { background-color: none;}"); + setLayout(mainLayout_); + } + +} + +void enzo::ui::AbstractFormParm::changeValue(enzo::bt::floatT value) +{ + if(auto sharedParameter=parameter_.lock()) + { + sharedParameter->setFloat(value); } else { - return; + std::cout << "ERROR: parameter no longer exists\n"; + } - - auto label = new QLabel(QString::fromStdString(name+":")); - label->setStyleSheet("QLabel{background: none}"); - label->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); - - mainLayout_ = new QHBoxLayout(); - mainLayout_->addWidget(label); - mainLayout_->addWidget(new AbstractSliderParm()); - mainLayout_->setContentsMargins(0,0,0,0); - - setFixedHeight(24); - setProperty("class", "Parameter"); - setStyleSheet(".Parameter { background-color: none;}"); - setLayout(mainLayout_); + } - diff --git a/src/Gui/Parameters/AbstractFormParm.h b/src/Gui/Parameters/AbstractFormParm.h index 43f1346..d2279bb 100644 --- a/src/Gui/Parameters/AbstractFormParm.h +++ b/src/Gui/Parameters/AbstractFormParm.h @@ -12,8 +12,13 @@ class AbstractFormParm public: AbstractFormParm(std::weak_ptr parameter); +protected slots: + void changeValue(bt::floatT value); + + private: QHBoxLayout* mainLayout_; + std::weak_ptr parameter_; }; diff --git a/src/Gui/Parameters/AbstractSliderParm.cpp b/src/Gui/Parameters/AbstractSliderParm.cpp index 3516d9c..18c3264 100644 --- a/src/Gui/Parameters/AbstractSliderParm.cpp +++ b/src/Gui/Parameters/AbstractSliderParm.cpp @@ -13,6 +13,8 @@ enzo::ui::AbstractSliderParm::AbstractSliderParm(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) { + // tells qt to style the widget even though it's a Q_OBJECT + setAttribute(Qt::WA_StyledBackground, true); setFixedHeight(24); value_ = defaultValue_; @@ -53,8 +55,8 @@ void enzo::ui::AbstractSliderParm::paintEvent(QPaintEvent *event) void enzo::ui::AbstractSliderParm::setValue(bt::floatT value) { - if(value_==value) - return; + // if(value_==value) + // return; if(clampMin_ && valuemaxValue_) { value = maxValue_; } @@ -65,6 +67,8 @@ void enzo::ui::AbstractSliderParm::setValue(bt::floatT value) valStr.truncate(4); valueLabel_->setText(valStr); + valueChanged(value_); + } diff --git a/src/Gui/Parameters/AbstractSliderParm.h b/src/Gui/Parameters/AbstractSliderParm.h index df18579..640321c 100644 --- a/src/Gui/Parameters/AbstractSliderParm.h +++ b/src/Gui/Parameters/AbstractSliderParm.h @@ -10,11 +10,15 @@ namespace enzo::ui class AbstractSliderParm : public QWidget { + Q_OBJECT public: AbstractSliderParm(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + void setValue(bt::floatT value); + +signals: + void valueChanged(bt::floatT value); private: - void setValue(bt::floatT value); QVBoxLayout* mainLayout_; QLabel* valueLabel_;