Commit Graph

781 Commits

Author SHA1 Message Date
Sean Rhea
58e6fe59b6 remove old intervals code 2009-12-22 18:11:02 -05:00
Sean Rhea
818f678436 use RideMetrics for intervals in RideSummaryWindow 2009-12-22 17:54:50 -05:00
Sean Rhea
ea2177cc62 add ninety_five_percent_hr metric 2009-12-22 17:54:50 -05:00
Sean Rhea
4b1805f3c2 add max_power metric 2009-12-22 17:54:38 -05:00
Sean Rhea
96b00f4b77 fix metrics for interval use 2009-12-22 17:53:40 -05:00
Sean Rhea
fa843db0ab figure out zoneRange from RideFile::startTime 2009-12-22 15:40:30 -05:00
Sean Rhea
ef200085a8 compute metrics in RideMetric
Move the logic for how to compute RideMetrics from a RideFile, including
dependency tracking, out of RideItem and into RideMetric.  I'm going to start
using them for intervals as well as rides, and I don't want to construct a
RideItem for each interval.  It also seems more natural here.  For
performance, RideItem still caches the computed metrics for a RideFile.
2009-12-22 15:23:02 -05:00
Sean Rhea
e16443e23f aggregateWith takes a const reference 2009-12-22 15:23:02 -05:00
Sean Rhea
0d7e923c93 get rid of PointwiseRideMetric
It's no shorter than just calling foreach, and I feel it just confuses things.
2009-12-22 15:23:02 -05:00
Sean Rhea
85e9202c15 add more comments to RideMetric.h 2009-12-22 15:23:02 -05:00
Sean Rhea
abae88dc6c don't repeat "Average"
In the average column of the RideSummary, we don't need to re-emphasize that
the averages names' start with "Average ".  I hope this doesn't cause
problems for translation.
2009-12-22 15:23:02 -05:00
Sean Rhea
59a0908da4 get rid of metricsXml
Instead, just list the symbols of the RideMetrics for each column, then get
the name and precision of each metric from the RideMetric object.  This change
builds the groundwork to letting the user specify which metrics to show.
2009-12-22 15:23:02 -05:00
Sean Rhea
d096eb8854 add RideMetric::precision
...which specifies how many digits after the decimal we should show when
displaying the value of a RideMetric.
2009-12-22 15:23:01 -05:00
Sean Rhea
8aa0996e6e add RideMetric::name
The name of a RideMetric is a short string suitable for use as a label in the
ride summary.  It should be translated using QObject::tr().
2009-12-22 15:23:01 -05:00
Sean Rhea
d2b44ec508 rename RideMetric::name to RideMetric::symbol
The symbol of a ride metric is the string by which we refer to it in the
code, configuration files, and caches (like stress.cache).  It should not
be translated, and it should never be shown to the user.
2009-12-22 15:23:01 -05:00
Sean Rhea
9b4782ab98 srm interval end bug fix
If the user forgot to end an interval before downloading a ride, GC
would crash due to an assertion failure.  The included ride file
demonstrates the bug.
2009-12-22 14:49:54 -05:00
Mark Liversedge
32b94d954f add bring to front/send to back to PfPvPlot
Another rightclick menu for intervals, adding a bring to front and send to
back option but only when viewing the pfPvPlot, additionally the algorithm in
PfPv plot for determining which interval a point is used for has been adjusted
to fully populate every interval curve where appropriate (and incorrect
comments and redundant code have been removed).

IntervalItems now have a display sequence number so when you have
overlapping intervals you can bring to front and send to back on the
PfPv plot. The display sequence could be used on other plots if/when
they distinguish between intervals.

Previously, the coloring of intervals on PfPvPlot was determined solely
by the order they were defined which could be quite confusing.
2009-12-22 09:51:02 -05:00
Dag Gruneau
7a90ac8783 use setting for imperial/metric in interval dist
Before, the heading showed "Distance (km)" but the actual value was always
displayed in miles.  This patch fixes it.
2009-12-22 09:44:09 -05:00
Thomas Weichmann
9717eeb798 add context menu to ride tree
Includes save, delete, split, find peaks and best interval functions.
2009-12-22 09:35:20 -05:00
Mark Liversedge
d10b08e86f switch from QToolBox to QComboBox
This patch removes the QToolBox from commit e93970 and replaces it with
a QComboBox instead. A new object ViewSelection can be included in any
new views and will manage the interaction with MainWindow to switch
between views. It is essentially a QComboBox with some code to interact
with MainWindow.

A new signal viewChanged(int) has been implemented in MainWindow to
notify of a view change. The parameter will be set to VIEW_ANALYSIS
or VIEW_TRAIN depending upon which view was selected.

In addition, a new TrainWindow object has been created which implements
the Realtime code and is comprised of the TrainTool and TrainTabs
implemented in e93970. It also sets its splitters from remembered values
in the same fashion as the central splitter on the Analysis view.
2009-12-21 13:34:28 -05:00
Mark Liversedge
0d96ba220d Support for WKO v3 file format
Summary analysis suggests the new (v29) of the WKO 3.0 file format does
not contain any differences (or noticeable) to the previous version.
This patch enables files to be imported using the existing code instead
of being rejected because they are 'newer than the supported format'.

Further testing and analysis will be performed on the WKO 3.0 file formats
but this patch should enable users of v3 to import there files into GC.
2009-12-21 12:56:23 -05:00
Mark Liversedge
e93970ed4d Introduce Toolbox to GUI
The left side of MainWindow is now a toolbox which contains
Ride Analysis and Racing and Training options. The Right side
tabs have been reorganised and associated with the toolbox.

To support the population of the Racing and Training left tool
the config dialog has been updated to enable the user to configure
the location of their workouts.

In addition, the config dialog now calls upon MainWindow to issue
a configUpdate() signal to notify widgets when config has been
updated. This is a refactoring of the existing mechanism that
only called realtimeWindow->updateConfig, now any widget can
connect to the MainWindow signal and re-read its config appropriately.
Currently, the TrainTool and RealtimeWindow widgets have been coded to
use this.
2009-12-20 21:39:38 -05:00
Sean Rhea
e5affbbc64 introduce "metric overrides"
This commit allows every ride file to specify a set of "metric overrides":
values to use in place of those for RideMetrics we would otherwise compute.

The most gratifying immediate result of this change is that we can associate a
"skiba_bike_score" metric override with each Manual CSV file, thereby
eliminating the need for a bogus "bs" parameter in RideFilePoint.

In the future, though, we can also save these overrides to a GcRideFile using
a syntax something like this:

  <override>
    <metric name="skiba_bike_score" value="100"/>
    <metric name="average_speed" secs="3600" km="30"/>
  </override>

(Note that average_speed needs to store time and distance in order to
aggregate properly.)

Then we can add a dialog that allows the user to override the computed value
of a metric for any given ride.  For example, if my HRM was on the fritz
during a ride, I could estimate my average HR and override that metric.
(We might want to show these overrided metrics in a different color, so that
it was clear they weren't the computed values.)

Finally, I think we could actually use this feature to eliminate the Manual
CSV format altogether, and just use GcRideFiles without any samples or
intervals, but with metric overrides for all the available metrics.
2009-12-20 12:29:33 -05:00
Sean Rhea
0dae2b88cc don't explicitly specify bs
It's going away soon.
2009-12-20 12:29:25 -05:00
Thomas Weichmann
9474f281db reorder ride menu, add separators, capitalization 2009-12-19 19:09:26 -05:00
Mark Liversedge
30341cf339 Stress Calculator loses pending changes
The stress calculator works through every ride and updates stress.cache.
After each file is processed its details are wiped with a freeMemory, this
causes unsaved changes to be lost (isDirty is ignored).

This patch adds a check to make sure the file is not dirty before the
in-core values are deleted.
2009-12-19 18:58:17 -05:00
Mark Liversedge
937907c6b8 Support Metric/English units in realtime mode
Realtimode mode now supports miles and kilometers for speed, average
speed and distance telemetry.
2009-12-19 18:54:17 -05:00
Mark Liversedge
1a96535708 Computrainer code to open COM ports above 9 on Windows
The docs for CreateFile indicate that to open a comm port above
COM9 you must use a filespec of "\\.\COMX". The original code
did not apply this rule and failed to open ports above COM9 as a
result. This is especially important since it is quite common for
the USB->Serial converters to assign an assignable comm port number.
2009-12-19 18:50:40 -05:00
Mark Liversedge
d1d2037883 New Cyclist set first CP SEGV fix
When setting up the CP for a new cyclist the code for inserting
ranges called setCP with an unitialised range number variable. This
fix sets it to 0 for the very first range.

Also fixed the indentation of the code around the fix to make it
easier to follow.
2009-12-19 18:48:54 -05:00
Mark Liversedge
feb111a4ff RideFile reading refactoring
With the introduction of the rideSelected signal the RideFile was
opened (as previously) by the RideSummaryWindow::htmlSummary()
member. In some cases, this signal was processed by RideSummary window
AFTER the other charts (AllPlot etc) this results in 'No data' being
shown on other charts.

This patch moves the file reading to RideItem::ride() which was previously
a public RideFile * (that is now a protected member ride_). As a happy by
product it removes the need to check if the file has already been read
across all other functions ensuring in-core values are not accidentally
overwritten. The read errors are made available by a new RideItem::errors()
member.

This modification is required to support the RideImportWizard in freeing
loaded RideFiles during batch import to ensure virtual memory is not
exhausted when large numbers of files are imported at once. This modification
is also included in this patch.
2009-12-18 19:39:29 -05:00
Sean Rhea
71d67e2203 check that cp > 0
The commit replaces the erroneous commit a3ae0ee.  I thought the problem with
the zones file that motivated that commit was that some of the zones were of
length zero.  In fact, the problem was just that the CP is zero in the first
zone range, and a CP of zero leads to a RI of inf.
2009-12-18 09:38:22 -05:00
Mitsukuni Sato
009c013521 add calls to tr() for translation 2009-12-17 19:10:36 -05:00
Mitsukuni Sato
32471598ce add japanese translation resource 2009-12-17 19:10:17 -05:00
Sean Rhea
b0416f0a4f read lat/lon from iBike csv 2009-12-17 18:08:16 -05:00
Sean Rhea
e11ad0cbf6 revert bad zones I accidentally added in 97156c3 2009-12-17 18:02:08 -05:00
Sean Rhea
25bd2c1ff6 read ride date and time out of iBike csv files 2009-12-17 17:52:23 -05:00
Sean Rhea
592280445a fix tabs and spaces -- no functional change 2009-12-17 17:43:54 -05:00
Mark Liversedge
78716c3f4b Fix new Cyclist SEGV on open options dialog
The code to set the critical power for the cyclist page in the
config dialog calls zones->getCP(currentRange) when currentRange
is -1 (out of bounds). This caused a SEGV. This patch checks for
a -1 value and sets CP to 0 rather than calling zones->getCP.
2009-12-17 17:37:51 -05:00
Sean Rhea
a3ae0ee314 check that zone.hi > zone.lo 2009-12-17 17:34:48 -05:00
Sean Rhea
97156c3637 auto-select SRM for downloads
Hack: SRM PCV download cables use the PL2203 chipset.  If the
first device name contains "PL2303", then, we're probably dealing
with an SRM, so go ahead and select the SRM device.  Generalize?
2009-12-17 11:36:19 -05:00
Ned Harding
9b7673b451 win32: added new dependency to installer 2009-12-15 18:22:37 -05:00
Mark Liversedge
4d3b204f09 Find Peak Intervals fix 0 distance bug
The find peak intervals added intervals with 0km for start and stop. They
now get set appropriately, so peak intervals display correctly when viewed
in byDistance on AllPlot.
2009-12-14 19:22:17 -05:00
Mark Liversedge
45d7d3c610 GPS support in RideFile
RideFile data points now include lon and lat members for the longitude
degrees and latitute degrees from the source ride files. As a result
most of the RideFile readers now set longitude and latitude to zero for
each data point, except for:

* Gc Format Files - now support read/write
* Wko Format Files - now support read
* Tcx Format Files - now support read (smoothed if smart recording)

Although there are no features within GC at this point in time that use
positioning data this may change over time. Critically, as users save
files to the new GC file format whilst adding interval data it is
important that this positioning data is not discarded before new
features arrive.
2009-12-14 19:13:45 -05:00
Mark Liversedge
2745291f59 Find Peak Powers only for Intervals smaller than entire ride time
The find peak powers functions was previously adding peak intervals for
durations that were longer than the entire ride, for example a 20 minute
ride would still have a 30min and 60min peak power interval added.

The duration of the ride is now checked and only peak intervals that
are shorter or equal to the length of the ride are added.
2009-12-14 10:34:53 -05:00
Mark Liversedge
d042f54e05 Add Average Power in Brackets to Selection Name
When a user creates a new interval by selecting a section of a ride
on AllPlotWindow the newly created selection now has the average power
for the selection placed at the end of the selection name in brackets.
2009-12-14 10:34:46 -05:00
Sean Rhea
32150f1d38 up the power
...to accomodate Greg Steele's monster quads.
2009-12-13 21:26:21 -05:00
Sean Rhea
b1fe7345b3 bug fix: don't let high go negative
You can recreate the bug by creating a new cyclist with only one
relatively slow and short ride, then clicking on the CP plot.
2009-12-13 18:21:05 -05:00
Sean Rhea
bbfc4a768c don't show axes for non-existent curves
If you don't have altitude, you'll no longer have an axis for feet/meters.
Thanks to Gary Smith for pointing out that the previous behavior was silly.
2009-12-13 18:06:05 -05:00
Sean Rhea
542e4d6a4d add altitude for iBike CSV format
Thanks to Fernando Maldonado for the test file.
2009-12-13 17:40:33 -05:00
Mark Liversedge
a649f64655 Use Standard Library Binary Search
Replace handcoded binary search in RideFiletimeToDistance() method
in RideFile with lower_bounds, since it is more efficient. The
distanceToTime() method has been removed since it is not used.
2009-12-13 17:22:49 -05:00