.. Following on from the recent update to add acceleration
this update adds other derived data series based upon the
rate of change.
.. Added to the ride plot and the CP plot.
Not sure of the overall utility of these updates but bear in
mind that they are targetting sprinting and track users and
analysis.
As well as the positive side of this (development of power
cadence etc) we also want to think about and collect data
on fatigue rate (possibly only power and torque)
- fatigue over time
- fatigue over pedal stroke
Basically to distinguish between the four modes
and only show what you are asking for;
* rangemode + normal - the currently highlighted season only
* rangemode + compare - the compare pane seasons only
* ridemode + normal - the current ride and left pane intervals only
* ridemode + compare - the compare pane intervals only
Fixed a few nits that have come to light over the last
few days as lots of new features were developed.
* Fixed interval glitch where first point is zero, caused by
an off by one error in the original code
* Fixed interval creation which also had an off by one error
that mean't 5s curve was only 4s long
* Made the shading under an interval optional, as it is a bit
nasty and was there to hide the glitch in point 1 above
* Made the interval line solid, not dotted, as it looks much
better that way -- especially now its used for compare mode
* Made the title red by implementing isCompare() when in
compare mode.
* Fixed a crash on hover in season compare mode
Fixup all the GC code to use the QWT 6.1 code.
It needed canvas() to be patched to return a
QwtPlotCanvas and not a QWidget.
We could probably get round that with a cast.
When we switch to QWT 6.2 with the multiaxis
support formally baked in we can fix the code
as needed.
Now compiles and links without issues.
Porting the codebase to QT 5 (5.2) to get the
latest bug fixes, performance and improved platform
support.
This first part is to fixup the codebase to compile
on Qt 5, but some aspects have been broken (video).
The second part is to migrate from Qwt 6.0.1 to the
latest Qwt for multiaxis support.
The third part will be to fixup any platform specific
issues or issues identified at runtime.
If you change the plot background to black then the
CP curve is always in black too so becomes invisible.
Added a customisable color for the CP curve and fixed
up a few redraw issues in CP and Ride plot when you
change the colors.
Still need to fixup the other charts, but will do over
time. I suspect almost noone changes the plot colors from
the default values.
.. set to 3600 not 360 (!)
.. updated intervals causing warnings when using values
that were half baked. Now delays recalc() till all
the parameter intervals are set.
The CP chart model defaults are set before the spin box step
min and max values are set, which means that the value is always
reset to 100.
Since the vast majority of users will not be aware of the settings
and/or will never think of setting them to their own 'preferences'
it is vital the default is applied correctly.
Let the user define whether to use a 2 point or
3 point model (Morton et al).
In addition, let the user define the interval durations
to use; by default we set to 3 and 30 mins.
For estimating CP against good, recent data both of these
models are more than adequate for the purpose.
We'll just keep kicking the can down the road whilst we
can rely on published, verified science.
Peak aPower durations now computed and cached;
* updated RideFileCache to work with aPower
* CP curve now allows you to plot aPower
* LTM plot allows you to plot aPower peaks
* DataFilter allows 'best(apower, duration)' function
Slowly migrating code and data from the MainWindow
class to Athlete and Context classes.
This update moves the ride and interval lists and
data structures from MainWindow to Athlete.
Decoupled classes from MainWindow to reference Context
and Athlete (and introduced a couple of new headers).
We no longer pass around a MainWindow pointer to children
but pass a context instead.
There are still a few pieces left in MainWindow that need
to move to a better place;
* Setting/clearing filter selection
* Working with Intervals
* Adding/Deleting Rides
* Save on Exit
As mentioned previously there are lots of other parts to
this refactor left to do;
* break MainWindow Gui elements into Toolbar and Views
* migrate from RideItem and Ridelist to ActivityCollection
and Activity classes that are not tied into gui elements.
* introduce Application Context and AthleteCollection
Breaking the MainWindow 'god object' into
separate classes for Athlete and Context.
Further updates will need to;
- break MainWindow Gui elements into Toolbar and Views
- migrate from RideItem and Ridelist to ActivityCollection
and Activity classes that are not tied into gui elements.
- introduce Application Context and AthleteCollection
Once these are done we will be in a position to decouple
most classes from mainwindow and also introduce tabbed
athletes.
.. by highlighting chart title too if a filter is
being applied.
This is important to warn users that the data being plotted
is adjusted to the search/filter (either globally or in the
chart settings).
When the user free text searches or applies a data filter in
the top right toolbar search box it gets applied to any charts
that plot data from many rides, including;
- CP curve
- Calendar
- Histogram
- LTM
- TreeMap
- Summary
I need to update on a Mac to no longer use a Mac text search box
but now use a search filter box on the top right.
.. will refresh after the metrics and cpx have been refreshed
.. it invalidates the data rather than refreshing immediately
since thats expensive and better wait until refresh is needed.
- none - no shading on the all curve
- derived CP - as before using the CP value derived from all curve data
- CP - the value of CP for the time of the ride
NOTE: When in rangemode (i.e. on home) the CP is set to the mean CP for
the date range selected.
As a personal habit I tend to use the C pre-processor to
comment out code blocks I don't want to remove. This is in
case the code will be required in the future.
I think it is now safe to say the code commented out is not
required -- most of it is legacy and marks the transition from
earlier designs or legacy code.
I've done this in one big commit since in theory it has no
functional change, and in future can look in this commit for any
code we may want to reinstate.