checkbox/
checkbox.rs

1use iced_native::{Checkbox, Column, Container, Element, Length, Text};
2use iced_pancurses::{PancursesRenderer, Sandbox};
3
4pub struct MyState {
5    checked_test_checkbox: bool,
6    checked_test_other_checkbox: bool,
7}
8
9#[derive(Debug, Clone)]
10pub enum MyMessage {
11    ToggleTestCheckbox,
12    ToggleOtherCheckbox,
13}
14
15impl Sandbox for MyState {
16    type Message = MyMessage;
17
18    fn view(&mut self) -> Element<MyMessage, PancursesRenderer> {
19        let text = match (self.checked_test_checkbox, self.checked_test_other_checkbox) {
20            (true, true) => "Both checked!",
21            (false, true) | (true, false) => "Only one checked",
22            _ => "Zero checked",
23        };
24        Container::new(
25            Column::new()
26                .spacing(1)
27                .push(Text::new(text).width(Length::Shrink))
28                .push(Checkbox::new(
29                    self.checked_test_checkbox,
30                    "Test checkbox",
31                    |_| MyMessage::ToggleTestCheckbox,
32                ))
33                .push(Checkbox::new(
34                    self.checked_test_other_checkbox,
35                    "Test other checkbox",
36                    |_| MyMessage::ToggleOtherCheckbox,
37                ))
38                .width(Length::Shrink),
39        )
40        .center_x()
41        .center_y()
42        .width(Length::Fill)
43        .height(Length::Fill)
44        .into()
45    }
46
47    fn new() -> Self {
48        MyState {
49            checked_test_checkbox: false,
50            checked_test_other_checkbox: false,
51        }
52    }
53
54    fn update(&mut self, messages: Vec<MyMessage>) {
55        messages.into_iter().for_each(|msg| match msg {
56            MyMessage::ToggleTestCheckbox => {
57                self.checked_test_checkbox = !self.checked_test_checkbox
58            }
59            MyMessage::ToggleOtherCheckbox => {
60                self.checked_test_other_checkbox = !self.checked_test_other_checkbox
61            }
62        })
63    }
64}
65fn main() {
66    MyState::run()
67}