Commit Graph

138 Commits

Author SHA1 Message Date
Sean Rhea
84bb5f8964 fix up tabs 2010-03-03 09:32:43 -05:00
Greg Lonnon
2af828f654 added googlemaps, took a couple of suggestions from Julian on map defaults. 2010-03-03 09:32:43 -05:00
Mark Liversedge
0288579ce0 Long Term Metrics
A user configurable chart for showing ride metrics and
other calculated values over time.

* Uses SQLITE database to store metrics
* Supports any metric available from the metric factory
* Adds new MaxHr, VI, Peak Power and Time In Zone metric
* Also includes LTS/STS/SB for PM charting
* Aggregates in days, weeks, months or years
* Reads and Updates seasons.xml
* Adds cycles and adhoc date ranges in seasons.xml
* Date ranges can be selected on the plot with shift-left click
* Allows users to customise preferences for color, symbols et al
* Allows user to customise metric names and unit names
* Supports smooth curves and topN highlighting
* Has a linear regress trend line function
* Allows users to save charts to charts.xml
* A default charts.xml is built-in
* A chart manager to import/export/rename/delete charts etc
* Provides a tooltip to provide basic datapoint information
* Performance Manager adjusted to use the MetricDB
* User configurable setting for SB calculation (today/tomorrow)
2010-02-25 08:01:43 -08:00
Andy Froncioni
a68a147609 Adds Aerolab tab
This patch adds Aerolab, a virtual elevation module.  A
new tab is added in which the user can perform virtual
elevation analysis.  This version is a manual Aerolab,
where user can use the following sliders to elevation-match
to a known elevation profile:
Crr  -coefficient of rolling resistance
CdA  -aero coefficient of drag * frontal area
Eta  -drivetrain efficiency (to be used when using a crank-
      or bottom-brack-based power meter)
Mass -total mass of bike + rider
Rho  -density of air
E_offset -an elevation offset to align elevations
2010-02-12 05:19:59 -08:00
Sean Rhea
7125771a1b shorten tab titles
Making room for the long-term metrics tab.
2010-02-07 09:26:44 -08:00
Sean Rhea
fdc7e0b2a9 fix fencepost errors in Ride->Find Power Peaks
Also removes nasty cut-and-paste from BestIntervalsDialog.

Tested successfully on test/rides/2010_01_13_*.gc.
2010-01-18 11:56:35 -08:00
Mark Liversedge
d266ffa9b3 fix 3d plot performance issues
Scrolling up and down the ride files is painfully slow when
3d is compiled in. This patch uses a setActive mechanism in
the same fashion as the pfpv and performance manager tabs.

Additionally, a recent patch to support user preferences for
units added a settings lookup that was called for every point.
This is also fixed.

fixes #16
2010-01-17 21:18:53 -08:00
Sean Rhea
4849a5981c remove ride map from RideCalendar
I think the previous implementation could have referenced already-deleted
RideItem objects during calls to Split Ride.

This commit removes the calendar's own map of RideItems, and instead
uses the list of rides in MainWindow::allRideItems.  Because I use
binary search on that list, this implementation should be just as fast
as the old one.  But because I don't hang on to any RideItem pointers
beyond a single call to RideCalendar::paintCell, it shouldn't be
vulnerable to referencing already-deleted RideItem objects.
2010-01-04 09:00:43 -05:00
Sean Rhea
1b849c501b use ExtendedSelection in intervalWidget 2010-01-02 19:00:02 -05:00
Sean Rhea
efe99e0a2b add Daniels Points to manual ride entry
And estimate them based on time/distance just like we do with BikeScore.
2010-01-02 13:17:31 -05:00
Sean Rhea
69559e6a5e float --> double 2010-01-02 12:59:35 -05:00
Sean Rhea
8ccb138ff2 ignore manual rides when estimating BikeScore 2010-01-02 12:55:33 -05:00
Sean Rhea
987eac9951 ignore rides that don't load properly
Need to call item->ride() in order to load the ride, and should ignore those
for which the result is NULL.  Do this after checking the date, though, so
that we don't load older rides into memory.
2010-01-02 12:52:58 -05:00
Sean Rhea
ecb92349ef bug fix: segfault on manual ride entry if no rides 2010-01-02 12:47:50 -05:00
Sean Rhea
cef8d85be3 remove tabs and eol spaces, no functional change 2010-01-02 12:45:31 -05:00
Berend De Schouwer
ac4602c8c4 Calendar move defaults to constructor 2009-12-31 10:08:44 -05:00
Berend De Schouwer
68bd575edc Multiple rides per day in the calendar 2009-12-30 18:41:37 -05:00
Sean Rhea
cb204f5bd8 about dialog nits: add line breaks, remove italics 2009-12-30 10:17:55 -05:00
Sean Rhea
72a2053c5d show home path in about dialog 2009-12-30 10:13:23 -05:00
Mark Liversedge
db3d504efd 3D Modelling
A new tab on the ride analysis view for analysing ride data in three
dimensions. Interval selection is supported and a z-axis slider is
available for helping to identify data in the z-plane. A color legend
is displayed since coloring is independent of x/y/z values.

Coloring and Z axis values are averages for associated values of x/y.
The code requires qwtplot3d to be installed (see gcconfig.pri.in) and
with older Mac dev envs you will need to add -lz to LIBS too. (LIBS += -lz).

On Linux qwt3d_function.h needs a #include <stdio.h> added to compile.

Greg Steele helped design and test.

There are 2 open issues x/y/z axis labels occasionally appear in the
wrong place. lastly, the bin selection is for X&Y bin sizes and it
would be better to have separate sliders.
2009-12-30 09:41:33 -05:00
Sean Rhea
9e0d4e562b 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
Mark Liversedge
d85c5dc8b2 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
Thomas Weichmann
876ed198b5 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
56b2830fc0 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
eec69f3f54 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
Thomas Weichmann
7abe449826 reorder ride menu, add separators, capitalization 2009-12-19 19:09:26 -05:00
Mark Liversedge
c01d0f969e 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
Mitsukuni Sato
93937badee add calls to tr() for translation 2009-12-17 19:10:36 -05:00
Mark Liversedge
a529a83cae 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
3765e7982b 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
Damien Grauser
edac2110b5 add tr() for some QString and add french translation 2009-12-13 15:04:51 -05:00
Mark Liversedge
0e69a192b9 Misleading code comments adjusted
Attribution in header of IntervalItem.{h,cpp}
Commented out code removed
2009-12-13 14:45:25 -05:00
Mark Liversedge
9e403289fc IntervalItem::name removed
The class member IntervalItem::name is redundant since it is a duplicate
of the text() member of the base class QTreeWidgetItem. By removing it
we both simplify the code and remove the need to keep name and text in
sync when renaming and creating intervals.

As a result the itemChanged signal that was connected for renames and
then disconnected when the items are cleared can be connected once
and no disconnect is neccessary.

This connect/disconnect oddity was originally to avoid a SEGV that
resulted from accessing text() whilst the QTreeWidgetItem was being
destroyed. The code for removing intervals when a new ride is selected
no longer destroys and recreats MainWindow::allIntervals (which was also an
artefact of the original code to avoid a SEGV).
2009-12-13 13:07:17 -05:00
Sean Rhea
102e83a4db delete MainWindow on close 2009-12-13 12:53:57 -05:00
Sean Rhea
0c79af34c3 remove global mainwindow pointer from ConfigDialog 2009-12-13 11:32:39 -05:00
Sean Rhea
e7fcf941f1 add parent pointer 2009-12-12 22:08:29 -05:00
Sean Rhea
2f599a0a8d store ptr to MainWindow in PMWindow
I'm going to need it later when I add the ability to switch
from BikeScore to DanielsPoints.
2009-12-12 17:35:04 -05:00
Mark Liversedge
7663f220a8 Interval features and new GC file format 2009-12-12 11:41:35 -05:00
Sean Rhea
a4109494bd introduce MainWindow rideSelected signal
...and use it to update the various tabs when a ride is selected.
2009-12-10 13:13:10 -08:00
Sean Rhea
3d92d49308 call computeMetrics, not htmlSummary 2009-12-10 11:11:24 -08:00
Sean Rhea
a2b21fb908 add RideSummaryWindow
This change allows us to connect the zonesChanged signal to the ride summary,
so that we don't have to call ride->htmlSummary as a special case whenever
we call zonesChanged.  It will also come in useful later when I introduce a
rideSelected signal.
2009-12-10 11:05:10 -08:00
Sean Rhea
96671b5cf3 rename function 2009-12-10 10:16:58 -08:00
Sean Rhea
381d146428 new zonesChanged signal 2009-12-10 10:16:58 -08:00
Sean Rhea
de854eb79a public zones in MainWindow is const 2009-12-10 10:16:58 -08:00
Sean Rhea
a48044351c ConfigDialog gets ptr to zones, not ptr to ptr 2009-12-10 10:16:58 -08:00
Sean Rhea
327cc57c1c RideItem::zones is just a pointer
...not a pointer to a pointer.
2009-12-10 10:16:57 -08:00
Sean Rhea
ed0fc60783 zones ptr is never null 2009-12-10 10:16:56 -08:00
Sean Rhea
eba4b30de3 remove duplicate addZoneRange function
The cp argument wasn't being used, so just call the one that
doesn't take a cp argument.
2009-12-10 10:16:56 -08:00
Mark Liversedge
fa2717bd67 Fix Stress.Cache refresh on wrong tab 2009-11-28 11:51:11 -05:00
Mark Liversedge
257c53b04f Remove Notes Tab and place notes on Summary Tab
Adding splitter for the ride summary/notes layout
2009-11-27 18:19:18 -05:00