loom

Форк
0
/
NumberSourceDataModel.cpp 
110 строк · 2.2 Кб
1
#include "NumberSourceDataModel.hpp"
2

3
#include "DecimalData.hpp"
4

5
#include <QtCore/QJsonValue>
6
#include <QtGui/QDoubleValidator>
7
#include <QtWidgets/QLineEdit>
8

9
NumberSourceDataModel::NumberSourceDataModel()
10
    : _number(std::make_shared<DecimalData>(0.0))
11
    , _lineEdit{nullptr}
12
{}
13

14
QJsonObject NumberSourceDataModel::save() const
15
{
16
    QJsonObject modelJson = NodeDelegateModel::save();
17

18
    modelJson["number"] = QString::number(_number->number());
19

20
    return modelJson;
21
}
22

23
void NumberSourceDataModel::load(QJsonObject const &p)
24
{
25
    QJsonValue v = p["number"];
26

27
    if (!v.isUndefined()) {
28
        QString strNum = v.toString();
29

30
        bool ok;
31
        double d = strNum.toDouble(&ok);
32
        if (ok) {
33
            _number = std::make_shared<DecimalData>(d);
34

35
            if (_lineEdit)
36
                _lineEdit->setText(strNum);
37
        }
38
    }
39
}
40

41
unsigned int NumberSourceDataModel::nPorts(PortType portType) const
42
{
43
    unsigned int result = 1;
44

45
    switch (portType) {
46
    case PortType::In:
47
        result = 0;
48
        break;
49

50
    case PortType::Out:
51
        result = 1;
52

53
    default:
54
        break;
55
    }
56

57
    return result;
58
}
59

60
void NumberSourceDataModel::onTextEdited(QString const &str)
61
{
62
    bool ok = false;
63

64
    double number = str.toDouble(&ok);
65

66
    if (ok) {
67
        _number = std::make_shared<DecimalData>(number);
68

69
        Q_EMIT dataUpdated(0);
70

71
    } else {
72
        Q_EMIT dataInvalidated(0);
73
    }
74
}
75

76
NodeDataType NumberSourceDataModel::dataType(PortType, PortIndex) const
77
{
78
    return DecimalData().type();
79
}
80

81
std::shared_ptr<NodeData> NumberSourceDataModel::outData(PortIndex)
82
{
83
    return _number;
84
}
85

86
QWidget *NumberSourceDataModel::embeddedWidget()
87
{
88
    if (!_lineEdit) {
89
        _lineEdit = new QLineEdit();
90

91
        _lineEdit->setValidator(new QDoubleValidator());
92
        _lineEdit->setMaximumSize(_lineEdit->sizeHint());
93

94
        connect(_lineEdit, &QLineEdit::textChanged, this, &NumberSourceDataModel::onTextEdited);
95

96
        _lineEdit->setText(QString::number(_number->number()));
97
    }
98

99
    return _lineEdit;
100
}
101

102
void NumberSourceDataModel::setNumber(double n)
103
{
104
    _number = std::make_shared<DecimalData>(n);
105

106
    Q_EMIT dataUpdated(0);
107

108
    if (_lineEdit)
109
        _lineEdit->setText(QString::number(_number->number()));
110
}
111

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.