ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
XUITabControl.hpp
1#pragma once
2
3#include "../UI/Components/CTabControl.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<XUITabControl, _v::CTabControl>,
14 public IXUIBindable<XUITabControl>,
15 public std::enable_shared_from_this<XUITabControl>
16 {
17 CP_SDK_NO_COPYMOVE_CTORS(XUITabControl);
18 CP_SDK_PRIV_TAG();
19
20 private:
22
24
25 public:
26 using t_TabDefinition = std::tuple<std::u16string, std::shared_ptr<IXUIElement>>;
27
28 std::shared_ptr<XUITabControl> AsShared() { return std::enable_shared_from_this<XUITabControl>::shared_from_this(); }
29
30 virtual _v::UIFieldRef<_u::RectTransform> RTransform() override
31 {
32 return m_Element ? m_Element->RTransform() : _v::UIFieldDefault<_u::RectTransform>::Value;
33 }
34 virtual _v::UIFieldRef<_v::CTabControl> Element()
35 {
36 return m_Element;
37 }
38
39 public:
40 static constexpr ETypeID TypeID = ETypeID::TabControl;
41 using Ptr = std::shared_ptr<XUITabControl>;
42
43 XUITabControl(CP_SDK_PRIV_TAG_ARG(), std::u16string_view p_Name, const std::vector<t_TabDefinition>& p_Tabs)
44 : IXUIElement(p_Name, TypeID)
45 {
46 SetTabs(p_Tabs);
47 }
48
49 public:
52 static Ptr Make(const std::vector<t_TabDefinition>& p_Tabs)
53 {
54 return std::make_shared<XUITabControl>(CP_SDK_PRIV_TAG_VAL(), u"XUITabControl", p_Tabs);
55 }
59 static Ptr Make(std::u16string_view p_Name, const std::vector<t_TabDefinition>& p_Tabs)
60 {
61 return std::make_shared<XUITabControl>(CP_SDK_PRIV_TAG_VAL(), p_Name, p_Tabs);
62 }
63
64 public:
67 virtual void BuildUI(_u::Transform* p_Parent) override
68 {
69 m_Element = _v::UISystem::TabControlFactory->Create(IXUIElement::GetInitialName(), p_Parent);
70
71 try { m_OnReady(m_Element.Ptr()); m_OnReady.Clear(); }
72 catch (const std::exception& l_Exception)
73 {
74 ChatPlexSDK::Logger()->Error(u"[CP_SDK.XUI][XUITabControl.BuildUI] Error OnReady:");
75 ChatPlexSDK::Logger()->Error(l_Exception);
76 }
77 }
78
79 public:
83 {
84 if (m_Element) p_Functor(m_Element.Ptr());
85 else m_OnReady += p_Functor;
86 return this;
87 }
90 virtual XUITabControl* Bind(std::shared_ptr<XUITabControl>* p_Target) override
91 {
92 *p_Target = std::enable_shared_from_this<XUITabControl>::shared_from_this();
93 return this;
94 }
95
96 public:
100 XUITabControl* OnActiveChanged(_v::Action<int> p_Functor, bool p_Add = true) XUI_PROXY_IMPL(_v::CTabControl, { x->OnActiveChanged(p_Functor, p_Add); })
101
102 public:
105 XUITabControl* SetActive(bool p_Active) XUI_PROXY_IMPL(_v::CTabControl, { x->get_gameObject()->SetActive(p_Active); })
106
107 public:
111 XUITabControl* SetActiveTab(int p_Index, bool p_Notify = true) XUI_PROXY_IMPL(_v::CTabControl, { x->SetActiveTab(p_Index, p_Notify); })
114 XUITabControl* SetTabs(std::vector<t_TabDefinition> p_Tabs) XUI_PROXY_IMPL(_v::CTabControl, {
115 auto l_Converted = std::vector<_v::CTabControl::t_TabDefinition>();
116 for (auto l_I = 0; l_I < p_Tabs.size(); ++l_I)
117 {
118 auto& l_IXUIElement = std::get<1>(p_Tabs[l_I]);
119 if (!l_IXUIElement->RTransform())
120 l_IXUIElement->BuildUI(nullptr);
121
122 auto l_RTransform = l_IXUIElement->RTransform().Ptr();
123 l_Converted.push_back(std::make_tuple(std::get<0>(p_Tabs[l_I]), l_RTransform));
124 }
125
126 x->SetTabs(l_Converted);
127 })
128
129 };
130
131}
static Logging::ILogger * Logger()
Logger instance.
Event class helper.
Definition Event.hpp:100
IXUIElement Bind interface.
Element interface.
std::u16string_view GetInitialName()
Get initial name.
IXUIElement OnReady functor interface.
CTabControl XUI Element.
XUITabControl * SetTabs(std::vector< t_TabDefinition > p_Tabs) XUI_PROXY_IMPL(_v
Set tabs.
static Ptr Make(const std::vector< t_TabDefinition > &p_Tabs)
Constructor.
XUITabControl * OnActiveChanged(_v::Action< int > p_Functor, bool p_Add=true) XUI_PROXY_IMPL(_v
On value changed event.
virtual XUITabControl * OnReady(_v::CActionRef< _v::CTabControl * > p_Functor) override
IXUIElement OnReady functor interface.
virtual void BuildUI(_u::Transform *p_Parent) override
BuildUI for this element into p_Parent transform.
virtual XUITabControl * Bind(std::shared_ptr< XUITabControl > *p_Target) override
On ready, bind.
XUITabControl * SetActiveTab(int p_Index, bool p_Notify=true) XUI_PROXY_IMPL(_v
Set active tab.
static Ptr Make(std::u16string_view p_Name, const std::vector< t_TabDefinition > &p_Tabs)
Constructor.
XUITabControl * SetActive(bool p_Active) XUI_PROXY_IMPL(_v
Set game object active state.
Tree like syntax CP_SDK::UI builder.