makepad_gen_plugin/builtin/widget/form/checkbox/
prop.rs

1use gen_analyzer::{value::Value, PropKey};
2use gen_utils::err_from_to;
3
4use crate::{
5    builtin::prop::{
6        GChooseType, Layout, LiveDependency, MouseCursor, Prop, TextWrap, Themes, Vec2, Walk, F32,
7        F64,
8    },
9    from_gen::MakepadColor,
10    from_gen_props, props_to_tokens,
11};
12
13#[derive(Debug, Clone)]
14pub enum Props {
15    Theme(Themes),
16    Color(MakepadColor),
17    TextHoverColor(MakepadColor),
18    TextFocusColor(MakepadColor),
19    FontSize(F64),
20    HeightFactor(F64),
21    Wrap(TextWrap),
22    FontFamily(LiveDependency),
23    TextVisible(bool),
24    Size(F32),
25    CheckboxBackgroundColor(MakepadColor),
26    CheckboxBackgroundVisible(bool),
27    CheckboxHoverColor(MakepadColor),
28    CheckboxSelectedColor(MakepadColor),
29    StrokeColor(MakepadColor),
30    StrokeHoverColor(MakepadColor),
31    StrokeSelectedColor(MakepadColor),
32    CheckboxBorderColor(MakepadColor),
33    CheckboxBorderWidth(F32),
34    Scale(F32),
35    BackgroundColor(MakepadColor),
36    HoverColor(MakepadColor),
37    FocusColor(MakepadColor),
38    ShadowColor(MakepadColor),
39    BorderColor(MakepadColor),
40    BackgroundVisible(bool),
41    BorderWidth(F32),
42    BorderRadius(F32),
43    SpreadRadius(F32),
44    BlurRadius(F32),
45    ShadowOffset(Vec2),
46    Cursor(MouseCursor),
47    Value(String),
48    Selected(bool),
49    Text(String),
50    CheckboxType(GChooseType),
51    Walk(Walk),
52    Layout(Layout),
53    Visible(bool),
54    AnimationKey(bool),
55    GrabKeyFocus(bool),
56    EventKey(bool),
57}
58
59from_gen_props!(Props);
60
61impl TryFrom<(PropKey, Value)> for Props {
62    type Error = gen_utils::error::Error;
63
64    fn try_from(value: (PropKey, Value)) -> Result<Self, Self::Error> {
65        match value.0.name.as_str() {
66            "theme" => Ok(Props::Theme(Themes::try_from(&value.1)?)),
67            "color" => Ok(Props::Color(MakepadColor::try_from((&value.1, None))?)),
68            "text_hover_color" => Ok(Props::TextHoverColor(MakepadColor::try_from((
69                &value.1, None,
70            ))?)),
71            "text_focus_color" => Ok(Props::TextFocusColor(MakepadColor::try_from((
72                &value.1, None,
73            ))?)),
74            "font_size" => Ok(Props::FontSize(value.1.as_f64()?.into())),
75            "height_factor" => Ok(Props::HeightFactor(value.1.as_f64()?.into())),
76            "wrap" => Ok(Props::Wrap(TextWrap::try_from(&value.1)?)),
77            "font_family" => Ok(Props::FontFamily(LiveDependency::try_from(&value.1)?)),
78            "text_visible" => Ok(Props::TextVisible(value.1.as_bool()?)),
79            "size" => Ok(Props::Size(value.1.as_f32()?.into())),
80            "checkbox_background_color" => Ok(Props::CheckboxBackgroundColor(
81                MakepadColor::try_from((&value.1, None))?,
82            )),
83            "checkbox_background_visible" => {
84                Ok(Props::CheckboxBackgroundVisible(value.1.as_bool()?))
85            }
86            "checkbox_hover_color" => Ok(Props::CheckboxHoverColor(MakepadColor::try_from((
87                &value.1, None,
88            ))?)),
89            "checkbox_selected_color" => Ok(Props::CheckboxSelectedColor(MakepadColor::try_from(
90                (&value.1, None),
91            )?)),
92            "stroke_color" => Ok(Props::StrokeColor(MakepadColor::try_from((
93                &value.1, None,
94            ))?)),
95            "stroke_hover_color" => Ok(Props::StrokeHoverColor(MakepadColor::try_from((
96                &value.1, None,
97            ))?)),
98            "stroke_selected_color" => Ok(Props::StrokeSelectedColor(MakepadColor::try_from((
99                &value.1, None,
100            ))?)),
101            "checkbox_border_color" => Ok(Props::CheckboxBorderColor(MakepadColor::try_from((
102                &value.1, None,
103            ))?)),
104            "checkbox_border_width" => Ok(Props::CheckboxBorderWidth(value.1.as_f32()?.into())),
105            "scale" => Ok(Props::Scale(value.1.as_f32()?.into())),
106            "background_color" => Ok(Props::BackgroundColor(MakepadColor::try_from((
107                &value.1, None,
108            ))?)),
109            "hover_color" => Ok(Props::HoverColor(MakepadColor::try_from((&value.1, None))?)),
110            "focus_color" => Ok(Props::FocusColor(MakepadColor::try_from((&value.1, None))?)),
111            "shadow_color" => Ok(Props::ShadowColor(MakepadColor::try_from((
112                &value.1, None,
113            ))?)),
114            "border_color" => Ok(Props::BorderColor(MakepadColor::try_from((
115                &value.1, None,
116            ))?)),
117            "background_visible" => Ok(Props::BackgroundVisible(value.1.as_bool()?)),
118            "border_width" => Ok(Props::BorderWidth(value.1.as_f32()?.into())),
119            "border_radius" => Ok(Props::BorderRadius(value.1.as_f32()?.into())),
120            "spread_radius" => Ok(Props::SpreadRadius(value.1.as_f32()?.into())),
121            "blur_radius" => Ok(Props::BlurRadius(value.1.as_f32()?.into())),
122            "shadow_offset" => Ok(Props::ShadowOffset(Vec2::try_from(&value.1)?)),
123            "cursor" => Ok(Props::Cursor(MouseCursor::try_from(&value.1)?)),
124            "value" => Ok(Props::Value(value.1.as_string()?)),
125            "selected" => Ok(Props::Selected(value.1.as_bool()?)),
126            "text" => Ok(Props::Text(value.1.as_string()?)),
127            "checkbox_type" => Ok(Props::CheckboxType(GChooseType::try_from(&value.1)?)),
128            "visible" => Ok(Props::Visible(value.1.as_bool()?)),
129            "animation_key" => Ok(Props::AnimationKey(value.1.as_bool()?)),
130            "grab_key_focus" => Ok(Props::GrabKeyFocus(value.1.as_bool()?)),
131            "event_key" => Ok(Props::EventKey(value.1.as_bool()?)),
132            _ => {
133                if let Ok(prop) = Walk::try_from(&value) {
134                    return Ok(Props::Walk(prop));
135                } else if let Ok(prop) = Layout::try_from(&value) {
136                    return Ok(Props::Layout(prop));
137                } else {
138                    return Err(err_from_to!(
139                        "GenUI Props" => &format!("Makepad GCheckbox Prop, Invalid Prop: {}", value.0.name)
140                    ).to_runtime("Makepad Compiler"));
141                }
142            }
143        }
144    }
145}
146
147props_to_tokens! {
148    Props,
149    Props::Theme => theme, false,
150    Props::Color => color, false,
151    Props::TextHoverColor => text_hover_color, false,
152    Props::TextFocusColor => text_focus_color, false,
153    Props::FontSize => font_size, false,
154    Props::HeightFactor => height_factor, false,
155    Props::Wrap => wrap, false,
156    Props::FontFamily => font_family, false,
157    Props::TextVisible => text_visible, false,
158    Props::Size => size, false,
159    Props::CheckboxBackgroundColor => checkbox_background_color, false,
160    Props::CheckboxBackgroundVisible => checkbox_background_visible, false,
161    Props::CheckboxHoverColor => checkbox_hover_color, false,
162    Props::CheckboxSelectedColor => checkbox_selected_color, false,
163    Props::StrokeColor => stroke_color, false,
164    Props::StrokeHoverColor => stroke_hover_color, false,
165    Props::StrokeSelectedColor => stroke_selected_color, false,
166    Props::CheckboxBorderColor => checkbox_border_color, false,
167    Props::CheckboxBorderWidth => checkbox_border_width, false,
168    Props::Scale => scale, false,
169    Props::BackgroundColor => background_color, false,
170    Props::HoverColor => hover_color, false,
171    Props::FocusColor => focus_color, false,
172    Props::ShadowColor => shadow_color, false,
173    Props::BorderColor => border_color, false,
174    Props::BackgroundVisible => background_visible, false,
175    Props::BorderWidth => border_width, false,
176    Props::BorderRadius => border_radius, false,
177    Props::SpreadRadius => spread_radius, false,
178    Props::BlurRadius => blur_radius, false,
179    Props::ShadowOffset => shadow_offset, false,
180    Props::Cursor => cursor, false,
181    Props::Value => value, false,
182    Props::Selected => selected, false,
183    Props::Text => text, false,
184    Props::CheckboxType => checkbox_type, false,
185    Props::Walk => walk, true,
186    Props::Layout => layout, true,
187    Props::Visible => visible, false,
188    Props::AnimationKey => animation_key, false,
189    Props::GrabKeyFocus => grab_key_focus, false,
190    Props::EventKey => event_key, false
191}