diff --git a/bcvaluewidget.cpp b/bcvaluewidget.cpp new file mode 100644 index 0000000..872a376 --- /dev/null +++ b/bcvaluewidget.cpp @@ -0,0 +1,67 @@ + +#include +#include + + + +BCValueWidget::BCValueWidget(const BCValue& bcValue, QWidget *parent ) + : QWidget(parent), _bcValue{bcValue} +{ + setupUi(this); + + _slider->setStyle(new BCSliderStyle()); + setAutoFillBackground(true); + + + /* + _slider = new QSlider(Qt::Horizontal, this); + _slider->setRange(0, 100); + _slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + + _slider->setSingleStep(1); + _slider->setPageStep(10); + _slider->setStyle(new BCSliderStyle()); + + _commitButton = new QPushButton(this); + _commitButton->setIcon(style()->standardIcon(QStyle::SP_DialogResetButton)); + _commitButton->setFixedSize(32, 32); + + auto *layout = new QHBoxLayout(this); + // Deine gewünschten Margins für 36px Zeilenhöhe + layout->setContentsMargins(2, 2, 2, 2); + layout->setSpacing(4); + + layout->addWidget(_slider); + layout->addWidget(_commitButton); + setLayout(layout); + */ + // Wenn Slider bewegt wird -> Signal nach außen senden + connect(_slider, &QSlider::valueChanged, this, [this](int val) + { + emit valueChanged(val); + }); + + // Wenn Reset gedrückt wird -> Slider auf 0 (löst auch valueChanged aus) + connect(_commitButton, &QPushButton::clicked, this, [this](){ + _slider->setValue(0); + }); + _commitButton->setVisible( false); +} + +int BCValueWidget::getValue() const +{ + return _slider->value(); +} + +void BCValueWidget::setValue(int val) +{ + // WICHTIG: Block Signals verhindern Endlosschleifen, falls das Model + // das Widget während des Updates neu setzt (passiert manchmal bei Live-Updates). + if (val != _slider->value()) + { + bool blocked = _slider->blockSignals(true); + _slider->setValue(val); + _slider->blockSignals(blocked); + } +} + diff --git a/bcvaluewidget.h b/bcvaluewidget.h new file mode 100644 index 0000000..776217b --- /dev/null +++ b/bcvaluewidget.h @@ -0,0 +1,32 @@ +#ifndef BCVALUEWIDGET_H +#define BCVALUEWIDGET_H + + +#include +#include + +class QSlider; +class QPushButton; +class BCValue; + +class BCValueWidget : public QWidget, private Ui::BCValueWidget +{ + Q_OBJECT + +public: + + explicit BCValueWidget(const BCValue& bcValue, QWidget *parent = nullptr); + + int getValue() const; + void setValue(int val); + +signals: + + void valueChanged(int value); + +private: + + const BCValue& _bcValue; + +}; +#endif // BCVALUEWIDGET_H diff --git a/bcvaluewidget.ui b/bcvaluewidget.ui new file mode 100644 index 0000000..d054130 --- /dev/null +++ b/bcvaluewidget.ui @@ -0,0 +1,95 @@ + + + BCValueWidget + + + + 0 + 0 + 60 + 24 + + + + + 60 + 24 + + + + Form + + + + 0 + + + QLayout::SizeConstraint::SetMinimumSize + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Orientation::Horizontal + + + + + + + + 24 + 24 + + + + + 16777212 + 16777215 + + + + PointingHandCursor + + + + + + + :/update.png:/update.png + + + + 24 + 24 + + + + QToolButton::ToolButtonPopupMode::InstantPopup + + + Qt::ToolButtonStyle::ToolButtonIconOnly + + + true + + + + + + + + + + diff --git a/resources/update.png b/resources/update.png new file mode 100644 index 0000000..2cca881 Binary files /dev/null and b/resources/update.png differ