载入中...
搜索中...
未找到
UiDocument.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
8
9#include <map>
10#include <string>
11#include <vector>
12
13namespace eve::ui {
14class UIHost;
15}
16
17namespace eve::ui_editing {
18
21using editing::DomainOperation;
22using editing::EditRegion;
23using editing::IDomainOperationTarget;
24using editing::IDomainOperationTargetStaging;
25using editing::IEditableTarget;
26using editing::IPropertyProvider;
28using editing::PropertyDescriptor;
30using editing::PropertyPath;
31using editing::PropertyReadResult;
33using editing::PropertySchema;
37using editing::RuleId;
38using editing::SelectionItem;
39using editing::SelectionSnapshot;
40using editing::TargetDescriptor;
42using editing::Result;
46
49 double x = 0.0;
50 double y = 0.0;
51 double width = 0.0;
52 double height = 0.0;
53 double anchorX = 0.0;
54 double anchorY = 0.0;
55 double pivotX = 0.0;
56 double pivotY = 0.0;
57
59 auto operator<=>(const UiLayoutValue&) const = default;
60};
61
64 double marginLeft = 0.0, marginTop = 0.0, marginRight = 0.0, marginBottom = 0.0;
65 double paddingLeft = 0.0, paddingTop = 0.0, paddingRight = 0.0, paddingBottom = 0.0;
66 double tintR = 1.0, tintG = 1.0, tintB = 1.0, tintA = 1.0;
67 double cornerRadius = 0.0;
68 double gap = 0.0;
69 double flexGrow = 0.0;
70 std::string direction = "row";
71 std::string align = "start";
72 std::string justify = "start";
73
75 auto operator<=>(const UiStyleValue&) const = default;
76};
77
80 std::string fontAsset;
81 double fontSize = 16.0;
82 double textR = 1.0, textG = 1.0, textB = 1.0, textA = 1.0;
83 std::string horizontalAlign = "start";
84 std::string verticalAlign = "start";
85 std::string textureAsset;
86 std::string imageFit = "stretch";
87 bool clip = true;
88
90 auto operator<=>(const UiContentValue&) const = default;
91};
92
95 ObjectId id;
96 ObjectId parent;
97 std::string type;
98 std::string name;
99 std::string text;
100 bool visible = true;
101 bool enabled = true;
105};
106
109 ObjectId id;
110 ObjectId parent;
111 std::string type;
112 std::string name;
114};
115
118public:
120 virtual ~IUiDocumentEditTarget() = default;
122 static CapabilityId editorCapabilityId() { return CapabilityId("eve.editor.target.ui-document"); }
124 virtual Result<UiWidgetSnapshot> widget(const ObjectId& id) const = 0;
126 virtual std::vector<ObjectId> children(const ObjectId& parent) const = 0;
130 virtual Result<DomainOperation> makeDelete(const ObjectId& id) const = 0;
132 virtual Result<DomainOperation> makeRename(const ObjectId& id, const std::string& name) const = 0;
134 virtual Result<DomainOperation> makeReparent(const ObjectId& id, const ObjectId& parent) const = 0;
136 virtual Result<DomainOperation> makeSetLayout(const ObjectId& id, const UiLayoutValue& layout) const = 0;
138 virtual Result<DomainOperation> makeSetStyle(const ObjectId& id, const UiStyleValue& style) const = 0;
140 virtual Result<DomainOperation> makeSetContent(const ObjectId& id, const UiContentValue& content) const = 0;
141};
142
145 public virtual IEditableTarget,
149 public IPropertyProvider {
150public:
152 explicit UiDocumentTarget(std::string id);
153
155 TargetId targetId() const override { return TargetId(id_); }
157 TargetDescriptor describe() const override;
160 void* queryCapability(const CapabilityId& capability) override;
162 Result<void> applyDomainOperation(const DomainOperation& operation) override;
164 std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
166 Result<void> commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) override;
167
169 Result<UiWidgetSnapshot> widget(const ObjectId& id) const override;
171 std::vector<ObjectId> children(const ObjectId& parent) const override;
173 Result<DomainOperation> makeCreate(const CreateUiWidgetRequest& request) const override;
175 Result<DomainOperation> makeDelete(const ObjectId& id) const override;
177 Result<DomainOperation> makeRename(const ObjectId& id, const std::string& name) const override;
179 Result<DomainOperation> makeReparent(const ObjectId& id, const ObjectId& parent) const override;
181 Result<DomainOperation> makeSetLayout(const ObjectId& id, const UiLayoutValue& layout) const override;
183 Result<DomainOperation> makeSetStyle(const ObjectId& id, const UiStyleValue& style) const override;
185 Result<DomainOperation> makeSetContent(const ObjectId& id, const UiContentValue& content) const override;
186
188 std::vector<EditorDiagnostic> validate() const;
189
191 eve::Result<eve::Revision> currentRevision(const SelectionSnapshot& selection) const override;
193 PropertySchema schema(const SelectionSnapshot& selection) const override;
195 PropertyReadResult read(const SelectionSnapshot& selection, const PropertyPath& path) const override;
197 Result<DomainOperation> makeSet(const SelectionSnapshot& selection, const PropertyPath& path,
198 const EditorValue& value, PropertySetMode mode) const override;
200 Result<DomainOperation> makeReset(const SelectionSnapshot& selection,
201 const PropertyPath& path) const override;
202
204 EditorValue snapshotValue() const;
206 Result<void> loadSnapshot(const EditorValue& snapshot);
207
208private:
210 static EditorValue layoutValue(const UiLayoutValue& layout);
212 static Result<UiLayoutValue> parseLayout(const EditorValue& value);
214 static EditorValue styleValue(const UiStyleValue& style);
216 static Result<UiStyleValue> parseStyle(const EditorValue& value);
218 static EditorValue contentValue(const UiContentValue& content);
220 static Result<UiContentValue> parseContent(const EditorValue& value);
222 static EditorValue widgetValue(const UiWidgetSnapshot& widget);
224 static Result<UiWidgetSnapshot> parseWidget(const EditorValue& value);
226 Result<DomainOperation> makeReplace(const UiWidgetSnapshot& before, UiWidgetSnapshot after,
227 std::string property = {}) const;
229 bool wouldCycle(const ObjectId& id, const ObjectId& parent,
230 const std::map<ObjectId, UiWidgetSnapshot>& widgets) const;
231
232 std::string id_;
233 std::map<ObjectId, UiWidgetSnapshot> widgets_;
234};
235
238 ObjectId id;
239 ObjectId parent;
240 double x = 0.0, y = 0.0, width = 0.0, height = 0.0;
241 int depth = 0;
242 bool visible = true;
243};
244
247 EditorStatus status = EditorStatus::Failed;
249 double viewportWidth = 0.0, viewportHeight = 0.0;
250 std::vector<UiPreviewWidget> widgets;
251 std::vector<EditorDiagnostic> diagnostics;
252};
253
256public:
258 UiPreviewSnapshot build(const UiDocumentTarget& document, double width, double height) const;
260 Result<ObjectId> pick(const UiPreviewSnapshot& preview, double x, double y) const;
262 Result<EditorValue> anchorGizmo(const UiDocumentTarget& document, const UiPreviewSnapshot& preview,
263 const ObjectId& widget) const;
264};
265
268public:
270 Result<void> publish(const UiDocumentTarget& document, const ObjectId& root, ui::UIHost* host) const;
271};
272
273} // namespace eve::ui_editing
ActionParameterOperation operation
double value
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
int root
Definition AnimSmr.cpp:119
std::string widget
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::string layout
const GltfImportRequest & request
std::uint32_t height
std::uint32_t width
std::int32_t parent
std::string name
std::string path
Definition PlayHost.cpp:110
int children
Definition TreeMesh.cpp:295
UIHostHandle host
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Dirty region and revision shared by every editable document target.
Optional candidate/publish capability for atomic domain operations.
Editable-target capability that applies owning domain operations.
IEditableTarget public API.
UI-independent property access for an immutable selection snapshot.
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
ECS mount point for one UI panel/screen. Subclass to attach UI to game entities, e....
Definition UIHost.h:243
Hierarchy/layout capability consumed by UI tree and canvas tools.
Definition UiDocument.h:117
virtual Result< UiWidgetSnapshot > widget(const ObjectId &id) const =0
Widget.
virtual Result< DomainOperation > makeSetStyle(const ObjectId &id, const UiStyleValue &style) const =0
Plan replacement of renderer-neutral widget style.
virtual Result< DomainOperation > makeRename(const ObjectId &id, const std::string &name) const =0
Make rename.
virtual ~IUiDocumentEditTarget()=default
Releases IUiDocumentEditTarget resources.
virtual Result< DomainOperation > makeDelete(const ObjectId &id) const =0
Make delete.
virtual Result< DomainOperation > makeCreate(const CreateUiWidgetRequest &request) const =0
Make create.
virtual Result< DomainOperation > makeSetContent(const ObjectId &id, const UiContentValue &content) const =0
Plan replacement of text/font/texture content skin.
virtual Result< DomainOperation > makeSetLayout(const ObjectId &id, const UiLayoutValue &layout) const =0
Make set layout.
virtual Result< DomainOperation > makeReparent(const ObjectId &id, const ObjectId &parent) const =0
Make reparent.
virtual std::vector< ObjectId > children(const ObjectId &parent) const =0
Children.
static CapabilityId editorCapabilityId()
Editor capability id.
Definition UiDocument.h:122
UI-neutral preview, picking and anchor-gizmo geometry service.
Definition UiDocument.h:255
Optional bridge publishing a UI document into a real runtime UIHost.
Definition UiDocument.h:267
Result< void > publish(const UiDocumentTarget &document, const ObjectId &root, ui::UIHost *host) const
Reconcile a document subtree into a runtime host.
Definition UiRuntime.cpp:79
Serializable UI authoring document with hierarchy and inspector capabilities.
Definition UiDocument.h:149
TargetId targetId() const override
Target id.
Definition UiDocument.h:155
eve::Severity DiagnosticSeverity
std::uint64_t Revision
StrongId< TargetIdTag > TargetId
Definition EditingIds.h:57
eve::Diagnostic Diagnostic
StrongId< ObjectIdTag > ObjectId
Definition EditingIds.h:65
PropertyType
PropertyType public API.
StrongId< RuleIdTag > RuleId
Definition EditingIds.h:60
PropertySetMode
PropertySetMode public API.
PropertyFlag
PropertyFlag public API.
eve::StatusCode Status
StrongId< CapabilityIdTag > CapabilityId
Definition EditingIds.h:61
eve::Result< T > Result
PropertyReadState
PropertyReadState public API.
StatusCode
Stable outcome category for an operation.
Definition Status.h:27
detail::StrongUint64< detail::RevisionTag > Revision
Monotonic content/state revision used for optimistic-concurrency checks.
Definition Revision.h:13
DomainOperation public API.
PropertyReadResult public API.
EVENGINE_API_PLATFORM public API.
SelectionSnapshot public API.
Stable discovery metadata exposed by every editable target.
Request for creating one widget with stable identity.
Definition UiDocument.h:108
Renderer-neutral text and image skin authored per widget.
Definition UiDocument.h:79
auto operator<=>(const UiContentValue &) const =default
Operator <=>.
Renderer-neutral layout values shared by UI document hosts.
Definition UiDocument.h:48
auto operator<=>(const UiLayoutValue &) const =default
Operator <=>.
Deterministic UI layout preview used by canvas rendering and picking.
Definition UiDocument.h:246
std::vector< UiPreviewWidget > widgets
Definition UiDocument.h:250
std::vector< EditorDiagnostic > diagnostics
Definition UiDocument.h:251
Computed widget rectangle in a revision-bound UI preview.
Definition UiDocument.h:237
Renderer-neutral visual and box-model style authored per widget.
Definition UiDocument.h:63
auto operator<=>(const UiStyleValue &) const =default
Operator <=>.
Immutable widget snapshot used across editor/runtime boundaries.
Definition UiDocument.h:94