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}