button/
button.rs

1use iced_native::widget::button::State as ButtonState;
2use iced_native::{Button, Column, Container, Element, Length, Text};
3use iced_pancurses::{PancursesRenderer, Sandbox};
4
5#[derive(Debug, Clone, Copy)]
6pub enum MyMessage {
7    ClickedButton,
8}
9
10pub struct MyState {
11    button_state: ButtonState,
12    clicked: u32,
13}
14
15impl Sandbox for MyState {
16    type Message = MyMessage;
17
18    fn view(&mut self) -> Element<MyMessage, PancursesRenderer> {
19        Container::new(
20            Column::new()
21                .spacing(1)
22                .push(
23                    Text::new(&format!("Button clicked {} times", self.clicked))
24                        .width(Length::Shrink),
25                )
26                .push(
27                    Button::new(&mut self.button_state, Text::new("Hello!"))
28                        .padding(1)
29                        .on_press(MyMessage::ClickedButton),
30                )
31                .width(Length::Shrink),
32        )
33        .width(Length::Fill)
34        .height(Length::Fill)
35        .center_x()
36        .center_y()
37        .into()
38    }
39
40    fn new() -> Self {
41        MyState {
42            button_state: ButtonState::new(),
43            clicked: 0,
44        }
45    }
46
47    fn update(&mut self, messages: Vec<MyMessage>) {
48        messages.into_iter().for_each(|m| match m {
49            MyMessage::ClickedButton => self.clicked += 1,
50        });
51    }
52}
53
54fn main() {
55    MyState::run()
56}