Render time distance details in the day detail view

This commit is contained in:
Savanni D'Gerinel 2024-01-23 08:28:39 -05:00
parent 9c27610cb9
commit aaca733a4c
3 changed files with 73 additions and 128 deletions

View File

@ -26,6 +26,8 @@ use glib::Object;
use gtk::{prelude::*, subclass::prelude::*}; use gtk::{prelude::*, subclass::prelude::*};
use std::cell::RefCell; use std::cell::RefCell;
use super::time_distance_detail;
pub struct DaySummaryPrivate { pub struct DaySummaryPrivate {
date: gtk::Label, date: gtk::Label,
} }
@ -174,51 +176,18 @@ impl DayDetail {
s.append(&top_row); s.append(&top_row);
/* let records = view_model.records();
records.into_iter().for_each(|record| { for emseries::Record { data, .. } in records {
let record_view = match record { match data {
Record { TraxRecord::BikeRide(ride) => {
data: ft_core::TraxRecord::BikeRide(record), s.append(&time_distance_detail(RecordType::BikeRide, ride))
.. }
} => Some( TraxRecord::Row(row) => s.append(&time_distance_detail(RecordType::Row, row)),
TimeDistanceView::new(ft_core::RecordType::BikeRide, record) TraxRecord::Run(run) => s.append(&time_distance_detail(RecordType::Run, run)),
.upcast::<gtk::Widget>(), TraxRecord::Walk(walk) => s.append(&time_distance_detail(RecordType::Walk, walk)),
), _ => {}
Record { }
data: ft_core::TraxRecord::Row(record),
..
} => Some(
TimeDistanceView::new(ft_core::RecordType::Row, record).upcast::<gtk::Widget>(),
),
Record {
data: ft_core::TraxRecord::Run(record),
..
} => Some(
TimeDistanceView::new(ft_core::RecordType::Row, record).upcast::<gtk::Widget>(),
),
Record {
data: ft_core::TraxRecord::Swim(record),
..
} => Some(
TimeDistanceView::new(ft_core::RecordType::Row, record).upcast::<gtk::Widget>(),
),
Record {
data: ft_core::TraxRecord::Walk(record),
..
} => Some(
TimeDistanceView::new(ft_core::RecordType::Row, record).upcast::<gtk::Widget>(),
),
_ => None,
};
if let Some(record_view) = record_view {
record_view.add_css_class("day-detail");
record_view.set_halign(gtk::Align::Start);
s.append(&record_view);
} }
});
*/
s s
} }

View File

@ -30,7 +30,7 @@ mod text_entry;
pub use text_entry::{ParseError, TextEntry}; pub use text_entry::{ParseError, TextEntry};
mod time_distance; mod time_distance;
pub use time_distance::{time_distance_summary, TimeDistanceView}; pub use time_distance::{time_distance_detail, time_distance_summary};
mod weight; mod weight;
pub use weight::{weight_editor, Weight}; pub use weight::{weight_editor, Weight};

View File

@ -44,33 +44,11 @@ pub fn time_distance_summary(
text.map(|text| gtk::Label::new(Some(&text))) text.map(|text| gtk::Label::new(Some(&text)))
} }
#[derive(Default)] pub fn time_distance_detail(type_: ft_core::RecordType, record: ft_core::TimeDistance) -> gtk::Box {
pub struct TimeDistanceViewPrivate { let layout = gtk::Box::builder()
#[allow(unused)] .orientation(gtk::Orientation::Vertical)
record: RefCell<Option<TimeDistance>>, .hexpand(true)
} .build();
#[glib::object_subclass]
impl ObjectSubclass for TimeDistanceViewPrivate {
const NAME: &'static str = "TimeDistanceView";
type Type = TimeDistanceView;
type ParentType = gtk::Box;
}
impl ObjectImpl for TimeDistanceViewPrivate {}
impl WidgetImpl for TimeDistanceViewPrivate {}
impl BoxImpl for TimeDistanceViewPrivate {}
glib::wrapper! {
pub struct TimeDistanceView(ObjectSubclass<TimeDistanceViewPrivate>) @extends gtk::Box, gtk::Widget, @implements gtk::Orientable;
}
impl TimeDistanceView {
pub fn new(type_: RecordType, record: TimeDistance) -> Self {
let s: Self = Object::builder().build();
s.set_orientation(gtk::Orientation::Vertical);
s.set_hexpand(true);
let first_row = gtk::Box::builder().homogeneous(true).build(); let first_row = gtk::Box::builder().homogeneous(true).build();
first_row.append( first_row.append(
@ -111,9 +89,9 @@ impl TimeDistanceView {
.build(), .build(),
); );
s.append(&first_row); layout.append(&first_row);
s.append( layout.append(
&gtk::Label::builder() &gtk::Label::builder()
.halign(gtk::Align::Start) .halign(gtk::Align::Start)
.label( .label(
@ -124,7 +102,5 @@ impl TimeDistanceView {
) )
.build(), .build(),
); );
layout
s
}
} }