diff --git a/CMakeLists.txt b/CMakeLists.txt index cde8b3f..c759eb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ set(ENGINE_SOURCES src/Engine/Operator/Context.cpp src/Engine/Parameter/Template.cpp src/Engine/Parameter/Parameter.cpp + src/Engine/Parameter/Default.cpp src/Engine/Network/NetworkManager.cpp ) diff --git a/src/Engine/Parameter/Default.cpp b/src/Engine/Parameter/Default.cpp new file mode 100644 index 0000000..a2fd68d --- /dev/null +++ b/src/Engine/Parameter/Default.cpp @@ -0,0 +1,8 @@ +#include "Engine/Parameter/Default.h" + + +enzo::prm::Default::Default(bt::floatT floatDefault, const char *stringDefault) +: floatDefault_{floatDefault}, stringDefault_{stringDefault} +{ + +} diff --git a/src/Engine/Parameter/Default.h b/src/Engine/Parameter/Default.h new file mode 100644 index 0000000..d9d8148 --- /dev/null +++ b/src/Engine/Parameter/Default.h @@ -0,0 +1,27 @@ +#pragma once + +#include "Engine/Types.h" +namespace enzo::prm +{ + class Default + { + public: + Default(bt::floatT floatDefault=0, const char *stringDefault = "" + // TODO: add string meaning eg. + // , CH_StringMeaning string_meaning = CH_STRING_LITERAL + ); + + bt::floatT getFloat() const { return floatDefault_; } + bt::intT getInt() const { return (bt::intT)floatDefault_; } + const char *getString() const { return stringDefault_; } + + void set(bt::floatT thefloat, const char *thestring); + void setFloat(bt::floatT value) { floatDefault_ = value; } + void setInt(bt::intT value) { floatDefault_ = (bt::intT)value; } + void setString(const char *value) { stringDefault_ = value; } + + private: + bt::floatT floatDefault_; + const char* stringDefault_; + }; +} diff --git a/src/Engine/Parameter/Parameter.cpp b/src/Engine/Parameter/Parameter.cpp index 4801740..6a34501 100644 --- a/src/Engine/Parameter/Parameter.cpp +++ b/src/Engine/Parameter/Parameter.cpp @@ -1,5 +1,7 @@ #include "Engine/Parameter/Parameter.h" +#include "Engine/Parameter/Default.h" #include "Engine/Types.h" +#include #include #include #include @@ -7,8 +9,33 @@ enzo::prm::Parameter::Parameter(Template prmTemplate) : template_{prmTemplate} { - floatValues_ = std::vector(prmTemplate.getSize(), prmTemplate.getDefault()); - stringValues_ = std::vector(prmTemplate.getSize(), "default"); + floatValues_ = std::vector(); + floatValues_.reserve(prmTemplate.getSize()); + + stringValues_ = std::vector(prmTemplate.getSize(), prmTemplate.getDefault().getString()); + stringValues_.reserve(prmTemplate.getSize()); + + const unsigned int templateSize = prmTemplate.getSize(); + const unsigned int numDefaults = prmTemplate.getNumDefaults(); + + if(numDefaults==1) + { + floatValues_ = std::vector(templateSize, prmTemplate.getDefault().getFloat()); + stringValues_ = std::vector(templateSize, prmTemplate.getDefault().getString()); + } + + for(int i=0; i defaults, unsigned int vectorSize) +: type_{type}, name_{name}, defaults_{defaults}, vectorSize_(vectorSize) +{ + +} + +enzo::prm::Template::Template(enzo::prm::Type type, const char* name, prm::Default theDefault, unsigned int vectorSize) +: type_{type}, name_{name}, vectorSize_(vectorSize) +{ + defaults_.push_back(theDefault); } @@ -30,11 +50,17 @@ const unsigned int enzo::prm::Template::getSize() const -const enzo::bt::floatT enzo::prm::Template::getDefault() const +const enzo::prm::Default enzo::prm::Template::getDefault(unsigned int index) const { - return default_; + return defaults_.at(index); } +const unsigned int enzo::prm::Template::getNumDefaults() const +{ + return defaults_.size(); +} + + const char* enzo::prm::Template::getName() const { return name_; diff --git a/src/Engine/Parameter/Template.h b/src/Engine/Parameter/Template.h index e72c809..bde9334 100644 --- a/src/Engine/Parameter/Template.h +++ b/src/Engine/Parameter/Template.h @@ -1,4 +1,5 @@ #pragma once +#include "Engine/Parameter/Default.h" #include "Engine/Parameter/Type.h" #include "Engine/Types.h" @@ -8,22 +9,37 @@ namespace enzo::prm class Template { public: + Template( + enzo::prm::Type type, + const char* name + ); Template( enzo::prm::Type type, const char* name, - // TODO: change default to class that can store multiple types - bt::floatT theDefault, + unsigned int vectorSize + ); + Template( + enzo::prm::Type type, + const char* name, + std::vector defaults, + unsigned int vectorSize = 1 + ); + Template( + enzo::prm::Type type, + const char* name, + prm::Default theDefault, unsigned int vectorSize = 1 ); Template(); const char* getName() const; - const bt::floatT getDefault() const; + const prm::Default getDefault(unsigned int index=0) const; const prm::Type getType() const; const unsigned int getSize() const; + const unsigned int getNumDefaults() const; bool isValid() const; private: enzo::prm::Type type_; - bt::floatT default_; + std::vector defaults_; // TODO: make a class that holds token and name const char* name_; unsigned int vectorSize_; diff --git a/src/Gui/Parameters/AbstractFormParm.cpp b/src/Gui/Parameters/AbstractFormParm.cpp index 6a7ba40..dd16549 100644 --- a/src/Gui/Parameters/AbstractFormParm.cpp +++ b/src/Gui/Parameters/AbstractFormParm.cpp @@ -28,18 +28,16 @@ enzo::ui::AbstractFormParm::AbstractFormParm(std::weak_ptr param case prm::Type::FLOAT: { AbstractSliderParm* slider; - slider = new AbstractSliderParm(); - slider->setValue(sharedParameter->evalFloat()); + slider = new AbstractSliderParm(sharedParameter->evalFloat()); mainLayout_->addWidget(slider); connect(slider, &AbstractSliderParm::valueChanged, this, [this](bt::floatT value){this->changeValue(value, 0);}); break; } case prm::Type::XYZ: { - AbstractSliderParm* slider1 = new AbstractSliderParm(); - AbstractSliderParm* slider2 = new AbstractSliderParm(); - AbstractSliderParm* slider3 = new AbstractSliderParm(); - slider1->setValue(sharedParameter->evalFloat()); + AbstractSliderParm* slider1 = new AbstractSliderParm(sharedParameter->evalFloat(0)); + AbstractSliderParm* slider2 = new AbstractSliderParm(sharedParameter->evalFloat(1)); + AbstractSliderParm* slider3 = new AbstractSliderParm(sharedParameter->evalFloat(2)); QHBoxLayout* vectorLayout = new QHBoxLayout(); vectorLayout->addWidget(slider1); vectorLayout->addWidget(slider2); @@ -52,7 +50,7 @@ enzo::ui::AbstractFormParm::AbstractFormParm(std::weak_ptr param } case prm::Type::STRING: { - StringParm* stringParm = new StringParm(); + StringParm* stringParm = new StringParm(sharedParameter->evalString()); connect(stringParm, &StringParm::valueChanged, this, [this](bt::String value){this->changeValue(value, 0);}); diff --git a/src/Gui/Parameters/AbstractSliderParm.cpp b/src/Gui/Parameters/AbstractSliderParm.cpp index 18c3264..8405193 100644 --- a/src/Gui/Parameters/AbstractSliderParm.cpp +++ b/src/Gui/Parameters/AbstractSliderParm.cpp @@ -10,13 +10,13 @@ #include -enzo::ui::AbstractSliderParm::AbstractSliderParm(QWidget *parent, Qt::WindowFlags f) +enzo::ui::AbstractSliderParm::AbstractSliderParm(bt::floatT value, 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_; + mainLayout_ = new QVBoxLayout(); setLayout(mainLayout_); @@ -34,7 +34,7 @@ enzo::ui::AbstractSliderParm::AbstractSliderParm(QWidget *parent, Qt::WindowFlag )"); mainLayout_->addWidget(valueLabel_); - setValue(value_); + setValueImpl(value); } void enzo::ui::AbstractSliderParm::paintEvent(QPaintEvent *event) @@ -53,20 +53,24 @@ void enzo::ui::AbstractSliderParm::paintEvent(QPaintEvent *event) } -void enzo::ui::AbstractSliderParm::setValue(bt::floatT value) +void enzo::ui::AbstractSliderParm::setValueImpl(bt::floatT value) { - // if(value_==value) - // return; - if(clampMin_ && valuemaxValue_) { value = maxValue_; } value_ = value; - update(); - QString valStr = QString::number(value); + QString valStr = QString::number(value_); valStr.truncate(4); valueLabel_->setText(valStr); + +} + +void enzo::ui::AbstractSliderParm::setValue(bt::floatT value) +{ + + setValueImpl(value); + update(); valueChanged(value_); } diff --git a/src/Gui/Parameters/AbstractSliderParm.h b/src/Gui/Parameters/AbstractSliderParm.h index 1e28496..097c4b3 100644 --- a/src/Gui/Parameters/AbstractSliderParm.h +++ b/src/Gui/Parameters/AbstractSliderParm.h @@ -12,7 +12,7 @@ class AbstractSliderParm { Q_OBJECT public: - AbstractSliderParm(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + AbstractSliderParm(bt::floatT value, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); void setValue(bt::floatT value); Q_SIGNALS: @@ -23,12 +23,13 @@ private: QVBoxLayout* mainLayout_; QLabel* valueLabel_; bt::floatT value_; - float defaultValue_=0; bool clampMin_ = true; bool clampMax_ = true; bt::floatT minValue_=-5; bt::floatT maxValue_=10; + void setValueImpl(bt::floatT value); + protected: void paintEvent(QPaintEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; diff --git a/src/Gui/Parameters/StringParm.cpp b/src/Gui/Parameters/StringParm.cpp index 3265a52..1a96e1b 100644 --- a/src/Gui/Parameters/StringParm.cpp +++ b/src/Gui/Parameters/StringParm.cpp @@ -11,12 +11,15 @@ #include -enzo::ui::StringParm::StringParm(QWidget *parent) +enzo::ui::StringParm::StringParm(bt::String value, QWidget *parent) : QLineEdit(parent) { // tells qt to style the widget even though it's a Q_OBJECT setAttribute(Qt::WA_StyledBackground, true); setFixedHeight(24); + + value_ = value; + setText(QString::fromStdString(value_)); // setAlignment(Qt::AlignCenter); diff --git a/src/Gui/Parameters/StringParm.h b/src/Gui/Parameters/StringParm.h index 5f9b6ed..e2b1291 100644 --- a/src/Gui/Parameters/StringParm.h +++ b/src/Gui/Parameters/StringParm.h @@ -13,7 +13,7 @@ class StringParm { Q_OBJECT public: - StringParm(QWidget *parent = nullptr); + StringParm(bt::String value, QWidget *parent = nullptr); void setValue(bt::String value); void setValueQString(QString value); diff --git a/src/OpDefs/CMakeLists.txt b/src/OpDefs/CMakeLists.txt index 06c1e46..1a5a95d 100644 --- a/src/OpDefs/CMakeLists.txt +++ b/src/OpDefs/CMakeLists.txt @@ -19,6 +19,7 @@ add_library(${libName} SHARED ../Engine/Network/NetworkManager.cpp ../Engine/Parameter/Template.cpp ../Engine/Parameter/Parameter.cpp + ../Engine/Parameter/Default.cpp GopTransform.cpp GopHouse.cpp GopTestCube.cpp diff --git a/src/OpDefs/GopGeometryImport.cpp b/src/OpDefs/GopGeometryImport.cpp index e0a8253..9e539d2 100644 --- a/src/OpDefs/GopGeometryImport.cpp +++ b/src/OpDefs/GopGeometryImport.cpp @@ -122,7 +122,7 @@ void GopGeometryImport::cookOp(enzo::op::Context context) enzo::prm::Template GopGeometryImport::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::STRING, "filePath", 1), - enzo::prm::Template(enzo::prm::Type::FLOAT, "size", 1), + enzo::prm::Template(enzo::prm::Type::STRING, "filePath"), + enzo::prm::Template(enzo::prm::Type::FLOAT, "size", enzo::prm::Default(1)), enzo::prm::Terminator }; diff --git a/src/OpDefs/GopTransform.cpp b/src/OpDefs/GopTransform.cpp index 1470b1e..bdf75ec 100644 --- a/src/OpDefs/GopTransform.cpp +++ b/src/OpDefs/GopTransform.cpp @@ -62,8 +62,8 @@ void GopTransform::cookOp(enzo::op::Context context) enzo::prm::Template GopTransform::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::XYZ, "translate", 0, 3), - enzo::prm::Template(enzo::prm::Type::XYZ, "rotate", 0, 3), + enzo::prm::Template(enzo::prm::Type::XYZ, "translate", 3), + enzo::prm::Template(enzo::prm::Type::XYZ, "rotate", 3), enzo::prm::Terminator };