130 lines
1.8 KiB
C++
130 lines
1.8 KiB
C++
|
#include "NumberSourceDataModel.hpp"
|
|||
|
|
|||
|
#include "DecimalData.hpp"
|
|||
|
|
|||
|
#include <QtCore/QJsonValue>
|
|||
|
#include <QtGui/QDoubleValidator>
|
|||
|
#include <QtWidgets/QLineEdit>
|
|||
|
|
|||
|
NumberSourceDataModel::
|
|||
|
NumberSourceDataModel()
|
|||
|
: _lineEdit{ nullptr }
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
QJsonObject
|
|||
|
NumberSourceDataModel::
|
|||
|
save() const
|
|||
|
{
|
|||
|
QJsonObject modelJson = NodeDataModel::save();
|
|||
|
|
|||
|
if (_number)
|
|||
|
modelJson["number"] = QString::number(_number->number());
|
|||
|
|
|||
|
return modelJson;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void
|
|||
|
NumberSourceDataModel::
|
|||
|
restore(QJsonObject const& p)
|
|||
|
{
|
|||
|
QJsonValue v = p["number"];
|
|||
|
|
|||
|
if (!v.isUndefined())
|
|||
|
{
|
|||
|
QString strNum = v.toString();
|
|||
|
|
|||
|
bool ok;
|
|||
|
double d = strNum.toDouble(&ok);
|
|||
|
if (ok)
|
|||
|
{
|
|||
|
_number = std::make_shared<DecimalData>(d);
|
|||
|
_lineEdit->setText(strNum);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
unsigned int
|
|||
|
NumberSourceDataModel::
|
|||
|
nPorts(PortType portType) const
|
|||
|
{
|
|||
|
unsigned int result = 1;
|
|||
|
|
|||
|
switch (portType)
|
|||
|
{
|
|||
|
case PortType::In:
|
|||
|
result = 0;
|
|||
|
break;
|
|||
|
|
|||
|
case PortType::Out:
|
|||
|
result = 1;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void
|
|||
|
NumberSourceDataModel::
|
|||
|
onTextEdited(QString const& string)
|
|||
|
{
|
|||
|
Q_UNUSED(string);
|
|||
|
|
|||
|
bool ok = false;
|
|||
|
|
|||
|
double number = _lineEdit->text().toDouble(&ok);
|
|||
|
|
|||
|
if (ok)
|
|||
|
{
|
|||
|
_number = std::make_shared<DecimalData>(number);
|
|||
|
|
|||
|
Q_EMIT dataUpdated(0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Q_EMIT dataInvalidated(0);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
NodeDataType
|
|||
|
NumberSourceDataModel::
|
|||
|
dataType(PortType, PortIndex) const
|
|||
|
{
|
|||
|
return DecimalData().type();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
std::shared_ptr<NodeData>
|
|||
|
NumberSourceDataModel::
|
|||
|
outData(PortIndex)
|
|||
|
{
|
|||
|
return _number;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
QWidget*
|
|||
|
NumberSourceDataModel::
|
|||
|
embeddedWidget()
|
|||
|
{
|
|||
|
if (!_lineEdit)
|
|||
|
{
|
|||
|
_lineEdit = new QLineEdit();
|
|||
|
|
|||
|
_lineEdit->setValidator(new QDoubleValidator());
|
|||
|
_lineEdit->setMaximumSize(_lineEdit->sizeHint());
|
|||
|
|
|||
|
connect(_lineEdit, &QLineEdit::textChanged,
|
|||
|
this, &NumberSourceDataModel::onTextEdited);
|
|||
|
|
|||
|
_lineEdit->setText("0.0");
|
|||
|
}
|
|||
|
|
|||
|
return _lineEdit;
|
|||
|
}
|