From 2f3f9f09db1ed23ef2401613ef9b2bc340434aed Mon Sep 17 00:00:00 2001 From: parker Date: Wed, 23 Jul 2025 19:54:40 +0100 Subject: [PATCH] feat(parameter): populate parameterPanel --- CMakeLists.txt | 4 ++- src/Engine/Operator/GeometryOperator.cpp | 4 +++ src/Engine/Operator/GeometryOperator.h | 2 +- src/Engine/Operator/OperatorTable.cpp | 8 +++-- src/Engine/Parameter/Parameter.cpp | 6 ++++ src/Engine/Parameter/Parameter.h | 1 + src/Gui/Interface.cpp | 5 +-- src/Gui/Network/Network.cpp | 2 +- src/Gui/Parameters/AbstractFormParm.cpp | 14 ++++++-- src/Gui/Parameters/AbstractFormParm.h | 4 ++- src/Gui/ParametersPanel/ParametersPanel.cpp | 38 ++++++++++++++++----- src/Gui/ParametersPanel/ParametersPanel.h | 2 ++ src/OpDefs/GopHouse.cpp | 1 + src/OpDefs/GopTransform.cpp | 8 +++-- src/OpDefs/RegisterPlugin.cpp | 2 +- 15 files changed, 79 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e4df0c..ba25f38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,6 +76,9 @@ qt_add_executable(${AppExec} target_link_libraries(${AppExec} PRIVATE Qt6::Core Qt6::Widgets Qt6::SvgWidgets Qt6::OpenGLWidgets glm::glm Eigen3::Eigen TBB::tbb Boost::filesystem Boost::system) target_include_directories(${AppExec} PUBLIC src) +# compile nodes +add_subdirectory(src/OpDefs) + # tests # Include(FetchContent) @@ -110,4 +113,3 @@ target_include_directories(${AppExec} PUBLIC src) # target_compile_definitions(${BenchExec} PRIVATE UNIT_TEST) # target_include_directories(${BenchExec} PUBLIC src) -# add_subdirectory(src/OpDefs) diff --git a/src/Engine/Operator/GeometryOperator.cpp b/src/Engine/Operator/GeometryOperator.cpp index b5460b4..bbc6234 100644 --- a/src/Engine/Operator/GeometryOperator.cpp +++ b/src/Engine/Operator/GeometryOperator.cpp @@ -83,6 +83,10 @@ std::vector> nt::GeometryOperator: } return inputConnections; } +std::vector> nt::GeometryOperator::getParameters() +{ + return {parameters_.begin(), parameters_.end()}; +} std::vector> nt::GeometryOperator::getOutputConnections() const { diff --git a/src/Engine/Operator/GeometryOperator.h b/src/Engine/Operator/GeometryOperator.h index 398a5b6..43b4d83 100644 --- a/src/Engine/Operator/GeometryOperator.h +++ b/src/Engine/Operator/GeometryOperator.h @@ -26,7 +26,7 @@ public: void addOutputConnection(std::shared_ptr connection); std::vector> getInputConnections() const; std::vector> getOutputConnections() const; - + std::vector> getParameters(); unsigned int getMaxInputs() const; diff --git a/src/Engine/Operator/OperatorTable.cpp b/src/Engine/Operator/OperatorTable.cpp index 2e49156..a0bc157 100644 --- a/src/Engine/Operator/OperatorTable.cpp +++ b/src/Engine/Operator/OperatorTable.cpp @@ -7,13 +7,17 @@ void enzo::op::OperatorTable::addOperator(const char* internalName, const char* { std::cout << "OPERATOR TABLE ADDED\n"; std::cout << "adding operator: " << displayName << "\n"; - std::cout << "tempalate size: " << sizeof(templates) << "\n"; + + for(const prm::Template* t = templates; t->isValid(); ++t) + { + std::cout << "name: " << t->getName() << "\n"; + } + enzo::op::OpInfo info { internalName, displayName, ctorFunc, templates, - sizeof(*templates) }; opInfoStore_.push_back(info); diff --git a/src/Engine/Parameter/Parameter.cpp b/src/Engine/Parameter/Parameter.cpp index 3aa0935..500aea5 100644 --- a/src/Engine/Parameter/Parameter.cpp +++ b/src/Engine/Parameter/Parameter.cpp @@ -7,3 +7,9 @@ enzo::prm::Parameter::Parameter(Template prmTemplate) { std::cout << "created new parameter: " << prmTemplate.getName() << "\n"; } + +std::string enzo::prm::Parameter::getName() const +{ + return template_.getName(); +} + diff --git a/src/Engine/Parameter/Parameter.h b/src/Engine/Parameter/Parameter.h index ab26c8f..30e6bc2 100644 --- a/src/Engine/Parameter/Parameter.h +++ b/src/Engine/Parameter/Parameter.h @@ -8,6 +8,7 @@ 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;} private: diff --git a/src/Gui/Interface.cpp b/src/Gui/Interface.cpp index 0e2e459..e3e104f 100644 --- a/src/Gui/Interface.cpp +++ b/src/Gui/Interface.cpp @@ -42,17 +42,18 @@ EnzoUI::EnzoUI() viewportSplitter_->addWidget(viewport); viewportSplitter_->addWidget(networkSplitter_); - viewportSplitter_->setStretchFactor(0, 4); + viewportSplitter_->setStretchFactor(0, 25); viewportSplitter_->setStretchFactor(1, 1); networkSplitter_->addWidget(parametersPanel); networkSplitter_->addWidget(network); networkSplitter_->setStretchFactor(0, 1); - networkSplitter_->setStretchFactor(1, 15); + networkSplitter_->setStretchFactor(1, 10); mainLayout_->addWidget(viewportSplitter_); // connect signals connect(&enzo::nt::nm(), &enzo::nt::NetworkManager::updateDisplay, viewport, &Viewport::geometryChanged); + connect(&enzo::nt::nm(), &enzo::nt::NetworkManager::updateDisplay, parametersPanel, &ParametersPanel::selectionChanged); } diff --git a/src/Gui/Network/Network.cpp b/src/Gui/Network/Network.cpp index b8823eb..7735e7d 100644 --- a/src/Gui/Network/Network.cpp +++ b/src/Gui/Network/Network.cpp @@ -399,8 +399,8 @@ void Network::mouseReleaseEvent(QMouseEvent *event) NodeGraphic* prevDisplayNode = nodeStore_.at(*prevDisplayOpId); prevDisplayNode->setDisplayFlag(false); } - nm.setDisplayOp(opId); static_cast(clickedDisplayFlag)->setEnabled(true); + nm.setDisplayOp(opId); } if(state_==State::MOVING_NODE) { diff --git a/src/Gui/Parameters/AbstractFormParm.cpp b/src/Gui/Parameters/AbstractFormParm.cpp index e5725df..97ae266 100644 --- a/src/Gui/Parameters/AbstractFormParm.cpp +++ b/src/Gui/Parameters/AbstractFormParm.cpp @@ -4,9 +4,19 @@ #include -enzo::ui::AbstractFormParm::AbstractFormParm() +enzo::ui::AbstractFormParm::AbstractFormParm(std::weak_ptr parameter) { - auto label = new QLabel("Parm name:"); + std::string name; + if(auto sharedParameter=parameter.lock()) + { + name = sharedParameter->getName(); + } + else + { + return; + } + + auto label = new QLabel(QString::fromStdString(name+":")); label->setStyleSheet("QLabel{background: none}"); label->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); diff --git a/src/Gui/Parameters/AbstractFormParm.h b/src/Gui/Parameters/AbstractFormParm.h index 82d2243..43f1346 100644 --- a/src/Gui/Parameters/AbstractFormParm.h +++ b/src/Gui/Parameters/AbstractFormParm.h @@ -1,5 +1,7 @@ +#include "Engine/Parameter/Parameter.h" #include #include +#include namespace enzo::ui { @@ -8,7 +10,7 @@ class AbstractFormParm : public QWidget { public: - AbstractFormParm(); + AbstractFormParm(std::weak_ptr parameter); private: QHBoxLayout* mainLayout_; diff --git a/src/Gui/ParametersPanel/ParametersPanel.cpp b/src/Gui/ParametersPanel/ParametersPanel.cpp index 9002dc2..3e76b49 100644 --- a/src/Gui/ParametersPanel/ParametersPanel.cpp +++ b/src/Gui/ParametersPanel/ParametersPanel.cpp @@ -1,7 +1,10 @@ #include "Gui/ParametersPanel/ParametersPanel.h" +#include "Engine/Operator/GeometryOperator.h" #include "Gui/Parameters/AbstractSliderParm.h" #include "Gui/Parameters/AbstractFormParm.h" #include "Gui/Parameters/FloatParm.h" +#include "Engine/Network/NetworkManager.h" +#include #include #include #include @@ -29,15 +32,34 @@ ParametersPanel::ParametersPanel(QWidget *parent, Qt::WindowFlags f) mainLayout_->addLayout(parametersLayout_); mainLayout_->addWidget(bgWidget_); - // parametersLayout_->addWidget(new enzo::ui::AbstractSliderParm()); - // parametersLayout_->addWidget(new enzo::ui::AbstractSliderParm()); - // parametersLayout_->addWidget(new enzo::ui::FloatParm()); - // parametersLayout_->addWidget(new enzo::ui::FloatParm()); - parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); - parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); - parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); - parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); + // parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); + // parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); + // parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); + // parametersLayout_->addWidget(new enzo::ui::AbstractFormParm()); setLayout(mainLayout_); } + +void ParametersPanel::selectionChanged() +{ + enzo::nt::NetworkManager& nm = enzo::nt::nm(); + std::optional displayOpId = nm.getDisplayOp(); + + if(!displayOpId.has_value()) return; + + // clear layout safely + QLayoutItem *child; + while ((child = parametersLayout_->takeAt(0)) != nullptr) { + delete child->widget(); + delete child; + } + + enzo::nt::GeometryOperator& displayOp = nm.getGeoOperator(displayOpId.value()); + auto parameters = displayOp.getParameters(); + for(auto parameter : parameters) + { + parametersLayout_->addWidget(new enzo::ui::AbstractFormParm(parameter)); + } +} + diff --git a/src/Gui/ParametersPanel/ParametersPanel.h b/src/Gui/ParametersPanel/ParametersPanel.h index 7a4bfda..8749474 100644 --- a/src/Gui/ParametersPanel/ParametersPanel.h +++ b/src/Gui/ParametersPanel/ParametersPanel.h @@ -8,6 +8,8 @@ class ParametersPanel { public: ParametersPanel(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); +public slots: + void selectionChanged(); private: QVBoxLayout* mainLayout_; QVBoxLayout* parametersLayout_; diff --git a/src/OpDefs/GopHouse.cpp b/src/OpDefs/GopHouse.cpp index eb53ded..4610be1 100644 --- a/src/OpDefs/GopHouse.cpp +++ b/src/OpDefs/GopHouse.cpp @@ -81,5 +81,6 @@ void GOP_house::cookOp(enzo::op::Context context) enzo::prm::Template GOP_house::parameterList[] = { + enzo::prm::Template(enzo::prm::Type::FLOAT, "Size"), enzo::prm::Terminator }; diff --git a/src/OpDefs/GopTransform.cpp b/src/OpDefs/GopTransform.cpp index cbca302..c146855 100644 --- a/src/OpDefs/GopTransform.cpp +++ b/src/OpDefs/GopTransform.cpp @@ -39,9 +39,11 @@ void GopTransform::cookOp(enzo::op::Context context) } -enzo::prm::Template GopTransform::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::FLOAT, "Test"), - enzo::prm::Template(enzo::prm::Type::FLOAT, "Test2"), +enzo::prm::Template GopTransform::parameterList[] = +{ + enzo::prm::Template(enzo::prm::Type::FLOAT, "translateX"), + enzo::prm::Template(enzo::prm::Type::FLOAT, "translateY"), + enzo::prm::Template(enzo::prm::Type::FLOAT, "translateZ"), enzo::prm::Terminator }; diff --git a/src/OpDefs/RegisterPlugin.cpp b/src/OpDefs/RegisterPlugin.cpp index 71324e9..57dea9a 100644 --- a/src/OpDefs/RegisterPlugin.cpp +++ b/src/OpDefs/RegisterPlugin.cpp @@ -18,7 +18,7 @@ extern "C" "house", "House", &GOP_house::ctor, - GopTransform::parameterList + GOP_house::parameterList ); }