fui-rs 0.2.3

Retained-mode Rust UI SDK for EffinDOM
Documentation
use super::internal::button_presenter::ButtonTemplate;
use super::internal::checkbox_indicator_presenter::CheckboxIndicatorTemplate;
use super::internal::dropdown_chevron_presenter::DropdownChevronTemplate;
use super::internal::dropdown_field_presenter::DropdownFieldTemplate;
use super::internal::dropdown_option_row_presenter::DropdownOptionRowTemplate;
use super::internal::radio_indicator_presenter::RadioIndicatorTemplate;
use super::internal::slider_presenter::SliderTemplate;
use super::internal::switch_indicator_presenter::SwitchIndicatorTemplate;
use super::internal::text_input_presenter::TextInputTemplate;
use std::cell::RefCell;
use std::rc::Rc;

#[derive(Clone, Default)]
pub struct ControlTemplateSet {
    pub button: Option<Rc<dyn ButtonTemplate>>,
    pub checkbox_indicator: Option<Rc<dyn CheckboxIndicatorTemplate>>,
    pub dropdown_chevron: Option<Rc<dyn DropdownChevronTemplate>>,
    pub dropdown_field: Option<Rc<dyn DropdownFieldTemplate>>,
    pub dropdown_option_row: Option<Rc<dyn DropdownOptionRowTemplate>>,
    pub radio_indicator: Option<Rc<dyn RadioIndicatorTemplate>>,
    pub slider: Option<Rc<dyn SliderTemplate>>,
    pub switch_indicator: Option<Rc<dyn SwitchIndicatorTemplate>>,
    pub text_input: Option<Rc<dyn TextInputTemplate>>,
    pub text_area: Option<Rc<dyn TextInputTemplate>>,
}

thread_local! {
    static ACTIVE_CONTROL_TEMPLATES: RefCell<Option<ControlTemplateSet>> = const { RefCell::new(None) };
}

pub fn get_control_templates() -> Option<ControlTemplateSet> {
    ACTIVE_CONTROL_TEMPLATES.with(|slot| slot.borrow().clone())
}

pub fn use_control_templates(templates: ControlTemplateSet) {
    ACTIVE_CONTROL_TEMPLATES.with(|slot| {
        *slot.borrow_mut() = Some(templates);
    })
}

pub fn clear_control_templates() {
    ACTIVE_CONTROL_TEMPLATES.with(|slot| {
        *slot.borrow_mut() = None;
    });
}