ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
XUIVScrollView.hpp
1#pragma once
2
3#include "../UI/Components/CVScrollView.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<XUIVScrollView>,
13 public IXUIElementReady<XUIVScrollView, _v::CVScrollView>,
14 public IXUIBindable<XUIVScrollView>,
15 public std::enable_shared_from_this<XUIVScrollView>
16 {
17 CP_SDK_NO_COPYMOVE_CTORS(XUIVScrollView);
18 CP_SDK_PRIV_TAG();
19
20 private:
22
24
25 public:
26 std::shared_ptr<XUIVScrollView> AsShared() { return std::enable_shared_from_this<XUIVScrollView>::shared_from_this(); }
27
28 virtual _v::UIFieldRef<RectTransform> RTransform() override
29 {
30 return m_Element ? m_Element->RTransform() : _v::UIFieldDefault<RectTransform>::Value;
31 }
32 virtual _v::UIFieldRef<_v::CVScrollView> Element()
33 {
34 return m_Element;
35 }
36
37 public:
38 static constexpr ETypeID TypeID = ETypeID::VScrollView;
39 using Ptr = std::shared_ptr<XUIVScrollView>;
40
41 XUIVScrollView(CP_SDK_PRIV_TAG_ARG(), const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
42 : XUIVScrollView(CP_SDK_PRIV_TAG_FWD(), u"XUIVLayout", p_Childs)
43 { }
44 XUIVScrollView(CP_SDK_PRIV_TAG_ARG(), std::u16string_view p_Name, const std::vector<std::shared_ptr<IXUIElement>>& p_Childs)
45 : IXUIElementWithChilds<XUIVScrollView>(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<XUIVScrollView>(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<XUIVScrollView>(CP_SDK_PRIV_TAG_VAL(), u"XUIVScrollView", 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<XUIVScrollView>(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::VScrollViewFactory->Create(IXUIElement::GetInitialName(), p_Parent);
75
76 BuildUIChilds(m_Element->Container().Ptr());
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][XUIVScrollView.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 this;
94 }
97 virtual XUIVScrollView* Bind(std::shared_ptr<XUIVScrollView>* p_Target) override
98 {
99 *p_Target = std::enable_shared_from_this<XUIVScrollView>::shared_from_this();
100 return this;
101 }
102
103 public:
106 XUIVScrollView* SetActive(bool p_Active) XUI_PROXY_IMPL(_v::CVScrollView, { x->get_gameObject()->SetActive(p_Active); })
107
108 };
109
110}
static Logging::ILogger * Logger()
Logger instance.
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.
CVScrollView XUI Element.
XUIVScrollView * SetActive(bool p_Active) XUI_PROXY_IMPL(_v
Set game object active state.
static Ptr Make(std::u16string_view p_Name, const std::vector< std::shared_ptr< IXUIElement > > &p_Childs)
Constructor.
virtual void BuildUI(_u::Transform *p_Parent) override
BuildUI for this element into p_Parent transform.
static Ptr Make()
Constructor.
static Ptr Make(const std::vector< std::shared_ptr< IXUIElement > > &p_Childs)
Constructor.
virtual XUIVScrollView * Bind(std::shared_ptr< XUIVScrollView > *p_Target) override
On ready, bind.
virtual XUIVScrollView * OnReady(_v::CActionRef< _v::CVScrollView * > p_Functor) override
IXUIElement OnReady functor interface.
Tree like syntax CP_SDK::UI builder.