diff options
Diffstat (limited to 'include/cru')
-rw-r--r-- | include/cru/ui/document/DocumentElementType.h | 12 | ||||
-rw-r--r-- | include/cru/ui/document/TextDocumentElement.h | 45 |
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 |