GraphicsViewStyle.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "GraphicsViewStyle.hpp"
  2. #include <QtCore/QFile>
  3. #include <QtCore/QJsonArray>
  4. #include <QtCore/QJsonObject>
  5. #include <QtCore/QJsonValueRef>
  6. #include "StyleCollection.hpp"
  7. using QtNodes::GraphicsViewStyle;
  8. inline void initResources()
  9. {
  10. Q_INIT_RESOURCE(resources);
  11. }
  12. GraphicsViewStyle::GraphicsViewStyle()
  13. {
  14. // Explicit resources inialization for preventing the static initialization
  15. // order fiasco: https://isocpp.org/wiki/faq/ctors#static-init-order
  16. initResources();
  17. // This configuration is stored inside the compiled unit and is loaded statically
  18. loadJsonFile(":DefaultStyle.json");
  19. }
  20. GraphicsViewStyle::GraphicsViewStyle(QString jsonText)
  21. {
  22. loadJsonText(jsonText);
  23. }
  24. void GraphicsViewStyle::setStyle(QString jsonText)
  25. {
  26. GraphicsViewStyle style(jsonText);
  27. StyleCollection::setGraphicsViewStyle(style);
  28. }
  29. #ifdef STYLE_DEBUG
  30. #define FLOW_VIEW_STYLE_CHECK_UNDEFINED_VALUE(v, variable) \
  31. { \
  32. if (v.type() == QJsonValue::Undefined || v.type() == QJsonValue::Null) \
  33. qWarning() << "Undefined value for parameter:" << #variable; \
  34. }
  35. #else
  36. #define FLOW_VIEW_STYLE_CHECK_UNDEFINED_VALUE(v, variable)
  37. #endif
  38. #define FLOW_VIEW_STYLE_READ_COLOR(values, variable) \
  39. { \
  40. auto valueRef = values[#variable]; \
  41. FLOW_VIEW_STYLE_CHECK_UNDEFINED_VALUE(valueRef, variable) \
  42. if (valueRef.isArray()) { \
  43. auto colorArray = valueRef.toArray(); \
  44. std::vector<int> rgb; \
  45. rgb.reserve(3); \
  46. for (auto it = colorArray.begin(); it != colorArray.end(); ++it) { \
  47. rgb.push_back((*it).toInt()); \
  48. } \
  49. variable = QColor(rgb[0], rgb[1], rgb[2]); \
  50. } else { \
  51. variable = QColor(valueRef.toString()); \
  52. } \
  53. }
  54. #define FLOW_VIEW_STYLE_WRITE_COLOR(values, variable) \
  55. { \
  56. values[#variable] = variable.name(); \
  57. }
  58. void GraphicsViewStyle::loadJson(QJsonObject const &json)
  59. {
  60. QJsonValue nodeStyleValues = json["GraphicsViewStyle"];
  61. QJsonObject obj = nodeStyleValues.toObject();
  62. FLOW_VIEW_STYLE_READ_COLOR(obj, BackgroundColor);
  63. FLOW_VIEW_STYLE_READ_COLOR(obj, FineGridColor);
  64. FLOW_VIEW_STYLE_READ_COLOR(obj, CoarseGridColor);
  65. }
  66. QJsonObject GraphicsViewStyle::toJson() const
  67. {
  68. QJsonObject obj;
  69. FLOW_VIEW_STYLE_WRITE_COLOR(obj, BackgroundColor);
  70. FLOW_VIEW_STYLE_WRITE_COLOR(obj, FineGridColor);
  71. FLOW_VIEW_STYLE_WRITE_COLOR(obj, CoarseGridColor);
  72. QJsonObject root;
  73. root["GraphicsViewStyle"] = obj;
  74. return root;
  75. }