DataViewDefault.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #pragma once
  2. #include "../../Include/RmlUi/Core/Header.h"
  3. #include "../../Include/RmlUi/Core/Types.h"
  4. #include "../../Include/RmlUi/Core/Variant.h"
  5. #include "DataView.h"
  6. namespace Rml {
  7. class Element;
  8. class DataExpression;
  9. using DataExpressionPtr = UniquePtr<DataExpression>;
  10. class DataViewCommon : public DataView {
  11. public:
  12. DataViewCommon(Element* element, String override_modifier = String(), int sort_offset = 0);
  13. bool Initialize(DataModel& model, Element* element, const String& expression, const String& modifier) override;
  14. StringList GetVariableNameList() const override;
  15. protected:
  16. const String& GetModifier() const;
  17. DataExpression& GetExpression();
  18. // Delete this
  19. void Release() override;
  20. private:
  21. String modifier;
  22. DataExpressionPtr expression;
  23. };
  24. class DataViewAttribute : public DataViewCommon {
  25. public:
  26. DataViewAttribute(Element* element);
  27. DataViewAttribute(Element* element, String override_attribute, int sort_offset);
  28. bool Update(DataModel& model) override;
  29. };
  30. class DataViewAttributeIf final : public DataViewCommon {
  31. public:
  32. DataViewAttributeIf(Element* element);
  33. bool Update(DataModel& model) override;
  34. };
  35. class DataViewValue final : public DataViewAttribute {
  36. public:
  37. DataViewValue(Element* element);
  38. };
  39. class DataViewChecked final : public DataViewCommon {
  40. public:
  41. DataViewChecked(Element* element);
  42. bool Update(DataModel& model) override;
  43. };
  44. class DataViewStyle final : public DataViewCommon {
  45. public:
  46. DataViewStyle(Element* element);
  47. bool Update(DataModel& model) override;
  48. };
  49. class DataViewClass final : public DataViewCommon {
  50. public:
  51. DataViewClass(Element* element);
  52. bool Update(DataModel& model) override;
  53. };
  54. class DataViewRml final : public DataViewCommon {
  55. public:
  56. DataViewRml(Element* element);
  57. bool Update(DataModel& model) override;
  58. private:
  59. String previous_rml;
  60. };
  61. class DataViewIf final : public DataViewCommon {
  62. public:
  63. DataViewIf(Element* element);
  64. bool Update(DataModel& model) override;
  65. };
  66. class DataViewVisible final : public DataViewCommon {
  67. public:
  68. DataViewVisible(Element* element);
  69. bool Update(DataModel& model) override;
  70. };
  71. class DataViewText final : public DataView {
  72. public:
  73. DataViewText(Element* in_element);
  74. bool Initialize(DataModel& model, Element* element, const String& expression, const String& modifier) override;
  75. bool Update(DataModel& model) override;
  76. StringList GetVariableNameList() const override;
  77. protected:
  78. void Release() override;
  79. private:
  80. String BuildText() const;
  81. struct DataEntry {
  82. size_t index = 0; // Index into 'text'
  83. DataExpressionPtr data_expression;
  84. String value;
  85. };
  86. String text;
  87. Vector<DataEntry> data_entries;
  88. };
  89. class DataViewFor final : public DataView {
  90. public:
  91. DataViewFor(Element* element);
  92. bool Initialize(DataModel& model, Element* element, const String& expression, const String& modifier) override;
  93. bool Update(DataModel& model) override;
  94. StringList GetVariableNameList() const override;
  95. protected:
  96. void Release() override;
  97. private:
  98. const String* RMLContents() const;
  99. DataAddress container_address;
  100. String iterator_name;
  101. String iterator_index_name;
  102. ElementAttributes attributes;
  103. ElementList elements;
  104. };
  105. class DataViewAlias final : public DataView {
  106. public:
  107. DataViewAlias(Element* element);
  108. virtual StringList GetVariableNameList() const override;
  109. bool Update(DataModel& model) override;
  110. bool Initialize(DataModel& model, Element* element, const String& expression, const String& modifier) override;
  111. protected:
  112. void Release() override;
  113. private:
  114. StringList variables;
  115. };
  116. } // namespace Rml