forked from paceholder/nodeeditor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNumberSourceDataModel.cpp
More file actions
112 lines (82 loc) · 2.29 KB
/
NumberSourceDataModel.cpp
File metadata and controls
112 lines (82 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "NumberSourceDataModel.hpp"
#include "DecimalData.hpp"
#include <QtCore/QJsonValue>
#include <QtGui/QDoubleValidator>
#include <QtWidgets/QLineEdit>
NumberSourceDataModel::NumberSourceDataModel()
: _lineEdit{nullptr}
, _number(std::make_shared<DecimalData>(0.0))
{
this->setNodeProcessingStatus(QtNodes::NodeProcessingStatus::NoStatus);
}
QJsonObject NumberSourceDataModel::save() const
{
QJsonObject modelJson = NodeDelegateModel::save();
modelJson["number"] = QString::number(_number->number());
return modelJson;
}
void NumberSourceDataModel::load(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);
if (_lineEdit)
_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 &str)
{
bool ok = false;
double number = str.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(QString::number(_number->number()));
}
return _lineEdit;
}
void NumberSourceDataModel::setNumber(double n)
{
_number = std::make_shared<DecimalData>(n);
Q_EMIT dataUpdated(0);
if (_lineEdit)
_lineEdit->setText(QString::number(_number->number()));
}