SDOM - Simple SDL Document Object Model
A lightweight, extensible Document Object Model for SDL-based applications.
Loading...
Searching...
No Matches
SDOM_TriStateCheckbox.hpp
Go to the documentation of this file.
1// SDOM_TriStateCheckbox.hpp
2#pragma once
3
7
8namespace SDOM
9{
10 enum class TriState : int
11 {
12 Unchecked = 0,
13 Checked = 1,
15 };
16 inline static const std::unordered_map<int, std::string> tristate_to_string = {
17 { static_cast<int>(TriState::Unchecked), "unchecked" },
18 { static_cast<int>(TriState::Checked), "checked" },
19 { static_cast<int>(TriState::Indeterminate), "indeterminate" },
20 };
21 inline static const std::unordered_map<std::string, int> tristate_string_to_index = []{
22 std::unordered_map<std::string,int> m;
23 for (auto &p : tristate_to_string) m.emplace(p.second, p.first);
24 return m;
25 }();
26
27 inline static std::optional<std::string> tristate_name_from_index(TriState idx)
28 {
29 auto it = tristate_to_string.find(static_cast<int>(idx));
30 if (it == tristate_to_string.end()) return std::nullopt;
31 return it->second;
32 };
33
34 inline static std::optional<TriState> tristate_index_from_name(const std::string &name)
35 {
36 auto it = tristate_string_to_index.find(name);
37 if (it == tristate_string_to_index.end()) return std::nullopt;
38 return static_cast<TriState>(it->second);
39 };
40
41
42 // --- TriStateCheckbox Class --- //
43
44 class TriStateCheckbox : public IPanelObject // , IButtonObject
45 {
47
48 public:
49 // --- Type Info --- //
50 static constexpr const char* TypeName = "TriStateCheckbox";
51
52 // --- Initialization Struct --- //
54 {
56 {
57 // from IDisplayObject
58 name = TypeName;
59 type = TypeName;
60 color = {96, 0, 96, 255}; // TriStateCheckbox color
61 tabEnabled = false; // TriStateCheckboxes are not tab-enabled by default
62 isClickable = true; // TriStateCheckboxes are clickable by default
63
64 icon_resource = "internal_icon_8x8"; // Default to internal 8x8 sprite sheet
65 icon_width = 8; // default icon width is 8
66 icon_height = 8; // default icon height is 8
67 font_resource = "internal_font_8x8"; // Default to internal 8x8 font
68 font_width = 8; // default font width is 8
69 font_height = 8; // default font height is 8
70 }
71 // IconIndex icon_index = IconIndex::Checkbox_Empty;
72 std::string text = "TriStateCheckbox"; // default TriStateCheckbox text
73 int font_size = 8; // default font size is 8
74 SDL_Color label_color = {255, 255, 255, 255}; // default label color is white
75 SDL_Color border_color = {0, 0, 0, 128}; // transparent
76 TriState state = TriState::Indeterminate; // default to Indeterminate
77 bool border = false; // default to no border
78 }; // END: InitStruct
79
80 protected:
81 // --- Constructors --- //
82 TriStateCheckbox(const InitStruct& init);
83 TriStateCheckbox(const sol::table& config);
84
85 public:
86
87 // --- Static Factory Methods --- //
88 static std::unique_ptr<IDisplayObject> CreateFromLua(const sol::table& config) {
89 return std::unique_ptr<IDisplayObject>(new TriStateCheckbox(config));
90 }
91 static std::unique_ptr<IDisplayObject> CreateFromInitStruct(const IDisplayObject::InitStruct& baseInit) {
92 const auto& TriStateCheckboxInit = static_cast<const TriStateCheckbox::InitStruct&>(baseInit);
93 return std::unique_ptr<IDisplayObject>(new TriStateCheckbox(TriStateCheckboxInit));
94 }
95
96 TriStateCheckbox() = default;
97 virtual ~TriStateCheckbox() = default;
98
99 // --- Virtual Methods --- //
100 virtual bool onInit() override; // Called when the display object is initialized
101 virtual void onRender() override; // Called to render the display object
102 virtual void onQuit() override; // Called when the display object is being destroyed
103 virtual void onUpdate(float fElapsedTime) override; // Called every frame to update the display object
104 virtual void onEvent(const Event& event) override; // Called when an event occurs
105
107 std::string getText() const { return text_; }
108 void setText(const std::string& newText);
110
111 TriState getState() const;
112 void setState(TriState state);
113
114
115 protected:
116 DisplayHandle labelObject_; // internal label object for group text
117 std::string text_; // initialized label text
118 std::string font_resource_ = "internal_font_8x8"; // default font resource name
119 std::string icon_resource_ = "internal_icon_8x8"; // default icon resource name
120 int font_size_ = 8; // default font size
121 int font_width_ = 8; // default font width
122 int font_height_ = 8; // default font height
123 bool use_border_ = false;
125 SDL_Color label_color_ = {255, 255, 255, 255}; // default label color is white
126 SDL_Color border_color_ = {0, 0, 0, 128}; // transparent
127 DisplayHandle iconButtonObject_; // internal icon button object for TriStateCheckbox icon
129 int icon_width_ = 8; // default icon width
130 int icon_height_ = 8; // default icon height
131
132 // --- Lua Registration --- //
133 virtual void _registerLuaBindings(const std::string& typeName, sol::state_view lua);
134
135 }; // END: class TriStateCheckbox : public IPanelObject
136
137} // END namespace SDOM
Definition SDOM_DisplayHandle.hpp:24
Definition SDOM_Event.hpp:55
Definition SDOM_IPanelObject.hpp:107
Definition SDOM_TriStateCheckbox.hpp:45
virtual void onRender() override
Definition SDOM_TriStateCheckbox.cpp:276
std::string getText() const
Definition SDOM_TriStateCheckbox.hpp:107
static constexpr const char * TypeName
Definition SDOM_TriStateCheckbox.hpp:50
int font_size_
Definition SDOM_TriStateCheckbox.hpp:120
SDL_Color label_color_
Definition SDOM_TriStateCheckbox.hpp:125
std::string icon_resource_
Definition SDOM_TriStateCheckbox.hpp:119
DisplayHandle iconButtonObject_
Definition SDOM_TriStateCheckbox.hpp:127
int font_width_
Definition SDOM_TriStateCheckbox.hpp:121
virtual bool onInit() override
Definition SDOM_TriStateCheckbox.cpp:175
SDL_Color border_color_
Definition SDOM_TriStateCheckbox.hpp:126
std::string text_
Definition SDOM_TriStateCheckbox.hpp:117
static std::unique_ptr< IDisplayObject > CreateFromLua(const sol::table &config)
Definition SDOM_TriStateCheckbox.hpp:88
virtual void onQuit() override
Definition SDOM_TriStateCheckbox.cpp:270
int icon_height_
Definition SDOM_TriStateCheckbox.hpp:130
TriState getState() const
Definition SDOM_TriStateCheckbox.cpp:333
void setText(const std::string &newText)
Definition SDOM_TriStateCheckbox.cpp:386
virtual void _registerLuaBindings(const std::string &typeName, sol::state_view lua)
Definition SDOM_TriStateCheckbox.cpp:408
std::string font_resource_
Definition SDOM_TriStateCheckbox.hpp:118
IconIndex icon_index_
Definition SDOM_TriStateCheckbox.hpp:128
DisplayHandle labelObject_
Definition SDOM_TriStateCheckbox.hpp:116
int font_height_
Definition SDOM_TriStateCheckbox.hpp:122
static std::unique_ptr< IDisplayObject > CreateFromInitStruct(const IDisplayObject::InitStruct &baseInit)
Definition SDOM_TriStateCheckbox.hpp:91
virtual void onUpdate(float fElapsedTime) override
Definition SDOM_TriStateCheckbox.cpp:316
DisplayHandle getLabelObject() const
Definition SDOM_TriStateCheckbox.hpp:106
virtual void onEvent(const Event &event) override
Definition SDOM_TriStateCheckbox.cpp:322
bool use_border_
Definition SDOM_TriStateCheckbox.hpp:123
TriState state_
Definition SDOM_TriStateCheckbox.hpp:124
DisplayHandle getIconButtonObject() const
Definition SDOM_TriStateCheckbox.hpp:109
int icon_width_
Definition SDOM_TriStateCheckbox.hpp:129
void setState(TriState state)
Definition SDOM_TriStateCheckbox.cpp:339
virtual ~TriStateCheckbox()=default
Contains all core classes and utilities for the SDOM library.
Definition lua_BindHelpers.hpp:7
IconIndex
Definition SDOM_IconIndex.hpp:12
static const std::unordered_map< int, std::string > tristate_to_string
Definition SDOM_TriStateCheckbox.hpp:16
static std::optional< std::string > tristate_name_from_index(TriState idx)
Definition SDOM_TriStateCheckbox.hpp:27
TriState
Definition SDOM_TriStateCheckbox.hpp:11
static const std::unordered_map< std::string, int > tristate_string_to_index
Definition SDOM_TriStateCheckbox.hpp:21
static std::optional< TriState > tristate_index_from_name(const std::string &name)
Definition SDOM_TriStateCheckbox.hpp:34
Definition SDOM_IDisplayObject.hpp:187
std::string type
Definition SDOM_IDisplayObject.hpp:189
bool tabEnabled
Definition SDOM_IDisplayObject.hpp:212
std::string name
Definition SDOM_IDisplayObject.hpp:188
SDL_Color color
Definition SDOM_IDisplayObject.hpp:194
bool isClickable
Definition SDOM_IDisplayObject.hpp:208
Definition SDOM_IPanelObject.hpp:116
std::string font_resource
Definition SDOM_IPanelObject.hpp:127
std::string icon_resource
Definition SDOM_IPanelObject.hpp:124
int font_height
Definition SDOM_IPanelObject.hpp:129
int font_width
Definition SDOM_IPanelObject.hpp:128
int icon_height
Definition SDOM_IPanelObject.hpp:126
int icon_width
Definition SDOM_IPanelObject.hpp:125
Definition SDOM_TriStateCheckbox.hpp:54
InitStruct()
Definition SDOM_TriStateCheckbox.hpp:55
SDL_Color border_color
Definition SDOM_TriStateCheckbox.hpp:75
TriState state
Definition SDOM_TriStateCheckbox.hpp:76
int font_size
Definition SDOM_TriStateCheckbox.hpp:73
bool border
Definition SDOM_TriStateCheckbox.hpp:77
SDL_Color label_color
Definition SDOM_TriStateCheckbox.hpp:74
std::string text
Definition SDOM_TriStateCheckbox.hpp:72