diff --git a/fitnesstrax/app/gresources.xml b/fitnesstrax/app/gresources.xml index b26eb63..a2d044b 100644 --- a/fitnesstrax/app/gresources.xml +++ b/fitnesstrax/app/gresources.xml @@ -3,15 +3,16 @@ style.css - - walking2-symbolic.svg + + + cycling-symbolic.svg running-symbolic.svg - - cycling-symbolic.svg + + walking-symbolic.svg diff --git a/fitnesstrax/app/resources/walking2-symbolic.svg b/fitnesstrax/app/resources/walking-symbolic.svg similarity index 100% rename from fitnesstrax/app/resources/walking2-symbolic.svg rename to fitnesstrax/app/resources/walking-symbolic.svg diff --git a/fitnesstrax/app/src/components/day.rs b/fitnesstrax/app/src/components/day.rs index 6c26f00..0402829 100644 --- a/fitnesstrax/app/src/components/day.rs +++ b/fitnesstrax/app/src/components/day.rs @@ -349,56 +349,53 @@ where AddRow: Fn(Record) + 'static, { let add_row = Rc::new(add_row); - /* - let walking_button = gtk::Button::builder() - .icon_name("walking2-symbolic") - .width_request(64) - .height_request(64) - .build(); - walking_button.connect_clicked({ - let view_model = view_model.clone(); - let add_row = add_row.clone(); - move |_| { - let workout = view_model.new_time_distance(TimeDistanceActivity::Walking); - add_row(workout.map(TraxRecord::TimeDistance)); - } - }); - - let running_button = gtk::Button::builder() - .icon_name("running-symbolic") - .width_request(64) - .height_request(64) - .build(); - running_button.connect_clicked({ - let view_model = view_model.clone(); - move |_| { - let workout = view_model.new_time_distance(TimeDistanceActivity::Running); - add_row(workout.map(TraxRecord::TimeDistance)); - } - }); - */ - - let biking_button = gtk::Button::builder() - .icon_name("cycling-symbolic") - .width_request(64) - .height_request(64) - .build(); - biking_button.connect_clicked({ - let view_model = view_model.clone(); - move |_| { - let workout = view_model.new_time_distance(TimeDistanceActivity::Biking); - add_row(workout.map(TraxRecord::TimeDistance)); - } - }); let layout = gtk::Box::builder() - .orientation(gtk::Orientation::Vertical) - .build(); - let row = gtk::Box::builder() .orientation(gtk::Orientation::Horizontal) .build(); - row.append(&biking_button); - layout.append(&row); + + for (activity, icon, label) in [ + ( + TimeDistanceActivity::Biking, + "cycling-symbolic", + "Bike Ride", + ), + (TimeDistanceActivity::Rowing, "rowing-symbolic", "Rowing"), + (TimeDistanceActivity::Running, "running-symbolic", "Run"), + (TimeDistanceActivity::Swimming, "swimming-symbolic", "Swim"), + (TimeDistanceActivity::Walking, "walking-symbolic", "Walk"), + ] { + let button = workout_button(activity, icon, label, view_model.clone(), { + let add_row = add_row.clone(); + move |record| add_row(record) + }); + layout.append(&button); + } layout } + +fn workout_button( + activity: TimeDistanceActivity, + _icon: &str, + label: &str, + view_model: DayDetailViewModel, + add_row: AddRow, +) -> gtk::Button +where + AddRow: Fn(Record) + 'static, +{ + let button = gtk::Button::builder() + .label(label) + .width_request(64) + .height_request(64) + .build(); + button.connect_clicked({ + let view_model = view_model.clone(); + move |_| { + let workout = view_model.new_time_distance(activity); + add_row(workout.map(TraxRecord::TimeDistance)); + } + }); + button +}