Workout and its editing component.

Commit
501822a61b31f5cfaeb388c6f68331afb9b7043b
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker/MFTWorkout.class.st
index 4bcb4a13..73f3eb9a 100644..100644
@@ -1,6 +1,6 @@
1 1 Class {
2 2 #name : #MFTWorkout,
3 Removed: #superclass : #WAComponent,
3 Added: #superclass : #SBSComponent,
4 4 #instVars : [
5 5 'date',
6 6 'exercises',
@@ -27,9 +27,9 @@
27 27 ]
28 28
29 29 { #category : #initialization }
30 Removed: MFTWorkout >> addExercise: anExercise [
30 Added: MFTWorkout >> addExercise: aMFTExercise [
31 31
32 Removed: exercises add: anExercise
32 Added: exercises add: aMFTExercise
33 33 ]
34 34
35 35 { #category : #accessing }
@@ -54,20 +54,53 @@
54 54 exercises := listOfExercises
55 55 ]
56 56
57 Added: { #category : #'as yet unclassified' }
58 Added: MFTWorkout >> guessPrimaryMuscle [
59 Added: "TODO: guess the workout's primary muscle based on the most represented primary muscle in the workout's exercises."
60 Added:
61 Added: | primaryMuscles groupedByMuscle mostFrequentMuscle |
62 Added: primaryMuscles := exercises collect: [ :each | each primaryMuscle ].
63 Added: groupedByMuscle := primaryMuscles groupBy: [ :each | each ].
64 Added: mostFrequentMuscle := groupedByMuscle keys max: [ :muscle |
65 Added: (groupedByMuscle at: muscle) size ]
66 Added: ]
67 Added:
57 68 { #category : #initialization }
58 69 MFTWorkout >> initialize [
59 70
60 71 super initialize.
61 Removed: self exercises: OrderedCollection new.
62 Removed: self date: Date today.
63 Removed: self primaryMuscle: MFTMuscle new.
64 Removed: self secondaryMuscles: OrderedCollection new
72 Added: exercises := OrderedCollection new.
73 Added: date := Date today.
74 Added: primaryMuscle := MFTMuscle new.
75 Added: secondaryMuscles := OrderedCollection new
65 76 ]
66 77
78 Added: { #category : #rendering }
79 Added: MFTWorkout >> placeholder [
80 Added: "Delete me"
81 Added:
82 Added: ^ self
83 Added: primaryMuscle: MFTMuscle chest;
84 Added: exercises: {
85 Added: (MFTExercise cableRow sets: {
86 Added: (MFTSet reps: 8 rpe: 6).
87 Added: (MFTSet reps: 6 rpe: 8).
88 Added: (MFTSet reps: 6 rpe: 10).
89 Added: (MFTSet reps: 15 rpe: 4) }).
90 Added: (MFTExercise shoulderPressDumbell sets: {
91 Added: (MFTSet reps: 10 rpe: 6).
92 Added: (MFTSet reps: 6 rpe: 8).
93 Added: (MFTSet reps: 6 rpe: 10) }).
94 Added: (MFTExercise declineBenchPress sets: {
95 Added: (MFTSet reps: 5 rpe: 6).
96 Added: (MFTSet reps: 6 rpe: 8).
97 Added: (MFTSet reps: 8 rpe: 10) }) }
98 Added: ]
99 Added:
67 100 { #category : #accessing }
68 101 MFTWorkout >> primaryMuscle [
69 102
70 Removed: ^ primaryMuscle name
103 Added: ^ primaryMuscle
71 104 ]
72 105
73 106 { #category : #accessing }
@@ -86,40 +119,43 @@
86 119
87 120 | grandTotal |
88 121 grandTotal := 0.
89 Removed: html tbsButton
90 Removed: callback: [
91 Removed: Transcript
92 Removed: show: 'Dongles';
93 Removed: cr ];
122 Added: html table
123 Added: class: 'table table-striped';
94 124 with: [
95 Removed: html text: self date ddmmyyyy.
96 Removed: primaryMuscle ifNotNil: [ html text: ' -- ' , primaryMuscle name ] ].
97 Removed: html break.
98 Removed: html tbsTable with: [
99 Removed: html tableHead: [
100 Removed: html
101 Removed: tableHeading: 'Exercise';
102 Removed: tableHeading: 'Reps' ].
103 Removed: exercises do: [ :exercise |
104 Removed: html tableRow: [
105 Removed: html tableData: [
106 Removed: html
107 Removed: text: exercise name;
108 Removed: text: ': '.
109 Removed: exercise sets ifNotNil: [
110 Removed: html text: (self repsCountList: exercise) asCommaString.
111 Removed: html tableData: (self repsCountList: exercise) sum.
112 Removed: grandTotal := grandTotal + (self repsCountList: exercise) sum ] ] ] ].
113 Removed: html tableFoot: [
114 Removed: html
115 Removed: tableData: 'Total';
116 Removed: tableData: grandTotal ] ]
125 Added: self renderTableHeaderOn: html.
126 Added: exercises do: [ :exercise |
127 Added: html tableRow: [
128 Added: html tableData: [
129 Added: html
130 Added: text: exercise name;
131 Added: text: ': '.
132 Added: exercise sets
133 Added: ifNotEmpty: [
134 Added: html text: exercise repsBySet asCommaString.
135 Added: html tableData: exercise repsBySet sum.
136 Added: grandTotal := grandTotal + exercise repsBySet sum ]
137 Added: ifEmpty: [
138 Added: html text: 0.
139 Added: html tableData: 0 ] ] ] ].
140 Added: self renderTableFooterTotal: grandTotal on: html ]
117 141 ]
118 142
119 143 { #category : #rendering }
120 Removed: MFTWorkout >> repsCountList: exercise [
144 Added: MFTWorkout >> renderTableFooterTotal: grandTotal on: html [
121 145
122 Removed: ^ exercise sets collect: [ :set | set reps ]
146 Added: ^ html tableFoot: [
147 Added: html
148 Added: tableData: 'Total';
149 Added: tableData: grandTotal ]
150 Added: ]
151 Added:
152 Added: { #category : #rendering }
153 Added: MFTWorkout >> renderTableHeaderOn: html [
154 Added:
155 Added: html tableHead: [
156 Added: html
157 Added: tableHeading: 'Exercise';
158 Added: tableHeading: 'Reps' ]
123 159 ]
124 160
125 161 { #category : #accessing }
src/MyFitnessTracker/MFTWorkoutDialog.class.st
index 0a08f1f4..a8d87668 100644..100644
@@ -8,6 +8,15 @@
8 8 #category : #'MyFitnessTracker-Dialogs'
9 9 }
10 10
11 Added: { #category : #actions }
12 Added: MFTWorkoutDialog class >> edit: aMFTWorkout [
13 Added:
14 Added: ^ self new
15 Added: workout: aMFTWorkout;
16 Added: addOrEdit: #edit;
17 Added: yourself
18 Added: ]
19 Added:
11 20 { #category : #adding }
12 21 MFTWorkoutDialog >> addExercise [
13 22