//
// (c)2021 by Lucky Resistor. https://luckyresistor.me/
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#include "ParameterWidget.hpp"
#include
#include
#include
#include
ParameterWidget::ParameterWidget(const ParameterEntryPtr ¶meter, QWidget *parent)
: QWidget(parent), _currentValue(parameter->settings()["default"])
{
}
CheckBoxParameter::CheckBoxParameter(const ParameterEntryPtr ¶meter, QWidget *parent)
: ParameterWidget(parameter, parent)
{
auto mainLayout = new QHBoxLayout(this);
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(2);
_value = new QCheckBox();
mainLayout->addWidget(_value);
_value->setChecked(_currentValue.toBool());
connect(_value, &QCheckBox::toggled, this, &CheckBoxParameter::valueChanged);
}
QVariant CheckBoxParameter::value() const
{
return static_cast(_value->isChecked());
}
void CheckBoxParameter::setValue(const QVariant &value)
{
if (value != _currentValue) {
_currentValue = value;
_value->setChecked(value.toBool());
}
}
IntegerParameter::IntegerParameter(const ParameterEntryPtr ¶meter, QWidget *parent)
: ParameterWidget(parameter, parent)
{
auto mainLayout = new QHBoxLayout(this);
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(2);
_value = new QSpinBox();
_value->setRange(
parameter->settings()["minimum"].toInt(),
parameter->settings()["maximum"].toInt()
);
mainLayout->addWidget(_value);
_value->setValue(_currentValue.toInt());
connect(_value, &QSpinBox::valueChanged, this, &CheckBoxParameter::valueChanged);
}
QVariant IntegerParameter::value() const
{
return _value->value();
}
void IntegerParameter::setValue(const QVariant &value)
{
if (value != _currentValue) {
_value->setValue(value.toInt());
}
}
IntegerSizeParameter::IntegerSizeParameter(const ParameterEntryPtr ¶meter, QWidget *parent)
: ParameterWidget(parameter, parent)
{
auto mainLayout = new QHBoxLayout(this);
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(2);
mainLayout->addWidget(new QLabel(tr("W:")));
_a = new QSpinBox();
_a->setRange(
parameter->settings()["minimum"].toSize().width(),
parameter->settings()["maximum"].toSize().width()
);
mainLayout->addWidget(_a);
_a->setValue(_currentValue.toSize().width());
connect(_a, &QSpinBox::valueChanged, this, &CheckBoxParameter::valueChanged);
mainLayout->addWidget(new QLabel(tr("H:")));
_b = new QSpinBox();
_b->setRange(
parameter->settings()["minimum"].toSize().height(),
parameter->settings()["maximum"].toSize().height()
);
mainLayout->addWidget(_b);
_b->setValue(_currentValue.toSize().height());
connect(_b, &QSpinBox::valueChanged, this, &CheckBoxParameter::valueChanged);
}
QVariant IntegerSizeParameter::value() const
{
return QSize(_a->value(), _b->value());
}
void IntegerSizeParameter::setValue(const QVariant &value)
{
if (_currentValue != value) {
_a->setValue(value.toSize().width());
_b->setValue(value.toSize().height());
}
}
IntegerPositionParameter::IntegerPositionParameter(const ParameterEntryPtr ¶meter, QWidget *parent)
: ParameterWidget(parameter, parent)
{
auto mainLayout = new QHBoxLayout(this);
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(2);
mainLayout->addWidget(new QLabel(tr("X:")));
_a = new QSpinBox();
_a->setRange(
parameter->settings()["minimum"].toPoint().x(),
parameter->settings()["maximum"].toPoint().x()
);
mainLayout->addWidget(_a);
_a->setValue(_currentValue.toPoint().x());
connect(_a, &QSpinBox::valueChanged, this, &CheckBoxParameter::valueChanged);
mainLayout->addWidget(new QLabel(tr("Y:")));
_b = new QSpinBox();
_b->setRange(
parameter->settings()["minimum"].toPoint().y(),
parameter->settings()["maximum"].toPoint().y()
);
mainLayout->addWidget(_b);
_b->setValue(_currentValue.toPoint().y());
connect(_b, &QSpinBox::valueChanged, this, &CheckBoxParameter::valueChanged);
}
QVariant IntegerPositionParameter::value() const
{
return QPoint(_a->value(), _b->value());
}
void IntegerPositionParameter::setValue(const QVariant &value)
{
if (_currentValue != value) {
_a->setValue(value.toPoint().x());
_b->setValue(value.toPoint().y());
}
}