ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
XUIFLayout.hpp
1#pragma once
2
3#include "../UI/Components/CFLayout.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<XUIFLayout>,
13 public IXUIElementReady<XUIFLayout, _v::CFLayout>,
14 public IXUIBindable<XUIFLayout>,
15 public std::enable_shared_from_this<XUIFLayout>
16 {
17 CP_SDK_NO_COPYMOVE_CTORS(XUIFLayout);
18 CP_SDK_PRIV_TAG();
19
20 private:
22
24
25 public:
26 std::shared_ptr<XUIFLayout> AsShared() { return std::enable_shared_from_this<XUIFLayout>::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::CFLayout> Element()
33 {
34 return m_Element;
35 }
36
37 public:
38 static constexpr ETypeID TypeID = ETypeID::FLayout;
39 using Ptr = std::shared_ptr<XUIFLayout>;
40
41 XUIFLayout(CP_SDK_PRIV_TAG_ARG(), const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
42 : XUIFLayout(CP_SDK_PRIV_TAG_FWD(), u"XUIFLayout", p_Childs)
43 { }
44 XUIFLayout(CP_SDK_PRIV_TAG_ARG(), std::u16string_view p_Name, const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
45 : IXUIElementWithChilds<XUIFLayout>(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<XUIFLayout>(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<XUIFLayout>(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<XUIFLayout>(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::FLayoutFactory->Create(IXUIElement::GetInitialName(), p_Parent);
75
76 IXUIElementWithChilds<XUIFLayout>::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][XUIFLayout.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<XUIFLayout*>(this);
94 }
97 virtual XUIFLayout* Bind(std::shared_ptr<XUIFLayout>* p_Target) override
98 {
99 *p_Target = std::enable_shared_from_this<XUIFLayout>::shared_from_this();
100 return reinterpret_cast<XUIFLayout*>(this);
101 }
102
103 public:
106 XUIFLayout* SetActive(bool p_Active) XUI_PROXY_IMPL(_v::CFLayout, { x->get_gameObject()->SetActive(p_Active); })
107
108 public:
111 XUIFLayout* SetWidth(float p_Width) XUI_PROXY_IMPL(_v::CFLayout, { x->SetWidth(p_Width); })
114 XUIFLayout* SetHeight(float p_Height) XUI_PROXY_IMPL(_v::CFLayout, { x->SetHeight(p_Height); })
115
116 public:
119 XUIFLayout* SetMinWidth(float p_Width) XUI_PROXY_IMPL(_v::CFLayout, { x->SetMinWidth(p_Width); })
122 XUIFLayout* SetMinHeight(float p_Height) XUI_PROXY_IMPL(_v::CFLayout, { x->SetMinHeight(p_Height); })
123
124 public:
127 XUIFLayout* SetChildAlign(_u::TextAnchor p_ChildAlign) XUI_PROXY_IMPL(_v::CFLayout, { x->SetChildAlign(p_ChildAlign); })
130 XUIFLayout* SetSpacing(_u::Vector2 p_Spacing) XUI_PROXY_IMPL(_v::CFLayout, { x->SetSpacing(p_Spacing); })
131
132 };
133
134}
static Logging::ILogger * Logger()
Logger instance.
CFLayout * SetSpacing(_u::Vector2 p_Spacing)
Set spacing between elements.
CFLayout * SetHeight(float p_Height)
Set preferred height.
CFLayout * SetMinHeight(float p_Height)
Set min height.
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.
CFLayout XUI Element.
XUIFLayout * SetHeight(float p_Height) XUI_PROXY_IMPL(_v
Set preferred height.
static Ptr Make(const std::vector< std::shared_ptr< IXUIElement > > &p_Childs)
Constructor.
XUIFLayout * SetSpacing(_u::Vector2 p_Spacing) XUI_PROXY_IMPL(_v
Set spacing between elements.
XUIFLayout * SetActive(bool p_Active) XUI_PROXY_IMPL(_v
Set game object active state.
XUIFLayout * SetMinHeight(float p_Height) XUI_PROXY_IMPL(_v
Set min height.
XUIFLayout * SetChildAlign(_u::TextAnchor p_ChildAlign) XUI_PROXY_IMPL(_v
Set child alignment.
virtual XUIFLayout * Bind(std::shared_ptr< XUIFLayout > *p_Target) override
On ready, bind.
virtual XUIFLayout * OnReady(_v::CActionRef< _v::CFLayout * > p_Functor) override
IXUIElement OnReady functor interface.
XUIFLayout * SetMinWidth(float p_Width) XUI_PROXY_IMPL(_v
Set min width.
XUIFLayout * SetWidth(float p_Width) XUI_PROXY_IMPL(_v
Set preferred width.
static Ptr Make(std::u16string_view p_Name, const std::vector< std::shared_ptr< IXUIElement > > &p_Childs)
Constructor.
static Ptr Make()
Constructor.
virtual void BuildUI(_u::Transform *p_Parent) override
BuildUI for this element into p_Parent transform.
Tree like syntax CP_SDK::UI builder.