tuix_widgets/buttons/
radio.rs

1// const ICON_CHECK: &str = "\u{2713}";
2
3use crate::{CheckButton, common::*};
4
5pub struct Radio {
6    marker: Entity,
7    check: CheckButton,
8}
9
10impl Radio {
11    pub fn new() -> Self {
12        Self {
13            marker: Entity::null(),
14            check: CheckButton::new(),
15        }
16    }
17
18    pub fn set_checked(mut self, checked: bool) -> Self {
19        self.check = self.check.set_checked(checked);
20
21        self
22    }
23
24    pub fn on_checked<F>(mut self, callback: F) -> Self 
25    where
26        F: 'static + Fn(&mut CheckButton, &mut State, Entity)
27    {
28        self.check = self.check.on_checked(callback);
29        self
30    }
31
32    pub fn on_unchecked<F>(mut self, callback: F) -> Self 
33    where
34        F: 'static + Fn(&mut CheckButton, &mut State, Entity)
35    {
36        self.check = self.check.on_unchecked(callback);
37        self
38    }
39}
40
41impl Widget for Radio {
42    type Ret = Entity;
43    type Data = bool;
44    fn on_build(&mut self, state: &mut State, entity: Entity) -> Self::Ret {
45        
46        self.check.on_build(state, entity);
47        
48        self.marker = Element::new().build(state, entity, |builder| {
49            builder
50                .set_hoverable(false)
51                .class("marker")
52                .set_hoverable(false)
53        });
54
55        entity.set_element(state, "radio")
56    }
57
58    fn on_event(&mut self, state: &mut State, entity: Entity, event: &mut Event) {
59        self.check.on_event(state, entity, event);
60    }
61}