Polyphase Game Engine
Loading...
Searching...
No Matches
UIDocument.h
Go to the documentation of this file.
1#pragma once
2
3#include "Asset.h"
4#include "UI/UILoader.h"
5
6#include <string>
7#include <vector>
8#include <unordered_map>
9#include <functional>
10
11class Widget;
12class Button;
13enum class ButtonState : uint8_t;
14
15class UIDocument : public Asset
16{
17public:
18
20
21 UIDocument();
22 virtual ~UIDocument();
23
24 // Asset interface
25 virtual void Create() override;
26 virtual void LoadStream(Stream& stream, Platform platform) override;
27 virtual void SaveStream(Stream& stream, Platform platform) override;
28 virtual bool Import(const std::string& path, ImportOptions* options) override;
29 virtual void GatherProperties(std::vector<Property>& outProps) override;
30 virtual glm::vec4 GetTypeColor() override;
31 virtual const char* GetTypeName() override;
32 virtual const char* GetTypeImportExt() override;
33
34 void SetXmlSource(const std::string& xml) { mXmlSource = xml; }
35
36 // Instantiate widget tree (does not attach to any parent)
38
39 // Mount the instantiated tree under a parent widget
40 void Mount(Widget* parent);
41
42 // Unmount and destroy the widget tree
43 void Unmount();
44
45 // Query
46 Widget* FindById(const std::string& id) const;
47 std::vector<Widget*> FindByClass(const std::string& className) const;
48 Widget* GetRootWidget() const;
49
50 // Data binding: replaces {{key}} in text content
51 void SetData(const std::string& key, const std::string& value);
52 const std::string& GetData(const std::string& key) const;
53
54 // Event callbacks
55 void SetCallback(const std::string& elementId, const std::string& eventName, const std::string& funcName);
56 void SetCallbackRef(const std::string& elementId, const std::string& eventName, int luaRef);
57
58 // Call each frame to process events (button clicks, etc.)
59 void Tick();
60
61 const std::string& GetXmlSource() const { return mXmlSource; }
62 const std::string& GetBasePath() const { return mBasePath; }
63 void SetBasePath(const std::string& basePath) { mBasePath = basePath; }
64 const std::string& GetSourceFilePath() const { return mSourceFilePath; }
65 void SetSourceFilePath(const std::string& path) { mSourceFilePath = path; }
66
67private:
68
69 void UpdateDataBindings();
70 void DestroyWidgetTree();
71
72 // Source data
73 std::string mXmlSource;
74 std::string mBasePath;
75 std::string mSourceFilePath; // Path to the .xml file on disk
76
77 // Runtime state (after Instantiate)
78 Widget* mRootWidget = nullptr;
79 Widget* mMountParent = nullptr;
80 UILoadResult mLoadResult;
81
82 // Data binding
83 std::unordered_map<std::string, std::string> mDataStore;
84
85 // Event system
86 struct EventCallback
87 {
88 std::string mFuncName;
89 int mLuaRef = -1; // LUA_NOREF
90 };
91 // Key: "elementId:eventName"
92 std::unordered_map<std::string, EventCallback> mCallbacks;
93
94 struct ButtonTracker
95 {
96 Button* mButton = nullptr;
97 ButtonState mPrevState;
98 std::string mElementId;
99 };
100 std::vector<ButtonTracker> mButtonTrackers;
101};
ButtonState
Definition Button.h:11
Platform
Definition EngineTypes.h:31
Definition Asset.h:113
Definition Button.h:21
Definition Asset.h:102
Definition Stream.h:21
Definition UIDocument.h:16
virtual glm::vec4 GetTypeColor() override
Definition UIDocument.cpp:113
const std::string & GetSourceFilePath() const
Definition UIDocument.h:64
void Unmount()
Definition UIDocument.cpp:239
virtual const char * GetTypeName() override
Definition UIDocument.cpp:118
void SetData(const std::string &key, const std::string &value)
Definition UIDocument.cpp:287
const std::string & GetBasePath() const
Definition UIDocument.h:62
void SetCallback(const std::string &elementId, const std::string &eventName, const std::string &funcName)
Definition UIDocument.cpp:343
virtual ~UIDocument()
Definition UIDocument.cpp:39
void Tick()
Definition UIDocument.cpp:361
virtual bool Import(const std::string &path, ImportOptions *options) override
Definition UIDocument.cpp:76
std::vector< Widget * > FindByClass(const std::string &className) const
Definition UIDocument.cpp:268
UIDocument()
Definition UIDocument.cpp:34
void Mount(Widget *parent)
Definition UIDocument.cpp:212
Widget * Instantiate()
Definition UIDocument.cpp:132
DECLARE_ASSET(UIDocument, Asset)
void SetSourceFilePath(const std::string &path)
Definition UIDocument.h:65
Widget * FindById(const std::string &id) const
Definition UIDocument.cpp:260
void SetBasePath(const std::string &basePath)
Definition UIDocument.h:63
virtual const char * GetTypeImportExt() override
Definition UIDocument.cpp:123
void SetCallbackRef(const std::string &elementId, const std::string &eventName, int luaRef)
Definition UIDocument.cpp:352
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition UIDocument.cpp:107
virtual void SaveStream(Stream &stream, Platform platform) override
Definition UIDocument.cpp:67
const std::string & GetData(const std::string &key) const
Definition UIDocument.cpp:293
void SetXmlSource(const std::string &xml)
Definition UIDocument.h:34
virtual void Create() override
Definition UIDocument.cpp:48
virtual void LoadStream(Stream &stream, Platform platform) override
Definition UIDocument.cpp:58
Widget * GetRootWidget() const
Definition UIDocument.cpp:276
const std::string & GetXmlSource() const
Definition UIDocument.h:61
Definition Widget.h:53
Definition UILoader.h:38