ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
XUIIconButton.hpp
1#pragma once
2
3#include "../UI/Components/CIconButton.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<XUIIconButton, _v::CIconButton>,
14 public IXUIBindable<XUIIconButton>,
15 public std::enable_shared_from_this<XUIIconButton>
16 {
17 CP_SDK_NO_COPYMOVE_CTORS(XUIIconButton);
18 CP_SDK_PRIV_TAG();
19
20 private:
22
24
25 public:
26 std::shared_ptr<XUIIconButton> AsShared() { return std::enable_shared_from_this<XUIIconButton>::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::CIconButton> Element()
33 {
34 return m_Element;
35 }
36
37 public:
38 static constexpr ETypeID TypeID = ETypeID::IconButton;
39 using Ptr = std::shared_ptr<XUIIconButton>;
40
41 XUIIconButton(CP_SDK_PRIV_TAG_ARG(), std::u16string_view p_Name, _u::Sprite* p_Sprite, _v::CActionRef<> p_OnClick)
42 : IXUIElement(p_Name, TypeID)
43 {
44 if (p_Sprite)
45 SetSprite(p_Sprite);
46
47 if (p_OnClick.IsValid())
48 OnClick(p_OnClick);
49 }
50
51 public:
55 static Ptr Make(_v::CActionRef<> p_OnClick = nullptr)
56 {
57 return std::make_shared<XUIIconButton>(CP_SDK_PRIV_TAG_VAL(), u"XUIIconButton", nullptr, p_OnClick);
58 }
62 static Ptr Make(_u::Sprite* p_Sprite, _v::CActionRef<> p_OnClick = nullptr)
63 {
64 return std::make_shared<XUIIconButton>(CP_SDK_PRIV_TAG_VAL(), u"XUIIconButton", p_Sprite, p_OnClick);
65 }
70 static Ptr Make(std::u16string_view p_Name, _u::Sprite* p_Sprite, _v::CActionRef<> p_OnClick = nullptr)
71 {
72 return std::make_shared<XUIIconButton>(CP_SDK_PRIV_TAG_VAL(), p_Name, p_Sprite, p_OnClick);
73 }
74
75 public:
78 virtual void BuildUI(_u::Transform* p_Parent) override
79 {
80 m_Element = _v::UISystem::IconButtonFactory->Create(IXUIElement::GetInitialName(), p_Parent);
81
82 try { m_OnReady(m_Element.Ptr()); m_OnReady.Clear(); }
83 catch (const std::exception& l_Exception)
84 {
85 ChatPlexSDK::Logger()->Error(u"[CP_SDK.XUI][XUIIconButton.BuildUI] Error OnReady:");
86 ChatPlexSDK::Logger()->Error(l_Exception);
87 }
88 }
89
90 public:
94 {
95 if (m_Element) p_Functor(m_Element.Ptr());
96 else m_OnReady += p_Functor;
97 return this;
98 }
101 virtual XUIIconButton* Bind(std::shared_ptr<XUIIconButton>* p_Target) override
102 {
103 *p_Target = std::enable_shared_from_this<XUIIconButton>::shared_from_this();
104 return this;
105 }
106
107 public:
111 XUIIconButton* OnClick(_v::Action<> p_Functor, bool p_Add = true) XUI_PROXY_IMPL(_v::CIconButton, { x->OnClick(p_Functor, p_Add); })
112
113 public:
116 XUIIconButton* SetActive(bool p_Active) XUI_PROXY_IMPL(_v::CIconButton, { x->get_gameObject()->SetActive(p_Active); })
117
118 public:
121 XUIIconButton* SetWidth(float p_Width) XUI_PROXY_IMPL(_v::CIconButton, { x->SetWidth(p_Width); })
124 XUIIconButton* SetHeight(float p_Height) XUI_PROXY_IMPL(_v::CIconButton, { x->SetHeight(p_Height); })
125
126 public:
129 XUIIconButton* SetColor(_u::Color p_Color) XUI_PROXY_IMPL(_v::CIconButton, { x->SetColor(p_Color); })
132 XUIIconButton* SetInteractable(bool p_Interactable) XUI_PROXY_IMPL(_v::CIconButton, { x->SetInteractable(p_Interactable); })
135 XUIIconButton* SetSprite(_u::Sprite* p_Sprite) XUI_PROXY_IMPL(_v::CIconButton, { x->SetSprite(p_Sprite); })
136
137 };
138
139}
static Logging::ILogger * Logger()
Logger instance.
CIconButton * SetInteractable(bool p_Interactable)
Set button interactable state.
CIconButton * SetHeight(float p_Height)
Set preferred height.
CIconButton * SetSprite(_u::Sprite *p_Sprite)
Set button sprite.
Event class helper.
Definition Event.hpp:100
IXUIElement Bind interface.
Element interface.
std::u16string_view GetInitialName()
Get initial name.
IXUIElement OnReady functor interface.
CIconButton XUI Element.
virtual XUIIconButton * OnReady(_v::CActionRef< _v::CIconButton * > p_Functor) override
IXUIElement OnReady functor interface.
XUIIconButton * SetActive(bool p_Active) XUI_PROXY_IMPL(_v
Set game object active state.
XUIIconButton * SetWidth(float p_Width) XUI_PROXY_IMPL(_v
Set preferred width.
XUIIconButton * SetSprite(_u::Sprite *p_Sprite) XUI_PROXY_IMPL(_v
Set sprite.
XUIIconButton * SetInteractable(bool p_Interactable) XUI_PROXY_IMPL(_v
Set button interactable state.
XUIIconButton * OnClick(_v::Action<> p_Functor, bool p_Add=true) XUI_PROXY_IMPL(_v
On click event.
virtual XUIIconButton * Bind(std::shared_ptr< XUIIconButton > *p_Target) override
On ready, bind.
virtual void BuildUI(_u::Transform *p_Parent) override
BuildUI for this element into p_Parent transform.
static Ptr Make(std::u16string_view p_Name, _u::Sprite *p_Sprite, _v::CActionRef<> p_OnClick=nullptr)
Constructor.
static Ptr Make(_v::CActionRef<> p_OnClick=nullptr)
Constructor.
XUIIconButton * SetHeight(float p_Height) XUI_PROXY_IMPL(_v
Set preferred height.
XUIIconButton * SetColor(_u::Color p_Color) XUI_PROXY_IMPL(_v
Set color.
static Ptr Make(_u::Sprite *p_Sprite, _v::CActionRef<> p_OnClick=nullptr)
Constructor.
Tree like syntax CP_SDK::UI builder.