Totally rewrite dashboard as a GTK application #54
|
@ -8,14 +8,13 @@ use gtk::prelude::*;
|
|||
pub struct ApplicationWindow {
|
||||
pub window: gtk::ApplicationWindow,
|
||||
pub date_label: Date,
|
||||
pub next_event: gtk::Label,
|
||||
pub transit_clock: TransitClock,
|
||||
}
|
||||
|
||||
impl ApplicationWindow {
|
||||
pub fn new(app: >k::Application) -> Self {
|
||||
let window = gtk::ApplicationWindow::new(app);
|
||||
let date_label = Date::new();
|
||||
let transit_clock = TransitClock::new();
|
||||
|
||||
let layout = gtk::Box::builder()
|
||||
.orientation(gtk::Orientation::Vertical)
|
||||
|
@ -23,7 +22,20 @@ impl ApplicationWindow {
|
|||
.vexpand(true)
|
||||
.build();
|
||||
|
||||
let date_label = Date::new();
|
||||
layout.append(&date_label);
|
||||
|
||||
let next_event = gtk::Label::builder()
|
||||
.margin_bottom(8)
|
||||
.margin_top(8)
|
||||
.margin_start(8)
|
||||
.margin_end(8)
|
||||
.build();
|
||||
next_event.add_css_class("card");
|
||||
next_event.add_css_class("activatable");
|
||||
layout.append(&next_event);
|
||||
|
||||
let transit_clock = TransitClock::new();
|
||||
layout.append(&transit_clock);
|
||||
|
||||
window.set_child(Some(&layout));
|
||||
|
@ -31,12 +43,14 @@ impl ApplicationWindow {
|
|||
Self {
|
||||
window,
|
||||
date_label,
|
||||
next_event,
|
||||
transit_clock,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_state(&self, state: State) {
|
||||
self.date_label.update_date(state.date);
|
||||
self.next_event.set_text(&format!("{:?}", state.next_event));
|
||||
if let Some(transit) = state.transit {
|
||||
self.transit_clock.update_transit(transit);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chrono::{Datelike, Local};
|
||||
use chrono::{Datelike, Local, Utc};
|
||||
use geo_types::{Latitude, Longitude};
|
||||
use glib::Sender;
|
||||
use gtk::{prelude::*, subclass::prelude::*, Orientation};
|
||||
|
@ -99,8 +99,10 @@ pub fn main() {
|
|||
.request(latitude, longitude, Local::now())
|
||||
.await;
|
||||
|
||||
let now = Local::now();
|
||||
let state = State {
|
||||
date: IFC::from(Local::now().date_naive().with_year(12023).unwrap()),
|
||||
date: IFC::from(now.date_naive().with_year(12023).unwrap()),
|
||||
next_event: EVENTS.next_event(now.with_timezone(&Utc)).unwrap(),
|
||||
transit: Some(transit),
|
||||
};
|
||||
loop {
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
use crate::soluna_client::SunMoon;
|
||||
use crate::{solstices::Event, soluna_client::SunMoon};
|
||||
use ifc::IFC;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct State {
|
||||
pub date: IFC,
|
||||
pub next_event: Event,
|
||||
pub transit: Option<SunMoon>,
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue