ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
XUIGLayout.hpp
1#pragma once
2
3#include "../UI/Components/CGLayout.hpp"
4#include "Generics/IXUIElementWithChilds.hpp"
5#include "Generics/IXUIBindable.hpp"
6#include "Generics/IXUIElementReady.hpp"
7
8namespace CP_SDK::XUI {
9
12 : public IXUIElementWithChilds<XUIGLayout>,
13 public IXUIElementReady<XUIGLayout, _v::CGLayout>,
14 public IXUIBindable<XUIGLayout>,
15 public std::enable_shared_from_this<XUIGLayout>
16 {
17 CP_SDK_NO_COPYMOVE_CTORS(XUIGLayout);
18 CP_SDK_PRIV_TAG();
19
20 private:
22
24
25 public:
26 std::shared_ptr<XUIGLayout> AsShared() { return std::enable_shared_from_this<XUIGLayout>::shared_from_this(); }
27
28 virtual _v::UIFieldRef<_u::RectTransform> RTransform() override
29 {
30 return m_Element ? m_Element->RTransform() : _v::UIFieldDefault<_u::RectTransform>::Value;
31 }
32 virtual _v::UIFieldRef<_v::CGLayout> Element()
33 {
34 return m_Element;
35 }
36
37 public:
38 static constexpr ETypeID TypeID = ETypeID::GLayout;
39 using Ptr = std::shared_ptr<XUIGLayout>;
40
41 XUIGLayout(CP_SDK_PRIV_TAG_ARG(), const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
42 : XUIGLayout(CP_SDK_PRIV_TAG_FWD(), u"XUIGLayout", p_Childs)
43 { }
44 XUIGLayout(CP_SDK_PRIV_TAG_ARG(), std::u16string_view p_Name, const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
45 : IXUIElementWithChilds<XUIGLayout>(p_Name, TypeID, p_Childs)
46 { }
47
48 public:
50 static Ptr Make()
51 {
52 static std::vector<std::shared_ptr<IXUIElement>> s_Empty(0);
53 return std::make_shared<XUIGLayout>(CP_SDK_PRIV_TAG_VAL(), s_Empty);
54 }
57 static Ptr Make(const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
58 {
59 return std::make_shared<XUIGLayout>(CP_SDK_PRIV_TAG_VAL(), p_Childs);
60 }
64 static Ptr Make(std::u16string_view p_Name, const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
65 {
66 return std::make_shared<XUIGLayout>(CP_SDK_PRIV_TAG_VAL(), p_Name, p_Childs);
67 }
68
69 public:
72 virtual void BuildUI(_u::Transform* p_Parent) override
73 {
74 m_Element = _v::UISystem::GLayoutFactory->Create(IXUIElement::GetInitialName(), p_Parent);
75
76 IXUIElementWithChilds<XUIGLayout>::BuildUIChilds(m_Element->get_transform());
77
78 try { m_OnReady(m_Element.Ptr()); m_OnReady.Clear(); }
79 catch (const std::exception& l_Exception)
80 {
81 ChatPlexSDK::Logger()->Error(u"[CP_SDK.XUI][XUIGLayout.BuildUI] Error OnReady:");
82 ChatPlexSDK::Logger()->Error(l_Exception);
83 }
84 }
85
86 public:
90 {
91 if (m_Element) p_Functor(m_Element.Ptr());
92 else m_OnReady += p_Functor;
93 return reinterpret_cast<XUIGLayout*>(this);
94 }
97 virtual XUIGLayout* Bind(std::shared_ptr<XUIGLayout>* p_Target) override
98 {
99 *p_Target = std::enable_shared_from_this<XUIGLayout>::shared_from_this();
100 return reinterpret_cast<XUIGLayout*>(this);
101 }
102
103 public:
106 XUIGLayout* SetActive(bool p_Active) XUI_PROXY_IMPL(_v::CGLayout, { x->get_gameObject()->SetActive(p_Active); })
107
108 public:
111 XUIGLayout* SetWidth(float p_Width) XUI_PROXY_IMPL(_v::CGLayout, { x->SetWidth(p_Width); })
114 XUIGLayout* SetHeight(float p_Height) XUI_PROXY_IMPL(_v::CGLayout, { x->SetHeight(p_Height); })
115
116 public:
119 XUIGLayout* SetMinWidth(float p_Width) XUI_PROXY_IMPL(_v::CGLayout, { x->SetMinWidth(p_Width); })
122 XUIGLayout* SetMinHeight(float p_Height) XUI_PROXY_IMPL(_v::CGLayout, { x->SetMinHeight(p_Height); })
123
124 public:
127 XUIGLayout* SetCellSize(_u::Vector2 p_CellSize) XUI_PROXY_IMPL(_v::CGLayout, { x->SetCellSize(p_CellSize); })
130 XUIGLayout* SetChildAlign(_u::TextAnchor p_ChildAlign) XUI_PROXY_IMPL(_v::CGLayout, { x->SetChildAlign(p_ChildAlign); })
133 XUIGLayout* SetConstraint(_u::GridLayoutGroup::Constraint p_Constraint) XUI_PROXY_IMPL(_v::CGLayout, { x->SetConstraint(p_Constraint); })
136 XUIGLayout* SetConstraintCount(int p_ConstraintCount) XUI_PROXY_IMPL(_v::CGLayout, { x->SetConstraintCount(p_ConstraintCount); })
139 XUIGLayout* SetSpacing(_u::Vector2 p_Spacing) XUI_PROXY_IMPL(_v::CGLayout, { x->SetSpacing(p_Spacing); })
140
141 };
142
143}
static Logging::ILogger * Logger()
Logger instance.
CGLayout * SetConstraint(_u::GridLayoutGroup::Constraint p_Constraint)
Set layout constraint.
CGLayout * SetHeight(float p_Height)
Set preferred height.
CGLayout * SetMinHeight(float p_Height)
Set min height.
CGLayout * SetChildAlign(_u::TextAnchor p_ChildAlign)
Set child alignment.
CGLayout * SetSpacing(_u::Vector2 p_Spacing)
Set spacing between elements.
CGLayout * SetConstraintCount(int p_ConstraintCount)
Set layout constraint count.
Event class helper.
Definition Event.hpp:100
IXUIElement Bind interface.
std::u16string_view GetInitialName()
Get initial name.
IXUIElement OnReady functor interface.
IXUIElement with children abstract class.
void BuildUIChilds(_u::Transform *p_Parent)
BuildUI for children into p_Parent transform.
CGLayout XUI Element.
static Ptr Make()
Constructor.
XUIGLayout * SetActive(bool p_Active) XUI_PROXY_IMPL(_v
Set game object active state.
XUIGLayout * SetWidth(float p_Width) XUI_PROXY_IMPL(_v
Set preferred width.
XUIGLayout * SetSpacing(_u::Vector2 p_Spacing) XUI_PROXY_IMPL(_v
Set spacing between elements.
XUIGLayout * SetHeight(float p_Height) XUI_PROXY_IMPL(_v
Set preferred height.
static Ptr Make(std::u16string_view p_Name, const std::vector< std::shared_ptr< IXUIElement > > &p_Childs)
Constructor.
XUIGLayout * SetCellSize(_u::Vector2 p_CellSize) XUI_PROXY_IMPL(_v
Set cell size.
virtual XUIGLayout * OnReady(_v::CActionRef< _v::CGLayout * > p_Functor) override
IXUIElement OnReady functor interface.
XUIGLayout * SetConstraint(_u::GridLayoutGroup::Constraint p_Constraint) XUI_PROXY_IMPL(_v
Set layout constraint.
XUIGLayout * SetMinWidth(float p_Width) XUI_PROXY_IMPL(_v
Set min width.
XUIGLayout * SetMinHeight(float p_Height) XUI_PROXY_IMPL(_v
Set min height.
virtual XUIGLayout * Bind(std::shared_ptr< XUIGLayout > *p_Target) override
On ready, bind.
XUIGLayout * SetChildAlign(_u::TextAnchor p_ChildAlign) XUI_PROXY_IMPL(_v
Set child alignment.
XUIGLayout * SetConstraintCount(int p_ConstraintCount) XUI_PROXY_IMPL(_v
Set layout constraint count.
virtual void BuildUI(_u::Transform *p_Parent) override
BuildUI for this element into p_Parent transform.
static Ptr Make(const std::vector< std::shared_ptr< IXUIElement > > &p_Childs)
Constructor.
Tree like syntax CP_SDK::UI builder.