View difference between Paste ID: VpRtPvVA and 3mj8h6KT
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
}