use crate::{ components::Date, solstices::{self, YearlyEvents}, }; use glib::Object; use gtk::{prelude::*, subclass::prelude::*}; use ifc::IFC; /* #[derive(PartialEq)] pub enum UpcomingEvent { SpringEquinox, SummerSolstice, AutumnEquinox, WinterSolstice, } */ #[derive(Default)] pub struct EventsPrivate { spring_equinox: Date, summer_solstice: Date, autumn_equinox: Date, winter_solstice: Date, // next: UpcomingEvent, } #[glib::object_subclass] impl ObjectSubclass for EventsPrivate { const NAME: &'static str = "Events"; type Type = Events; type ParentType = gtk::Box; } impl ObjectImpl for EventsPrivate {} impl WidgetImpl for EventsPrivate {} impl BoxImpl for EventsPrivate {} glib::wrapper! { pub struct Events(ObjectSubclass) @extends gtk::Widget, gtk::Box, @implements gtk::Orientable; } impl Default for Events { fn default() -> Self { let s: Self = Object::builder().build(); s.set_orientation(gtk::Orientation::Horizontal); s.set_spacing(8); s.append(&s.imp().spring_equinox); s.append(&s.imp().summer_solstice); s.append(&s.imp().autumn_equinox); s.append(&s.imp().winter_solstice); s } } impl Events { pub fn set_events(&self, events: YearlyEvents, next_event: solstices::Event) { self.imp() .spring_equinox .update_date(IFC::from(events.spring_equinox.date_naive())); self.imp() .summer_solstice .update_date(IFC::from(events.summer_solstice.date_naive())); self.imp() .autumn_equinox .update_date(IFC::from(events.autumn_equinox.date_naive())); self.imp() .winter_solstice .update_date(IFC::from(events.winter_solstice.date_naive())); self.imp().spring_equinox.remove_css_class("highlight"); self.imp().summer_solstice.remove_css_class("highlight"); self.imp().autumn_equinox.remove_css_class("highlight"); self.imp().winter_solstice.remove_css_class("highlight"); match next_event { solstices::Event::SpringEquinox(_) => { self.imp().spring_equinox.add_css_class("highlight") } solstices::Event::SummerSolstice(_) => { self.imp().summer_solstice.add_css_class("highlight") } solstices::Event::AutumnEquinox(_) => { self.imp().autumn_equinox.add_css_class("highlight") } solstices::Event::WinterSolstice(_) => { self.imp().winter_solstice.add_css_class("highlight") } } } }