From c3ea851e4993b81d1b0734bfed751ab7c596aee7 Mon Sep 17 00:00:00 2001 From: parker Date: Fri, 18 Jul 2025 01:43:38 +0100 Subject: [PATCH] feat(parameterUI): slide functionality --- CMakeLists.txt | 1 + src/Gui/Interface.cpp | 2 +- src/Gui/Parameters/AbstractSliderParm.cpp | 37 +++++++++++++++++++++ src/Gui/Parameters/AbstractSliderParm.h | 26 +++++++++++++++ src/Gui/ParametersPanel/ParametersPanel.cpp | 10 +++--- 5 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 src/Gui/Parameters/AbstractSliderParm.cpp create mode 100644 src/Gui/Parameters/AbstractSliderParm.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 18d8840..228e3f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ set(GUI_SOURCES src/Gui/Network/NodeIconGraphic.cpp src/Gui/Network/TabMenu.cpp src/Gui/ParametersPanel/ParametersPanel.cpp + src/Gui/Parameters/AbstractSliderParm.cpp ) # qt diff --git a/src/Gui/Interface.cpp b/src/Gui/Interface.cpp index b1eb271..0e2e459 100644 --- a/src/Gui/Interface.cpp +++ b/src/Gui/Interface.cpp @@ -42,7 +42,7 @@ EnzoUI::EnzoUI() viewportSplitter_->addWidget(viewport); viewportSplitter_->addWidget(networkSplitter_); - viewportSplitter_->setStretchFactor(0, 40); + viewportSplitter_->setStretchFactor(0, 4); viewportSplitter_->setStretchFactor(1, 1); networkSplitter_->addWidget(parametersPanel); diff --git a/src/Gui/Parameters/AbstractSliderParm.cpp b/src/Gui/Parameters/AbstractSliderParm.cpp new file mode 100644 index 0000000..90ccc0b --- /dev/null +++ b/src/Gui/Parameters/AbstractSliderParm.cpp @@ -0,0 +1,37 @@ +#include "Gui/Parameters/AbstractSliderParm.h" +#include +#include +#include + + +enzo::ui::AbstractSliderParm::AbstractSliderParm(QWidget *parent, Qt::WindowFlags f) +: QWidget(parent, f) +{ + setFixedHeight(20); + value_ = defaultValue_; + +} + +void enzo::ui::AbstractSliderParm::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(Qt::black); + painter.setBrush(Qt::red); + + QRectF fillRect = event->rect(); + float fillPercent = value_/maxValue_; + std::cout << "fill percent" << fillPercent << "\n"; + fillRect.adjust(0, 0, -fillRect.width()*(1-fillPercent), 0); + painter.drawRoundedRect(fillRect, 8, 8); + +} + + +void enzo::ui::AbstractSliderParm::mouseMoveEvent(QMouseEvent *event) +{ + value_ = static_cast(event->pos().x())/rect().width() * maxValue_; + update(); + // std::cout << "pos x: " << fillPercent << "\n"; +} + diff --git a/src/Gui/Parameters/AbstractSliderParm.h b/src/Gui/Parameters/AbstractSliderParm.h new file mode 100644 index 0000000..c1418fe --- /dev/null +++ b/src/Gui/Parameters/AbstractSliderParm.h @@ -0,0 +1,26 @@ +#pragma once +#include + +namespace enzo::ui +{ + +class AbstractSliderParm +: public QWidget +{ +public: + AbstractSliderParm(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + +private: + float value_; + float defaultValue_=0; + float minValue_; + float maxValue_=10; + +protected: +void paintEvent(QPaintEvent *event) override; +void mouseMoveEvent(QMouseEvent *event) override; + +}; + +} + diff --git a/src/Gui/ParametersPanel/ParametersPanel.cpp b/src/Gui/ParametersPanel/ParametersPanel.cpp index 1d27ea4..6ac2323 100644 --- a/src/Gui/ParametersPanel/ParametersPanel.cpp +++ b/src/Gui/ParametersPanel/ParametersPanel.cpp @@ -1,4 +1,5 @@ #include "Gui/ParametersPanel/ParametersPanel.h" +#include "Gui/Parameters/AbstractSliderParm.h" #include #include #include @@ -24,11 +25,10 @@ ParametersPanel::ParametersPanel(QWidget *parent, Qt::WindowFlags f) mainLayout_->addLayout(parametersLayout_); mainLayout_->addWidget(bgWidget_); - parametersLayout_->addWidget(new QSpinBox()); - parametersLayout_->addWidget(new QSpinBox()); - parametersLayout_->addWidget(new QSpinBox()); - parametersLayout_->addWidget(new QLineEdit()); - parametersLayout_->addWidget(new QLineEdit()); + parametersLayout_->addWidget(new enzo::ui::AbstractSliderParm()); + parametersLayout_->addWidget(new enzo::ui::AbstractSliderParm()); + parametersLayout_->addWidget(new enzo::ui::AbstractSliderParm()); + parametersLayout_->addWidget(new enzo::ui::AbstractSliderParm()); setLayout(mainLayout_);