Skip to main content

fui/controls/
control_template_set.rs

1use 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}