diff options
author | crupest <crupest@outlook.com> | 2023-10-19 16:34:34 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2023-12-16 15:20:47 +0800 |
commit | 8f7505d7fd35058870a4a937ca9670e383778dca (patch) | |
tree | 3cc0eb61efa7041ba78a7d17761dcd3fbf28d26d | |
parent | e1061e0cf685b9d35da336259918b95c3c663560 (diff) | |
download | cru-8f7505d7fd35058870a4a937ca9670e383778dca.tar.gz cru-8f7505d7fd35058870a4a937ca9670e383778dca.tar.bz2 cru-8f7505d7fd35058870a4a937ca9670e383778dca.zip |
Develop document.
-rw-r--r-- | include/cru/ui/document/DocumentElementType.h | 12 | ||||
-rw-r--r-- | include/cru/ui/document/TextDocumentElement.h | 45 | ||||
-rw-r--r-- | src/ui/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/ui/document/DocumentElementType.cpp | 14 | ||||
-rw-r--r-- | src/ui/document/TextDocumentElement.cpp | 17 |
5 files changed, 84 insertions, 5 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 diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 1e227fd7..93077388 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -26,6 +26,7 @@ add_library(CruUi controls/Window.cpp document/DocumentElement.cpp document/DocumentElementType.cpp + document/TextDocumentElement.cpp events/MouseEventArgs.cpp helper/ClickDetector.cpp helper/ShortcutHub.cpp diff --git a/src/ui/document/DocumentElementType.cpp b/src/ui/document/DocumentElementType.cpp index 8a057b69..d548b494 100644 --- a/src/ui/document/DocumentElementType.cpp +++ b/src/ui/document/DocumentElementType.cpp @@ -1,13 +1,21 @@ #include "cru/ui/document/DocumentElementType.h" #include <utility> +#include <vector> namespace cru::ui::document { -DocumentElementType::DocumentElementType(String name) - : name_(std::move(name)) {} +DocumentElementType::DocumentElementType( + String name, std::vector<DocumentElementType*> parents) + : name_(std::move(name)), parents_(std::move(parents)) {} DocumentElementType::~DocumentElementType() {} +DocumentElementType* const DocumentElementTypes::kBaseElementType = + new DocumentElementType(u"Base", {}); + DocumentElementType* const DocumentElementTypes::kRootElementType = - new DocumentElementType(u"Root"); + new DocumentElementType(u"Root", {kBaseElementType}); + +DocumentElementType* const DocumentElementTypes::kTextElementType = + new DocumentElementType(u"Text", {kBaseElementType}); } // namespace cru::ui::document diff --git a/src/ui/document/TextDocumentElement.cpp b/src/ui/document/TextDocumentElement.cpp new file mode 100644 index 00000000..ab79823d --- /dev/null +++ b/src/ui/document/TextDocumentElement.cpp @@ -0,0 +1,17 @@ +#include "cru/ui/document/TextDocumentElement.h" +#include "cru/common/String.h" +#include "cru/ui/document/DocumentElement.h" +#include "cru/ui/document/DocumentElementType.h" + +namespace cru::ui::document { +TextDocumentElement::TextDocumentElement(String text, TextStyle style, + IDocumentLink* link) + : DocumentElement(DocumentElementTypes::kTextElementType), + text_(std::move(text)), + style_(style), + link_(link) {} + +TextDocumentElement::~TextDocumentElement() {} + +void TextDocumentElement::SetText(String text) { text_ = std::move(text); } +} // namespace cru::ui::document |