SHOW:
|
|
- or go back to the newest paste.
1 | use iced::Settings; | |
2 | use iced::pure::widget::{Button, Column, Container, Text}; | |
3 | use iced::pure::Sandbox; | |
4 | use main_page::MainPage; | |
5 | ||
6 | mod main_page; | |
7 | ||
8 | ||
9 | fn main() -> Result<(), iced::Error> { | |
10 | Counter::run(Settings::default()) | |
11 | } | |
12 | ||
13 | struct Counter { | |
14 | count: i32, | |
15 | current_view: Views, | |
16 | - | main_page: MainPage |
16 | + | |
17 | ||
18 | #[derive(Debug, Clone, Copy)] | |
19 | pub enum Views { | |
20 | Counter, | |
21 | Main | |
22 | } | |
23 | ||
24 | #[derive(Debug, Clone, Copy)] | |
25 | pub enum CounterMessage { | |
26 | Increment, | |
27 | Decrement, | |
28 | ChangePage(Views) | |
29 | } | |
30 | ||
31 | impl Sandbox for Counter { | |
32 | type Message = CounterMessage; | |
33 | ||
34 | fn new() -> Self { | |
35 | Counter { | |
36 | count: 0, | |
37 | current_view: Views::Counter, | |
38 | } | |
39 | - | main_page: MainPage::new() |
39 | + | |
40 | ||
41 | fn title(&self) -> String { | |
42 | String::from("Counter app") | |
43 | } | |
44 | ||
45 | fn update(&mut self, message: Self::Message) { | |
46 | match message { | |
47 | CounterMessage::Increment => self.count += 1, | |
48 | CounterMessage::Decrement => self.count -= 1, | |
49 | CounterMessage::ChangePage(view) => self.current_view = view | |
50 | } | |
51 | } | |
52 | ||
53 | fn view(&self) -> iced::pure::Element<Self::Message> { | |
54 | let label = Text::new(format!("Count: {}", self.count)); | |
55 | let incr = Button::new("Increment").on_press(CounterMessage::Increment); | |
56 | let decr = Button::new("Decrement").on_press(CounterMessage::Decrement); | |
57 | let navigate = Button::new(Text::new("Go to the next page")).on_press(CounterMessage::ChangePage(Views::Main)); | |
58 | let col = Column::new().push(incr).push(label).push(decr).push(navigate).spacing(5); | |
59 | let counter_layout = Container::new(col).center_x().center_y().width(iced::Length::Fill).height(iced::Length::Fill); | |
60 | ||
61 | match self.current_view { | |
62 | Views::Counter => counter_layout.into(), | |
63 | Views::Main => MainPage::view(self) | |
64 | } | |
65 | - | Views::Main => self.main_page.view() |
65 | + | |
66 | } |