loom

Форк
0
/
GraphicsViewStyle.cpp 
94 строки · 2.5 Кб
1
#include "GraphicsViewStyle.hpp"
2

3
#include <QtCore/QFile>
4
#include <QtCore/QJsonArray>
5
#include <QtCore/QJsonObject>
6
#include <QtCore/QJsonValueRef>
7

8
#include "StyleCollection.hpp"
9

10
using QtNodes::GraphicsViewStyle;
11

12
inline void initResources()
13
{
14
    Q_INIT_RESOURCE(resources);
15
}
16

17
GraphicsViewStyle::GraphicsViewStyle()
18
{
19
    // Explicit resources inialization for preventing the static initialization
20
    // order fiasco: https://isocpp.org/wiki/faq/ctors#static-init-order
21
    initResources();
22

23
    // This configuration is stored inside the compiled unit and is loaded statically
24
    loadJsonFile(":DefaultStyle.json");
25
}
26

27
GraphicsViewStyle::GraphicsViewStyle(QString jsonText)
28
{
29
    loadJsonText(jsonText);
30
}
31

32
void GraphicsViewStyle::setStyle(QString jsonText)
33
{
34
    GraphicsViewStyle style(jsonText);
35

36
    StyleCollection::setGraphicsViewStyle(style);
37
}
38

39
#ifdef STYLE_DEBUG
40
#define FLOW_VIEW_STYLE_CHECK_UNDEFINED_VALUE(v, variable) \
41
    { \
42
        if (v.type() == QJsonValue::Undefined || v.type() == QJsonValue::Null) \
43
            qWarning() << "Undefined value for parameter:" << #variable; \
44
    }
45
#else
46
#define FLOW_VIEW_STYLE_CHECK_UNDEFINED_VALUE(v, variable)
47
#endif
48

49
#define FLOW_VIEW_STYLE_READ_COLOR(values, variable) \
50
    { \
51
        auto valueRef = values[#variable]; \
52
        FLOW_VIEW_STYLE_CHECK_UNDEFINED_VALUE(valueRef, variable) \
53
        if (valueRef.isArray()) { \
54
            auto colorArray = valueRef.toArray(); \
55
            std::vector<int> rgb; \
56
            rgb.reserve(3); \
57
            for (auto it = colorArray.begin(); it != colorArray.end(); ++it) { \
58
                rgb.push_back((*it).toInt()); \
59
            } \
60
            variable = QColor(rgb[0], rgb[1], rgb[2]); \
61
        } else { \
62
            variable = QColor(valueRef.toString()); \
63
        } \
64
    }
65

66
#define FLOW_VIEW_STYLE_WRITE_COLOR(values, variable) \
67
    { \
68
        values[#variable] = variable.name(); \
69
    }
70

71
void GraphicsViewStyle::loadJson(QJsonObject const &json)
72
{
73
    QJsonValue nodeStyleValues = json["GraphicsViewStyle"];
74

75
    QJsonObject obj = nodeStyleValues.toObject();
76

77
    FLOW_VIEW_STYLE_READ_COLOR(obj, BackgroundColor);
78
    FLOW_VIEW_STYLE_READ_COLOR(obj, FineGridColor);
79
    FLOW_VIEW_STYLE_READ_COLOR(obj, CoarseGridColor);
80
}
81

82
QJsonObject GraphicsViewStyle::toJson() const
83
{
84
    QJsonObject obj;
85

86
    FLOW_VIEW_STYLE_WRITE_COLOR(obj, BackgroundColor);
87
    FLOW_VIEW_STYLE_WRITE_COLOR(obj, FineGridColor);
88
    FLOW_VIEW_STYLE_WRITE_COLOR(obj, CoarseGridColor);
89

90
    QJsonObject root;
91
    root["GraphicsViewStyle"] = obj;
92

93
    return root;
94
}
95

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

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

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

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