aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2023-10-19 16:34:34 +0800
committercrupest <crupest@outlook.com>2023-12-16 15:20:47 +0800
commit8f7505d7fd35058870a4a937ca9670e383778dca (patch)
tree3cc0eb61efa7041ba78a7d17761dcd3fbf28d26d
parente1061e0cf685b9d35da336259918b95c3c663560 (diff)
downloadcru-8f7505d7fd35058870a4a937ca9670e383778dca.tar.gz
cru-8f7505d7fd35058870a4a937ca9670e383778dca.tar.bz2
cru-8f7505d7fd35058870a4a937ca9670e383778dca.zip
Develop document.
-rw-r--r--include/cru/ui/document/DocumentElementType.h12
-rw-r--r--include/cru/ui/document/TextDocumentElement.h45
-rw-r--r--src/ui/CMakeLists.txt1
-rw-r--r--src/ui/document/DocumentElementType.cpp14
-rw-r--r--src/ui/document/TextDocumentElement.cpp17
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