aboutsummaryrefslogtreecommitdiff
path: root/include/cru
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru')
-rw-r--r--include/cru/ui/document/DocumentElementType.h12
-rw-r--r--include/cru/ui/document/TextDocumentElement.h45
2 files changed, 55 insertions, 2 deletions
diff --git a/include/cru/ui/document/DocumentElementType.h b/include/cru/ui/document/DocumentElementType.h
index a94bf029..d16836c1 100644
--- a/include/cru/ui/document/DocumentElementType.h
+++ b/include/cru/ui/document/DocumentElementType.h
@@ -1,25 +1,33 @@
#pragma once
+#include "../Base.h"
#include "cru/common/String.h"
-#include "../Base.h"
+#include <vector>
namespace cru::ui::document {
class CRU_UI_API DocumentElementType : public Object {
public:
- explicit DocumentElementType(String name);
+ explicit DocumentElementType(String name,
+ std::vector<DocumentElementType*> parents);
~DocumentElementType() override;
public:
String GetName() const { return name_; }
+ const std::vector<DocumentElementType*>& GetParents() const {
+ return parents_;
+ }
private:
String name_;
+ std::vector<DocumentElementType*> parents_;
};
struct CRU_UI_API DocumentElementTypes {
+ static DocumentElementType* const kBaseElementType;
static DocumentElementType* const kRootElementType;
+ static DocumentElementType* const kTextElementType;
};
} // namespace cru::ui::document
diff --git a/include/cru/ui/document/TextDocumentElement.h b/include/cru/ui/document/TextDocumentElement.h
new file mode 100644
index 00000000..f7205b59
--- /dev/null
+++ b/include/cru/ui/document/TextDocumentElement.h
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "../Base.h"
+#include "DocumentElement.h"
+#include "cru/common/Base.h"
+#include "cru/common/Bitmask.h"
+
+namespace cru::ui::document {
+namespace details {
+struct TextStyleTag {};
+} // namespace details
+
+using TextStyle = Bitmask<details::TextStyleTag>;
+
+struct TextStyles {
+ static constexpr TextStyle Normal;
+ static constexpr TextStyle Bold{0x1};
+ static constexpr TextStyle Italic{0x2};
+};
+
+struct IDocumentLink : virtual Interface {
+ virtual void Open() = 0;
+};
+
+class CRU_UI_API TextDocumentElement : public DocumentElement {
+ public:
+ TextDocumentElement(String text, TextStyle style, IDocumentLink* link);
+
+ ~TextDocumentElement() override;
+
+ String GetText() const { return text_; }
+ void SetText(String text);
+
+ TextStyle GetStyle() const { return style_; }
+ void SetStyle(TextStyle style);
+
+ IDocumentLink* GetLink() const { return link_; }
+ void SetLink(IDocumentLink link);
+
+ private:
+ String text_;
+ TextStyle style_;
+ IDocumentLink* link_;
+};
+} // namespace cru::ui::document