//! Simple calendar applications. mod calendar; use chrono::{Datelike, NaiveDate, Months, Utc}; use calendar::{CalendarMonthView, CalendarParams }; use iced::{ Alignment, Element, Length, Sandbox, Settings, }; use iced::widget::{ Column, Row, Container, Button, Text, }; //use iced::button; use iced::theme; pub fn main() -> iced::Result { CalendarApp::run(Settings::default()) } #[derive(Default)] struct CalendarApp { month: NaiveDate, controls: Controls, } #[derive(Debug, Clone, Copy)] enum Message { NextMonth, PrevMonth, } #[derive(Default)] struct Controls { } impl Controls { fn view(&self, month_name: &str) -> Element { Row::new() .align_items(Alignment::Center) .padding(5) .spacing(10) .push( Button::new(Text::new("<")) .on_press(Message::PrevMonth) .style(theme::Button::Secondary), ) .push( Button::new(Text::new(">")) .on_press(Message::NextMonth) .style(theme::Button::Secondary), ) .push( Text::new(month_name) .width(Length::Fill) .horizontal_alignment(iced_native::alignment::Horizontal::Left) .size(40), ) .push( Text::new("2022") .width(Length::Fill) .horizontal_alignment(iced_native::alignment::Horizontal::Right) .size(40), ) .into() } } impl Sandbox for CalendarApp { type Message = Message; fn new() -> Self { let month = Utc::today().naive_local(); CalendarApp { month, ..CalendarApp::default() } } fn title(&self) -> String { String::from("Calendar") } fn update(&mut self, message: Message) { match message { Message::PrevMonth => { self.month = self.month - Months::new(1); } Message::NextMonth => { self.month = self.month + Months::new(1); } } println!("month={}", self.month); } fn view(&self) -> Element { const MONTH_NAMES: [&str;12] = [ "gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre", ]; let content = Column::new() .align_items(Alignment::Fill) .push(self.controls.view(MONTH_NAMES[self.month.month() as usize])) .push(CalendarMonthView::new(&CalendarParams::new(), self.month)) ; // let area = Row::new() // .align_items(Alignment::Fill) // .push(Column::new() // .align_items(Alignment::Start) // .push(CalendarMonthView::new(6)) // .push(CalendarMonthView::new(6)) // ) // .push(content) // ; Container::new(content) .width(Length::Fill) .height(Length::Fill) .center_x() .center_y() .into() } }