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}