Show and edit the details of a day #133
|
@ -27,6 +27,7 @@ use std::{cell::RefCell, collections::HashMap, rc::Rc};
|
|||
/// records.
|
||||
pub struct HistoricalViewPrivate {
|
||||
time_window: RefCell<DayInterval>,
|
||||
list_view: gtk::ListView,
|
||||
}
|
||||
|
||||
#[glib::object_subclass]
|
||||
|
@ -36,35 +37,6 @@ impl ObjectSubclass for HistoricalViewPrivate {
|
|||
type ParentType = gtk::Box;
|
||||
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
time_window: RefCell::new(DayInterval::default()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for HistoricalViewPrivate {}
|
||||
impl WidgetImpl for HistoricalViewPrivate {}
|
||||
impl BoxImpl for HistoricalViewPrivate {}
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct HistoricalView(ObjectSubclass<HistoricalViewPrivate>) @extends gtk::Box, gtk::Widget, @implements gtk::Orientable;
|
||||
}
|
||||
|
||||
impl HistoricalView {
|
||||
pub fn new<SelectFn>(records: Vec<Record<TraxRecord>>, on_select_day: Rc<SelectFn>) -> Self
|
||||
where
|
||||
SelectFn: Fn(chrono::NaiveDate, Vec<Record<TraxRecord>>) + 'static,
|
||||
{
|
||||
let s: Self = Object::builder().build();
|
||||
s.set_orientation(gtk::Orientation::Vertical);
|
||||
s.set_css_classes(&["historical"]);
|
||||
|
||||
let grouped_records =
|
||||
GroupedRecords::new((*s.imp().time_window.borrow()).clone()).with_data(records);
|
||||
|
||||
let mut model = gio::ListStore::new::<DayRecords>();
|
||||
model.extend(grouped_records.items());
|
||||
|
||||
let factory = gtk::SignalListItemFactory::new();
|
||||
factory.connect_setup(move |_, list_item| {
|
||||
list_item
|
||||
|
@ -91,12 +63,43 @@ impl HistoricalView {
|
|||
summary.set_data(records.date(), records.records());
|
||||
});
|
||||
|
||||
let lst = gtk::ListView::builder()
|
||||
.model(>k::NoSelection::new(Some(model)))
|
||||
Self {
|
||||
time_window: RefCell::new(DayInterval::default()),
|
||||
list_view: gtk::ListView::builder()
|
||||
.factory(&factory)
|
||||
.single_click_activate(true)
|
||||
.build();
|
||||
lst.connect_activate({
|
||||
.build(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for HistoricalViewPrivate {}
|
||||
impl WidgetImpl for HistoricalViewPrivate {}
|
||||
impl BoxImpl for HistoricalViewPrivate {}
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct HistoricalView(ObjectSubclass<HistoricalViewPrivate>) @extends gtk::Box, gtk::Widget, @implements gtk::Orientable;
|
||||
}
|
||||
|
||||
impl HistoricalView {
|
||||
pub fn new<SelectFn>(records: Vec<Record<TraxRecord>>, on_select_day: Rc<SelectFn>) -> Self
|
||||
where
|
||||
SelectFn: Fn(chrono::NaiveDate, Vec<Record<TraxRecord>>) + 'static,
|
||||
{
|
||||
let s: Self = Object::builder().build();
|
||||
s.set_orientation(gtk::Orientation::Vertical);
|
||||
s.set_css_classes(&["historical"]);
|
||||
|
||||
let grouped_records =
|
||||
GroupedRecords::new((*s.imp().time_window.borrow()).clone()).with_data(records);
|
||||
|
||||
let mut model = gio::ListStore::new::<DayRecords>();
|
||||
model.extend(grouped_records.items());
|
||||
s.imp()
|
||||
.list_view
|
||||
.set_model(Some(>k::NoSelection::new(Some(model))));
|
||||
|
||||
s.imp().list_view.connect_activate({
|
||||
let on_select_day = on_select_day.clone();
|
||||
move |s, idx| {
|
||||
// This gets triggered whenever the user clicks on an item on the list. What we
|
||||
|
@ -108,10 +111,25 @@ impl HistoricalView {
|
|||
}
|
||||
});
|
||||
|
||||
s.append(&lst);
|
||||
s.append(&s.imp().list_view);
|
||||
|
||||
s
|
||||
}
|
||||
|
||||
pub fn set_records(&self, records: Vec<Record<TraxRecord>>) {
|
||||
println!("set_records: {:?}", records);
|
||||
let grouped_records =
|
||||
GroupedRecords::new((self.imp().time_window.borrow()).clone()).with_data(records);
|
||||
let mut model = gio::ListStore::new::<DayRecords>();
|
||||
model.extend(grouped_records.items());
|
||||
self.imp()
|
||||
.list_view
|
||||
.set_model(Some(>k::NoSelection::new(Some(model))));
|
||||
}
|
||||
|
||||
pub fn time_window(&self) -> DayInterval {
|
||||
self.imp().time_window.borrow().clone()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
|
|
Loading…
Reference in New Issue