ferroui_base/input/text_input/
text_input_options.rs1use super::{TextInputContentType, TextInputReturnKeyType};
2use crate::input::InputScopeNameValue;
3use crate::{ferro_property, AttachedProperty, FerroProperty, StyledElement, StyledPropertyOptions};
4use std::rc::Rc;
5
6#[derive(Clone, Debug, Default, PartialEq)]
11pub struct TextInputOptions {
12 pub content_type: TextInputContentType,
14
15 pub return_key_type: TextInputReturnKeyType,
17
18 pub multiline: bool,
20
21 pub lowercase: bool,
23
24 pub uppercase: bool,
26
27 pub auto_capitalization: bool,
29
30 pub is_sensitive: bool,
32
33 pub show_suggestions: Option<bool>,
35
36 pub locale_hints: Option<Rc<[String]>>,
38}
39
40crate::ferro_static_type!(TextInputOptions);
41
42crate::ferro_properties! {
43 impl TextInputOptions, also [
44 TextInputOptions::content_type_property,
45 TextInputOptions::input_scope_names_property,
46 TextInputOptions::return_key_type_property,
47 TextInputOptions::multiline_property,
48 TextInputOptions::lowercase_property,
49 TextInputOptions::uppercase_property,
50 TextInputOptions::auto_capitalization_property,
51 TextInputOptions::is_sensitive_property,
52 TextInputOptions::show_suggestions_property,
53 TextInputOptions::locale_hints_property,
54 ] {}
55}
56
57impl TextInputOptions {
58 pub fn from_styled_element(ferro_object: &StyledElement) -> TextInputOptions {
61 TextInputOptions {
62 content_type: Self::get_content_type(ferro_object),
63 return_key_type: Self::get_return_key_type(ferro_object),
64 multiline: Self::get_multiline(ferro_object),
65 auto_capitalization: Self::get_auto_capitalization(ferro_object),
66 is_sensitive: Self::get_is_sensitive(ferro_object),
67 lowercase: Self::get_lowercase(ferro_object),
68 uppercase: Self::get_uppercase(ferro_object),
69 show_suggestions: Self::get_show_suggestions(ferro_object),
70 locale_hints: Self::get_locale_hints(ferro_object),
71 }
72 }
73
74 pub fn default_options() -> TextInputOptions {
76 TextInputOptions::default()
77 }
78
79 ferro_property!(for TextInputOptions;
80 pub fn input_scope_names_property() -> AttachedProperty<Option<Rc<[InputScopeNameValue]>>> {
88 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
89 "InputScopeNames",
90 StyledPropertyOptions::new(None).inherits(true),
91 )
92 }
93 );
94
95 pub fn set_input_scope_names(ferro_object: &StyledElement, value: Option<Rc<[InputScopeNameValue]>>) {
97 ferro_object.set_value(Self::input_scope_names_property(), value)
98 }
99
100 pub fn get_input_scope_names(ferro_object: &StyledElement) -> Option<Rc<[InputScopeNameValue]>> {
102 ferro_object.get_value(Self::input_scope_names_property())
103 }
104
105 pub fn get_effective_input_scope(ferro_object: &StyledElement) -> Option<InputScopeNameValue> {
107 Self::get_input_scope_names(ferro_object).and_then(|names| names.first().copied())
108 }
109
110 pub fn get_effective_content_type(ferro_object: &StyledElement) -> TextInputContentType {
113 Self::get_effective_input_scope(ferro_object)
114 .map_or_else(|| Self::get_content_type(ferro_object), InputScopeNameValue::content_type)
115 }
116
117 ferro_property!(for TextInputOptions;
118 pub fn content_type_property() -> AttachedProperty<TextInputContentType> {
120 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
121 "ContentType",
122 StyledPropertyOptions::new(TextInputContentType::Normal).inherits(true),
123 )
124 }
125 );
126
127 pub fn set_content_type(ferro_object: &StyledElement, value: TextInputContentType) {
129 ferro_object.set_value(Self::content_type_property(), value)
130 }
131
132 pub fn get_content_type(ferro_object: &StyledElement) -> TextInputContentType {
134 ferro_object.get_value(Self::content_type_property())
135 }
136
137 ferro_property!(for TextInputOptions;
138 pub fn return_key_type_property() -> AttachedProperty<TextInputReturnKeyType> {
140 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
141 "ReturnKeyType",
142 StyledPropertyOptions::new(TextInputReturnKeyType::Default).inherits(true),
143 )
144 }
145 );
146
147 pub fn set_return_key_type(ferro_object: &StyledElement, value: TextInputReturnKeyType) {
149 ferro_object.set_value(Self::return_key_type_property(), value)
150 }
151
152 pub fn get_return_key_type(ferro_object: &StyledElement) -> TextInputReturnKeyType {
154 ferro_object.get_value(Self::return_key_type_property())
155 }
156
157 ferro_property!(for TextInputOptions;
158 pub fn multiline_property() -> AttachedProperty<bool> {
160 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
161 "Multiline",
162 StyledPropertyOptions::new(false).inherits(true),
163 )
164 }
165 );
166
167 pub fn set_multiline(ferro_object: &StyledElement, value: bool) {
169 ferro_object.set_value(Self::multiline_property(), value)
170 }
171
172 pub fn get_multiline(ferro_object: &StyledElement) -> bool {
174 ferro_object.get_value(Self::multiline_property())
175 }
176
177 ferro_property!(for TextInputOptions;
178 pub fn lowercase_property() -> AttachedProperty<bool> {
180 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
181 "Lowercase",
182 StyledPropertyOptions::new(false).inherits(true),
183 )
184 }
185 );
186
187 pub fn set_lowercase(ferro_object: &StyledElement, value: bool) {
189 ferro_object.set_value(Self::lowercase_property(), value)
190 }
191
192 pub fn get_lowercase(ferro_object: &StyledElement) -> bool {
194 ferro_object.get_value(Self::lowercase_property())
195 }
196
197 ferro_property!(for TextInputOptions;
198 pub fn uppercase_property() -> AttachedProperty<bool> {
200 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
201 "Uppercase",
202 StyledPropertyOptions::new(false).inherits(true),
203 )
204 }
205 );
206
207 pub fn set_uppercase(ferro_object: &StyledElement, value: bool) {
209 ferro_object.set_value(Self::uppercase_property(), value)
210 }
211
212 pub fn get_uppercase(ferro_object: &StyledElement) -> bool {
214 ferro_object.get_value(Self::uppercase_property())
215 }
216
217 ferro_property!(for TextInputOptions;
218 pub fn auto_capitalization_property() -> AttachedProperty<bool> {
220 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
221 "AutoCapitalization",
222 StyledPropertyOptions::new(false).inherits(true),
223 )
224 }
225 );
226
227 pub fn set_auto_capitalization(ferro_object: &StyledElement, value: bool) {
229 ferro_object.set_value(Self::auto_capitalization_property(), value)
230 }
231
232 pub fn get_auto_capitalization(ferro_object: &StyledElement) -> bool {
234 ferro_object.get_value(Self::auto_capitalization_property())
235 }
236
237 ferro_property!(for TextInputOptions;
238 pub fn is_sensitive_property() -> AttachedProperty<bool> {
240 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
241 "IsSensitive",
242 StyledPropertyOptions::new(false).inherits(true),
243 )
244 }
245 );
246
247 pub fn set_is_sensitive(ferro_object: &StyledElement, value: bool) {
249 ferro_object.set_value(Self::is_sensitive_property(), value)
250 }
251
252 pub fn get_is_sensitive(ferro_object: &StyledElement) -> bool {
254 ferro_object.get_value(Self::is_sensitive_property())
255 }
256
257 ferro_property!(for TextInputOptions;
258 pub fn show_suggestions_property() -> AttachedProperty<Option<bool>> {
260 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
261 "ShowSuggestions",
262 StyledPropertyOptions::new(None).inherits(true),
263 )
264 }
265 );
266
267 pub fn set_show_suggestions(ferro_object: &StyledElement, value: Option<bool>) {
269 ferro_object.set_value(Self::show_suggestions_property(), value)
270 }
271
272 pub fn get_show_suggestions(ferro_object: &StyledElement) -> Option<bool> {
274 ferro_object.get_value(Self::show_suggestions_property())
275 }
276
277 ferro_property!(for TextInputOptions;
278 pub fn locale_hints_property() -> AttachedProperty<Option<Rc<[String]>>> {
280 FerroProperty::register_attached_with::<TextInputOptions, StyledElement, _>(
281 "LocaleHints",
282 StyledPropertyOptions::new(None).inherits(true),
283 )
284 }
285 );
286
287 pub fn set_locale_hints(ferro_object: &StyledElement, value: Option<Rc<[String]>>) {
289 ferro_object.set_value(Self::locale_hints_property(), value)
290 }
291
292 pub fn get_locale_hints(ferro_object: &StyledElement) -> Option<Rc<[String]>> {
294 ferro_object.get_value(Self::locale_hints_property())
295 }
296}