Commit Graph

72 Commits

Author SHA1 Message Date
Mark Liversedge
c3a189b25c QT5 -- 2 of 3
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.
2013-12-09 12:26:55 +00:00
Mark Liversedge
aa8605e8d5 QT5 -- 1 of 3
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.
2013-12-09 09:57:13 +00:00
Mark Liversedge
1abbab0d4d Plot Background and CP chart
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.
2013-12-07 19:42:51 +00:00
Mark Liversedge
d33f07661a Add Filter Sidebar
To allow selection of filters aka Named Searches when
plotting charts.

Fixes #732
2013-12-05 14:30:42 +00:00
Mark Liversedge
c34b060b2f Compare toolbar/menu option
Just added a toolbar button and menu to bring up the
compare pane, before adding it to the tab and view
classes.
2013-11-24 14:18:21 +00:00
Mark Liversedge
3ba81785ed Fix CP defaults bug
.. 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.
2013-11-22 22:30:47 +00:00
Mark Liversedge
0578a6c9f6 Better CP model defaults
Improved defaults for CP model to derive CP
and W' from bests data.
2013-11-22 21:59:29 +00:00
Mark Liversedge
2f6b5dba2d Fencepost error on CP intervals
.. caused the meanmax curve for an interval to be
   recomputed every time even though we'd gone to all
   those lengths to cache them.
2013-11-21 18:28:01 +00:00
Mark Liversedge
614b4de605 Fix CP chart defaults
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.
2013-11-20 08:08:55 +00:00
Damien
a8730129ad CP Model: let the user define whole interval durations 2013-11-20 08:17:49 +01:00
Mark Liversedge
7b7fa194a2 The CP Model has "parameters" not "points"
Might as well use the right terminology if your gonna
let the user choose and adjust the model!
2013-11-14 12:24:37 +00:00
Mark Liversedge
9498cd83d6 User Definable CP Model
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.
2013-11-14 11:43:55 +00:00
Mark Liversedge
2d79769e7f Clean CP curve
.. when in range mode (i.e. plotting a CP curve for a date
   range or season rather than for a ride).
2013-11-13 23:00:26 +00:00
Mark Liversedge
aeab59185c Highlight intervals on CP Curve
Will show a CP curve for the selected data series
for each interval that is selected, just like the
rest of the charts.

Fixes #718.
2013-11-13 20:38:06 +00:00
Mark Liversedge
d2c4d88e19 Best aPower
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
2013-11-06 16:41:25 +00:00
Mark Liversedge
0a51fdebb5 Move filters from MainWindow to Context
.. we notify search/filter updates via context rather
   than MainWindow
2013-07-27 13:51:09 +01:00
Mark Liversedge
cf82d1b7a9 More refactor tidying
.. move signals to context from mainwindow
.. fix missed updates to aerolab and realtime plot
.. remove clutter from MainWindow.h
2013-07-14 11:23:06 +01:00
Mark Liversedge
d21ca376be MainWindow Refactor Part 3 of 5
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.
2013-07-13 19:46:03 +01:00
Mark Liversedge
05f1d577db Refactor MainWindow Part 2 of 5
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
2013-07-11 14:02:02 +01:00
Mark Liversedge
e407237ac0 MainWindow Refactor Part 1 of 5
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.
2013-07-07 15:50:28 +01:00
Mark Liversedge
fdf2149087 Visual cue for filter
.. 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).
2013-04-26 12:44:51 +01:00
Mark Liversedge
fedc2acfc5 Fix CP chart SEGV on delete ride
.. referencing combo box when in range mode.
2013-04-10 19:29:06 +01:00
Mark Liversedge
01c4b436e6 Search/Filter on toolbar applies to Charts
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.
2013-04-05 16:23:16 +01:00
Mark Liversedge
440bbd203f Refresh all curve when spikes edited and saved
.. 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.
2013-03-29 19:33:43 +00:00
Mark Liversedge
cfdb3037d8 Fixup last commit
.. strange edits lost related to widget layouts.
2013-02-16 14:21:12 +00:00
Mark Liversedge
b58a6e747b Shade Selector on CP chart
- 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.
2013-02-16 13:41:55 +00:00
Mark Liversedge
cd2fca9346 Code Cleanup: Remove #if 0 code
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.
2013-02-11 15:00:00 +00:00
Mark Liversedge
1eb06866cc Code Cleanup: CP chart 2013-02-10 21:11:39 +00:00
Mark Liversedge
82ecce3af6 BlankState: Analysis view more blanks
- Better handling of a NULL ride for most of the analysis charts
- Don't show activity editor if no data rows to edit
2013-02-06 11:48:52 +00:00
Damien
102fb30eae Show picker info in CriticalPowerWindow
Correct previous commit
2013-01-28 23:26:03 +01:00
Damien
204dbe3f48 UI Nits: GcChartWindow for CriticalPowerWindow and ModelWindow 2013-01-28 22:49:02 +01:00
Damien
cde2c48bbe Change animation for reveal on AllPlotWindow 2013-01-26 15:15:22 +01:00
Mark Liversedge
a2fd1a9d05 UI Nits: CP today 'gap'
.. when in rangemode.
2013-01-25 18:27:26 +00:00
Mark Liversedge
40e527d022 UI Nits: Reveal Controls Cosmetics
After discussion with Damien;

* solid white background for the controls looks best
* CP on chart labels need to be less obtrusive
* keep the controls to a simple but useful set

I also tidied up some of the margins since they were
also wrong.
2013-01-25 09:28:20 +00:00
Damien
5f1627bd57 Add reveal controls for CP Plot and PfPv Plot 2013-01-20 23:36:31 +01:00
Mark Liversedge
7bdeb82d71 UseThruToday: Fix CP chart 2013-01-14 09:44:46 +00:00
Mark Liversedge
a0a07e8b07 Chart Dates: Part 3b of 3
Added chart date selection to the CP chart.
Still need to add this to;
    - Summary
    - Histogram
2013-01-04 23:43:37 +00:00
Mark Liversedge
2df222f9ff Fix SEGV in CPPlot when ride added/deleted
The recent update to allow CP charts to be added to the home
view and display the cp chart for the range selected did not
update to cater for ride/add delete whilst the season combo
is not set.

As a result when a ride was added/deleted the current index for
the combo was used (-1) to reference the season array resulting
in an fatal assert on array bounds.
2012-12-13 14:44:09 +00:00
Mark Liversedge
4bd94e9411 UI Nits: LTMSidebar performance
Don't refresh CP, LTM or Histogram plots when dateRange property
is set, if the dateRange was previously plotted anyway. Will set
to stale if a ride is added or deleted too.

This means the replot of tabs is not performed when simply switching
between tabs. But will if the date range does change or a ride is
added or deleted meaning the aggregate needs to be re-calculated.

There is still one more performance improvement required;

1. get RideFileCache to have a cache of recent aggregations.
   Since (a) the same ranges will be called over and over by
   different charts when a season is selected and (b) there
   are only likely to be 20-30 seasons defined in total, so
   lets cache them instead of recalculating every time.
2012-11-27 13:41:36 +00:00
Mark Liversedge
6568a05703 UI Nits: LTMSidebar performance
Remove the double update from HomeWindow and only
update in CP and Histogram when visible.

Still need to:

1. get CP/Histogram to remember what the last update
was to not bother unless something has changed.

2. get RideFileCache to have a cache of recent aggregations.
   Since (a) the same ranges will be called over and over by
   different charts when a season is selected and (b) there
   are only likely to be 20-30 seasons defined in total, so
   lets cache them instead of recalculating every time.
2012-11-26 22:11:46 +00:00
Mark Liversedge
2dea77e1ae UI Nits: LTM Sidebar (Part 1 of 3)
We now have a date range selector in the sidebar.  The
sidebar has a date range selector and summary. It is
used to set the date range for the charts in the view.

As a result we can now add summary charts to the home view
and LTM/CP/Histogram charts to the Diary view. The weekly
summary chart is now deprecated.

Creating seasons has also been disabled on metric charts. We
will need to decide what clicking on an LTM chart should do,
and look at whether we want to keep the popup bubble or
adjust it.

There are some unfortunate performance degradations as a result
of this patch when selecting date ranges and switching between
charts in tab view. This needs to be addressed as a priority.

Follow up patches, part 2 and 3 will need to;
1. address performance degradations & cache results
2. introduce events in sidebar and as annotations on charts
3. implement click functionality on LTM charts (annotate vs
  define a new season/range)

NOTE: existing HOME, ANALYSIS and DIARY chart setups will need
      to be rebuilt since chart ids and properties have changed
      in this patch -- do not raise a bug until you have deleted
      and re-added the offending chart.
2012-11-26 20:20:36 +00:00
Mark Liversedge
d0b009c922 Data Filter (Part 3 of 3)
Last part of the search/filter functionality;

* SearchBox now incorporates filter and search
  with a new widget. We can update this widget
  to include more fancy UI/Interactions without
  having to change the ride list or charts etc.

* Added search/filter widget to the relevant charts
  and screens; Metrics, TreeMap, CP, Histogram,
  Activity Log, Ride list (refactored out of MainWindow)

* Added namedsearches.xml and adding/selecting them
  from a drop down menu on the search box.

* Fixed some performance bugs related to duplicate
  signals and redraw/reprocessing. Also ensured that
  CLucene remains optional -- but means no search or
  filter functionality unless it is available.
2012-11-05 15:44:01 +00:00
Damien
b116d3aac8 Add Watts/Kg in the cpx cache files and in the CP plot
modified:   src/CpintPlot.cpp
	modified:   src/CriticalPowerWindow.cpp
	modified:   src/CriticalPowerWindow.h
	modified:   src/HistogramWindow.cpp
	modified:   src/RideFile.cpp
	modified:   src/RideFile.h
	modified:   src/RideFileCache.cpp
	modified:   src/RideFileCache.h
2012-07-08 11:03:20 +01:00
Damien
c44758c5ad Qwt 6.0.1 Support
Upgrade to QWT 6.0.1, but still uses a locally patched copy
since support for 8 axes has not been included, despite it
being a relatively simple patch.

Fixes #634.
Fixes #567.
2012-02-12 10:43:15 +00:00
Damien
cf8310b1b9 Fix CriticalPowerWindow handle seasons changed
Fixes #575.
2012-01-15 09:22:45 +00:00
Mark Liversedge
d7e987d0a9 CP chart 'best date' doesn't fit
Aside from just expanding the sidebar to show it, this update
creates a bit more space for the display of best values in
the CP chart controls.

It would be better if the tooltip also showed the date.

Fixes #565.
2011-12-25 11:23:54 +00:00
Mark Liversedge
574a4c2905 Fix CP chart SEGV when season deleted
If the season selected is deleted then upon restart
the CP plot will crash (iSeason <0).

Fixes #446.
2011-09-04 15:43:15 +01:00
Mark Liversedge
e7bcaa2b25 Add VAM to CP curve
Very basic start, this will now let you plot
VAM on the CP curve. VAM is a measure of climbing
speed and for comparative purposes should be
normalised to the slope climbed.

In this first pass of implementation the VAM metric
is not normalised in any way. It merely represents
the climbing rate, in meters per hour, that was
sustained over each time interval from 5mins to the
ride duration.

If the ride is undulating then only ascension is
included, any time on the flat or descending is
included but meters climbed will be zero. This is
akin to the way we handle power where we include time
when freewheeling.

More sophistication is needed, especially normalising
the value to a common gradient (e.g. 10%). But this
will prove challenging when VAM is comprised of
undulating elements (i.e. gradient is cumulatively
zero, but could contain segments with steep parts).

It may be more appropriate to only measure VAM for
sustained climbing i.e. ignore ride sections when
descending or on the flat.

More thought needed.

Fixes #414.
2011-08-18 19:15:20 +01:00
Mark Liversedge
69f1340fb7 Critical Power Window delete current ride crash
The CP window tries to draw the current ride, even if it
has just been deleted (i.e. on delete event it tried to
calculate()) this fixes that.

Other widgets are fine, this is a consequence of trying to
redraw the aggregated curve and current curve when being
notified the ride has been deleted.
2011-08-07 19:25:57 +01:00
Mark Liversedge
8f53e1c2da Refresh CP curve when rides added/deleted
This patch forces a refresh of the CP curve
plot (if it is visible) when rides are added
or deleted.

Fixes #400.
2011-08-07 09:39:13 +01:00