Advertisement
Night___Hunter

Untitled

Feb 1st, 2024
623
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
  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.     }
  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.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement