fui/controls/
control_template_set.rs1use super::internal::button_presenter::ButtonTemplate;
2use super::internal::checkbox_indicator_presenter::CheckboxIndicatorTemplate;
3use super::internal::dropdown_chevron_presenter::DropdownChevronTemplate;
4use super::internal::dropdown_field_presenter::DropdownFieldTemplate;
5use super::internal::dropdown_option_row_presenter::DropdownOptionRowTemplate;
6use super::internal::radio_indicator_presenter::RadioIndicatorTemplate;
7use super::internal::slider_presenter::SliderTemplate;
8use super::internal::switch_indicator_presenter::SwitchIndicatorTemplate;
9use super::internal::text_input_presenter::TextInputTemplate;
10use std::cell::RefCell;
11use std::rc::Rc;
12
13#[derive(Clone, Default)]
14pub struct ControlTemplateSet {
15 pub button: Option<Rc<dyn ButtonTemplate>>,
16 pub checkbox_indicator: Option<Rc<dyn CheckboxIndicatorTemplate>>,
17 pub dropdown_chevron: Option<Rc<dyn DropdownChevronTemplate>>,
18 pub dropdown_field: Option<Rc<dyn DropdownFieldTemplate>>,
19 pub dropdown_option_row: Option<Rc<dyn DropdownOptionRowTemplate>>,
20 pub radio_indicator: Option<Rc<dyn RadioIndicatorTemplate>>,
21 pub slider: Option<Rc<dyn SliderTemplate>>,
22 pub switch_indicator: Option<Rc<dyn SwitchIndicatorTemplate>>,
23 pub text_input: Option<Rc<dyn TextInputTemplate>>,
24 pub text_area: Option<Rc<dyn TextInputTemplate>>,
25}
26
27thread_local! {
28 static ACTIVE_CONTROL_TEMPLATES: RefCell<Option<ControlTemplateSet>> = const { RefCell::new(None) };
29}
30
31pub fn get_control_templates() -> Option<ControlTemplateSet> {
32 ACTIVE_CONTROL_TEMPLATES.with(|slot| slot.borrow().clone())
33}
34
35pub fn use_control_templates(templates: ControlTemplateSet) {
36 ACTIVE_CONTROL_TEMPLATES.with(|slot| {
37 *slot.borrow_mut() = Some(templates);
38 })
39}
40
41pub fn clear_control_templates() {
42 ACTIVE_CONTROL_TEMPLATES.with(|slot| {
43 *slot.borrow_mut() = None;
44 });
45}