ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
XUIDropdown.hpp
1#pragma once
2
3#include "../UI/Components/CDropdown.hpp"
4#include "Generics/IXUIElement.hpp"
5#include "Generics/IXUIBindable.hpp"
6#include "Generics/IXUIElementReady.hpp"
7
8namespace CP_SDK::XUI {
9
12 public IXUIElement,
13 public IXUIElementReady<XUIDropdown, _v::CDropdown>,
14 public IXUIBindable<XUIDropdown>,
15 public std::enable_shared_from_this<XUIDropdown>
16 {
17 CP_SDK_NO_COPYMOVE_CTORS(XUIDropdown);
18 CP_SDK_PRIV_TAG();
19
20 private:
22
24
25 public:
26 std::shared_ptr<XUIDropdown> AsShared() { return std::enable_shared_from_this<XUIDropdown>::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::CDropdown> Element()
33 {
34 return m_Element;
35 }
36
37 public:
38 static constexpr ETypeID TypeID = ETypeID::Dropdown;
39 using Ptr = std::shared_ptr<XUIDropdown>;
40
41 XUIDropdown(CP_SDK_PRIV_TAG_ARG(), std::u16string_view p_Name, const std::vector<std::u16string>& p_Options)
42 : IXUIElement(p_Name, TypeID)
43 {
44 if (!p_Options.empty())
45 SetOptions(p_Options);
46 }
47
48 public:
50 static Ptr Make()
51 {
52 static std::vector<std::u16string> s_Empty(0);
53 return std::make_shared<XUIDropdown>(CP_SDK_PRIV_TAG_VAL(), u"XUIDropdown", s_Empty);
54 }
56 static Ptr Make(const std::vector<std::u16string>& p_Options)
57 {
58 return std::make_shared<XUIDropdown>(CP_SDK_PRIV_TAG_VAL(), u"XUIDropdown", p_Options);
59 }
62 static Ptr Make(std::u16string_view p_Name, const std::vector<std::u16string>& p_Options)
63 {
64 return std::make_shared<XUIDropdown>(CP_SDK_PRIV_TAG_VAL(), p_Name, p_Options);
65 }
66
67 public:
70 virtual void BuildUI(_u::Transform* p_Parent) override
71 {
72 m_Element = _v::UISystem::DropdownFactory->Create(IXUIElement::GetInitialName(), p_Parent);
73
74 try { m_OnReady(m_Element.Ptr()); m_OnReady.Clear(); }
75 catch (const std::exception& l_Exception)
76 {
77 ChatPlexSDK::Logger()->Error(u"[CP_SDK.XUI][XUIDropdown.BuildUI] Error OnReady:");
78 ChatPlexSDK::Logger()->Error(l_Exception);
79 }
80 }
81
82 public:
86 {
87 if (m_Element) p_Functor(m_Element.Ptr());
88 else m_OnReady += p_Functor;
89 return this;
90 }
93 virtual XUIDropdown* Bind(std::shared_ptr<XUIDropdown>* p_Target) override
94 {
95 *p_Target = std::enable_shared_from_this<XUIDropdown>::shared_from_this();
96 return this;
97 }
98
99 public:
103 XUIDropdown* OnValueChanged(_v::Action<int, std::u16string_view> p_Functor, bool p_Add = true) XUI_PROXY_IMPL(_v::CDropdown, { x->OnValueChanged(p_Functor, p_Add); })
104
105 public:
108 XUIDropdown* SetActive(bool p_Active) XUI_PROXY_IMPL(_v::CDropdown, { x->get_gameObject()->SetActive(p_Active); })
109
110 public:
113 XUIDropdown* SetInteractable(bool p_Interactable) XUI_PROXY_IMPL(_v::CDropdown, { x->SetInteractable(p_Interactable); })
116 XUIDropdown* SetOptions(std::vector<std::u16string> p_Options) XUI_PROXY_IMPL(_v::CDropdown, { x->SetOptions(p_Options); })
120 XUIDropdown* SetValue(std::u16string_view p_Value, bool p_Notify = true) XUI_PROXY_IMPL(_v::CDropdown, { x->SetValue(p_Value, p_Notify); })
121
122 };
123
124}
static Logging::ILogger * Logger()
Logger instance.
CDropdown * SetOptions(const std::vector< std::u16string > &p_Options)
Set available options.
CDropdown * SetValue(std::u16string_view p_Value, bool p_Notify=true)
Set value.
Event class helper.
Definition Event.hpp:100
IXUIElement Bind interface.
Element interface.
std::u16string_view GetInitialName()
Get initial name.
IXUIElement OnReady functor interface.
CDropdown XUI Element.
static Ptr Make(const std::vector< std::u16string > &p_Options)
Constructor.
virtual XUIDropdown * Bind(std::shared_ptr< XUIDropdown > *p_Target) override
On ready, bind.
XUIDropdown * OnValueChanged(_v::Action< int, std::u16string_view > p_Functor, bool p_Add=true) XUI_PROXY_IMPL(_v
On value changed event.
static Ptr Make(std::u16string_view p_Name, const std::vector< std::u16string > &p_Options)
Constructor.
virtual XUIDropdown * OnReady(_v::CActionRef< _v::CDropdown * > p_Functor) override
IXUIElement OnReady functor interface.
XUIDropdown * SetInteractable(bool p_Interactable) XUI_PROXY_IMPL(_v
Set interable.
XUIDropdown * SetValue(std::u16string_view p_Value, bool p_Notify=true) XUI_PROXY_IMPL(_v
Set value.
virtual void BuildUI(_u::Transform *p_Parent) override
BuildUI for this element into p_Parent transform.
XUIDropdown * SetOptions(std::vector< std::u16string > p_Options) XUI_PROXY_IMPL(_v
Set available options.
static Ptr Make()
Constructor.
XUIDropdown * SetActive(bool p_Active) XUI_PROXY_IMPL(_v
Set game object active state.
Tree like syntax CP_SDK::UI builder.