Compare commits

...

902 Commits

Author SHA1 Message Date
Mark Liversedge
73a354156d VERSION 3.6 DEVELOPMENT BUILD JULY 2021
.. marking up for release of a new development build.

[publish binaries]
2021-07-09 14:37:30 +01:00
Mark Liversedge
cb092b9d73 Interval Metric config becomes Favourite Metrics
.. Unifying the metric config to "Favourite" metrics that are
   used on the interval sidebar, compare pane and trends popup.
2021-07-09 12:56:14 +01:00
Mark Liversedge
722588f1db Remove RideSummaryWindow configuration pages
.. now the RideSummaryWindow is deprecated we no longer need
   to configure the metrics / bests being displayed on it.
2021-07-09 11:20:29 +01:00
Mark Liversedge
9d6e08547f Deprecate RideSummaryWindow
.. the ride summary on analysis and trends is now replaced by
   the overview dashboard.

.. since RideSummaryWindow uses html to deliver content via
   an embedded web browser it had become unwieldy and the
   UX was klunky and static.

.. additionally the code was unwieldy and difficult to
   maintain and update when new feature were introduced.

.. this is a happy day, goodbye and farewell.
2021-07-09 09:02:50 +01:00
Alejandro Martinez
39a7e67085 Add parent widget to AddPerspective dialog to stop it being hidden
raise doesn't fix the issue on Windows
2021-07-08 18:24:47 -03:00
Mark Liversedge
c4d6ee065e Raise the AddPerspective Edit dialog to stop it being hidden 2021-07-08 19:49:26 +01:00
Mark Liversedge
b738038907 Trends view perspective filter
.. applies to all charts in the perspective, so you can create
   a perspective called "Running" and set the filter to "isRun"
   and all charts in the perspective will only show data from
   runs.

.. updated charts on Trends view to honor the perspective
   filter, as below:

   * Overview
   * Trends
   * User Chart
   * Treemap
   * Critical Power
   * R Chart
   * Python Chart
   * Histogram - for metrics
   * Summary - no change as deprecating shortly

.. renamed the HomeView to TrendsView in line with some of the
   other recent name changes. The class names were set over 10
   years ago and no longer reflect the UI concepts.

.. New signal: GcWindow::perspectiveChanged(Perspective *)

   When the chart is moved from one perspective to another, likely does
   not need to do anything on Analysis view, but on Trends view its
   quite likely the filter has changed, so refresh is needed.

.. New signal: GcWindow::perspectiveFilterChanged(QString)

   When the perspective filter is updated this signal is called but
   only on trends view since it doesn't really matter on Analysis
   from the charts point of view.
2021-07-08 15:17:14 +01:00
Mark Liversedge
3bc1391cb1 Fix display artefacts from last commit
.. although its sub-optimal, this fix resolves rendering issues
   on startup in analysis view (blank chart bar and related).
2021-07-06 18:16:36 +01:00
Mark Liversedge
73e174a982 Startup Analysis view select perspective
.. at startup the perspective selection logic for analysis
   view was not called and just defaulting to the first
   available perspective in the analysis view.
2021-07-06 17:23:17 +01:00
Mark Liversedge
20d34664e3 Analysis View Switch Perspective automatically
.. when creating a perspective you can now add an expression
   that will be evaluated when a ride is selected in the sidebar.

.. For example you can create a perspective "Running" with an
   expression "isRun". When a run is selected on the sidebar
   we automatically switch to the running perspective.

   If now, whilst on the "Running" perspective you select say
   a cycling activity, the expression will evaluate to false,
   so we will look for another perspective to switch to.

   If no expression is found to switch to, and the current
   perspective has an expression that is evaluating to false
   then we just switch back to the first perspective in the
   list (you can reorder them if needed).
2021-07-06 15:39:47 +01:00
Mark Liversedge
8c5144657c Export perspective filename
.. add the view type it is for to the default name, so at least
   the user will have some clue when sharing etc.
2021-07-05 12:00:52 +01:00
Mark Liversedge
eadc3a78bf Honor type of Perspective when import/exporting
.. the perspective type is added to the xml when exporting and
   also when saving state.

.. on import the perspective type is checked to make sure we
   don't import trends views into activities and vice versa.
2021-07-05 11:42:39 +01:00
Mark Liversedge
68e7fcacb4 Perspectives - Part 4a of 4
.. Import and Export perspectives to an '.gchartset' file
   as XML data.

.. Added to MainWindow's View menu and the Manage Perspectives
   dialog.
2021-07-05 11:06:02 +01:00
Mark Liversedge
4e570230a7 Standard Colors Tweaking
.. User Chart annotation labels now work when a standard color
   has been selected.

.. The name of the standard color "CP Curve" has been renamed
   to "Mean-maximal Power" to more accurately reflect how it
   is used in the Critical Power standard charts.
2021-07-04 22:04:26 +01:00
Mark Liversedge
830317ef03 Search Standard Colors in Appearances options
.. so its easier to find the one you want to set.
2021-07-04 21:30:44 +01:00
Mark Liversedge
1335786957 Remove debug
.. erroneous updates left in last commit. Apologies.
2021-07-04 21:13:44 +01:00
Mark Liversedge
271c0a979a Add search when choosing standard colors
.. there are lots of standard colors and they're hard to scroll
   through. A new search box makes it easier to find them.

.. this is in anticipation of adding a lot more standard colors
   for things like W', Pmax, Weight yada yada
2021-07-04 21:10:08 +01:00
Mark Liversedge
1026145f9b Perspectives - Part 3 of 4
.. New dialog to rename, add and remove perspectives, re-order them
   and move charts from one perspective to another.

.. The focus is on managing perspectives and not the general UI
   layout (ie. add/remove charts and rename things etc) this is
   likely to be something this morphs into, but for now lets
   keep it simple (this was complicated enough !)

.. also found a SEGV in CP chart when hover in allplot before the
   CP chart has been notified in another perspective-- there are
   likely to be a few of these kinds of bugs around.
2021-07-04 15:34:40 +01:00
Alejandro Martinez
fe2643eb65 Workout Editor - Change the representation of 1 point workout
When you start with a single click the workout is represented graphically
as a ramp from zero, but the qwkcode and erg code generated starts with a block.
Additionally an initial ramp starting from zero neither works.
This was reported at the forum and, although it is mostly cosmetic, it can be
annoying, so this change fixes both.
2021-07-03 18:47:35 -03:00
Alejandro Martinez
6ecff9e2d1 Travis-ci - build only to generate binaries
[skip appveyor]
To spare scarce Travis-ci credits.
2021-07-02 11:54:56 -03:00
Alejandro Martinez
9023014833 Change build status from travis-ci.org to travis-ci.com
[skip ci]
2021-06-29 17:24:41 -03:00
Alejandro Martinez
c7599be666 Disable RideWithGPS upload
It doesn't work since v1 API was deprecated and v2 support is not complete,
so let's disable it for now.
Related to #3371
2021-06-29 09:47:07 -03:00
Alejandro Martinez
0dd9d045cd Disable dynamic reapply of DataFilter
When activities list is filtered, RideNavigator lose the focus on selected
activity if the filter is reapplied on rideSelected.
Fixes #3341
2021-06-27 19:41:27 -03:00
Alejandro Martinez
7540b69eea Fix error in German translation causing non-refreshing R Chart in Trends
Difference between R Chart in Activities and Trends is a blank at the end
of the name, which is not preserved in German translation so new R Charts in
Trends are created as Activities charts.
Fixes #3427
2021-06-26 10:38:33 -03:00
Alejandro Martinez
de3fadf8e7 Disable extended selection mode in Train workout list
It is unnecessary, since Train mode supports only 1 workout at a time,
and single selection makes it easier to scroll the list in tablet mode.
Related to #3268
2021-06-25 19:43:36 -03:00
Alejandro Martinez
a70231c4bb Update Workout_Control.png for v3.6
[skip ci]
2021-06-25 17:26:39 -03:00
Alejandro Martinez
0262d5f968 Disable VideoSync when using Qt5 video
It is not ready to use.
2021-06-25 14:00:40 -03:00
Alejandro Martinez
6919ade54e Fix build error on VideoWindow when building with Qt5 video
This bug was introduced by #3764
Fixes #3907
2021-06-25 12:04:57 -03:00
Alejandro Martinez
0243aedded Athlete Library setting - Avoid warning when there is no change
Current GC root can be different from athlete library setting
due to GC startup logic and the spurious warning is confusing.
Revert to previous value, not current GC root, if the user chooses to.
Fixes #3903
2021-06-24 19:32:52 -03:00
Mark Liversedge
32a6089f50 Fix SEGV in validation of xdata function
.. xdata() caused a crash in the validator since it tried
   to dereference parameters and caused an index assert.
2021-06-23 12:35:10 +01:00
Mark Liversedge
58c5cc20d2 Trends Chart support named colors
.. better support for themes, trends chart colors update
   based upon the theme if we use named colors.
2021-06-23 10:55:24 +01:00
Mark Liversedge
8753032170 Tidy up perspective selection
.. and setting current ride / date ranges. fixing a regression
   introduced with the recent perspective changes.
2021-06-22 18:40:59 +01:00
Mark Liversedge
e448aa1a8d Fixup date range selection on trend view
.. broken in part 2 of the perspectives updates.
2021-06-22 17:46:29 +01:00
Mark Liversedge
58c8b98f47 Fix UserChartData SEGV when no ride selected
.. edge case but common for new users with no data.
2021-06-22 17:24:24 +01:00
Mark Liversedge
586033c6a5 Fix Chart tab color when dragging
.. it always had a black background instead of the color
   of the tab being dragged, which was jarring with a
   light color scheme.
2021-06-22 17:01:04 +01:00
Mark Liversedge
154077793e Move source for Perspective
.. originally Charts/HomeWindow.{cpp,h} now moved to
   Gui/Perspective.{cpp,h} since its a core Gui element.
2021-06-22 15:53:17 +01:00
Mark Liversedge
07d835e076 Perspectives - Part 2 of 4
.. Perspectives can now be added and are saved and restored on
   startup and close.

.. A new config file 'xxx-perspectives.xml' replaces the old
   'xxx-layout.xml'.

.. HomeWindow has been renamed Perspective across the code.
   With TabView now taking responsibility for loading and
   saving configuration.

.. This is a fairly big refactor that touches upon a number
   of events at startup, including how sidebar events are
   propagated across charts and tabs. And will need a reasonable
   amount of testing before release.

.. Separately, I also fixed a SEGV in the Python chart when
   no ride is selected (an old bug not related to this).
2021-06-22 14:51:13 +01:00
Mark Liversedge
3888246b42 Perspectives - Part 1 of 4
The user will be able to create collections of charts as opposed to
the single long list of charts in each of the four views.

This first update:

.. update toolbar to include a perspective selector

.. also updated aesthetics of toolbar (mostly icons on hidpi)

Further updates pending will:

.. part 2 will introduce code to add, save and restore perspectives

.. part 3 will introduce code to manage and rename perspectives

.. part 4 will introduce new defaults for each perspective

A future enhancement may allow the perspective to be aligned to a
specific sport in activity view, so the perspective can be selected
based upon the sport of the activity being analysed. But that will
not be part of these changes.
2021-06-18 16:15:56 +01:00
Alejandro Martinez
061cb9328c Fix Elevation - Add MapQuest API Key as DP parameter
MapQuest API Key is a new DP parameter to allow users to enter one
and have personal transaction limits.
When empty it defaults to GoldenCheetah API key as before.
Fixes #3900
2021-06-14 19:04:34 -03:00
Alejandro Martinez
c3a1afa0a0 Reduce stack use of DataFilter evaluator
Making Result parameter of Leaf::eval a const reference.
Fixes stack exhaustion on Windows while evaluation nested formulas.
2021-06-13 09:47:26 -03:00
Alejandro Martinez
968bdc1d17 Train WorkoutWidget and WorkoutWizard - Avoid crashes when no zones
Even when zones are created for new athletes, better be safe.
2021-06-11 14:19:11 -03:00
Mark Liversedge
d17d3c59a3 VERSION 3.6 DEVELOPMENT BUILD JUNE 2021
.. marking up for release of a new development build.

[publish binaries]
2021-06-08 08:23:18 +01:00
Alejandro Martinez
99f73bdba5 Use translated version of Bike in sports list for zones
[publish binaries]
2021-06-06 15:03:19 -03:00
Alejandro Martinez
df08c607d1 Update translations files and fix minor translations related issues
There is a pending issue: Class 'GColorDialog' lacks Q_OBJECT macro
[publish binaries]
2021-06-06 11:48:47 -03:00
Alejandro Martinez
2b063c91c2 Ensure default sport for zones 2021-06-06 05:28:40 -03:00
Alejandro Martinez
6e4dba86f0 Fix crash at startup when there is no power.zones 2021-06-05 19:56:15 -03:00
mp
316e62d27c Added missing include <limits> header for std::numeric_limits (#3894) 2021-06-04 11:04:18 +01:00
Alejandro Martinez
a5043d1b59 Identify common endurance sports names for endurance athletes
including translations
To ensure consistency in zones assigment and sync.
Other sports can be added as usual.
[publish binaries]
2021-06-02 11:11:50 -03:00
Alejandro Martinez
0ba409a192 CPPlot - Display model parameters in Pace units for Row
Missing from previous commits
2021-05-29 19:03:23 -03:00
Alejandro Martinez
aed30180f6 Add Pace Row to LTMPopup
Missing from previous commit
2021-05-29 10:47:58 -03:00
Alejandro Martinez
773e5a21b0 Add Row to default sports and Pace Row (min/500)
Fixes #3892
2021-05-27 21:08:34 -03:00
Alejandro Martinez
0d0cf42918 Enable specific HR and Power zones for other sports
Any sport present in the list of possible Sport field values
can have its own HR and/or Power zones like Run before.
Otherwise Bike zones are used as default for backward compatibility.
Fixes #3280 combined with last 3 previous commits.
[publish binaries]
2021-05-26 19:04:32 -03:00
Alejandro Martinez
5472b0b50b Fix missing replacement in LMPlot.cpp from last commit
It goes undetected by MSVC, weird.
2021-05-26 17:09:33 -03:00
Alejandro Martinez
3a07cc52d7 Generalize Power Zones for any sport
All sports defined as values for Sport metadata field can have
specifics Power Zones and default to Bike zones otherwise.
Similar to current power zones for Run.
Part 3 of #3280
2021-05-26 16:15:27 -03:00
Alejandro Martinez
380dc47ac7 Generalize HrZones for any sport
All sports defined as values for Sport metadata field can have
specifics HR Zones and default to Bike zones otherwise.
Similar to current HR zones for Run.
Part 2 of #3280
2021-05-25 20:28:15 -03:00
Mark Liversedge
815496a8d1 Flatten Train View Load Colors
.. the alpha channel was too agressive for light backgrounds and
   was washed out and unpleasant on the eye.

.. reduced the alpha blend to make it flatter and cleaner.
2021-05-23 10:07:28 +01:00
Mark Liversedge
6486e89145 Fix show efforts on CP Plot
.. showEfforts was not being initialised when the plot was created
   which resulted in sustained efforts always being shown regardless
   of the chart setting.
2021-05-22 15:24:47 +01:00
Mark Liversedge
d83041282d User Charts and the Configured Colors - Part 2 of 2
.. themes are now either light or dark, which selects the default
   color set used to set the standard colors.

.. users can of course maintain them, but when applying a theme
   there is no need to adjust now (some of the default colors looked
   poor on a light background).

.. there is a line of code in main.cpp to dump the current colors to
   stderr so it can be cut and paste into colors.cpp -- this makes it
   much easier to use the UI to maintain colors and update the code.
   this is obviously just for developers.

.. letting users define their own themes could be done later, but feels
   like overkill at this point.
2021-05-22 15:11:20 +01:00
Mark Liversedge
176226545f Logical operator is && not "and" in C++
.. bit of a brain fart that g++ clearly allows, whilst MSVC doesn't.
2021-05-22 13:10:45 +01:00
Mark Liversedge
df1d83c357 User Charts and the Configured Colors - Part 1 of 2
.. When creating user charts we can now select a standard color as
   configured in appearances.

.. This means users can select e.g. the "Power color" when plotting a
   power series.

.. The second part of this commit will update the themes to ensure that
   the standard color settings are appropriate for the background (as
   they are inappropriate currently. e.g. Critical power is always
   yellow, even on a light background).
2021-05-22 12:49:55 +01:00
Alejandro Martinez
20a7d74c16 Air density calculator: add ability to use relative humidity
Fixes #1383
2021-05-21 20:28:15 -03:00
Mark Liversedge
489c499ba7 isinf() not std::isinf()
.. sigh. should have been in last commit to fix the one prior.
2021-05-21 13:36:05 +01:00
Mark Liversedge
95e5cb3bc4 isnan() not std::isnan()
.. fixup last commit.
2021-05-21 12:42:38 +01:00
Mark Liversedge
9a0b6e0bc7 qSort is deprecated, use std::sort
.. mostly straight replacement as qt5 containers are templated
   and qSort semantics are the same as std::sort

.. prepping for Qt6.2 which is due late 2021.

Signed-off-by: Mark Liversedge <liversedge@gmail.com>
2021-05-21 11:30:46 +01:00
Alejandro Martinez
44f49c54d6 Air Density Calculator - Use Average Temp from current activity
When available. Fixes #1386
2021-05-20 20:24:22 -03:00
Ale Martinez
bee7d48ac2 DropBox - Report message on connection error 2021-05-18 13:35:39 -03:00
Ale Martinez
d7e1747a2b Python API - setTag/delTag/hasTag manage overrides
Continuation of previous commit. Caveat is value argument is string
so the user is resposible of providing proper string representation
of the value for overrides and numeric metadata.
2021-05-18 13:03:07 -03:00
Alejandro Martinez
9315b301d7 Add setTag/delTag/hasTag to Python API
For Metadata handling in Python Data Processors, similar to set/unset/isset
in formulas, but no metric overrides for now.
- setTag(name, value[, activity])
- delTag(name[, activity])
- hasTag(name[, activity])
All return boolean success indicator and activity is optional,
defaulting to current activity.
setTag and delTag are enabled only in Python Data Processors, mark
the activiy as modified and notify metadata has changed on success.
Fixes #3639
2021-05-17 19:32:41 -03:00
Mark Liversedge
4d5841e4b1 Move Boost GeometricTools_BSplineCurve.h to contrib
.. it is not our code.
2021-05-16 12:27:17 +01:00
Mark Liversedge
e1ac00b860 Move contributed sources to contrib directory
.. Makes it easier to identify code that has been snaffled in from
   other repositories and check licensing

.. The httpserver is now no longer optional, since it is delivered
   as contributed source.
2021-05-16 10:33:09 +01:00
Alejandro Martinez
3d07321b2f RideNavigator - Use uniform row height (#3890)
Variable row height, depending on activity calendar text being empty or not,
provokes refresh issues when calendar text changes from empty to not, or
viceversa.
Instead to try to solve this issue with specific code, I think it is
simpler, and more regular from UX point of view, to have a uniform row height.
After this change row height depends on metadata config only:
1) a new RideMetadata method is introduced (hasCalendarText) to check if
   Calendar Text can be non empty, i.e. if some field has diary checked.
2) RideNavigator uses this method when config changes to set hasCalendarText
   member used to determine row height for all activities.
Fixes #3074
2021-05-15 16:55:38 -03:00
Mark Liversedge
c4204231cc Fix Train Multi/Poly Regression compiler warnings
.. they hide real issues.
2021-05-15 15:24:31 +01:00
Mark Liversedge
f279898bd5 Fix Realtime widgets compiler warnings
.. they hide real issues.
2021-05-15 14:50:22 +01:00
Mark Liversedge
6560194db4 Fix LM compiler warnings
.. they hide real issues.
2021-05-15 14:30:40 +01:00
Mark Liversedge
aaa6bac5ed Fix Colors.cpp compile warnings
.. they hide real issues.
2021-05-15 14:07:08 +01:00
Mark Liversedge
a4e9b52eeb Fix TTSReader compiler warnings
.. spurious warnings hide real issues.
2021-05-15 12:58:56 +01:00
Mark Liversedge
ae2df3a271 Fix KurtInRide/SmartControl compiler warnings
.. they hide issues that are real.
2021-05-15 12:42:25 +01:00
Mark Liversedge
ce920126f5 Fix Imagic compiler warnings 2021-05-15 12:32:34 +01:00
Mark Liversedge
cebf46a99d Disable warning messages for BSPline/FixGPS
.. on a mission to clean up compiler warnings that hide real issues.
2021-05-15 12:19:52 +01:00
Ale Martinez
f072a1ad6e EPM Parser - Don't overwrite distance from position records
For older files with dpf match is not exact, missing coordinates
can be completed using FixGPS.
2021-05-12 19:09:59 -03:00
Paul Johnson
f77f040ae7 Additional Median Option in "Fix Power Spikes" Data Processor (#3887) 2021-05-12 13:43:26 -03:00
Ale Martinez
07c532a588 EPM Parser - Compute distance for old files with dpf 2021-05-09 14:24:19 -03:00
Ale Martinez
6572bbb52a Train View - Auto select matching media and videosync files
When a workout file is selected.
Fixes #3886
2021-05-08 19:06:59 -03:00
Nils
3e153f03ac Velo Hero: Use HTTP with TLS and custom User-Agent (#3885) 2021-05-08 18:07:49 -03:00
Ale Martinez
ac606065aa Train View - Save workout name as Route metadata
Fixes #3630
2021-05-08 17:05:09 -03:00
Ale Martinez
0a03aac7e8 Train View - Cancel any pending start on disconnect 2021-05-07 10:46:05 -03:00
Ale Martinez
79f4bb2815 Train View - Optional countdown for start workout
Configurable in Train Preferences, defaults to 0, which is current behavior.
When countdown > 0, start is delayed and countdown is displayed in
notifications panel.
Fixes #3632
2021-05-06 20:11:46 -03:00
Ale Martinez
d932811c97 PMCData - create a DataFilter for eval at refresh time
To avoid crashes at refresh time on PMC formulas with an expression argument
like sts(BikeStress ?: TRIMP_Zonal_Points)
Fixes #3788
[publish binaries]
2021-05-05 18:29:47 -03:00
Ale Martinez
1e1ddfaaee PMCData - use the metric case when expression is a metric name
Since a simple metric name is the most common use case for PMC functions,
it is useful to avoid the need to call the expression evaluator at refresh
time, for better performance and to sidestep #3788.
2021-05-04 20:38:54 -03:00
Ale Martinez
3e6214624d Activity Chart - don't smooth when secs are not available
This is an edge case, but let's avoid a weird behavior.
2021-05-02 17:13:46 -03:00
Ale Martinez
88060faab6 Activity chart full replot on x-axis change
This is a continuation of previous commit, since x-axis change affects
the is blank status we need a full replot to consider cases when the
selected activity lacks time or distance.
2021-05-02 09:53:54 -03:00
Ale Martinez
6c2a435759 Set Activity plot to Blank when the x-axis series is not present
Fixes #3588
2021-05-01 21:09:26 -03:00
Ale Martinez
c9e01353a0 Equipment update on Strava download
This is a simpler and more efficient version of 96c8508, no need to use
getGearById service since SummaryGear is already available in DetailedActivity
2021-04-30 21:26:02 -03:00
Ale Martinez
9ff6d6ab97 Allow Device metadata field changes like standard fields
This change remove deviceType_ private member from RideFile
replacing its use by access to "Device" metadata field.
The objective is to remove limitations  s.t. update using set
in formulas and ride navigator immediate refresh.
Fixes #3760
2021-04-30 12:51:08 -03:00
Mark Liversedge
d27327d8c1 Improve error message for measures field names
.. when trying to find the right values for the measures() datafilter
   function e.g. measures("Body", "weight") it was not clear why this
   was failing. Added more information to the error message.
2021-04-30 15:23:38 +01:00
Ale Martinez
55e9cdb444 Restrict Scope authorization to drive.file for Google Drive
Full drive access was revoked and drive.apps doesn't work,
bug drive.file is enough for our purposes.
Fixes #3440
2021-04-26 13:08:56 -03:00
Ale Martinez
46be903027 Set HTTP User Agent in Web chart and OAuth dialog
To avoid Google authentication problems.
Fixes #3876
2021-04-26 11:58:42 -03:00
dconka
6c960f11c3 Add more Sigma Sport devices (#3877)
Add new SIGMA Devices ROX 11.1, ROX 2.0, ROX 4.0 and missing PURE GPS
2021-04-26 09:31:22 -03:00
Ale Martinez
96c8508da2 Get Equipment name on Strava download
When the downloaded activity has gear_id, details are retrieved
and name is added to Equipment metadata field.
[publish binaries]
2021-04-23 19:55:51 -03:00
Ale Martinez
37c1ec4bd8 Sync Strava trainer tag
A new Trainer metadata field is included in metadata.xml
On upload a checked Trainer metadata field, or the presence of
TRAIN XData series, marks the activity as trainer.
On download the trainer flag is used to update Trainer metadata field.
2021-04-23 18:11:25 -03:00
Ale Martinez
5540160d3f Sync Strava commute tag
A new "Commute" tag of type CheckBox, added to Workout Tab,
is used on Strava Sync.
Fixes #3700
2021-04-21 19:49:57 -03:00
Alejandro Martinez
2536bafcb2 Tidy up issue template [skip ci] 2021-04-21 18:38:36 -03:00
Alejandro Martinez
8de66b8f2b Update issue template [skip ci]
Let's try to make it more explicit...
2021-04-21 17:59:39 -03:00
Ale Martinez
2cbf324a26 Upgrade Python to 3.7.10 for Travis-ci Linux builds
[skip appveyor]
Python 3.7.9 AppImages is not available anymore.
2021-04-21 12:53:20 -03:00
Ale Martinez
4c7bdc3963 Add context help for Training Preferences and AddDeviceWizard
[publish binaries]
2021-04-21 11:51:07 -03:00
Ale Martinez
133364e597 Fix startup crash on Windows/Linux with HighDPI monitors
The problem is setStyle being applied before button creation...
This bug was introduced in c15d1bc, sorry.
2021-04-20 19:07:55 -03:00
Ale Martinez
39d19e8c1a TrainSidebar - Delay setWhatThis after addWidget
This is a complement of 5a1bd1a, a user is reporting a crash in
Widget::setSyleSheet on Windows at startup after that commit.
I cannot reproduce the issue, but since that change was modeled
after LTMSidebar, lets try to avoide the issue making it even more
similar. This way, the widget already has a proper parent when
HelpWhatsThis is added.
2021-04-19 14:34:13 -03:00
Ale Martinez
f0f1b13754 Deprecated defaultString from DeviceConfiguration
It is not used anymore.
2021-04-18 22:03:57 -03:00
Ale Martinez
de10c10a50 AddDeviceWizard - Add Virtual Power Name to final step
For clarity sake, we may add some validations and warnings later.
2021-04-18 21:05:47 -03:00
comediebenji
5d666c8233 Correcting bug with quote character in workout Textevents and ZWO export (#3872)
Add protection for all XML special characters in workout Textevents and ZWO export
2021-04-18 18:22:34 -03:00
grauser
696a04e8a0 Fit : Add Garmin Edge 130/130Plus 2021-04-18 10:22:24 +02:00
Ale Martinez
e261794992 AddDeviceWizard tidy up
Add recommendation to pair only FE-C sensor for FE-C devices
Group Custom Virtual Power settings, move Name and Create button,
rename for clarity and enable only when Name is not empty.
Remove compiler warnings.
Fixes #3697
2021-04-17 20:40:46 -03:00
Alejandro Martinez
465ec039a2 Enable SportTracks debug as a runtime option (#3869)
It can be enables adding:
--debug-rules "gc.sporttracks.debug=true"
to the command line.
2021-04-15 18:40:53 -03:00
Ale Martinez
ea548695b6 deriveExtCPParameters - Initial estimates setup after data verification
deriveExtCPParameters established Initial parameters estimates before
the data verification steps so when data don't meet the minimum
criteria for estimation those initial parameters are returned.
This change moves the initialization step after data verification,
similar to what deriveCPParameters does for the envelope fitting case.
Fixes #3862
2021-04-15 12:21:45 -03:00
Oleksiy Mishchenko
0b3a883303 Read EPOC from Garmin FIT file (#3860)
- Read Garmin/Firsbeat estimation of exercise load based on EPOC
- Add "Garmin Edge 1030 Plus" to the list of known devices
2021-04-14 21:34:04 -03:00
Michel Dagenais
c474dae4b6 Facility to trace all the USB communications (#3855)
A new logging category is added gc.usb, inactive by default, to log all the USB transfers between GC and the USB trainers. It can be activated by changing the logging filter with the --debug-rules option.
2021-04-14 21:01:44 -03:00
Ale Martinez
cb04baf734 Update Context Help for Options/Preferences and ScopeBar
Includes separation of Global/Athlete Options and New SideBar.
[publish binaries]
2021-04-14 12:52:31 -03:00
Ale Martinez
e79b474ea8 Add Context Help to Compare Pane and Workout Control 2021-04-13 14:36:01 -03:00
Ale Martinez
c01b696551 Add Context Help for Python, R, Web, Overview and User charts
Fixes #3868
2021-04-13 13:06:09 -03:00
Ale Martinez
5a1bd1a27e Add Context Help to Train View Sidebar and Charts
Fixes #3866
2021-04-12 23:58:04 -03:00
Ale Martinez
c15d1bc33b Add What's This to Help Menu and Toolbar
To make context help easier to access and promote the use of the wiki.
2021-04-12 18:26:32 -03:00
Alejandro Martinez
a0a9c31641 ConfigDialog - Enable What's this and disable min/max buttons
To make config dialog more similar to athlete config.
's
2021-04-10 19:44:20 -03:00
Alejandro Martinez
5f78616696 RideMapWindow - Fix wiki link and add subdomain to OSM Tile Servers 2021-04-10 17:07:58 -03:00
Ale Martinez
4ed2565b2f Map Chart - allow using apikey in OSM url and some useful defaults
This change adds some useful defaults for Tile Servers A/B/C when not set
and allows to enter full urls including apikey, s.t.:
https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=<your-apikey-here>
so use OpenCycleMap with your own apikey.
[publish binaries]
2021-04-09 16:03:04 -03:00
Ale Martinez
6e77d6bde8 Recognize Paul Johnson
https://github.com/GoldenCheetah/GoldenCheetah/commits?author=paulj49457
2021-04-09 12:34:10 -03:00
Ale Martinez
df1b5fdcaa RideMapWindow - Fix marker icons position for OSM maps
Leaflet.js API uses the upper left corner as reference point while
GoldenCheetah icons, designed for Google Maps API, uses bottom center.
Since all marker icons are fixed size 32x37, this change adds the attribute
iconAnchor:[16,37] to fix positioning.
Fixes #3193
2021-04-09 12:31:13 -03:00
Paul Johnson
378cf95784 New Map Chart display options (#3851)
This change allows the user to independently via the new chart checkboxes to:
- ignore any Power Shading Zones and always draw the red line (Hide Shaded Zones)
- remove the route background yellow line (Hide Yellow Line)
2021-04-09 12:30:11 -03:00
Ale Martinez
2a8678d416 Overview Metric Tile - Enable decorations for Pace related metrics
For Pace related metrics converting back from toString using toDouble
fails and then sparkline, up/down, etc. are not displayed.
This change avoids that conversion to fix this issue and to make code simpler.
2021-04-08 19:27:10 -03:00
Ale Martinez
e3fda3cc0d Overview - Fix up/down in Metric and RPE tiles
Add declaration for variable v inside the loop used to compute avg/min/max
to avoid affecting variable v in the outer scope, this is the minimum change
to fix the problem and the same pattern is present in other tiles.
Without this change up/down is based on the first activity of the same sport
in the previous 30 days, instead of the current one.
2021-04-07 21:11:44 -03:00
comediebenji
a2b95df762 Add "Ramp" qName to ZwiftParser (#3863) 2021-04-07 11:03:57 -03:00
Alejandro Martinez
3f476a8226 Add Polarized option to ZoneOverviewItem (#3858)
Adds a “Polarized” option to Overview Zone tile to chart HR/Power/Pace as 3 zones histogram, it has no effect on Fatigue/WBal zones.
Complements #2555
[publish binaries]
2021-04-04 09:43:08 -03:00
Paul Johnson
92f81ef711 Removed the unused styleOptions from RideMap (#3849)
* Removed the unused styleOptions functions and associated Q_PROPERTY.
* Remove unused dark.css resource
Co-authored-by: Ale Martinez <amtriathlon@gmail.com>
2021-04-02 18:56:47 -03:00
Ale Martinez
e849b4fd81 Workout Editor - round decimal watts for qwkcode and remove cues
Decimal watts, which tipically happens when a workout is scaled,
play havoc with qwkcode, so lets avoid them.
Text cues are not supported either in qwkcode yet, adding them
was my mistake, so I commented out them for now.
Fixes #3846
2021-04-02 14:54:22 -03:00
Ale Martinez
239f66fa6f Enable external links in AboutDialog
Fixes #3856
2021-04-01 10:39:10 -03:00
Ale Martinez
be3cb9d149 Change links to goldencheetah.org to use https 2021-04-01 10:36:11 -03:00
Michel Dagenais
58617cb165 Add debugging options to select the log file, format and rules, and redirect stderr (#3837)
* Add debugging options to select the log file, format and rules, and redirect stderr even on Windows
* unistd.h does not exist on Windows use io.h instead
* STDERR_FILENO does not exist on Windows
* Different strategies and much error checking to redirect stderr on Windows
* Synchronize cerr and stderr with filedes 2 and STD_ERROR_HANDLE
* Some functions like write in Linux and Win32 have slightly different signatures
* Code cleanup, final test to check that fd=2, stderr, qDebug and cerr are redirected
* Remove the file and line number from the default logging format in release mode
2021-03-30 13:17:18 -03:00
Paul Johnson
5c33ffb1d4 Fix compiler warning in MetricSelect.cpp (#3852) 2021-03-28 20:15:04 -03:00
Ale Martinez
b9b6745da5 Upgrade Travis-ci Linux build environment to bionic
[skip AppVeyor]
In preparation for the end of xenial support
2021-03-27 12:21:02 -03:00
Ale Martinez
763235a573 Update INSTALL-LINUX to build v3.6 on Ubuntu 18.04
Once Ubuntu 16.04 reached EOL we will switch Travis-ci builds to 18.04,
this guide is intended to help new developers setting up a local build
environment.
2021-03-26 20:06:42 -03:00
Ale Martinez
e9abe68736 Fix compiler warning: shift of negative value in LocationInterPolation.h
It is harmless but annoying and polutes build logs, lets avoid it.
2021-03-26 18:59:08 -03:00
Ale Martinez
cabe078453 Change LTMPlot curves QHash to QMultiHash
To allow duplicate keys happening when the same metric/measure or
Best/PMC/Banister combination is used in more than one curve.
This is useful when the curves have different filters or trendlines,
for example, and avoids a weird behavior in these cases.
Fixes #2185
2021-03-20 20:19:59 -03:00
Michel Dagenais
2be7a2c86e Compute the altitude incrementally from slope for Manual Slope Mode (#3847) 2021-03-18 23:22:09 -03:00
Ale Martinez
0fe28abe5a Add Time and Percent in Zones I-II-III metrics for HR, Power and Pace
In total 18 new metrics are added and 6 new charts using them are
included in charts.xml (existing users needs to remove their local
copy in config/charts.xml to activate them, reset doesn't work since
it retrieves the server copy which is v3.5 yet.)

Fixes #2555
[publish binaries]
2021-03-18 21:07:10 -03:00
Ale Martinez
5714a74e88 Add configurable Aerobic Threshold Velocity to Pace Zones
Change CVPage to include AeT Velocity/Pace
Default to 90% CV for runs and 97.5% CV for swims
Used to delimit Polarized Zones I and II
Add config(aetv) to formulas
Add aetv to R/Pyhton/Rest APIs
Fixed column widths to fit contents

Part 3 of #2555
2021-03-17 20:55:48 -03:00
Ale Martinez
44c6749d14 Add configurable Aerobic Threshold Power to Zones
Change CPPage to include AeT Power
Default to 85% CP, used to delimit Polarized Zones I and II
Add config(aetp) to formulas
Add AeTP to R/Pyhton/Rest APIs
Fix W' col resize bug in Power Zones settings #2661

Part 2 of #2555
2021-03-17 13:05:20 -03:00
Ale Martinez
b79166fa59 Add configurable Aerobic Threshold HR to HrZones
Change LTPage to include AeT HR and look like CPPage and CVPage
Default to 90% LTHR, used to delimit Polarized Zones I and II
Add config(aethr) to formulas
Add AeTHR to R/Pyhton/Rest APIs

Part 1 of #2555
2021-03-16 19:52:50 -03:00
Alejandro Martinez
fc9e302aef Remember SRM offset from last successful calibration (#3843)
It should be closer to current offset than the fixed default.
Users having issues with calibration can change default value adding:

[srm]
offset=400

to configglobal-trainmode.ini
2021-03-13 18:09:23 -03:00
Michel Dagenais
921e81fad8 Insure that Web pages are deleted before the Web Profile to avoir error messages (#3845)
When exiting, GC complains that the Web Profile is released before Web pages that refer to it with the message: "Release of profile requested but WebEnginePage still not deleted. Expect troubles !".
The Web pages are now released explicitly in the destructor to insure that they are freed earlier than the Profile.
Fixes #3844
2021-03-13 17:16:22 -03:00
Ale Martinez
3308372445 Add getCRC method to detect all changes in UserMetricSettings
When any change is detected, _userMetrics are reloaded and updated in Metrics
factory, but metric recomputation still depends on fingerprint field to avoid
unnecessary recomputation.
Fixes #3838
2021-03-07 19:03:12 -03:00
Ale Martinez
e6b302dd6c Revert "Add getFingerprint method to detect all changes in UserMetricSettings"
This reverts commit c726325af6.
2021-03-07 10:48:07 -03:00
Ale Martinez
e1b8293f01 Revert "Remove unused fingerprint field from UserMetricSettings"
This reverts commit 92d1244b68.
2021-03-07 10:46:34 -03:00
Ale Martinez
92d1244b68 Remove unused fingerprint field from UserMetricSettings
Code cleanup related to previous commit
2021-03-06 20:52:39 -03:00
Ale Martinez
c726325af6 Add getFingerprint method to detect all changes in UserMetricSettings
Fixes #3838
2021-03-06 16:51:31 -03:00
Ale Martinez
209470bf8f Add "Use template Athlete" option to Athlete creation
It copies xml config files from the selected template athlete, if any.
Together with Athlete > Open > New Athlete, Athlete > Delete and
the new Athlete view should make multiple athletes management easier.
Fixes #308
[publish binaries]
2021-03-04 13:53:21 -03:00
Ale Martinez
bc9eaccde2 Update Windows Readme.txt and remove old install scripts 2021-03-04 11:24:36 -03:00
Ale Martinez
2d6cc255ec Fix link to wiki on Windows installer
Fixes #3834
2021-03-04 11:09:45 -03:00
Ale Martinez
58f8d9394d Missing break from previous commit 2021-03-04 10:54:03 -03:00
Ale Martinez
06914d9446 Add Athlete > Delete menu
Allows to delete a closed athlete without the need to exit the program,
it re-uses the logic in ChooseCyclistDialog and removes the AthleteCard
from AthleteView.
2021-03-03 22:27:17 -03:00
Alejandro Martinez
453b05a188 Enable Athlete Open menu to allow creation of new athletes (#3836)
Objective is to allow creation of new athletes, without the need to
exit GoldenCheetah, using Athlete > Open > New Athlete like in v3.5
When a new athlete is created MainWindow emits newAthlete signal
so AthleteView can create the corresponding AthleteCard.
2021-03-03 19:27:43 -03:00
Ale Martinez
ace6760fbb Set parent widget for file select dialog on Measures CSV import
This fixes an annoying behaviour on Linux where the file select dialog
sometimes is not open on top of import dialog.
2021-02-28 13:17:24 -03:00
dconka
da75f0cc38 Update FitRideFile.cpp (#3832)
Add missing SIGMA SPORT Products with consistent format
2021-02-27 19:46:57 -03:00
Michel Dagenais
14b287109f Illustrate trainer maximum resistance versus rider maximum force (#3830)
[skip ci]
2021-02-25 09:03:21 -03:00
Ale Martinez
b44be0897d Implement value(v, metric) for UserMetric
It needs to be overriden like value(metric)
2021-02-23 19:29:56 -03:00
Christoph Wurst
cf31bffed2 Correctly recognize the Sigmasport iD.FREE product (#3745)
The Sigmasport ROX devices do not set a product ID, hence GC shows any Sigmasport fit import as "Sigmasport ROX". The Sigmasport wearable "iD.FREE", however, sets a product ID of 45. This adds specific logic to the fit ride file detection logic, while leaving the ROX default for backwards compatibility.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2021-02-23 19:18:02 -03:00
ericchristoffersen
d84d329a78 Fix VLC Hangs with Intentional State and Ordered Async Dispatch (#3764)
Fix VLC Hangs with Intentional State and Ordered Async Dispatch
Two main parts to this change.
- a thread locked managed player state
  Fixes issue where calls to player could occur in wrong order
- all calls to VLC are made via an ordered Async dispatch.
  Fixes issue where qt must process widgets after stop is called.
  By moving stop off the qt gui thread this permits qt to shutdown
  widgets which eventually allows vlc to stop.
  Since vlc stop is async, and we wish vlc operations to be ordered
  we are forced to put all other vlc operations on the same async
  queue.
Fix #3756
2021-02-23 19:13:15 -03:00
Ale Martinez
8d89ba4e67 Add constants for Axis type to R and Python API 2021-02-22 20:41:28 -03:00
Ale Martinez
276791edb9 No Fortius Calibration on building without LibUSB
Fixes #3827
2021-02-18 20:39:01 -03:00
Ale Martinez
2d64166acd Added "with Barometer" to TCX and GPX creator tag
to force Strava upload of altitude data.
The user can revert to Strava basemap on Strava.
Upload to Garmin Connect was tested for regresion.
Fixes #3824
2021-02-17 10:41:28 -03:00
Paul Johnson
cbe75fae47 Fixes #3439 - Activity start time for imported iBike CSV files is incorrect (#3825) 2021-02-16 10:55:16 -03:00
Ale Martinez
537b6677d3 Fix L/R balance in FIT import
To match the code comment and honor FIT file specification
Fixes #3819
2021-02-15 10:38:00 -03:00
peret2000
980c99cfae LiveMapWidget uses configured zoom (#3823)
I noticed zoom configured in xml file is ignored, and code is always starting with a value of 16 for thee zoom of thee live map widget.
This change uses field of the xml; it was already being parsed but not used, so using it is simple and straightforward
Co-authored-by: Peret <mail@mail.com>
2021-02-13 10:37:01 -03:00
Ale Martinez
cdb117486a Overview Chart Screenshots for the wiki
[skip ci]
2021-02-11 16:11:06 -03:00
Iain Macdonald
01b0e4767b ANT+/FE-C Trainer capabilities request fix (#3818)
Co-authored-by: IainMacdonald <iainmacdonald@rogers.com>
fixes #3784
[publish binaries]
2021-02-05 15:58:25 -03:00
Ale Martinez
0eb8d63d07 Add fallback for Athlete Bodyfat
Computed from FatPercent and Weight when FatKg is 0
2021-02-05 11:08:11 -03:00
Ale Martinez
d59b7d43f4 Add fallback for Athlete Bodyfat Percent
Computed from FatKg and Weight when FatPercet is 0
2021-02-04 21:13:32 -03:00
Ale Martinez
d392984993 Add config(sex) and config(dob) to formulas
To enable formulas like Harris-Benedict basal metabolic rate
or TRIMP variants which depend on sex and age.
Fixes #3523
[publish binaries]
2021-02-01 13:51:51 -03:00
mattipee
c72b81ea84 Fortius "rolling" calibration (#3804)
* Rolling calibration
* Differentiate "Give the pedal a kick" and "Allow wheel speed to settle"
2021-01-29 20:00:38 -03:00
Michel Dagenais
773b076606 Get the Altitude for CRS files even when Fast Forwarding (#3806)
* when CRS workout files are read, the altitude is already derived and precomputed from the gradient for all formats handled. A new function was added, altitudeAt, that accesses this value, avoiding to derive anew the altitude from the gradient in the TrainSidebar main loop, and getting the correct altitude value when FastForward.
* Replaced assert by qDebug in ErgFile.cpp because asserts would needlessly kill the program
Fixes #3805
2021-01-29 18:45:56 -03:00
Michel Dagenais
5dc4ace31d Fix the request - reply interactions with the Fortius (#3801)
* Fix the request - reply interactions with the Fortius

The open command is in fact to get a reply with the version. However, some already queued messages need to be skipped, before the well formed reply message is received. The open command is sent initially, and each time the device is disconnected and reconnected. The procedure to open the device and get the version was then put in a separate function.

When the run command is sent with a specified force, a reply comes back with the force echoed. However, here again, some messages may need to be
skipped before the correct reply comes back.

* Updates based on comments

The first reply is always skipped on the T1932 (64 bytes reply). A notification about the motor not turned on is sent when the version number cannot be read.

* Add a comment for a non obvious if condition
2021-01-28 18:12:00 -03:00
mattipee
0427042709 RealtimeController::setWindResistance() should be passed CdARho, not just CdA (#3800)
* Dynamic wind resistance based on altitude
* Clarity CdA vs CdARho
2021-01-28 09:45:13 -03:00
mattipee
d76701285d Change timing to sleep between send and read (#3795) 2021-01-24 20:29:25 -03:00
mattipee
97ce2989bf LibUsb::OpenFortius - Remove call to usb_set_altinterface() (#3732)
Was known bad on OSX, proved an issue on LINUX (for me), and tested on WINDOWS following its removal
2021-01-24 20:27:45 -03:00
Sigfreid74
d8c21e4070 Change Colours for some data series in Train Telemetry (#3792)
Fixes #3796
2021-01-21 13:53:49 -03:00
mattipee
0d3a8c911a Fortius calibration (#3790)
Added calibration trainer command, delayed check for user stopped pedaling with visual feedback on progress and saved calibration for next use on success.
2021-01-21 09:17:18 -03:00
Ale Martinez
a298715bb5 Fix Crash and copy paste error in WorkoutEditor
The crash is reproducible on Linux starting an Erg workout after another
and it is caused by an array index error due to average arrays not being
cleared on start.
2021-01-16 20:02:20 -03:00
mattipee
1b18ec7eeb Fix force/speed/power calculations for Fortius (#3785)
* Initial correction of force/speed/power calculations for Fortius using information from https://github.com/totalreverse/ttyT1941/wiki
* Use wind speed, rolling resistance and wind resistance value from trainer interface, if provided
* Added FortiusANT's AvoidCycleOfDeath() routine from https://github.com/WouterJD/FortiusANT to limit trainer resistance at low wheel speed
2021-01-16 18:05:33 -03:00
ericchristoffersen
33a4cf517d Move manual modes onto common load timer path. (#3776)
Simplify handling of manual modes so they use the same path and load_timer as the non-manual modes.
This means one less path to maintain and modify.
2021-01-15 20:19:36 -03:00
Ale Martinez
105f15e3e0 FixGaps: improve interpolation of left/right balance for smart recording
Similar to 2b6473d
2021-01-15 11:35:07 -03:00
Ale Martinez
d21a603fa1 LRBalance related metrics check for RideFile::NA
Invalid values are now mapped to RideFile::NA on import,
0 and 100 are valid values and should not be excluded.
Fixes #3473
2021-01-14 20:52:30 -03:00
Ale Martinez
5d510388cf TRAIN - Fix LRBalance from ANT+ channels
LRBalance is left side contribution while the ANT+ messages carries
right side pedalPower contribution, so it needs to be converted.
When not available RideFile::NA is used since 0 means 100% right.
Complementes b29f72d, Fixes #3017
2021-01-14 20:13:22 -03:00
Ale Martinez
0b7d817c2d Estimate CP for Runs - Increase distance precision to 3 digits
Distance is in km/mi and 1 digit is not enough to use timed tests to
exhaustion, for distance based TTs likely this is not an issue.
2021-01-14 20:13:22 -03:00
grauser
2b6473da60 Fit : improve interpolation of left/right balance for smart recording 2021-01-14 21:57:51 +01:00
grauser
cefc2cb81c FIT : add some manufacturers 2021-01-14 21:57:51 +01:00
grauser
b29f72d19c RideFitFile :
- Add Right contribution bit in FIT exported
  - Don't asssume left data if right side not confirmed
  - Plot 0 left/Balance

Fix #3017
2021-01-14 21:57:51 +01:00
Christian Taedcke
75ba4c0e90 Daum: Improve support for more cockpits (#3775)
Add support for 8008 TRS and, using the profile string, delay and sound can be configured

This adds the following functionality for daum:
* if the profile string contains a number or the string sound,
  no automatic cockpit configuration is done, but the information from
  the profile string is used
* if the string sound is present, play the sound when connecting
* if a number is present, use this number as the delay in milliseconds
  between commands. A reasonable number to start with is 50 in case of
  connection problems

This also solves the problem, if the cockpit id is not known by
GoldenCheetah. In this case the profile string can be just set to
e.g. 50_sound and the unknown cockpit id is ignored.
2021-01-14 16:43:54 -03:00
Ale Martinez
1d4e93350a User PIE and BAR Charts honor x-axis Date and Time settings
So labels/categories are displayed in Time/Date format
in a similar way to Line and Scatter charts.
2021-01-13 20:30:26 -03:00
Ale Martinez
1120704073 Add screenshots for the wiki - New Metric Trends Curves
[skip ci]
2021-01-12 21:29:01 -03:00
Ale Martinez
41456b5cc1 Upgraded embedded Python to 3.7.9 for Windows builds
[skip travis]
2021-01-11 19:06:56 -03:00
Ale Martinez
cf745c1200 Regenerate vlc3 cache for Linux AppImage
[skip AppVeyor]
Fixes #3763 "main libvlc error: stale plugins cache ..."
2021-01-07 19:49:15 -03:00
Ale Martinez
89d99ccecf UserData screenshots for the wiki
[skip ci]
2021-01-06 18:03:31 -03:00
willfaust
08ff66a7bd Correct spelling of "optimise" in readme (#3758) 2021-01-06 08:43:00 +00:00
Ale Martinez
dfe4da61d8 Fix GC_VERSION for tag builds
The use of / instead of \ as path separator on cmd script line causes
tag builds lack proper version string and report (developer build)
[skip travis]
2021-01-05 20:29:34 -03:00
Mark Liversedge
3c5d53a5bb VERSION 3.6 DEVELOPMENT JANUARY 2021
.. marking up for development release

[publish binaries]
2021-01-05 13:21:37 +00:00
Ale Martinez
9b52cf6a6c Athletes View - Skip non-athlete directories 2021-01-02 16:44:41 -03:00
Ale Martinez
944f0ba73d Athletes View - Allow athletes without config/avatar.png
In the same way ChooseCyclistDialog and MainWindow do.
2021-01-01 22:11:14 -03:00
Ale Martinez
24203a01ad Remove libpng warning: iCCP: known incorrect sRGB profile
When loading noavatar.png
2021-01-01 22:04:10 -03:00
Ale Martinez
c6c5505610 FitRideFile - don't use deleted swimXdata pointer
Fixes #3740
2020-12-30 10:43:20 -03:00
ericchristoffersen
f251e982ae Fix tts videosync with non zero start distance (#3739) 2020-12-29 20:41:16 -03:00
Ale Martinez
d881a2b3be Add BT40 pair screenshot for the wiki
[skip ci]
2020-12-29 11:05:40 -03:00
Ale Martinez
4e3a258a1c Add Device Wizard - Reword BTLE pair page
For clarity sake.
2020-12-28 21:30:59 -03:00
Ale Martinez
6f79286302 BT40Device: add erg mode support for Tacx ANT over BLE
This is a continuation of 6ca1bd9 and fixes #3319
2020-12-28 20:59:07 -03:00
Ale Martinez
ea1aa13a9b BT40Device - Remove annoying compiler warnings
Introduced with Kurt Kinetic support
2020-12-28 20:57:27 -03:00
Ale Martinez
c25e9f2749 Consider only athletes with config/metadata.xml on v3.6 upgrade
Athletes with default config can be safely skiped without loss of
information in the same way as non athlete folders.
Fixes #3735 for new cases, but users previously affected by this bug
need to manually delete metadata.xml from GC root folder, it doesn't
seem a problem common enough to merit an special treatement.
[publish binaries]
2020-12-26 21:02:55 -03:00
Ale Martinez
5eb519a214 Overview Chart - Allow string values in KPI tiles
This enables the user to display different texts, according to
metrics or metadata conditions, using string valued formulas.
2020-12-26 10:51:37 -03:00
Ale Martinez
61b5fee924 Added Start with last opened Athlete option to config
Default is checked to preserve current behavior, when cleared
the choose athlete dialog will be presented at start.
Workout library setting was moved to Train preferences
page to reduce clutter in General settings page.
[publish binaries]
2020-12-24 11:14:32 -03:00
ericchristoffersen
ae318a43ba Handle tts videosync distance outliers (#3730)
Fixes #3729
2020-12-23 11:02:09 -03:00
Ale Martinez
759c6593cf Measures Download tidy up
Next step would be to refactor MeasuresDownload for simplification
and generalization
2020-12-22 12:36:41 -03:00
Ale Martinez
6f948346a4 Export Chart Image Don't use Native Dialog
Hangs when exporting User Chart Images
Similar to 67801f4, related to #3372
2020-12-19 11:01:04 -03:00
Ale Martinez
e098816f2b Don't allow "_" in user metric name
since it is alread used to replace blanks and breaks some functionality,
for example names with "_" don't appear on column chooser.
2020-12-17 15:52:32 -03:00
Ale Martinez
055833eed9 RideNavigator - Avoid .000 msecs and 00:00:00 in metric values 2020-12-17 11:29:22 -03:00
Michel Dagenais
f0d839c37b Screenshots of training views for the wiki (#3722) [skip ci] 2020-12-16 19:04:08 -03:00
Michel Dagenais
c373e65010 Screenshots for Train view documentation (#3715) [skip ci] 2020-12-14 23:56:53 -03:00
ericchristoffersen
0d57f88ac2 Redo bicyclesim settings layout and typos. (#3714) 2020-12-14 20:56:21 -03:00
Ale Martinez
d5b09a4c9c Measures CSV import - allow values in sexagesimal format
Initial use case is sleep_time from HRV4Training
[publish binaries]
2020-12-14 18:46:45 -03:00
Stefan
afb69d8edb Smooth sidebar icons 2020-12-14 18:46:45 -03:00
ericchristoffersen
603c8cd651 FixSimulated Speed setting now honored in Ergo Mode. (#3713)
* Simulated Speed setting now honored in Ergo Mode.
* Update text and add tooltips
2020-12-14 17:23:15 -03:00
Ale Martinez
983874d599 Measures config - consistency checks for addField and setField
Default to 1.0 for unitsFactor.
[publish binaries]
2020-12-13 20:03:47 -03:00
Ale Martinez
906cffba8e Measures Config - preserve Measures order on save/restore 2020-12-12 17:04:38 -03:00
Alejandro Martinez
af19f31b24 Add Measures configuration to General Settings (#3709)
It allows to add/edit/remove Measures Groups and Measures Fields.
Reset is a rescue option to go back to default configuration.
Fixes #2872
2020-12-11 20:26:48 -03:00
ericchristoffersen
47cb560633 Geoloc double to string precision (#3711)
Fixes #3710
2020-12-11 20:25:46 -03:00
ericchristoffersen
e24d25ff47 Fix VideoSync Errors (#3704)
Fixes #3702
2020-12-10 15:43:46 -03:00
ericchristoffersen
373f3b7a35 Build warnings (#3705) 2020-12-10 11:18:57 -03:00
ericchristoffersen
b887f69a1b Simulated Hypoxia for Train Mode (#3699)
Fixes #3698
2020-12-10 07:41:39 -03:00
David Rio Deiros
80086ace46 Makefile that captures details on how to build GC on raspberry pis (#3695)
[skip ci]
2020-12-09 14:42:31 -03:00
Christian Taedcke
53e19a006d Daum minor code cleanup (#3692)
* Daum: Remove redundant virtual keywords

These function were not involved in any inheritance, so the virtual
keyword is removed.

* Daum: Remove unused parent member

* Daum: Remove redundant destructor

* Daum: Remove default values for contructor parameters

This circumvents problems where e.g. explicit would be necessary.
The constructor is actually only used when all parameters are given.

* Daum: Remove redundant this->

* Daum: Ensure timer only allocated once

Also use nullptr instead of 0.

* Daum: Remove unused includes

* Daum: daumDevice is now a private instance member

There is no need for it to be a pointer or public.
2020-12-04 09:47:03 -03:00
Peter Kanatselis
2d1e36549c Live map with route (#3534)
* Updated LiveMap widget with route
* OSM URL configurable in video-layout.xml file
* Enhanced HTML and JS code
2020-12-03 21:02:44 -03:00
Ale Martinez
763458564c Honor clear selection of media in Train Sidebar
CTRL+Click on a selected media file allows to clear the selection,
lets honor this action to have a way to train without video after
a media file has been selected.
[publish binaries]
2020-12-02 19:12:56 -03:00
Ale Martinez
5f68d2dce0 VideoWindow - Don't show LiveMap when there is no video
Fixes #3621
2020-12-02 18:39:15 -03:00
Christian Taedcke
3c639d3377 Daum: Adapt code for 8008 TRS pro (#3691)
For this a 50 msec delay is introduced before sending each serial
command. This is tested on hardware ond also used be jergotrainer.

Also during initialization there is a delay between each command, so
even slow devices can keep up. As soon as the cockpit type is known,
the delay is set according to the cockpit type.
2020-12-02 18:38:46 -03:00
Christian Taedcke
ec11d90160 Daum: Fix signed byte issues (#3690)
Because of QByteArray, the member bytes a signed char,
so a raw byte of 0x80 is interpreted as -128 and not as
128 as expected by the code.
2020-12-02 18:07:59 -03:00
ericchristoffersen
c49fa4f4d5 Minor ErgFilePlot cleanups. (#3688)
Complement of #3686
2020-12-01 19:26:02 -03:00
Ale Martinez
8c01d6291e Make intervals from JSON files segments in ErgFiles
Since they can overlap
Complement of #3686
2020-12-01 15:51:44 -03:00
ericchristoffersen
34526f2fe9 Readable Segments in ErgFileOverview (#3686)
Model and Display Segments - Fixes #3685
2020-12-01 15:49:59 -03:00
ericchristoffersen
487ec866f5 Fix 3680: Text, Chim and Lap Issues (#3681)
Fixes #3680
2020-12-01 09:44:49 -03:00
Ale Martinez
36df458406 Add reveal control for data series to CP chart
Similar to Scatter chart, to avoid the need to have several instances
for different data series sparing tabbar space.
Related to #2039
2020-11-29 23:00:57 -03:00
Ale Martinez
1b61f076ca Add reveal control for data series to Histogram chart
Similar to Scatter chart, to avoid the need to have several instances
for different data series sparing tabbar space.
Fixes #2039
2020-11-29 16:09:32 -03:00
Ale Martinez
cb37db2281 Export to CSV with UTF8 and ISO date format
For broader support of translations and date formats
Fixes #3613
2020-11-28 17:56:06 -03:00
Ale Martinez
1957404d03 Fix table mode in Metric Trends charts when there is only 1 group 2020-11-28 17:08:52 -03:00
Ale Martinez
90acbedabb Enable Group by TOD in table mode Metric Trends chart 2020-11-28 11:55:48 -03:00
Ale Martinez
56532be1ea Fix #3613 - BikeScore document location
[skip ci]
2020-11-27 10:50:42 -03:00
Ale Martinez
bed5f1e820 Parse Vertical Speed extra native series from FIT files 2020-11-25 20:16:41 -03:00
Daniele Santini
a42ca208b6 Trim TCX files before importing (#3470)
Allows to import TCX files with leading whitespaces, such as those generated by Strava

Fixes #3149
2020-11-25 18:21:54 -03:00
ericchristoffersen
9ff48f067a Fix Lap Bugs (#3678)
Create ergfile finalize for every parser to call.

Consolidate lap init into ergfile finalize.

Consolidate lap distance updates into a single method.

Laps now sorted by location.

Workout with no lap is given bracketing laps.

Fix handling of final lap (falls back on route distance).

FFwd lap on final lap no longer jumps to route start.

AddLap button now actually creates a new lap in lap list,
making it reachable using nextLap and prevLap.

Remove the displayLap field as it serves no purpose.
2020-11-25 13:27:37 -03:00
Ale Martinez
70fa7c0a45 Add Core Temperature series name and use consistently
Fixes #2214
2020-11-25 13:21:44 -03:00
Ale Martinez
e874714f60 Round to the second when importing erg files to Workout Editor
Fixes #2322
2020-11-24 18:03:46 -03:00
ericchristoffersen
71f34634e3 Rotational Inertial for Custom Virtual Power (#3653)
Improve Virtual Power in Presence of Acceleration

Part 1: Rotational Inertial for Custom Virtual Power

This change is only enabled when device is defined with non-zero
Inertial Moment. When Inertial Moment is not defined or is
zero then this change has no effect.

Change adds field to device to hold trainer's inertial moment
in (KG M^2).

This allows power calculation to track energy that passes in
and out of trainer's flywheel so that acceleration and
deceleration power can be reported immediately.

Whenever device sets a new rpm sample a time is
recorded alongside which allows the common controller
to compute change in rpm over time, which allows
calculation of kinetic energy that has entered or
left the trainers flywheels during the duration.

It is a bit of math to determine a correct I for a trainer's
flywheels, especially if the flywheels have different rpms,
hopefully we can add the I values for the current built-in
virtual power trainers.

Part 2: Use average power instead of point power.

Moved numerical integration into its own header, its now used by
bicyclesim and by virtual power. Changed default integrator to
Kahan-Li since in my testing it is stable and converges fastest.

Virtual Power now computes average power since previous sample,
which has the effect of reducing reported power during acceleration
and deceleration.

New advanced virtual power is on with this commit. It seems to work
very well in my testing.

Fixes #3650
2020-11-24 12:19:01 -03:00
ericchristoffersen
afd6552b3b Fix #3669 - Don't copy dual mode files twice. (#3670) 2020-11-23 11:46:48 -03:00
Ale Martinez
8e5a2b42d0 Truncate non integer watts when importing workout files
Fractional watts are not supported by Workout Editor and they
are trucanted for most import formats, this fixes remaining
cases reported by users.
Fixes #3675
2020-11-22 14:00:25 -03:00
Ale Martinez
bf02c868ea Add back to previous lap button to Train bottom bar
Uses RewindLap implemented as part of #3442
[publish binaries]
2020-11-20 20:20:49 -03:00
Eric Christoffersen
25bb4beaa5 Support stateless ergfile location query (#3442)
Remove query state from ergfile and videosyncfile.
Stateful ergfile queries are now made through an adapter.
Implement RewindLap.
Fixes #3416
2020-11-20 20:20:30 -03:00
ericchristoffersen
c187dbe686 Fix3672 - Read out of range when tts has 0 points (#3673) 2020-11-19 06:50:01 -03:00
Ward Muylaert
44fd1885a1 Add ~Mercator projection to overviewitem route (#3665)
Current route tile looks off compared to the map one is more used to,
because it is lacking mercator projection. This commit adds the
spherical pseudo-mercator projection as described on
https://wiki.openstreetmap.org/wiki/Mercator. As mentioned there, the
true elliptical projection is avoided for being more computation
intensive. This is also the case in OpenStreetMap and thus in the full
map view in GoldenCheetah. With this commit, those views match up again.
2020-11-18 19:56:12 -03:00
Ale Martinez
197d320bf8 Add jump to next lap marker button to Train bottom bar
This is an experimental feature, the primitive was available
but currently unused, it seems to have been available from
Computrainer HDC in former versions.
When used with videosync it does a naive extension of the FFwd
implementation, but it seems less precise than without videosync,
some tuning may be required.
2020-11-18 18:45:25 -03:00
Ale Martinez
d17bba8ce1 Add intervals as lap markers in json workouts 2020-11-18 18:41:55 -03:00
ericchristoffersen
fe4301a7e2 Teach ttsreader to process routes and segments (#3668)
* Teach ttsreader to process routes and segments

TTS reader previously ignored routes, segments and strings.
With this change the route name, route description, segments,
segment descriptions are now all parsed into ttsreader object.
With this change the route name and description are assigned to
the ergfile, so route name now appears while riding a tts file.
With this change there is still no place to put segments in ergfile.
With this change none of the new information is assigned into the
activity file.
The segments and segment descriptions are used by tacx software
so user can select a named region of a long ride. Example ride
was >200km long and contained 12 named segments, each with a nice
description. Would be nice to bubble that info up to train mode.

* Translate tts segments into ergfile laps.
Also fix old issues with how laps work in slope mode, especially
with ffwd and rwnd.
Also lap markers are double.
As far as I can tell laps work ok now.
2020-11-18 12:30:05 -03:00
Ale Martinez
aaf6f282b0 Add DistanceRemaining to RealtimeData based on RouteDistance
Fixes #3648
[publish binaries]
2020-11-15 16:54:52 -03:00
riccioclista
f30dd0a9c5 Workout: Save LAP markers in mrc files (#3114)
When saving an mrc file in the workout editor, lap markers are ignored. This fixes it.
2020-11-14 18:11:18 -03:00
ericchristoffersen
d4aebbb441 Fix 3596: Fix display of route elevation. (#3664)
Simplified the meterwidget elevation display loop, bug was that it
was skipping the final route point.

Add minY to ergfile so range of y can be obtained without computing
each time, so can remove search loop from meterwidget.
2020-11-13 09:05:28 -03:00
ericchristoffersen
f47c3003a7 Fix 3498 - truncate distances for display (#3663)
For distance display, better to truncate than to round up.
2020-11-12 21:49:32 -03:00
ericchristoffersen
a7b08c4abf Fix issues 3580, 3582 (#3662)
Fixes for power adjustment:
Fully populate new point from old before rewriting fields.
Prevent power from reducing to zero since after it is zero you
cannot increase it again...
2020-11-12 21:48:43 -03:00
Ale Martinez
a107a0203c Defaults are duplicates when both field and value match
Fixes #3610
2020-11-12 14:44:33 -03:00
qheath
aaa7889172 make the date range of relative seasons (e.g. in Trends) update as time passes (#3546)
* remove unused CompareDateRange::days
* remove unused Season::days
* ensure Season limits are only accessed via accessors
* remove unused Seasons::seasonFor
* add SeasonLength to create relative seasons that end today
* save Season::_length and use it instead of Season::prior
* add SeasonOffset for the start of relative seasons that don't end today
only functional difference: "All Dates" is now aligned on the beginning
of a year instead of starting on the same day and month as today
* use _offset+_length instead of _start+_end for relative season
functional differences:
- in CriticalPowerWindow, relative seasons that don't end today ("All
  Dates", "Last Week", etc) were previously computed with respect to
  QDate.today(); they are now computed with respect to
  myRideItem->dateTime.date(), as other relative seasons ("Last 7 days",
  etc); this is technically a bug fix, but there probably was no one
  using these relative seasons for CriticalPowerWindow anyway
- every call to Season::getStart and Season::getEnd computes a fresh
  value (based on the offset and length specified for the season), so
  relative date ranges refresh when the display refreshes, e.g. when GC
  is open for multiple days (fixes #1751)
* add comments for SeasonOffset/SeasonLength
* Use Season accessors in AthletePages
2020-11-12 11:06:04 -03:00
qheath
9e5980f82c fix LTM Chart to show all events from the date range (#3540)
* when looking for events, consider all seasons that intersect the date range
seasons starting before and ending after were not considered
Fixes #2620
* center event labels on the event mark
if the labels are to the right of the mark, the label of an event at the
end of a date range will not be shown
* code cleaning
loop only once over seasons, instead of twice
2020-11-11 18:17:06 -03:00
Ale Martinez
45345679a6 Fix #3608 2020-11-11 17:56:14 -03:00
Ward Muylaert
c187d4325b Sort routes when they are added to an activity (#3661)
Before this change, when looking at an activity, the routes seemed to
appear in order of creation in the interval section. This patch instead
sorts them by their start time in the activity instead (or by their end
time if the start times are the same).
Note that the routes are also known as segments.
Fixes #2132.
2020-11-11 13:38:41 -03:00
Ale Martinez
7d32bb4446 Recognize Ward Mylaert and Scott Conover 2020-11-10 20:57:22 -03:00
Scott Conover
bbc7a03178 Fix issue #3571: segment matching (#3573)
Fixes the problem happening when a ride crosses the start point of a segment but diverges for some reason then at some point later in the ride the segment is ridden for real. It introduces boolean "resetroute" and sets it to true in two places where where the code needs to reset the segment point and break out of the ride point loop in the case where diverge is found. Then check for this condition at the bottom. Reset the segment index to -1.
2020-11-10 14:27:58 -03:00
Ale Martinez
cec7c4dd52 Don't refresh R and Python charts on intervalsChanged
To avoid the script running twice on ride selection and
interval edition/deletion.
Caveat is when intervals are created via find intervals
the script is not notified until interval or ride selection changes.
2020-11-09 21:07:39 -03:00
Ale Martinez
4273480bf4 Re-enable run script on interval selection in a Python chart
This feature was availabe in v3.5, it is enabled for R charts
and both have selected field on activity interval APIs to exploit this.
Fixes #3660
2020-11-09 17:40:48 -03:00
Ale Martinez
a5252334ef Merge pull request #3657 from ward:manage-filters-up-down 2020-11-08 19:39:15 -03:00
Ward Muylaert
e05cf52446 Add up and down button to NamedSearch dialog
Also know as the Manage Filters dialog. Reordering was not possible in
the interface yet, you were forced to edit the xml file to do any
reordering.
2020-11-08 18:35:32 -03:00
Ale Martinez
1345779cfc Fix typo in MeterWidget
It makes slope text to disappear in the second half of the ride
2020-11-07 18:23:39 -03:00
Ale Martinez
cfd456c798 Reorder musclekg and boneskg when Body Measures are created
They are interchanged by mistake
Fix #3655
2020-11-04 16:17:52 -03:00
Ale Martinez
4af953ee00 Fix ProgressBar percentage in Overview KPI tile when istime
Pending from previous commit
2020-11-03 20:36:56 -03:00
Ale Martinez
617ebc3d82 Fix count in Athlete_Weight metric
It has to be 1 so each activity has equal weight when averaging,
instead of being weighted by duration.
[publish binaries]
2020-11-03 13:27:52 -03:00
Ale Martinez
3e846a3d20 Fix ProgressBar in Overview KPI tile when istime
Pending from previous commit
2020-11-03 13:23:52 -03:00
Ale Martinez
da8341f619 Add istime option to KPI tile in Overview chart
To enable display in sexagesimal format (hh:mm:ss),
similar to istime in User Metrics.
[publish binaries]
2020-11-02 19:20:18 -03:00
Ale Martinez
d3cafc4aed Fix laps in crs files generated by Workout Wizard
Fixes #3652
2020-10-31 19:12:13 -03:00
Ale Martinez
42b37ce017 Avoid Travis-ci macOS build being cancelled generating dmg
[skip appveyor]
2020-10-31 16:19:31 -03:00
Ale Martinez
fc9c116fa4 Separate metric conversion from formating when value is provided
Overview chart needs to do computations with metric values converted
to selected units and format results accordingly, for this purpose
RideMetric::toString(useMetricUnits, value) should not do the units
conversion again, so it is changed to do formatting only and useMetricUnits
parameter is removed.
The original meaning is used only in RideItem where it is replaced by
the composition of toString with value.
Fixes #3647
2020-10-31 11:13:31 -03:00
Alejandro Martinez
a2da081681 Update after_success.sh
travis_wait is a function on build shell, not available on shell scripts
2020-10-30 14:31:32 -03:00
Alejandro Martinez
b6e3ae4c96 Update after_success.sh 2020-10-30 13:06:17 -03:00
Ale Martinez
eb6f111a0d Change include files renamed in f5f38f5 2020-10-28 14:26:17 -03:00
Mark Liversedge
f5f38f54e9 Project Style prefers CamelCase
.. we tend to avoid using underscores (_) in preference for
   camel case. Especially for filenames.
2020-10-28 09:28:26 +00:00
Mark Liversedge
6ed93a22a1 Fix compile failure on case sensitivity
.. e77096d introduced a compile error on O/S where filenames
   are case sensitive.
2020-10-28 08:01:52 +00:00
Mark Liversedge
f4dd2f10bd Revert "Overview Unit Conversion"
This reverts commit 2d446cc9c2.
2020-10-28 07:56:06 +00:00
Mark Liversedge
2d446cc9c2 Overview Unit Conversion
.. don't do metric/imperial conversion again when aggregating
   metrics in a date range.

Fixes #3647
2020-10-28 07:52:04 +00:00
Ale Martinez
4c50c1fb53 Avoid crashes in Overview when a metric not available is referenced 2020-10-25 17:55:35 -03:00
Ale Martinez
83a50db2cb Upload Travis-ci builds to free.keep.sh instead of transfer.sh
[skip appveyor]
transfer.sh service has become very unreliable and it is being
phased out on oct-30, according to the public site announcement.
free.keep.sh offers free uploads up to 500MB with a similar service,
limited to 24hr storage, enough to download build artifacts.
2020-10-25 11:43:24 -03:00
ericchristoffersen
e77096df35 Support Kurt Kinetic Inride and SmartControl (#3636)
* Support Kurt Kinetic Inride and SmartControl
* Teach BT40 about calibration - and kurt kinetic.
2020-10-25 09:25:18 -03:00
ericchristoffersen
f51856a52a Fix Error Setting Custom Wheel Diameter (#3643) 2020-10-25 02:26:01 -03:00
Alejandro Martinez
294bf71f96 Update ISSUE_TEMPLATE.md
[skip ci]
2020-10-24 16:44:13 -03:00
Mark Liversedge
4ab82e9755 Athlete Config Cosmetics
.. tabs in tabs looks fugly, so secondary tabs use underlines
.. background of accounts page was incorrect.
2020-10-23 10:26:29 +01:00
Ale Martinez
b7a56a9dd9 Implement moveSeriesUp and moveSeriesDown for User Charts
To enable series reordering.
2020-10-20 12:12:01 -03:00
Ale Martinez
cde4ec0194 Access global metadata.xml instead of athlete specific one
In remaining places: TreeMapWindow constuctor and APIWebService::listRides
Complements 80d7eed
2020-10-18 20:07:21 -03:00
Ale Martinez
ca191e3163 Initialize Athlete Settings on REST API listAthletes
Required for cvalue to work
Fixes #3627
2020-10-18 17:04:39 -03:00
Alejandro Martinez
d2a530e19e Prevent Windows From Going to Sleep While In Train Mode
Fixes #2324
[skip travis]
2020-10-18 11:32:02 -03:00
Michel Dagenais
4c62c52fc3 Fix a small issue in setPowerScaleFactor (#3634)
If a value was set for the powerScaleCalibration factor, the weight was clipped between 0.8 and 1.2kg. That would be an easy ride uphill for sure.
2020-10-15 00:02:21 -03:00
Michel Dagenais
b2e90c0af6 Remove modal dialog for Fortius disconnect (#3633)
This is the Same fix applied to the Computrainer a few months ago to remove the modal dialog that would be issued in a loop upon connection problems. The modal dialog loop made the interface completely unusable. Now a notification is emitted but the interface remains available.
2020-10-14 23:02:38 -03:00
Ale Martinez
52c1441e03 Implement 2 param value and toString for PeakPace and BestTime
Fix #3629
2020-10-12 15:06:59 -03:00
Ale Martinez
3d1f8ee5fa Fix Data Series constants in library.py
Added GC.SERIES_LPCO, following values shifted by one,
and GC.SERIES_HRV removed.
Fixes #3625
2020-10-07 17:07:31 -03:00
Ale Martinez
1023e599a0 Fix copy/paste error in RideFileTableModel
Fix #3623
2020-10-06 13:09:08 -03:00
Ale Martinez
586ead3638 Avoid Cancel becomming default button on RideImportWizzard
Fixes #3581
2020-10-05 11:48:05 -03:00
grauser
d50e1a8552 FITRideFile : Correct bug for multiple values in record point
fix #3619
2020-10-04 23:03:27 +02:00
Ale Martinez
8c30a6da4a Set Web Page chart color
Fixes #3617
2020-09-29 12:01:21 -03:00
Ale Martinez
a1087c9bb3 Upgrade VLC to 3.0.8
For Windows, Linux and macOS builds.
[publish binaries]
2020-09-28 15:06:13 -03:00
Ale Martinez
e363f57a74 Generate missing configure to build srmio for Linux
[skip appveyor]
2020-09-28 11:04:50 -03:00
Ale Martinez
c61a6d846e Update GC version on info.plist.app 2020-09-27 21:13:50 -03:00
Ale Martinez
22ea3399fe Update srmio download for Travis-ci Linux builds
[skip appveyor]
It is not available anymore on previous location
2020-09-27 21:13:38 -03:00
Ale Martinez
16dfd234e2 Simplify Windows setup script and upgrade to VLC 3
[skip travis]
2020-09-27 20:08:37 -03:00
Ale Martinez
4351c68770 Upgrade to VLC 3 for Travis-ci Linux builds
[skip appveyor]
2020-09-27 14:14:13 -03:00
Ale Martinez
c10b666b55 Travis - Enable VLC 3 on macOS builds
[skip appveyor]
2020-09-27 14:13:41 -03:00
Ale Martinez
0dfa8f0e00 Fix Measures conversion error on Athlete Options
When using imperial units
2020-09-24 15:00:39 -03:00
Ale Martinez
9264d112ef Fix connect error in Live Map Chart 2020-09-23 21:13:24 -03:00
Ale Martinez
5fdf427f39 Change Travis-ci macOS image to 11.3 and use included Qt5.14.1
Temporary workaround for #3611
[publish binaries]
2020-09-23 15:40:42 -03:00
Peter
4c19365e8b Live Map Chart (#3487) 2020-09-22 11:25:14 -03:00
Ale Martinez
28cbf3b943 Override existing watts on power estimators manual call
Similar to other DPs, it is what the users expect and it is easier
to try with different parameters.
When called automatically existing watts are preserved
to avoid accidental overwrite.
2020-09-20 20:58:07 -03:00
Ale Martinez
410b28f4db Apply Bearing fix to Fix Derive Headwind
Same as 5066fa9
2020-09-20 20:18:40 -03:00
Ale Martinez
73e175e0f3 Fix Measures issues and display in reverse order
More recent first intended to avoid the need to scroll to the end
Fingerprint changed to include time to detect changes when adding
more than one on the same day.
Fix inconsistent use of local/UTC dates.
2020-09-15 16:25:35 -03:00
Mark Liversedge
8e84ed280d Only create OpenGL context on Linux
.. MacOS Qt crashes when destroying it, OpenGL is *that*
   broken by Apple.

.. applied to Windows too, despite it not being an issue
   reported there is no value in doing it so removed.

[publish binaries]
2020-09-15 10:58:56 +01:00
Ale Martinez
0d4c289b9e Fix missing QtWebEngineProcess in HomeBrew Qt 5.15.1 deploy
[skip appveyor]
[publish binaries]
2020-09-13 12:34:15 -03:00
Mark Liversedge
f358f335b0 DataFilter - store/fetch values
.. saves/loads values to athlete global area, particularly useful when
   modelling as you can save away parameter estimates that may have
   been expensive to compute, and re-use them across series in a
   user chart.

.. they are not saved across restarts, but we could fix that later if
   they become more useful

.. store("name", value) and fetch("name"). if the named value does
   not exist 0 is returned.

[publish binaries]
2020-09-12 09:59:04 +01:00
ericchristoffersen
1593576cff Apply recent alt fixes to route. (#3604) 2020-09-10 15:16:15 -03:00
ericchristoffersen
5066fa990d Lat and Lon now get DegreesToRadians (#3600)
Bearing calc to geolocation fix bike and running power
2020-09-09 17:23:15 -03:00
ericchristoffersen
a418b601b1 Altitude smoothing fixes (#3599) 2020-09-09 17:21:44 -03:00
Michel Dagenais
01f1e0e9bd Fortius fixes (#3595)
Fix the slope and power values in the Fortius Slope mode

Users have complained about incorrect slope and power values for the Fortius. This was due to a few problems. This commit greatly improves the situation with the fixes that solve the following problems:

- The Fortius protocol is better documented in the comments.
- The pedal sensor is on byte 42, not 46, this prevented the pedal sensor echo to keep the trainer operating normally.
- The slope was converted to uint before being scaled, losing the fraction.
- The trainer most likely reports the torque. It must be multiplied by the speed to get the power.
- The scaling factor for the slope was 2x too high but this did not show earlier because of the pedal sensor problem.
- The period for retrieving data was too fast, most packets were empty, the period was changed from 10ms to 50ms (Tacx software uses 100ms).

GoldenCheetah is now quite usable on my Fortius with those changes. The slope appears too easy and the power overestimated but this is similar to the behavior of this trainer with the Tacx software. It would be interesting to get feedback from users with powermeters to refine some of the coefficients involved.
2020-09-08 20:27:59 -03:00
Ale Martinez
aeb0e142cd Add battery status to Device Info from FIT files
Fixes #2238
2020-09-08 17:50:28 -03:00
Ale Martinez
7cacf01e8d Revert "Add Qt5OpenGL.dll to Windows installer"
This reverts commit b2da0afb83.
Since OpenGL on Windows was disabled.
[skip travis]
2020-09-08 10:37:18 -03:00
Mark Liversedge
e95eb7b39d Only Enable ChartSpace OpenGL on Linux
.. MacOS support for OpenGL is unreliable and there are user reports
   of issues. We will need to wait till Qt 6 for hardware acceleration
   on Metal.

.. Windows support for OpenGL is ok if you use Nvidia GPUs but the
   AMD OpenGL driver is slow and broken. So we disable OpenGL here
   although Nvidia users are potentially being short changed.

.. Hardware rendering really needs to wait for Qt6 for a more complete
   and reliable implementation that has cross platform support.

Fixes #3594
2020-09-08 09:47:40 +01:00
Mark Liversedge
fc3de5f84a No --newgui as MainWindow refactored
.. the concept of a new gui as a replacement for MainWindow was dropped
   in preference for gradually adjusting MainWindow to the new design.

.. this is still in progress, but the 'newgui' concept is dead.
2020-09-08 09:40:17 +01:00
Mark Liversedge
97f58096cb Update README.md
Better grammar and more detail that is relevant to someone new to GoldenCheetah.
2020-09-08 07:00:24 +01:00
Ale Martinez
2fb044e653 Change to Python 3.7.9 for macOS Travis-ci builds
[skip appveyor]
To keep Python version in sync across platforms.
2020-09-05 20:15:40 -03:00
Ale Martinez
de02184079 Change to Python 3.7.9 for Linux Travis-ci builds
[skip appveyor]
Python 3.7.8 AppImage is no longer available
2020-09-05 11:38:44 -03:00
Mark Liversedge
6164dd963f VERSION 3.6 DEVELOPMENT SEPTEMBER 2020
.. marking up for development release

[publish binaries]
2020-09-05 08:20:10 +01:00
Ale Martinez
8c5b416b56 Fix sensor serial number import from FIT files
Type is uint32z according ANT+ specification
2020-09-03 21:32:08 -03:00
Ale Martinez
b2da0afb83 Add Qt5OpenGL.dll to Windows installer
Required by 8b651b5
[skip Travis]
2020-09-02 10:59:53 -03:00
Mark Liversedge
8b651b50dc OpenGL rendering
.. Fetch the version of OpenGL available at startup and use it in
   ChartSpace to decide if we want to enable openGL rendering.

.. some fixups for X11 builds, which are not needed on the main
   OS combinations we use (Linux, Mac, Windows) but may prove
   useful when building for X11 vs Wayland in the future
2020-09-01 15:29:37 +01:00
Ale Martinez
b69daad663 Fix error when computing Recovery Points in FilterHrv
We need to use Symbols, not names, to avoid translation related issues
Complements 0179c3b
2020-08-31 13:29:20 -03:00
Ale Martinez
0179c3b3d8 Fix Regresion when computing Recovery Points in FilterHrv 2020-08-30 13:53:01 -03:00
Michel Dagenais
894d9e6e23 Propagate Weight and other simulation parameters to training devices (#3500)
The weight has a direct impact on how fast you climb for a given power.
Other parameters like the wind resistance and the rolling resistance do
not change as much but should still be communicated to devices which can
take them into account. All the needed values were already present in
the BicycleSim and DeviceConfiguration modules. It is simply a matter of
communicating those values in the RealtimeController interface, just like
the gradient.
2020-08-29 19:22:44 -03:00
Mark Liversedge
9e4fe431e4 Chart space remove drop shadow
.. even with opengl the performance is terrible.
2020-08-29 11:12:06 +01:00
Mark Liversedge
c3f7cf1404 Chart Space drop shadow
.. create a bit of depth

[publish binaries]
2020-08-28 17:38:42 +01:00
Ale Martinez
f1c6394305 Use the new Data instead of Ride Editor for Python Fixes
Fix crash reported at the forum
2020-08-26 11:38:47 -03:00
Ale Martinez
0f40659052 Fix comment on BT40Device 2020-08-26 11:37:35 -03:00
Ale Martinez
16d5c82f21 Fix sample measures.ini documentation error
[skip ci]
2020-08-25 18:39:40 -03:00
Mark Liversedge
96b4cacec9 DataFilter - xdata() function
.. xdata("name", "series" | km | secs) - returns a vector of xdata.

.. no resampling or interpolation is applied since the user can
   do this with the resample() and interpolate() functions.
2020-08-25 19:42:04 +01:00
Ale Martinez
1a184f925d Fix Qt message handler used when API Web Service is enabled
This has been reported to produce garbled output on Windows and,
according to https://doc.qt.io/qt-5/qtglobal.html#qPrintable,
it is dangerous since the array returned by QString::toLocal8Bit()
will fall out of scope, so lets use a safer version to avoid
the risk of crashes hard to debug.
[publish binaries]
2020-08-25 14:17:30 -03:00
Ale Martinez
84f706f370 Use different time base for BTLE speed computation
Depending if data come from Power or CSC sensor.
Complements #3456 Fixes #3578
2020-08-25 13:59:32 -03:00
Ale Martinez
42632c4d8d Avoid crashes on Trends Overview when metric is unavailable
Metric, TopN and Donut crash on setData when the base metric
is not available, for example when a User Metric was removed.
2020-08-24 19:12:11 -03:00
Mark Liversedge
203c505f34 Update Readme.md
Describe GoldenCheetah from a user perspective, not a developer.
2020-08-24 17:06:06 +01:00
Ale Martinez
5ef8817107 Move Pace units from athlete to general settings
Also change defaults to match metric/imperial for consistency.
Fixes #2253
2020-08-23 12:53:53 -03:00
Ale Martinez
46e07a7016 Make measures.ini global looking for it in gcroot
For the same reason metadata.xml is now global.
Also load default measures groups even when measures.ini is present,
this may change when we provide an UI to edit measures.ini, but for now
it avoids users breaking body and hrv features.
[publish binaries]
2020-08-22 19:14:42 -03:00
Poncho
35606d321c src/Core/Context.cpp: include Settings.h (#3577) 2020-08-22 11:48:58 +01:00
Mark Liversedge
fbd095a2d4 Split Global and Athlete configuration
.. Global settings (themes, metadata etc) are now maintained
   in the config dialog as in the past, whilst athlete settings
   (such as zones, measures etc) are now maintained in a new
   config dialog accessible from the athlete view (gear icon).

.. Config changes are communicated via two signals;
   * Context::configChanged(qint32)
   * GlobalContext::configChanged(qint32)

   Crucially, all global context signals are cascaded through
   the athlete contexts-- so athlete specific widgets only
   need to connect to the athlete context signal (and will get
   athlete and global config change notifications).

   Whilst global widgets such as the sidebar and mainwindow
   need only connect to the globalcontext signal since they
   are not interested in athlete specific details.

[publish binaries]
2020-08-22 11:36:24 +01:00
Ale Martinez
79071a2f3b Fix Travis-ci macOS builds - change sip source
Python sip 4.19.8 is not available anymore from Riverbankcomputing.com,
lets download from sourceforge.net like we do for Linux and Windows builds.
2020-08-21 17:33:15 -03:00
Mark Liversedge
80d7eed382 RideMetadata and friends moved to GlobalContext
.. Ride metadata was associated to the athlete rather than a
   global setting. This was a serious design flaw since user
   metrics can reference metadata.

.. A global metadata.xml file is generated on startup by
   consolidating all athlete level settings into a single
   configuration.

.. Other dependencies were also moved; SpecialFields,
   ColorEngine and UseMetricUnits.

.. We should now be able to remove athlete configuration
   from the config dialog and put it into the athlete view
   instead.

   This will also fixe a long standing issue with
   configuring athlete settings when multiple athletes are
   open.

[publish binaries]
2020-08-21 19:01:37 +01:00
Ale Martinez
a0409e8cea Fix truncated json when importing Lap Swim FIT files
Due to NAN distance on 1sec pauses, introduced in 3f9892d
[publish binaries]
2020-08-20 17:04:19 -03:00
Ale Martinez
6cdd5bbbe7 Shorter timeout on transfer.sh upload to avoid timeouts
Uploads are quite fast or don't work, so don't wait too much.
2020-08-20 17:03:01 -03:00
Ale Martinez
39feb5807c Show metrics in locale aware collation order
Unicode order can be confusing for some locales
Reported in #3542
2020-08-20 10:55:37 -03:00
Mark Liversedge
99fb4f551e Tweak RideEditor header cosmetics
.. solid line between header and data, just makes it less of
   a see of text by separating the header from the data.
2020-08-19 11:47:35 +01:00
Mark Liversedge
6fcabd699a Ride Editor bottom tabs match Ride Metadata tab style
.. 4px width bar etc.
2020-08-18 10:01:48 +01:00
Ale Martinez
bdd6d2c219 Fix KPI Tracker in chart library
Best 60min Power was Best 60min Speed, separately fixed the web version
Fixes #3574
2020-08-17 17:55:25 -03:00
Mark Liversedge
90e20d79bd Unified Editor and Metadata
.. the 'Details' chart now combines editing the metada fields such as
   workout, sport, notes and so on, with an additional tab 'Raw Data'
   that contains the RideEditor.

.. it is now no longer possible to add Editor inidividually and the
   Summary and Details chart is deprecated (Summary will also be
   removed once Overview has enough functionality to replace it).
2020-08-16 18:14:18 +01:00
Mark Liversedge
ebca2b846a Modernise the Metadata tabbar
.. flat styling with an indicator underneath the current selection.

.. been meaning to do this for absolutely ages.
2020-08-16 09:51:35 +01:00
Ale Martinez
2a43f11c72 Revert "Windows builds log to goldencheetah.log when not debugging (#3485)"
This reverts commit 6bc48200e7.
It is crashing on Windows 8, I can't debug on that version
and it is not that useful feature, --debug gives more information.
[publish binaries]
2020-08-15 19:36:16 -03:00
Mark Liversedge
6cdb848e9f Show metric refresh progress on Athlete View
.. part of a general process of centralising status, progress messages
   and indicators into one place.
2020-08-15 11:47:41 +01:00
Mark Liversedge
2372b4cdbe RideNavigator one more row of text
.. feels a little less cramped. but still needs to be completely
   overhauled for v3.6 UX
2020-08-15 10:31:12 +01:00
Mark Liversedge
2eed6f66dc Allplot less transparency
.. when filling curves as looks washed out with white backgrounds.
2020-08-15 10:30:12 +01:00
Mark Liversedge
3c6bbd5ec6 Theme Tweak add MS Teams inspired theme
.. same understated purple and white.

.. also removed some of the old (rubbish) themes.
2020-08-15 09:54:40 +01:00
Ale Martinez
1eae9f4071 Metrics Trends chart - Fix averaging group counter in table mode
The group counter was not reset and incremented unconditionally
in table mode, producing wrong averages when zeros are excluded.
Fixes #3566
2020-08-14 19:01:07 -03:00
Ale Martinez
414cc630fd Don't compute Pace Swim for non swimming activities
Fixes #3570
2020-08-14 12:57:46 -03:00
Ale Martinez
2ada830c5b Fix generated distance for lap swims
Fixes #3567
2020-08-14 12:29:47 -03:00
Mark Liversedge
80ba487153 Fix SEGV configChanged after athlete closed
.. the views were not being deleted, so the global context connection
   to configChanged signal was still called, but the athlete and
   context were long gone - so SEGV (!)

.. the reason this didn't get triggered in earlier releases is due to
   the fact the event was disconnected when the athlete context was
   deleted.
2020-08-14 13:43:41 +01:00
Mark Liversedge
9bb1f3434d Fixup RideCache Load in Thread
.. move thread based load of ridecache into ridecache, this fixes a
   serious regression.

.. previously because the ridecache was created in a thread it could
   not attach to the events from the main gui event loop.

.. we now load the RideDB.json file in a worker thread, but the
   ridecache, and its items are created in the main thread.
2020-08-14 10:25:21 +01:00
Alejandro Martinez
64e83121ca Computrainer Button tidy up (#3538)
Since F3 was assigned to Calibration, its use as modifier was deprecated.
Also nextDisplay is not implemented so we can do some cleanup.
F1 is restored to their original function: start/pause and F2 is used
for new lap, in both cases with debouncing to avoid false activations.
This way the same functions enabled for ANT+ remotes are available via HBC:
Start&Pause: F1
Lap/Interval: F2
Load increase/decrease: +/-
Calibration: F3
2020-08-13 21:29:42 -03:00
Ale Martinez
97da9f9539 Increase precision to 3 digits on RideEditor XData
Fixes #3568
2020-08-13 20:10:05 -03:00
Alejandro Martinez
c52d260949 Generalize Body/Hrv Measures and add Nutrition data as example (#3564)
measures.ini is looked for in Athlete's config folder,
it should have a section for each measures group,
nutrition data with Energy and Macros is provided as example.
Moved default weight to About and removed RiderPhysPage and created
a tab for each measures group under Measures.
MeasuresPage handles conversion between metric and imperial units
Generalized CSV import with configurable headers.
MeasuresDownload enables download from Withings/Todays Plan only for Body
measures.
This is Part 1/2 of #2872
2020-08-11 21:02:19 -03:00
Ale Martinez
9a2d71dc5d Avoid rounding when computing speed and cadence on Lap Swims
Fixes #3563
2020-08-11 19:11:03 -03:00
Mark Liversedge
1d9f570ed8 Introduce a Global Context
.. GlobalContext::context() provides a global context that is not
   tied to an athlete or MainWindow.

.. At present it just offers signals for config changes but will
   likely see more context move across as the application preferences
   and athlete configuration are separated as we enhance support
   for multiple athletes.
2020-08-11 22:16:13 +01:00
Alejandro Martinez
6bc48200e7 Windows builds log to goldencheetah.log when not debugging (#3485)
Similar to Linux/macOS builds, messages are redirected to goldencheetah.log
when not output to console is requested, but instead of relying on low level
stderr redirection a message handler logging directly to the file is installed.
[publish binaries]
2020-08-10 21:21:34 -03:00
Ale Martinez
c886158c16 Honor default locale on RideEditor copy/cut
paste and paste special are already doing this via strtod
Fixes #2552
2020-08-10 11:29:02 -03:00
Ale Martinez
c49180460d Avoid multiple ConfigDialog creation and close on exit
configdialog_ptr is already maintained to handle raise event,
cleanup is moved to destructor to ensure it is always called,
and it is used to ensure:
1) only one instance is created from MainWindow
2) it is closed on MainWindow destructor
Fixes #1918
2020-08-09 15:38:08 -03:00
Ale Martinez
7c90abf675 Fix percentage calculation in Overview Zones histograms
It was restricted to the first 4 zones, likely a copy/paste error.
Fixes #3559
2020-08-08 20:28:20 -03:00
Ale Martinez
f0fd495a21 Remove special case for Device metadata tag query
Keeping exception for isset/set/unset
Fixes #3428
2020-08-07 16:00:05 -03:00
Ale Martinez
3f9892d130 Change lap swim import from FIT files
The logic to generate synthetic speed/distance/cadence sample data
from length records was removed from FitRideFile, and Fix Lap Swim
data processor is now used for that task, this is simpler, avoids
code duplication and preserves other data s.t. HR and Temp
Fixes #3545
total_timer_time is used as length duration instead of total_elapsed_time
to support Suunto lap swim files
Fixes #3272
2020-08-04 13:56:32 -03:00
Mark Liversedge
8150d5b7ce Protect against closing first athlete opened
.. since the context of the first athlete is used as a partial
   application context across the code we now prohibit closing
   the first athlete opened.

.. we will separate out the app and athlete context shortly
   but this will at least protect against SEGV.

[publish binaries]
2020-08-04 07:47:22 +01:00
Mark Liversedge
edec952b86 Athlete View 2 of 3
.. Show days since last activity and disable config icon since there
   isn't an appropriate action for now

.. Athletes can be opened and closed via the tiles and a reusable
   'Button' overview widget is available for re-use elsewhere.

.. Part 3 will enable checking for downloadable data to show an
   indicator on the tile for e.g. coaches with multiple athletes.

NOTE:

   There are a few issues regarding application context separation
   from athlete context that need fixing up (if you close the first
   athlete loaded expect crashes). Will look at this as a separate
   update since its been there for some time and is not related to
   the new view per se.
2020-08-03 20:09:47 +01:00
Mark Liversedge
7d9337fb23 Theme Tweaks
.. modern light now uses the Fiori Belize Blue theme.

.. this means that the overview (chartspace) background is now also
   configurable, so the existing themes could be updated.

.. probably need to revisit all the themes tbh.
2020-08-03 20:09:47 +01:00
Ale Martinez
7e3f141124 Don't crash when Python chart APIs are called without a Chart
Just do nothing and return false.
Fixes #3554
2020-08-03 12:59:42 -03:00
Ale Martinez
750f7fb258 Fix missing return in previous commit
5a27239e01
2020-08-02 12:14:02 -03:00
Ale Martinez
08632206c3 Update Preferences Appearance screen capture for the wiki
[skip ci]
2020-07-31 14:52:00 -03:00
Ale Martinez
51eb9e6c96 Remove climb detection logging to climb.log
There has been some reports about performance issues on Windows,
and this was a debug tool for a feature which has been stable
for years, so we can remove it to avoid the overhead.
[publish binaries]
2020-07-30 14:26:03 -03:00
Ale Martinez
7189c6d759 Remove config(SCV) from formulas - CV is sport dependent now
Just like CP et.al.
Also removed unused D' and SD'
Fixes #3551
2020-07-30 14:04:30 -03:00
Ale Martinez
5a27239e01 Add Garmin Varia Radar and Light
Fixes #3549
2020-07-30 13:30:12 -03:00
Ale Martinez
9a62573087 Change Body&HRV date entry format to match the list
For consistency, lets use the same format in the form,
it can be changed at translation time.
2020-07-30 12:44:56 -03:00
Mark Liversedge
e2c6f2ea28 Fix Sort order in TopN on Overview for Pace type metrics
.. use isLowerBetter() for sorting.

Fixes #3552
2020-07-30 16:10:52 +01:00
Mark Liversedge
7a4be49492 RideCache load performance improvement
.. string manipulation using raw C since its simple character
   replacement, halved time over previous approach.

.. lookup rideitem in ridecache via binary search (lower_bound)
   rather than serial. Minor speed up.

.. Overall, loading should be noticeably quicker for most users.
2020-07-30 15:44:02 +01:00
Mark Liversedge
11092bf436 Athlete View 1 of 3
.. introducing the athlete view

.. at startup the first athlete is loaded as normal, but once the
   mainwindow is open the athletes are managed from the athlete view

.. athlete ride cache restore happen in background (via a thread) to
   enable the GUI to remain responsive whilst it takes place (since
   for most non-trivial cases it can take 30 seconds or more).

.. multiple mainwindows has been deprecated and whilst each open
   athlete is selected via a tab, this will change to a combobox
   in later commits.

.. the tiles in the athlete view do very little apart from show the
   avatar and progress/load status when an athlete is being loaded.

.. future commits will introduce more detail and actions for the
   athlete tile and deprecate the athlete tab bar for a combo on
   the toolbar (amongst other things).
2020-07-29 21:38:38 +01:00
Mark Liversedge
c52a861a9a User Chart refresh on filter changes
.. quite a few of the standard signals are ignored. this one fixes
   up refresh when the home filters are changed.
2020-07-29 21:38:38 +01:00
Mark Liversedge
f01ed7c77c Add BikeScore user doc
BikeScore documentation, as referenced from the FAQ
2020-07-29 12:13:22 +01:00
Ale Martinez
fa1e1d00ae Change FixLapSwim DP to preserve all previous data
Not just HR, also fixed sync issues when there are gaps in recording.
2020-07-23 16:59:13 -03:00
Ale Martinez
1dde50f6e5 Change LTMPopup Click-thru to use the new navigation model
For consistency with new charts.
2020-07-22 19:13:05 -03:00
Ale Martinez
5d18b810a7 Fix incorrect debug message in Video Layout Parser 2020-07-20 15:13:25 -03:00
Mark Liversedge
947393914f Generic Chart Click-thru 2a of 2b
.. Scatter chart click thru from trends.

.. Need to decide how click thru will work from a line chart as the UX
   doesn't quite work as the auto hover points are elusive (they move
   when you go to click on them). Will review and fixup shortly.
2020-07-17 17:59:53 +01:00
Mark Liversedge
3bf2f13764 Generic Chart Click-thru 1 of 2
.. Enable click through from the data points on a generic chart
   when on trends view.

.. This commit includes the 'addCurve' bindings to pass the
   activity filenames from R, Python and the User Chart.

.. It also includes a new DataFilter function 'filename' to
   get a vector of strings that are the filenames for the
   activities in the selected date range (or the filename
   for the currently selected activity).

.. The second commit will include the interaction code for
   GenericPlot to click-thru a selection.
2020-07-17 13:37:06 +01:00
Alejandro Martinez
1f8bafb334 Text Cues on TrainBottom display pane (#3544)
Import Texts from Erg files in TrainerRoad format, Zwo files and
from Lap names in json files.
Display texts on TrainBottom for both, erg and slope mode, at the
corresponding time/distance for the specified duration.
Export Texts in erg, mrc and zwo formats.
Fixes #1118
Fixes #2967
Prerequisite for #2098
2020-07-16 12:55:41 -03:00
Mark Liversedge
911b9bd966 Move BlinnSolver to Metrics
.. it doesn't belong in Core.
2020-07-16 07:33:09 +01:00
Mark Liversedge
ba5cf3ed1d Datafilter String Support - 4 of 4
.. adding some new functions for working with strings:

   trim(p) - trim whitespace
   tolower/toupper(p) - convert case
   split(p, sep) - split a string into a vector
   join(p,sep) - join a vector into a string
   replace(p, s1,s2) - replace s1 with s2 in string or vector

.. this is the last of the first wave of commits to support
   strings, but more will come as we work with categorical
   data, factors and so on.

[publish binaries]
2020-07-15 12:42:00 +01:00
Mark Liversedge
c850a532f6 Remember sidebar setting
.. show/hide sidebar setting is reinstated on restart, is specific to
   each view and now the menu check stays in sync with user selection.

.. another old glitch thats taken a while to get resolved !
2020-07-14 22:41:38 +01:00
Mark Liversedge
b9039e7767 Generic Chart Nits
.. legends can have spaces in them (painting error) and you can now
   hover over a slide to see its value.
2020-07-14 19:57:50 +01:00
Mark Liversedge
2874bf6bfa DataFilter vectors - metadata()
.. metadata("name") returns the value for the metadata field on analysis
   view or a vector of values if on trends view.

.. also fixed a few nits when working with category data on the user
   chart; sort/multisort had bugs, blank labels and pie chart legend.
2020-07-13 22:45:32 +01:00
Mark Liversedge
4b93632b42 User Chart Pie and Bar charts now work
.. since we can now set category data using string vectors we can
   support bar and pie charts in the user chart.

.. there were a few issues switching between bar and pie charts
   related to the way axes were being configured that have been
   resolved in this commit.
2020-07-13 20:56:24 +01:00
Mark Liversedge
e885966195 Fix User Pie Chart Labels and Colors
.. bug not clearing labels before setting and now uses a gradient
   based upon the color selected by the user.
2020-07-13 14:43:06 +01:00
Mark Liversedge
1a5b7e1464 Datafilter String Support - 3 of 4
.. Update builtin functions to support working with strings as well
   as numeric vectors; e.g. sort, uniq, aggregate

.. next commit will add some new functions that are specific to
   working with strings; e.g. tolower/upper, split, replace.
2020-07-13 13:39:42 +01:00
Mark Liversedge
c98695cd34 Datafilter String Support - 2 of 4
.. Update operators to support string vectors; compare, assign, index,
   select, contains and so on.

   Most maths operators make no sense apart from '+' which concatenates
   strings and arrays together.

.. next commit will update functions where they are appropriate for
   strings and string vectors; sort, uniq etc.
2020-07-12 17:53:42 +01:00
Mark Liversedge
f767b066df Datafilter - bool() also coerce vectors
.. was introduced to coerce an expression to boolean, but should have
   also supported vectors.
2020-07-12 09:25:26 +01:00
Mark Liversedge
169bd9c4e0 Datafilter String Support - 1 of 4
.. Strings and vectors of strings are useful for plotting bar charts
   or wherever category variables are needed, they are also useful
   when working with xdata names and metadata within ride files.

.. Full support for strings will be introduced over the next 4
   commits, including this one (1 of 4):

   1 - Basics - Create, Assign, Coerce, isString
   2 - Operators - Logical, Math etc
   3 - Functions - sort, uniq, aggregate etc
   4 - String Functions - cat, split, toupper/lower etc

.. Will wait until all 4 commits are completed and string support
   is feature complete before updating the wiki.
2020-07-12 09:13:19 +01:00
Ale Martinez
5bd48dd4f6 Change Fix Speed DP name to Fix Speed from Distance
To match the english menu option, and set kph present
when it is not, even if values have not changed.
Both were misleading to users.
2020-07-11 15:29:03 -03:00
Ale Martinez
9b2226d3ba Install Python 3.7.8 for macOS Travis-ci builds
[skip appveyor]
Homebrew has upgraded python3 to 3.8.3 and, due to how dependences
are handled, it is difficult to continue to use Homebrew Python 3.7
2020-07-10 15:06:21 -03:00
Mark Liversedge
b91c8395c0 Revert "Fit : Decode Dev Fields"
This reverts commit 2e4fa9f406.
2020-07-10 08:51:31 +01:00
Mark Liversedge
cc27d6be84 Cosmetic nits and themes
.. tidying up after some recent changes, menu colors got mucked up and
   tested on low dpi monitors etc.
2020-07-10 08:51:03 +01:00
Ale Martinez
a1d2fd8f41 Fix Travis-ci macOS builds - restore python 3.7 simlinks
[skip appveyor]
Likely removed by python 3.8 forced upgrade.
2020-07-09 16:03:53 -03:00
grauser
a33a74923b AllPlot : Show/hide interval markers
fixes #2215
2020-07-09 17:18:10 +02:00
grauser
c701c8a510 RideWithGPS : Use API version 2 2020-07-09 17:13:11 +02:00
grauser
2e4fa9f406 Fit : Decode Dev Fields 2020-07-09 17:13:11 +02:00
Ale Martinez
9a72ab4269 Fix Travis-ci macOS builds - use python3.7
[skip appveyor]
Homebrew upgraded to python to 3.8, switched back to the 3.7.5
included with the Travis image until we decided to upgrade.
Changing to 3.8 requires to upgrade SIP to 5.x and testing.
2020-07-09 11:29:27 -03:00
Mark Liversedge
98ff3aaf11 Editor heading alignment fix
.. taken 10 years to fix this glitch.
2020-07-08 08:25:18 +01:00
Mark Liversedge
83b551deaf Fix SEGV on drop activity into compare pane
.. needed to check context was set before adding to deletelist.
2020-07-07 22:13:49 +01:00
Ale Martinez
af94c6f8c5 Change Python version to 3.7.8 for Travis-ci Linux builds
[skip appveyor]
Build are failing since the AppImage for 3.7.7 is no longer available.
[publish binaries]
2020-07-07 11:26:46 -03:00
Mark Liversedge
6349e53232 Fix MetricOverviewItem aggregation
.. bad bug, aggregation was lost and replaced with whatever the
   value of the last item is when aggregating metrics for a
   season.

[publish binaries]
2020-07-07 13:08:59 +01:00
Mark Liversedge
eba028475a Simplify and Finalise Dark/Light Theme
.. and also a border around overview cards, which makes the light theme
   easier on the eye.
2020-07-07 11:24:35 +01:00
Ale Martinez
e3d11c27a8 Train - Enable devices reordering via drag and drop
Fixes #3421
2020-07-06 20:00:07 -03:00
Mark Liversedge
0f73c15c0e Overview TopN select activity
.. click on item in list to select it and click thru to analysis view.

.. also implemented a hotspot() method in chartspaceitem to tell the
   chartspace to stop stealing events when in our hotspot-- in this
   case it was the area where we paint the list.
2020-07-06 10:16:17 +01:00
Mark Liversedge
20e0b4aeca Fix SEGV navigation with forward button
.. stackpointer increment before redo and indexing into the stack
   when stackpoint is -1 in NavigationModel::forward().

.. introduced in the last commit.
2020-07-06 08:06:12 +01:00
Mark Liversedge
b313cb4f37 Overview Bubble Select Activity
.. clicking on an activity in the trend overview bubble chart will
   switch to analysis view to look at it.

.. to support this all the underlying changes to navigation model
   and related have been updated to force view change and allow
   going back and forth in the navigation model.

.. along the way a couple of bugs were also squased. The worst was
   a SEGV related to Tab::rideSelected() calling MainWindow::sidebar.

.. now the main foundational code is in place we can add more click
   through opportunities; e.g. top N on overview, user chart.
2020-07-06 07:42:22 +01:00
Mark Liversedge
64da909243 Basic Navigation Model
.. back and forward buttons to navigate between views and selections.

.. currently limited to just rides, date ranges and views.

.. next step is to enable click to select from trends overviews to allow
   users to drill down from the season overview into activities and
   back again.

.. part of the shift from searching through lists to analyse data to
   exploring data visually with drill down and click through.

.. the buttons are very basic and there is no way to explore the
   history / recently viewed items etc. these will come later.

Fixes #3529
2020-07-05 16:38:30 +01:00
Ale Martinez
94c723f4a0 Fix Hr and Power Zone metrics
Sanity check was reversed so decimal part always computed to max
and becomes undervalued.
Fixes #3531
2020-07-05 11:27:40 -03:00
Ale Martinez
c16d4c4667 Fix crash when adding video without overlay widgets support
Disabled meters layout selector initialization when we don't
have overlay widgets support enabled.
Fixes #3530
2020-07-04 15:31:21 -03:00
Ale Martinez
3b2aa33c6a Run and Bike power estimators - add preconditions to description
Fixes #3528
2020-07-03 15:33:36 -03:00
Ale Martinez
e6938a38f8 Video Player - Add Reset Meters layout to default button
To allow users update video-layout.xml config file to the one
provided with the binary.
2020-07-03 15:08:49 -03:00
Mark Liversedge
5518ac98a8 Light/Dark theme settings again
.. just to ensure same aesthetic effect with tabs and overview in dark
   or light theme. last of these for a while, I promise.
2020-07-03 10:41:11 +01:00
Mark Liversedge
88e6c4cbd2 Apply theme set chrome to match
.. if a dark theme set chrome dark, if light set it light.
2020-07-03 07:03:30 +01:00
Mark Liversedge
b02a640d6e Selection Sidebar honor CCHROME config
.. the user can configure the colour of toolbars and sidebars, so this
   is honored in the sidebar painting,

.. we should look at separating out the way theme colors are edited;
   the core colors are more important than the pallete colors like
   CPOWER etc (and as an aside the palette colors should be usable
   from user chart config too).
2020-07-03 06:42:15 +01:00
Mark Liversedge
ec195656f7 GC Learning Curve PPT
.. upload into user doc
2020-07-02 15:33:58 +01:00
Ale Martinez
d0dba1d8a1 Reimplement isLowerBetter for User Metrics
User Metrics redefine type() so we need to use it instead of _type
Fixes #3527
2020-07-01 22:04:57 -03:00
Mark Liversedge
1599546b68 Honour RideMetric::isLowerBetter() when ranking
.. also tweaked the overview colors (sorry no separate commit).
2020-07-01 14:18:36 +01:00
Ale Martinez
709994c3e7 Add muscle mass and bone mass to Withings download
Fixes #3497
2020-06-30 19:01:50 -03:00
Ale Martinez
c2abdc2a5b Xert cloud download - spd and alt fields can have decimal part
Interpreting them as integers produces lot of zeros in those cases.
Fixes #3526
2020-06-30 14:17:45 -03:00
Stranger
cd2de5dc3d Russian translation update (#3522)
Correcting existing translations and adding new. This is the last part for the moment. The next one after the RC is released.
2020-06-28 10:26:42 -03:00
Mark Liversedge
d9df2bb76b Cosmetic nits
.. gap between ride list and sidebar color didn't get reset when change
   color theme in preferences. (was a nightmare to find the fix).

.. overview default backgrounds when changing themes were also really
   bad choices and toned down. quite why we have to change in pages.cpp
   and colors.cpp is a bit tedious.
2020-06-28 09:37:36 +01:00
Mark Liversedge
8ec6d513b8 Cosmetic nits
.. toolbar searchbox match chrome colors
.. trends add chart menu had 2 entries for the user chart.
2020-06-27 16:36:20 +01:00
Mark Liversedge
0b5153a6a5 Overview better date handling
.. new metric 'Activity Date' which is days since 1900/01/01 as a metric
   so can use wherever metrics are used.

.. added RideMetric::isDate() so we can mark as a date and honor setting
   in RideMetric::toString()

.. updated BubbleViz to support Dates by using xoff and yoff to truncate
   the values used when days since values.

.. changed the default config for a trends view bubble viz in overview
   to use activity date as the x-axis.

.. thanks to Ale for the original idea behind this.
2020-06-27 10:40:40 +01:00
Mark Liversedge
93259ce7e0 Overview improve displaying of time based metrics
.. we added isTime() and toString() for a reason, lets exploit some of
   that when converting metrics to strings.
2020-06-27 08:52:55 +01:00
Mark Liversedge
00b498c8b7 Datafilter uniq / multiuniq name change
.. the uniq function renamed to multiuniq to align with the way
   sort / multisort work

.. makes uniq behave in the way most people would expect.
2020-06-27 07:55:55 +01:00
Mark Liversedge
2162cb1374 Fix DataFilter uniq() SEGV
.. both validate and eval code reference fparms instead of leaf->fparms
   causing a SEGV when evaluating malformed expressions.
2020-06-26 23:14:05 +01:00
Mark Liversedge
13c91cf67d Overview Bubble on Trends View
.. repurpose the interval bubble to show activities instead of
   intervals.

.. changed the animation/transition to work better when looking at
   seasons by resizing the axes before updating the points.
2020-06-26 22:39:33 +01:00
Ale Martinez
ac5ae5027b LiveMap overlay video widget - show/hide according to Location data presence
Fixes the LiveMap dissapering on pauses, we could refactor to move
this and similar ElevationMeter operations to Start event.
2020-06-26 16:05:03 -03:00
Ale Martinez
e90eaf281f Travis-ci cache Python packages to reduce build time on macOS
[skip appveyor]
Not a great difference, but we are too close to 50' limit
Also reduce curl max time to avoid timouts.
For Linux buils remove --silent build to avoid the job being cancelled
2020-06-26 15:57:15 -03:00
Ale Martinez
5dd950c77b Revoke the blocking to upload Overview charts to CloudDB
The block was introduced in bb6d2552c0 to
avoid the upload of charts without configuration, now configuration is
possible and it will be interesting to see what layouts users share.
2020-06-25 11:34:59 -03:00
Mark Liversedge
9bdbf22f7c Datafilter samples() honor interval specification
.. the data filter is passed a spec to use for iterating over
   ride samples, but it was being ignored.

[publish binaries]
2020-06-24 20:36:18 +01:00
Michel Dagenais
a27065673c Allow Text meter widgets to be of same size and well aligned (#3506)
The y scale is computed from the font instead of only from the current content, to avoid having different scales between different Text widgets of the same size. For example, "kph" has a high k and low p, resulting in a text widget with bigger bounding box, and thus smaller scale than a text widget with "watts". Options are added for alignment and for text width, to help align the different entries. The formatting of metrics with the integer part as Text and fraction as AltText is more systematic and it is possible to add an AltTextSuffix, to specify the units when they are not provided in VideoWindow. The visibility of the BoundingRect and Background car be controlled.
2020-06-24 11:58:08 -03:00
Mark Liversedge
028e822aa4 Edit User metric warning if use sample() function
.. its much faster to vectorize and use the samples() function in init
   or value function when working with user metrics.

   for example this code:

   sample {
      work <- work + (POWER * recIntSecs);
   }
   value { work; }
   count { Duration; }

   should be refactored to:

   value {
      work <- sum(samples(power) * recIntSecs);
   }
   count { Duration; }
2020-06-24 08:17:58 +01:00
Ale Martinez
fdf6d4e862 Python XDataSeries - Don't use RideFileCommand when readOnly
It is unnecessary and too slow
Fixes #3445
2020-06-23 21:16:28 -03:00
Alejandro Martinez
0e3766a504 Add EPM - Ergo Planet Movie format import (#3520)
To be used as workouts and videosync with free Ergo Planet Videos
EPM files contain video sync plus geolocation information in XML format
Library of free rides: http://wiki.ergoplanet.de/myor/roadmovie-galerie

The problem is altitude set to zero in those examples, likely because it is
redundant when you resort to the EPP (Ergo Planet Program) for slope data,
but the EPP is an unpublished binary format we don't support directly.

So the workflow to use the those synchronized videos is:
1) Import the .epm file to GoldenCheetah as an activity
2) Use Fix Elevation and Fix GPS to add and smooth elevation and route data
3) Export the conditioned activity to GoldenCheetah JSON format
4) Import the .json file as Workout and VideoSync files,
   plus the .avi as media in GC Train mode using Scan Workouts and Media
5) Train using a Video Window with overlay widgets and simulated speed for
   better experience.
2020-06-23 17:11:02 -03:00
Ale Martinez
3bfcfa57aa Implement RideMetric value and toString with 2 parameters for Pace metrics
Fix base class toString 2 parameters bug
Use toString(metric, value) in getStringForSymbol to avoid setting the value
Use toString(metric, value) in MetricOverviewItem::setDateRange for testing
2020-06-23 15:51:57 -03:00
Stranger
4d205bd742 Update Russian translation (#3519) 2020-06-22 16:47:02 -03:00
ericchristoffersen
8956f60826 VirtualPowerTable: sort remove empty rows (#3517) 2020-06-22 15:17:32 -03:00
Ale Martinez
0e1bec38aa Enable GoldenCheetah JSON files as Workouts and VideoSync
Any other activity file format GC supports can be imported,
conditioned using Fix Elevation, Fix GPS, etc. and exported
to GoldenCheetah .json format to be used for simulated rides
with synchronized video and position tracking.
Complements #3469, Fixes #3376
2020-06-22 14:41:31 -03:00
ericchristoffersen
225cf0c9d5 Base code for additional ride and video types (#3469)
Related to #3376
2020-06-22 14:35:43 -03:00
Mark Liversedge
ad4d06faa8 MetricOverviewItem show Personal Bests
.. shows a little medal on the metric tile if it is a best for the
   period. Shows if top 3, in order:
   - all time, including the future
   - all time till today
   - last year
   - last 90 days
   - last 30 days

.. helps to highlight positives from most activities.
2020-06-22 13:56:45 +01:00
Ale Martinez
5eafea682b Fix untranslatable strings
Fixes #3513
2020-06-21 18:59:40 -03:00
ericchristoffersen
c3145c5f04 Make BicycleSim setting page translatable (#3518) 2020-06-21 18:35:58 -03:00
Mark Liversedge
0dc5fc2f6f Donut hover less jarring
.. big font for label feels jarring, made smaller and less vibrant
   color choice.
2020-06-21 09:17:30 +01:00
Peter
984d28abf0 LiveMap V0.1 - Tracking position
Initial implementation of #3482
LiveMap is hidden when GPS data is not available
New layout including Live Map and graphical widgets
added to video-layout.xml, zoom can be configured there.
2020-06-20 20:55:16 -03:00
Michel Dagenais
05e89e5c34 Add control to Video Player to select among several Meter Widget layouts (#3515)
The video layout file is extended to contain possibly several named
layouts. The file is read to list the layouts and offer a selection in
the Video Player chart settings menu. The file is then read again to
instantiate the selected layout.
2020-06-20 14:41:19 -03:00
ericchristoffersen
32884b1c6a Support Custom Virtual Power Curve (#3410)
* Base work for dynamic speed power curves.

* Add test for spindown - proof templates.

* Dialog for adding virtual power curve

* Finished.

* Potential typename fix.

* Fix another typename problem.

* const typename reorder

* Missing header in clang build.

* Fix error with static init order.

* Forgot to set id for known devices.
2020-06-20 18:28:53 +01:00
Mark Liversedge
e1086afc50 Donut hover label
.. display the slice label when hoverring as it can sometimes be
   obscured or truncated, depending upon the layout/size of tile.
2020-06-20 17:57:26 +01:00
Mark Liversedge
21c07be749 Overview donut hover
.. show percentage for slice when hoverring.
2020-06-20 15:53:33 +01:00
Mark Liversedge
59f736bb50 Default Overview error
.. meta field is 'Workout Code' not 'Workout_Code', mildly confusing
   that user names don't have spaces whilst internal names do.
2020-06-20 15:13:27 +01:00
Mark Liversedge
a81c97c09b Donut highlight largest slice
.. explode and different colour.
2020-06-20 11:07:01 +01:00
Mark Liversedge
c72a14a023 Donut Overview Tile
.. plot metric by category as a donut (pie) chart.

.. particularly useful as an overview of sport or workout codes for
   multisport athletes.

.. also fixed up metadata selection which was broken (!)
2020-06-20 10:28:47 +01:00
Stranger
903861bae9 Update Russian translation (#3516) 2020-06-19 18:26:41 -03:00
Mark Liversedge
dff682fd88 Overview Trend Filter Nits
.. layouts mucked up a bit, needed stretches

.. the filterset wasn't updated correctly, causing filtering to not
   work in the way anticipated.

.. Activities metric should be a MetricType::Total, which will become
   more popular on Metric tiles with filters (e.g. how many activities
   > 0.85 IF etc).
2020-06-19 21:08:40 +01:00
Mark Liversedge
6637a45929 Missing Utils::jsonunprotect()
.. when parsing overview config.
2020-06-19 16:01:25 +01:00
Mark Liversedge
837a7c6154 Overview Trends View Filtering
.. overview items now have a filter that is applied

.. additionally the usual filters on the trends view are honored.
2020-06-19 15:46:37 +01:00
Ale Martinez
e32e233d5f Add Favero Assioma Duo and several Garmin sensor ids
Fixes #3503
2020-06-18 12:34:48 -03:00
Mark Liversedge
b66f65e129 Cosmetic SideSelector, Sidebar and Chartbar heights
.. all need to line up, so they aren't different by a matter of a
   small number of pixels as that leads to a jarring experience.
2020-06-17 16:35:45 +01:00
Mark Liversedge
9dbfc10e04 Visual clue chartbar tab has a menu
.. hover shows the menu indicator as subtly as possible, but will
   indicate to user there is a menu popup there as they hover.
2020-06-17 14:35:29 +01:00
Ale Martinez
3be603a9ee Ignore additional sports in tha same session
Also removed the old logic for mulstisport sessions, now replaced
by sessionSplit.
Add Garmin Fenix 6 models
Fixes #3507
2020-06-16 20:47:01 -03:00
Mark Liversedge
e4ad4ab1a3 Cosmetic nits
.. a faint baseline for sparkline in overview to provide context
   especially for plotting seasons

.. chartbar tabs taller and font centered.
2020-06-16 16:31:07 +01:00
Mark Liversedge
bf76bac59d Overview Trend Cosmetics
.. fill under a cumulative curve to indicate its not just the metric
.. truncate date ranges to today where it extends to the future
2020-06-15 17:55:44 +01:00
Mark Liversedge
c3463860d5 KPI Overview Item Show/Hide progressbar on config change
.. borked logic fixed up.
2020-06-15 17:18:07 +01:00
Ale Martinez
2034b8754a AppVeyor - Fix Version on Tag builds
[skip ci]
Version is not set for Tag builds due to a script error,
lets fix it for the next dev build.
2020-06-14 18:30:36 -03:00
Ale Martinez
1c4c83af5e FitRideFile - Don't try to split when we don't have a RideFile
But to check for errors.isEmpty() is overkill, when the returned value
is not NULL, they can be warnings according to RideFileImport interpretation.
Fixes #3479
2020-06-14 15:16:29 -03:00
Mark Liversedge
5c84f7f789 VERSION 3.6 DEVELOPMENT JUNE 2020
.. update build id prior to tag.

[publish binaries]
2020-06-14 18:56:18 +01:00
Mark Liversedge
dbecc005b5 Overview Chart on Trends view
.. updated the overview chart to support trend view and summarise
   a season or date range.

.. scope now meaningful in the item registry.

.. added a new TopNOverviewItem to view a ranked list of activities
   by metric.

.. updated sparkline to plot variable range (>30days)

.. sort and multisort datafilter functions adjusted as caused a
   SEGV during testing (sorry not in separate commit).
2020-06-14 17:48:17 +01:00
Ale Martinez
04b4d945fa FitRideFile - Don't call splitSessions without rideFile
To avoid crashes and since there is nothing to do.
2020-06-13 10:53:35 -03:00
Ale Martinez
74f3a213ac Don't try to split FIT files with errors
Fixes #3479
2020-06-12 19:17:39 -03:00
Ale Martinez
f3af493aba Enable Qt 5.15.0 for macOS Travis-ci builds
[skip appveyor]
Also upgrade Python to 3.7.7
2020-06-12 14:38:17 -03:00
Ale Martinez
f6bcccb04c Require Qt >= 5.13 to build v3.6
No need for conditional compilation for previous versions.
Added message at build time to avoid confusion.
2020-06-12 14:29:50 -03:00
Ale Martinez
c1727623a8 Recognize Polar S625x srd files
Add 2 test files from S625X
Fixes #3489
2020-06-12 13:07:37 -03:00
Ale Martinez
757a01e876 Add Garmin MTB Dynamics to FitRideFile
Grit and Flow - Fixes #3488
2020-06-12 11:34:06 -03:00
Michel Dagenais
20d8836708 Add user notification for bluetooth devices and services connected 2020-06-11 19:56:03 -03:00
Michel Dagenais
775765b853 Insure computation accuracy for speed and cadence
Some accuracy was lost in an integer divison for speed and cadence in
getCadence and getWheelRPM, the expression was correct but non obvious
in setWheelRPM, and the speed was not reset upon disconnection for
CyclingPower while this service is used for power and speed when present.
2020-06-11 19:56:03 -03:00
Michel Dagenais
3982267e29 Add support for the Wahoo Kirck (Core) through BlueTooth LE
All the commands to set the different parameters (weight, wheel size,
gradient or load, wind speed...) are added to BT40Device and
BT40Controller. A separate pull request will add support to actually
take advantage of these parameters, like the cyclist weight, now
available in this and other devices like the Fortius.
2020-06-11 19:56:03 -03:00
Ale Martinez
fc4b8f7cbc Update minimum Qt version to build v3.6
[skip ci]
2020-06-11 17:27:04 -03:00
Ale Martinez
7274268f47 Suppress deprecation warnings - will be fixed with Qwt 6.2 2020-06-11 15:10:41 -03:00
Ale Martinez
e1f9005cf5 Fix Qwt incompatibilities with Qt 5.15.0 2020-06-11 12:54:29 -03:00
Ale Martinez
16e00fde90 macOS Travis-ci builds - fallback Qt and Python versions
[skip appveyor]
Fallback to previous Qt and Python versions available on Homebrew
to until we can compile Qwt with Qt 5.15
Python comes back to 3.7.5 since the upgrade to 3.7.7 triggers a Qt upgrade.
Qt comes back to 5.13.2
2020-06-11 00:23:12 -03:00
Michel Dagenais
2418d3b95b Convert size from pixels to points for use in setPointSize (#3452)
Currently, size is computed from the QWidget geometry height in pixels and then used to set the font size in points. In many cases the result is not that bad because, depending on the screen size and resolution, the pizel size is not that far from one point. We now convert from pixels to inch (DPI) and then from inches to points (72 points/inch). This solves the problem of the text being clipped sometimes or the margin being too large.
2020-06-10 22:24:53 +01:00
Mark Liversedge
df2d436a02 User, R and Python Chart fill curves
.. add ability to plot filled curves.
2020-06-10 19:59:21 +01:00
Ale Martinez
20c975e7df Don't call locationAt/gradientAt in Erg mode
Since they reset the brackets, defeating their use by wattsAt and
forcing all searches start from the beggining, and generating
problems with ErgTimeRemaining, which depends on rightPoint.
This problems was introduced by 1402f6ad6a
Fixes #3491
2020-06-10 14:24:04 -03:00
Ale Martinez
7d8c27fd54 Initialize mode when parsing Erg2 workout files
Otherwise they can inherit the wrong mode from previous workout
2020-06-10 11:53:10 -03:00
Ale Martinez
b0a8c6edfa Add units to Load source for overlay widgets 2020-06-10 11:43:29 -03:00
Mark Liversedge
6163ece7d6 KPIOverviewItem painting nit
.. setData() was adjusting visibility of the progressbar and should not
   have been. Now calls itemGeometryChanged() to manage that correctly.
2020-06-10 09:54:40 +01:00
Mark Liversedge
66fb3b2bde Overview nits
Some nits from recent Overview updates:
* compiler error using 'and' instead of '&&', gcc happy, msvc not.
* kpi overview item default set to CP estimate
* add chart wizard formatting of final page.
2020-06-09 21:17:33 +01:00
Ale Martinez
14e6fd5393 Add VideoOverlays capture for the wiki
[skip ci]
2020-06-09 16:01:00 -03:00
Mark Liversedge
47d79bd872 KPI overview item
.. uses  a datafilter program to calculate a kpi and displayed alongside
   a progressbar that shows how the value is progressing to a goal.

.. its really useful to compute across estimates, mmp etc without having
   to write a custom metric

.. one simple example is to show CP estimates and progress towards
   a target CP or 5 minute best, or perhaps weight.

   A program to display the internally generated CP estimate using
   the Morton 3 parameter model would be:

   { round(estimate(cp3,cp)); }
2020-06-09 19:45:44 +01:00
Mark Liversedge
6e8bad3d19 Fix Overview Zone settings
.. data loss by updating during initialisation of config widget.
2020-06-09 08:50:00 +01:00
Ale Martinez
1ec634f043 Replace modal dialog with emit setNotification in Computrainer Controller
The "Cannot Connect to Computrainer" now shows in TrainBottom notification
area unobtrusively. Fixes #2439
2020-06-08 20:03:13 -03:00
Mark Liversedge
2b54f68d50 Overview Config Part 2 of 2
.. allow edit and remove of existing items on the overview.

.. due to the way widgets are managed by layouts we create the
   configuration widgets on demand and they will be deleted
   once the dialogs close.

.. this is fine for overview, but will require a significant
   level of refactoring once we start adding charts such as
   allplot, trends etc to be added to a chartspace.

[publish binaries]
2020-06-08 21:17:19 +01:00
Mark Liversedge
410aaf6a93 Overview Config Part 1 of 2
.. 'Add Tile' added to the overview menu - to enable users to
   choose and configure tiles to add to the dashboard.

.. ChartSpaceItems should now be registered to a new chart
   space item registry, which will eventually replace the
   current window registry

.. ChartSpaceItems need to register a method to create new
   items with default settings and provide a widget for
   configuring themselves.

.. A new config widget has been created to cover the
   overview tiles and some gui components for selecting
   metrics, metadata fields and ride series have also
   been added.

.. In part 2 we need to add the ability to configure
   existing tiles and also remove them.
2020-06-08 17:13:55 +01:00
Ale Martinez
60600948be Add Tacx NEO 2 Smart
Fixes #3484
2020-06-08 11:34:10 -03:00
Ale Martinez
3450f577d3 Add Garmin HRM-Dual
Fixes #3483
2020-06-08 11:31:54 -03:00
ericchristoffersen
d55cd20639 Elevation Widget: Lazy Init Polygon to Avoid 2x Route Point Iteration (#3477) 2020-06-07 12:55:24 -03:00
Mark Liversedge
56ecb3e538 Add Overview with default config
.. still have a problem with chartspaces that have zero items that we
   will need to address, but this at least means when we add an overview
   it isn't blank.

Fixes #3476
2020-06-06 11:05:34 +01:00
Alejandro Martinez
365848b79e On Windows attach to parent's console when no console is available
This gives a more Unix-like behavior when GC is launched from
cmd or PowerShell, including --debug output, on release builds.
Fixed #3481
[skip travis]
[publish binaries]
2020-06-05 17:59:33 -03:00
Mark Liversedge
125a92514c Fix ChartBar Remove Chart SEGV
.. context menu action and processing in event loop deletes the widgets
   whilst events are being processed for it. So in event processing we
   now return immediately after triggering context menus.
2020-06-05 10:05:33 +01:00
Ale Martinez
0881250542 AppVeyor - Change python._pth encoding
utf8 generates a BOM which Python doesn't like
lib/site-packages is included in path by include site
[skip travis]
2020-06-04 15:57:41 -03:00
Mark Liversedge
0286583d4b Fix UserChart series de-dedup when editing
.. when editing a series the de-dup check included the series we are
   in the process of editing- which of course led to it always detecting
   a duplicate.

.. we now exclude the series being edited from being checked as a dupe.
2020-06-04 08:11:19 +01:00
Mark Liversedge
7cc6733df1 Fix userchart duplicate series name SEGV
.. duplicate series names cause all sorts of problems with the
   internal maps and lookups and must not be allowed.

.. if the user creates/edits to create a duplicate series name
   we append '_n' (where n is any number from 1 upwards) to
   guarantee we never habe duplicates.
2020-06-03 21:47:45 +01:00
Mark Liversedge
4447f8bffd Fix SearchBox size regression
.. commit 28b2428 introduced a regression whereby the searchbox will
   expand to fill space which was jarring in chart settings.

.. this commit reinstates a fixed height, but slightly larger to
   remain compatible with the mainwindow toolbar.
2020-06-03 21:16:33 +01:00
Mark Liversedge
ddcd2825a2 LTM and CP chart menu override
.. from now charts that add custom actions will need to also add the
   action to pull up the chart settings - since it is assumed the
   custom actions are overriding the standard approach.

.. fixes a regression from the chartbar context menu on tabs commit
   where it is not possible to edit the setting for a trends or a
   critical power chart.
2020-06-03 20:45:20 +01:00
Ale Martinez
f24ee9be8a Reduce mimimum height of Python Fix Edit dialog
To fit in high-dpi laptops displays without too small font
2020-06-03 15:22:16 -03:00
Ale Martinez
5194d09ec3 BT40Device - Fix Ignoring the CSC service for device xxx message
The "Ignoring the CSC service for device..." was intended to notify when power
sensor is present the CSC service is ignored since it is redundant and may
cause problems, but it is misleading when there is no CSC or Power service.
Reported in #3471
2020-06-03 13:54:40 -03:00
Ale Martinez
bc13092cd2 Python Fixes - Clear context before to execute the script
Fixes #3459
2020-06-03 13:37:38 -03:00
Ale Martinez
15b491409a Fix AppVeyor deploy to S3
[skip ci]
It was uploading to S3 on every push to master.
2020-06-02 18:55:02 -03:00
Ale Martinez
92f3a237be Trim Python Home setting
If it contains blanks deployed Python detection fails,
lets make this a little more idiot-proof.
2020-06-02 18:44:07 -03:00
Mark Liversedge
a6ed25c7e4 Overview refactors cosmetic nits
.. spacing and margins got doubled and tripled up in layouts and
   some other related minor fixups.
2020-06-02 21:57:59 +01:00
Mark Liversedge
45a628b4b9 ChartBar context menu in Tab
.. instead of the 'More...' button in the top left of a chart when in
   tabbed mode we now have a menu button when you hover over a tab.

.. the menu button activates the chart menu for now, till we refactor
   to using a chart space.

.. the 'More...' menu is still available when in tiled mode (we need to
   decide what to do there).
2020-06-02 20:41:28 +01:00
Michel Dagenais
b6ee709520 Fix incorrect speed (halved) on BT40 (#3456)
Unlike for the cadence value which uses 1/1024 second units, the wheel
revolution value is based on 1/2048 second units [1]. It is easy to
notice the problem when you ride downhill at 25 kph instead of 50kph! In
addition, the speed was initially incorrect because the previous wheel
position value was stale. This would sometimes give the speed of a
rocket for the initial interval and make a jump on the distance of
several km.

[1] Cycling Power Service, Bluetooth Service Specification, Date 2016-05-03, Revision CPS_v1.1, Prepared By Sports and Fitness Working Group, head of page 15.

https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=412770,
2020-06-02 10:35:46 -03:00
Adrien Guinet
77bbca0a16 ErgFile: fix distance precision issues (#3435)
When parsing a "distance slope wind" type, a truncate to integers was done
after computation to meters. This involved rounding issues that were
accumulated, and were quite visible when such a file was used to synchronized
with an RLV video (the slope changes happened "too early").
2020-06-01 20:53:53 -03:00
Adrien Guinet
6ca1bd9a9c BT40: add support for Tacx's ANT over BLE (#3430)
This is based on https://github.com/abellono/tacx-ios-bluetooth-example/
This has only been tested so far with a Tacx Flow Smart T2240.
2020-06-01 20:51:01 -03:00
ericchristoffersen
93ff6c36b4 FixGPS - Dont Stomp Slope (#3468)
Rely on invalidate.
Fixes #3466
2020-06-01 11:57:20 -03:00
Ale Martinez
6a3734971d Add information about GSL as a mandatory dependency
[skip ci]
2020-05-31 19:35:47 -03:00
Mark Liversedge
f8f43eed4c Fir set RPE from Overview Regression
.. updating the RPE value via the RPE widget on the overview was lost in
   the last commit, this fix reinstates it.
2020-05-31 18:55:36 +01:00
Mark Liversedge
8a1842a9ba Refactor OverviewWindow for ChartSpace
.. the OverviewWindow class has been refactored to extract out the
   core dashboard UX/UI into a new class ChartSpace.

.. additionally, a ChartSpace contains a set of ChartSpaceItem which
   need to be subclassed by the developer.

.. for the Overview a set of OverwiewItem classes have been introduced
   such as RPEOverviewItem, MetricOverviewItem and so on. These are
   subclasses of the ChartSpaceItem.

.. The overview window implementation is now mostly configuration and
   assembly of a dashboard using OverviewItems and the ChartSpace.

.. This refactor is to enable the ChartSpace to be used as a drop in
   replacement for the existing TabView.

.. There are no functional enhancements in this commit, but the
   overview chart shouls appear to be unchanged by the user.
2020-05-31 18:16:53 +01:00
Ale Martinez
2d3eed0a98 Cleanup non-optional Defines from CI config
Removed redundant config and fixed GSL for windows instructions
Remove some compiler warnings to reduce log size
2020-05-30 18:13:20 -03:00
Ale Martinez
df160a10a1 Strava Download - Prevent laps overlapping and fix Lap Swim distance
Switching from start_index to start_date_local fixes #3457
Since Duration is End-Start+1, End is decremented to match elapsed_time.
fixLapSwims don't rely on Smart Recording being enabled and,
since km is distance at the end of the sample, a correction is added.
2020-05-30 16:55:25 -03:00
Mark Liversedge
a8473441ae GNU Scientific Library (GSL) Mandatory Dependency
.. making GSL mandatory, so we can rely on the modelling functions
   being available, amongst a few other things.

[publish binaries]
2020-05-29 15:51:58 +01:00
Ale Martinez
f18b5470ec Create Overlay Widgets with Qt::Tool flag on Linux
Michael Dagenais found this change makes the widgets to play nicer with
Windows Managers and avoids them to get on top of other programs windows.
Minimize and Restore is automatically handled now, so this commit partially
reverts b89019264e, removing MainWindow
state changes tracking, but keeping VideoWindow position tracking.
2020-05-27 18:04:41 -03:00
Alejandro Martinez
f51a6a6cb1 Remove Conditional Compilation for Qt < 5.9 (#3464)
This is a clean up to remove conditional compilation for all Qt versions
older than the last known to work: Qt 5.9 with Qt WebEngine and Qt Charts.
Includes an update note to INSTALL documents.
2020-05-27 09:26:25 -03:00
Mark Liversedge
cc6fa1d02a Refresh RideFileCache before Metrics
.. since user metrics may reference the ridefile cache as part
   of the formula e.g. bests(POWER, 1200)
2020-05-26 19:54:30 +01:00
Michel Dagenais
0352e19e34 Clip the Meter Widgets to the visible portion of the Video Window (#3462)
When the video widget is scrolled, the MeterWidget windows appeared on
top of the Main Window user interface. Now the visible portion of the
Video Window is tracked and used as a clipping region. This avoids
blocking the controls on bottom toolbar.
2020-05-26 14:56:11 -03:00
Mark Liversedge
4f64b88f0f Datafilter vectors - rank()
.. rank(ascend|descend, list) - returns the ranking of each element
   of list in order specified. Ranking will range from 1 to n.
2020-05-26 10:40:35 +01:00
ericchristoffersen
4348a6279c Issue 3373: FixGps to run on altitude alone. (#3374)
Fixes #3373
2020-05-25 19:03:26 -03:00
Eric Christoffersen
d52fb5a68f Fixes for interpolation and gpx file load
Interpolation math fixes: Slope and interpolation behave correctly when
ride point location doesnt change.
In gpx read: do not open same file twice with different read flags.
2020-05-25 13:34:27 -03:00
Ale Martinez
c179419feb Recognise Peter Kanatselis and Michel Dagenais
By contributions to Train View code
2020-05-25 12:45:46 -03:00
Michel Dagenais
b89019264e MeterWidgets must move / hide when main window is moved / minimized (#3458)
When the main window is minimized on Linux, the MeterWidgets stay on the desktop.
A signal were added to the main window for state changes.
The VideoWindow connects to that signal and hide/shows the MeterWidgets accordingly.

Currently, when you move the main window, the MeterWidgets do not follow
and become out of place. 
On every Telemetry update, check if the real position on screen of the
video window has changed in order to update the position of the meter
widgets. The Video Window can move for several reasons like when
scrolled or when the Main Window is moved. The Meter Widgets are not
clipped like the Video Window by its scroll area parent though.
2020-05-25 12:44:54 -03:00
ericchristoffersen
922ebf987b Teach elevation widget to honor skipping (#3443)
Elevation widget was showing progress based on distance, which is workout distance and didn't accout for distance change due to skip forward/skip back.

Add routedistance to realtimedata so elevation widget can access it
elevation using routedistance to show progress
Fix uninit iterator in elevation widget paint
Draw route distance in elevation widget
2020-05-25 11:16:54 -03:00
Mark Liversedge
ca5504e486 DataFilter tests() - no submaximal
.. the recent update to tests() to retreive the bests found did not
   ignore submaximal points.
2020-05-25 12:21:01 +01:00
Mark Liversedge
369ffd2040 DataFilter vectors - estimates()
.. estimates(model, cp|ftp|w'|pmax|x|date) - returns a vector of values
   for the model selected.

   As with the estimate() function, passing a duration value 'x' will
   return the PD model estimate for that duration.

.. also removed hard coded model names.
2020-05-25 11:29:37 +01:00
Mark Liversedge
f4fcc93693 Deprecate WebKit Support
.. The NOWEBKIT define is no longer required to build.
   We now only support building with Chromium QWebEngine
2020-05-25 09:00:36 +01:00
Michel Dagenais
e8b1f69d63 Meter widget on linux (#3454)
Enable Meter Widgets overlaid on Video Window for Linux

Meter Widgets, with a transparent background over the video window, use
little screen estate while providing all the needed information. They
were added for WIN32 first but actually work fine on Linux with minor
flag adjustments.
2020-05-22 17:07:42 -03:00
Mark Liversedge
6c31805981 DataFilter vector tests() update
.. tests(user|bests, duration|power) - with no parameters will just
   return the number of tests in a ride/date range, or with 2 parameters
   will retrieve user defined or bests found by algorithm the last
   parameter defines if duration (secs) or power (watts) values are
   returned.
2020-05-21 19:35:17 +01:00
Ale Martinez
f2d93cc2dc Travis - Cache Homebrew downloaded bottles to speedup macOS builds
[skip appveyor]
2020-05-20 21:49:11 -03:00
Ale Martinez
5a0b022188 Travis - Enable cache for D2XX folder
[skip appveyor]
To avoid download and copy on each build
2020-05-20 21:04:35 -03:00
Ale Martinez
1cb1beb09c Enable GC_VIDEO_VLC option for macOS
After this change:
QtMacVideoWindow.h is used only for native macOS video options:
    GC_VIDEO_AV (incomplete)
    GC_VIDEO_QUICKTIME (obsolete)
Otherwise standard VideoWindow.h is included with the same options for
the three supported OS:
    GC_VIDEO_NONE: placeholder for no video, currently used for macOS builds
    GC_VIDEO_VLC: basic video control plus videosync, macOS experimental
    GC_VIDEO_QT5: basic video control only, macOS experimental
Overlay Widgets only works on Windows with VLC.
Tested with VLC 3.0.8 on the 3 Operating Systems.
2020-05-20 18:39:50 -03:00
Mark Liversedge
47e67f4d37 DataFilter vectors - resample()
.. resample(old, new, yvector) - returns yvector resampled from old
   sample rate to new sample rate. Assumes yvector has already been
   interpolated or smoothed as needed (see the interpolate function)

   For example, resampling to 10s power samples in a user chart:
   {
    finalise {
        t <- samples(SECS);
        xx <- seq(head(t,1),tail(t,1),10);
        yy <- resample(RECINTSECS, 10, samples(POWER));
    }

    x { xx; }
    y { yy; }
   }
2020-05-20 14:46:57 +01:00
Mark Liversedge
5772f6fd2f DataFilter vectors - interpolate()
.. interpolate(linear|cubic|akima|steffen, x,y, xvalues) - returns a
   vector of yvalues for each element in xvalues where the points
   in x,y are interpolated using the selected algorithm passed
   in the first parameter. e.g:

   xx <- samples(SECS);
   yy <- samples(POWER);

   first <- head(xx,1);
   last <- tail(xx,1);
   zxx <- seq(first, last, 0.1); # 10ths of a second
   zyy <- interpolate(cubic, xx, yy, zxx);
2020-05-19 18:34:38 +01:00
Ale Martinez
d4a5eaa501 Add Python 3.7 to Windows Installer and Linux AppImage
For Windows we use Python embeddable distribution
For Linux the relocatable Python AppImage
Packages included: sip, numpy, pandas, scipy, lmfit and plotly
[publish binaries]
2020-05-17 20:54:10 -03:00
Mark Liversedge
881e517b1a DataFilter vectors - random()
.. random(n) returns a vector of n random numbers between 0 and 1.
2020-05-17 18:51:43 +01:00
Mark Liversedge
21415379af DataFilter vector - samples(WBAL|WBALSECS)
.. added WBAL and WBALSECS as options for the samples() function to
   retreive the w'bal value (in joules) and the secs too.

.. seconds are potentially different to the samples(SECS) values as
   the w'bal series is always in 1s samples with gaps in recording
   accounted for as part of the calculation.
2020-05-16 20:08:35 +01:00
Ale Martinez
89b74816f6 Travis - Add core modules to Python distribution on macOS
[skip appveyor]
Initially: sip, numpy, pandas, scipy, lmfit and plotly
Deployed Python added to search path
Binaries reference the Python library on Cellar
Related to 2c0ce8f5c5
2020-05-16 14:09:03 -03:00
Mark Liversedge
f3e9ba3573 Datafilter vectors - rev()
.. rev(vector) - returns the vector with the sequence reversed.
2020-05-15 16:51:28 +01:00
Alejandro Martinez
2b68037c72 Enable build using vlc 3 on Windows with MSVC
On Linux no changes are required
In both cases the dynamic libraries seem to be binary compatibles
2020-05-14 19:42:29 -03:00
Ale Martinez
71a81e7f01 Add sha256 hash for CI binaries to GCversionXXX.txt
[publish binaries]
2020-05-14 11:12:13 -03:00
Mark Liversedge
f261a76b9e Datafilter vectors - bin()
.. bin(data, bins) - returns a vector of the data binned into bins, any
   data less than the first bin will be discarded, and data greater than
   the last bin will be included in the last bin.

   the returned bin is based upon counts, so will need to be scaled
   if want duration in seconds.

   e.g:

   b <- bins(data, quantiles(data, c(0,0.25,5,0.75,1))) * RECINTSECS;
2020-05-14 12:45:11 +01:00
Ale Martinez
a94500f1c3 Add GCversionXXX.txt to CI builds results
Where XXX identify the OS, to give build context.
GoldenCheetah --version output plus the last commit.
[publish binaries]
2020-05-13 18:19:45 -03:00
Ale Martinez
2c0ce8f5c5 macOS Travis-ci build - change library path in Python interpreter
Adds SIP 4.19.8
2020-05-13 13:13:43 -03:00
Mark Liversedge
4b4d86f413 Datafilter bug fixes
.. annotate - didn't validate parameters - seemingly inocuous but there
   are multiple validators that update leaf->seriesType. When this did
   not happen a) syntax errors were ignored (and caused a crash) and
   b) functions like samples(POWER) returned the wrong data.

.. annotate - assumed parameters were numeric or string but did not
   support vectors.

.. lots of use of 'it' as a variable, overriding the scope of the
   DataFilter::eval() function parameter which in a couple of cases
   led to SEGV ('it' is used when indexing vectors).
2020-05-13 14:53:25 +01:00
Mark Liversedge
670698fdef Datafilter - quantile()
.. quantile(vector, quantiles) - returns quantile values for the vector
   passed. quantiles can be a single value, or vector of values. The
   quantile is expressed as a value between 0 and 1, where 0.5 would
   represent the median. Values outside this range are truncated to
   0 or 1.
2020-05-11 19:39:07 +01:00
Mark Liversedge
73f11db578 Datafilter - daterange() closure
.. daterange(from, to, expression) - executes the expression setting the
   selected daterange as from-to.

.. any expression that honours the trend view date selection will use
   the from-to dates provided.

.. for example, to get weight data for a specific daterange:

   measures <- daterange("2020/01/01", "2020/05/01",
                          measures("Body", "WeightKg"));
2020-05-10 20:14:26 +01:00
Mark Liversedge
021ecda647 DataFilter - meanmax() set date range
.. meanmax(SERIES [, start, stop]) - now allows the user to provide a
   date range for the meanmax data to collect. This is so you can, for
   example, plot a 'last 90 days' curve:

   {
      finalise {
         yy <- meanmax(POWER, Date-90, Date);
         xx <- seq(1, length(yy), 1);
      }

      x { xx; }
      y { yy; }
   }
2020-05-10 16:47:59 +01:00
Mark Liversedge
44475a03fb Datafilter - meanmax() computer
.. meanmax(xvector, yvector) - returns a mean-maximal curve in 1s
   intervals from the x,y pair passed in.

   the data will be truncated where xvector and yvector are different
   lengths, negative y values are set to 0 and the entire dataset
   will be interpolated where there are gaps (i.e. the data is not
   presented in 1s intervals).
2020-05-10 15:57:57 +01:00
Mark Liversedge
7ee6ef43c1 Datafilter - bests()
.. the vectorized version of best() - returns a vector of either dates
   or peak values for given duration, usage:

   bests(SERIES, duration [,start [,stop]]) - get the peak values for
   the given duration and optional date range

   bests(date [, start [, stop]]) - get the dates of the peak values
   but no duration needed but can still proved an optional date range.
2020-05-10 09:51:29 +01:00
Ale Martinez
caaae923ad Travis-ci builds - Add max-time to transfer.sh upload
To avoid the build being marked errored when the upload takes
too much time.
2020-05-09 20:07:37 -03:00
Ale Martinez
8627f26b2c Fix RideSummary Estimates
Use the the model name introduced in ed33157945
2020-05-09 19:53:22 -03:00
Mark Liversedge
f415dc38b0 Datafilter fix sum for [ selection ]
.. when you use a selection for a vector e.g. vector[x>0] the vector
   that is returned does not set result.number to the sum. This breaks
   most of the vectorized functions.

.. for example; mean(samples(POWER)[x>0]) should compute NZAP or
   non-zero average power, but instead it calculates as 0 due to
   the selection sum bug.
2020-05-09 20:00:26 +01:00
Mark Liversedge
3f92810240 Datafilter - median() and mode()
.. vectorized like mean() and sum() etc. Do what you expect and return
   the median and mode values.
2020-05-09 19:01:19 +01:00
Alejandro Martinez
fc00d28873 Update issue template
[skip ci]
Fixed reference to contributing guidelines
2020-05-09 13:39:02 -03:00
Mark Liversedge
7daf2fa63e DataFilter - dist()
.. get the ridefilecach distributions, precomputed distributions of the
   main data series (but not all).

.. dist(series, data|bins) - returns vectors of the series data (count
   of points for each interval) or the bins.
2020-05-09 15:59:38 +01:00
Mark Liversedge
eec8d6616c Datafilter - nozero()
.. nozero(v1) returns a vector of indexes into v1 for non-zero values.
   Whilst it is possible to do this with sapply() this convenience
   function is faster - and the use-case crops up very often.
2020-05-09 12:38:26 +01:00
Mark Liversedge
9bd6cff3e3 Fix scatter plot hover <25 points
.. the generic plot didn't register quadtrees if it thought they didn't
   contain any nodes, but didn't take into account the fact the root
   node could contain up to 25 points.
2020-05-08 21:33:15 +01:00
Mark Liversedge
d3c04e27fa Fix metric refresh SEGV
.. last commit didn't avoid the detach() derefernce in a thread because
   it used the [] operator which is non-const, instead we should use
   QVector::at(int)
2020-05-08 20:05:31 +01:00
Mark Liversedge
fd0a5955ef Fix some metric refresh SEGV
.. A few situations that cause race conditions and crashes when metrics
   are being refreshed, found whilst testint user metrics.

   1. access to QString is not thread-safe, fixed with a const
   2. metric vector resizing is needed even if all metrics are zero
   3. entire ride interval needs to be computed, assignment in thread
      is not thread-safe and was incomplete anyway.
2020-05-08 14:31:43 +01:00
Mark Liversedge
4029c3a9aa Datafilter - match()
.. match(vector1, vector2) - returns an index of values; for each value
   in vector1 it will return the index into vector2 if there. if the
   element in vector1 is not found in vector2 no entry will be added to
   the returned index.

.. e.g:

   a <- c(4,6,9);
   b <- c(1,2,3,4,5,6,7,8,9);
   d <- match(a,b);
   # d now contains 3,5,8 since indexes start from 0
2020-05-08 12:58:30 +01:00
Ale Martinez
c1edbcb00a Add GSL to CI builds
Complements c973328779
[publish binaries]
2020-05-07 16:25:45 -03:00
Ale Martinez
fcc9660b64 Upload binaries to S3
Only for commits to master with [publish binaries] in the commit message
Older binaries are removed, we keep only the last succesful build.
2020-05-06 21:19:24 -03:00
Mark Liversedge
532b29b9d1 Datafilter vector - mlr()
.. mlr(yvector, xvector1 .. xvectorn) - perform a multiple linear
   regression and return a vector of coefficients for each x.

.. under the covers the covariance matrix and chi-squared are both
   calculated, but discarded. We should make these available to the
   user at some point.

.. requires the GNU scientific library, which will become a mandatory
   dependency at some point soon.
2020-05-06 20:20:12 +01:00
Mark Liversedge
c973328779 Introduce GNU Scientific Library (GSL) as an optional dependency
.. will become a first class dependency, but for now, whilst we
   update the build systems it is optional.

.. to enable update gcconfig.pri with
   DEFINES += GC_WANT_GSL  ## switch GSL support on
   GSL_INCLUDES =          ## the include path (no -I)
   GCL_LIBS =              ## -Lpath and -lgsl -lgslcblas -lm or others

.. see gcconfig.pri.in for examples, Linux has been tested.

.. to install this new depdendency:
   Linux: sudo apt-get install libgsl-dev
   MacOS: brew install gsl
   Windows: vcpkg install gsl
2020-05-06 18:32:16 +01:00
Ale Martinez
76d459a895 Cache qwt in Travis and AppVeyor to reduce build time
Warning: the cache needs to be invalidated for changes in qwt to take effect
2020-05-05 19:51:45 -03:00
Ale Martinez
b6eabc63d1 AppVeyor - Remove zip generation and rename installer
Since the installer is working we don't need the zip anymore
[skip travis]
2020-05-04 12:14:50 -03:00
Ale Martinez
e7aaebcd00 Revert "Add version string for non tag builds"
[skip ci]
This reverts commit 7d06cd5ad1.
2020-05-02 15:19:09 -03:00
Ale Martinez
7d06cd5ad1 Add version string for non tag builds
Used to build binaries for the release, will be reverted afterwards.
2020-05-02 15:15:50 -03:00
Ale Martinez
cc11f1fa2d AppVeyor - Add version string for Tag builds 2020-05-02 15:14:49 -03:00
Ale Martinez
4cd24bc09a Travis-CI - Upgrade to Python 3.7 2020-05-02 14:12:01 -03:00
Ale Martinez
a4dbfa69d3 AppVeyor - Upgrade to Python 3.7 and remove console 2020-05-02 14:11:35 -03:00
Mark Liversedge
d042ec591e Fix crash on --no-python
.. if there is a python chart in the view, it will crash as setWeb
   does not check to see if embedding worked, and is called via the
   property system so must always check.
2020-05-02 14:07:57 +01:00
Mark Liversedge
211b9b23cd VERSION 3.6 DEVELOPMENT MAY 2020
.. first development release for v3.6
2020-05-01 18:37:01 +01:00
Mark Liversedge
d6c16dd9de User Chart Time Axis Bug
.. due to qt-bug 62285 we need to use local time not UTC for timespec
   since qt charts converts to local time internally.

.. this fixes axes starting at 1hr instead of 0h.
2020-05-01 13:53:22 +01:00
Alejandro Martinez
e1db9c832f Fix Travis-ci builds for macOS - Add QWebEngine dependence
[skip appveyor]
QWebEngine depends on QtQmlModels and QtQml in Qt5.14.2
2020-04-30 21:35:43 -03:00
human705
05ee4f40da Add Elevation Widget to Train Video Overlays (#3411)
* 1 - Add forceSquareRatio to MeterWidget
* 2 - Adjust default colors and add background text.
* 3 - Add Elevation widget, included in default layout visible only on slope mode.
Based on the work done by Vianney Voyer
Co-authored-by: Peter <pkanatselis@gmail.com>
2020-04-30 19:26:40 -03:00
Mark Liversedge
a0add0bdc9 Security alert - Remove jquery and related
.. RideWindow is no longer required and brings in artefacts that have
   security alerts. This code should have been deprecated previously
   and was retained in error.

Fixes #3426
2020-04-30 21:43:30 +01:00
Ale Martinez
a9ddef9667 Fix Travis-ci macOS builds
[skip appveyor]
icu4c was upgraded from 64 to 66 and the dmg patch failed.
Lets make the hack a little more generic
2020-04-30 15:08:35 -03:00
Mark Liversedge
d69fa7986f User Chart Series Errors Wrapping
.. when editing a user chart series program the errors in red at the
   bottom of the dialog get truncated instead of word wrapping.
2020-04-29 20:45:40 +01:00
Ale Martinez
3ff380ce0f Travis-ci Linux builds - Update to Qt 5.14.2 2020-04-29 16:11:57 -03:00
Ale Martinez
c0bed13cfa Add vlc plugins to Linux AppImage for Travis-ci builds
This avoids the need to install vlc 2.2 and set VLC_PLUGIN_PATH
Fixes #3394
2020-04-29 15:17:26 -03:00
Mark Liversedge
794efdaf06 DataFilter - exists()
.. exists("symbol") will tell you if the symbol exsits as either a
   function or a variable.
2020-04-29 18:49:04 +01:00
Ale Martinez
5e54c994b7 AppVeyor - Build Windows 64bit installer and add to Artifacts
Installer script cleanup to remove unused dependencies
2020-04-29 11:29:49 -03:00
Erik Botö
0a1b0846ce Add VO2 and Ventilation graphs to WorkoutWidget and add settings (#3415)
* Add VO2 and Ventilation graphs to WorkoutWidget and add settings

* When running tests with VO2 measurements, it can be useful to see a
  graph of at least VO2 but also Ventilation to determine when e.g. a
  ramp test results in a plateau and can be considered done.

* Make the color of some VO2 measurements configurable.

* Add chart settings to WorkoutWindow, so that plots can be enabled or
  disabled. Also add the possiblity to do averaging.

* Use the term Ventilation instead of Respiratory Minute Volume

* Rework to not affect RideFile

Move from using SeriesType from RideFile in order to allow more series
to be added without modifying RideFile.
2020-04-29 08:03:02 +01:00
Ale Martinez
28645ff7b0 AppVeyor - Add installer script
The installer building step is disabled, but it can be executed
offline using NSIS 3.05
2020-04-28 21:03:16 -03:00
Ale Martinez
ff433dcf76 AppVeyor - Use cache to reduce build time
Avoid downloading cached files from to reduce dependence on external services
We are too close to the 1h limit to depende on variable time downloads
2020-04-28 20:46:53 -03:00
Ale Martinez
429b5de44c AppVeyor - Add ReadMe, license, and icon files
We need them to generate an installer
2020-04-28 16:04:42 -03:00
peterbrant14
0fab9b901a Fix indexing bugs in the original TTS code (#3423) 2020-04-28 17:45:21 +01:00
Mark Liversedge
2e228ef52b Increase max Crr to 0.025
.. plausible value for knobbly tyres over sand or soft woodland.
2020-04-28 08:10:15 +01:00
Erik Botö
13b80dfda6 VMPro: Add possibility to start calibration manually (#3414) 2020-04-27 15:10:34 -03:00
Erik Botö
09dea59996 Enable BT on Windows (#3401)
In recent Qt versions there's support for BLE on Windows, so remove the
check that disables it.

In Qt 5.14.2 and earlier there's a bug which causes problem if you do
certain things in the context that the signals are emitted. This is only
on Windows, and might be fixed in later versions, but use
Qt:QueuedConnection for now to avoid this.

Some more details of this can be found in Qt bugzilla:
https://bugreports.qt.io/browse/QTBUG-78488
2020-04-27 13:50:19 -03:00
Erik Botö
4ae3d47d10 AppVeyor - Don't use parallel build for QWT (#3420)
Seems like QWT sometimes fails when using parallel build, so use -j1
when building it to force non-parallel build.
2020-04-27 11:02:45 -03:00
Mark Liversedge
3aca25c681 User Chart Program Editor Size
.. just make it bigger, so easier to see the whole thing, and also
   fixed up scaling as resizing the window.
2020-04-27 14:29:24 +01:00
Erik Botö
0caa399e06 AppVeyor - Update to Qt 5.14.2 (#3419)
Update to Visual Studio 2019 image, which now has Qt 5.14.2.
2020-04-27 09:04:42 -03:00
Ale Martinez
8fe784c8d2 AppVeyor - Remove upload to transfer.sh
It is not required since artifacts are more convenient and reliable.
2020-04-26 19:00:37 -03:00
Mark Liversedge
ed33157945 Minor Datafilter fixups
.. the while loop limit of 10000 loops is too low, especially when
   looping over ride samples.

.. the pd model short names contain spaces and will never work with
   the datafilter estimates() function.
2020-04-26 21:53:50 +01:00
Ale Martinez
75c3039358 AppVeyor - Enable CloudDB for Windows CI builds
Missing from previous commit
2020-04-26 11:54:03 -03:00
Ale Martinez
d5fffcc8fa Generate AppVeyor artifact before upload
This is a required step to upload to GitHub releases.
Don't fail on transfer.sh unavailability.
2020-04-25 21:27:56 -03:00
Ale Martinez
a853ce9e9d AppVeyor - Add secrets for Windows ci builds
To enable access to online services
2020-04-25 12:58:18 -03:00
Mark Liversedge
d399d1ce4c Fix month and friends to work with vectors
.. a cut and paste error !
2020-04-25 10:47:52 +01:00
Mark Liversedge
a82e1467b5 Datafilter vectors - aggregate()
.. aggregate(vector, by, sum|mean|max|min|count) - aggregate vector v
   grouping by vector by (which will be repeated if too short) using
   the function sum .. count to perform the aggregation.

.. returns the aggregated series, modelled on the R aggregate function.
2020-04-25 09:57:33 +01:00
Ale Martinez
c6dd6a1f64 AppVeyor - Add VLC plugin folder
Also enabled Robot and console for testing and debugging purposes.
2020-04-24 22:33:54 -03:00
Mark Liversedge
adc9fc84cd DataFilter vectors - date arithmetic
.. week() & weekdate() - week converts a date to weeks since 1900/01/01
   and weekdate() converts weeks since 1900/01/01 back to the date at
   the beginning of the week.

.. month() & monthdate() - week converts a date to weeks since
   1900/01/01 and weekdate() converts weeks since 1900/01/01 back to
   the date at the beginning of the month.

.. basically useful for grouping by week and month or other forms
   of date arithmetic.
2020-04-24 20:59:27 +01:00
Ale Martinez
df268b7e6f Add vlc version to versionHTML
To help identify issues with VLC version mismatch at runtime
2020-04-24 15:47:31 -03:00
Ale Martinez
95d0e330b0 Add Python version used a build time to versionHTML
Similar to R, useful to determine which Python version is required.
2020-04-23 12:54:56 -03:00
Ale Martinez
0398bcdea3 AppVeyor - Add Python 3.6 to Windows ci builds
Using sip 4.19.8
2020-04-23 12:53:52 -03:00
Ale Martinez
0ed1ad86a7 AppVeyor - Add R integration to Windows ci builds 2020-04-22 15:23:03 -03:00
Ale Martinez
521b507b18 Import Location and Equipment metadata from fitlog files
Fixed #3406
2020-04-22 11:34:10 -03:00
Ale Martinez
ecc8c9b593 AppVeyor - Upgrade to VS 2017 and Qt 5.12
Use jom to reduce build time
Add OpenSSL 1.1.1 libraries
2020-04-21 21:17:40 -03:00
Ale Martinez
613ddbda81 Trends Summary - Add Sport column to xtrain activities 2020-04-21 21:17:40 -03:00
Mark Liversedge
2735d8969a Fix Generic chart hover
.. for line charts when one curve is shorter than another the code for
   calculating the nearest point (along x-axis) didn't account for
   negative and positive results from a quick calculation.

.. just needed a little help from our friend std::fabs()
2020-04-21 20:58:35 +01:00
Mark Liversedge
7a0ed0792b Datafilter vectors - measures()
.. measure("group", "field|date") - get the measures or dates of the
   measures.

.. enables us to work with measurements independent of activies, but
   we probably need a way of controlling interpolation so we can
   get a vector that only contains measurement points.
2020-04-21 10:49:46 +01:00
Ale Martinez
1167cdd582 Add Edge 530 id to FitRideFile
Fixes #3404
2020-04-20 17:18:28 -03:00
Ale Martinez
d8f68a93f0 Add D2XX to AppVeyor Windows ci builds
Moved all libraries to the same folder
2020-04-20 16:22:46 -03:00
Mark Liversedge
368da6d075 DataFilter vectors - cumsum()
.. cumsum(v) returns a cumulative sum of the contenst of vector v.
2020-04-20 12:10:23 +01:00
Ale Martinez
0f2dae05bb AppVeyor - Copy dependencies and Upload build result to transfer.sh
Copied gc-ci-libs.zip to GoldenCheetah/WindowsSDK after removing
deprecated dependencies (kQOAuth and QwtPlot3D) and adding vlc dlls.
Used --version command line option for minimal testing.
2020-04-19 14:56:10 -03:00
Mark Liversedge
33d5c1fe2b Cosmetic Updates
.. sorry, but the power profile colors are hardcoded (which is fine)
   but they are too dark, so fixed that up.

.. also the overview (until it is configurable) doesn't show total work
   or variability index. Which I've added as they are quite useful esp.
   work as a proxy for load and calories.
2020-04-19 14:42:36 +01:00
Mark Liversedge
b97eca37ff PeakPowerIndex, UserChartData and Overview Fixups
.. working with user charts to plot configured CP versus the trend
   in power indexes led to some new code and a few fixups:

   * new metric PeakPowerIndex is the best PowerIndex value for the
     ride based upon power mean maximal data. It is not computed for
     intervals.

   * overview chart default config shows the PeakPowerIndex instead
     of Power Model which was blank and unimplemented.

   * the overview chart was not in the window registry, it must have
     been removed by accident in a cut and paste incident

   * the 'activity' function is userchartdata was not called, the code
     was not included (it iterates over samples, but not activities)
2020-04-19 10:06:27 +01:00
Ale Martinez
29fcc6aafe Add detailed version information to --version command line option
Similar to About > Version, used to provide more information after ci builds
Also --usage is added as synonimous for --help for completeness
2020-04-18 15:32:22 -03:00
Mark Liversedge
562cde58f4 Remove call to MainWindow::searchFocusOut on MacOS Build
.. it was deprecated.
2020-04-15 07:29:09 +01:00
Ale Martinez
7e77dd552a Include first record in exported CSV files with All Data
Fixes #3396
2020-04-13 13:29:19 -03:00
Mark Liversedge
e5b756b060 Align View menu with NewSideBar
.. need to keep in sync.
2020-04-13 13:26:02 +01:00
Mark Liversedge
8c4758cc7a ChartBar drag fixup for Qt5.10 regression
.. When the widget in QScrollArea resizes the position is set to origin,
   which is a regression introduced sometime after Qt5.9.

.. If the chart bar was scrolled then dragging a tab would cause the
   buttonbar to be resized temporarily as the item is removed from one
   index and placed at another.

.. To get around this we make the buttonbar fixedWidth, which means no
   resize events or processing occurs. But it means we need to adjust
   as widgets are added and removed.

.. Fortunately an existing function 'tidy()' is available to do this for
   us, but needed to be controlled (only resize when widgets are added
   or removed).

.. If the regression is fixed this commit can be reverted, but it should
   be harmless with/without any Qt fix.
2020-04-12 22:57:34 +01:00
Mark Liversedge
856de3e1e5 ChartBar drag fixup
.. turns out the stack in homewindow and the "buttons" on the chartbar
   all need to be re-ordered to align with the tab index.

.. some poor design in here, but letting it go for now as we will be
   replacing the 'HomeWindow' widget in this release cycle anyway.
2020-04-12 21:36:41 +01:00
Mark Liversedge
c31d5c703f More accidental debug
.. this is becoming a bad habit. sorry.
2020-04-12 20:38:42 +01:00
Mark Liversedge
4b3c36464e ChartBar scroll left/right fix and animate
.. scroll left and right jumped to front/back which assumes there isn't
   more than 2 page widths of charts -- this is not always the case.

.. we now scroll a third of a screen full at a time with animation to
   give some feedback to the user as we scroll.
2020-04-12 17:01:32 +01:00
Mark Liversedge
7eeb4f9179 Remove debug output
.. errant code from debugging during development.
2020-04-12 14:10:52 +01:00
Mark Liversedge
ccc6345606 Re-arrange Tabs by dragging on the ChartBar
.. allow the users to rearrange the tabs by dragging and dropping them.
.. does not autoscroll, but could be added later for finesse.

Fixes #3395
2020-04-12 13:01:41 +01:00
Mark Liversedge
b051f30a7a Remove GcScopeBar.h include in Overlay Widget
.. breaks builds as GcScopeBar is deprecated and the include isn't
   needed anyway.
2020-04-11 21:44:16 +01:00
Mark Liversedge
c7515e040b Reinstate head toolbar color
.. Theme colors for chrome were not being applied to the main toolbar
   after the last commit. A couple of temporary hacks got left into the
   commit.
2020-04-11 21:29:57 +01:00
Mark Liversedge
587c631b82 Deprecate ScopeBar code, cleaner ChartBar
.. the chart bar used some of the code from the old scopebar widget so
   decoupled that and made it a little more modern.

.. GcScopeBar now deprecated
2020-04-11 20:56:59 +01:00
Mark Liversedge
28b242815b New Sidebar and deprecate Scope Bar
.. remove the old scope bar in favour of a more modern sidebar as we
   transition the UI to a new design.

.. the newmainwindow approach is not practical, as making 2 UX coexist
   at the same time was impossible and would lead to major issues.

.. note a number of views are on the sidebar but disabled, they will
   be added over time.
2020-04-11 15:34:22 +01:00
Ale Martinez
feacfefbf4 Fix small error in DataFilter metrics(Symbol,...)
The 2nd parameter of RideItem::getForSymbol is a boolean for metric/imperial,
passing c selects imperial units when metrics(Symbol,...) is used in LTMPlot.
2020-04-06 21:54:31 -03:00
Ale Martinez
42fa49c50f Add sport field to RideItem/RideDB as primary field
Exiting isRun/isSwim are preserved and new isRide/isXtrain added.
Use them in DataFilter to provide isRide, isRun, isSwim and isXtrain
and in RideSummary for better filtering of activities in rides, runs
swims and xtrains.
Part 1 of #3280
2020-04-06 19:13:43 -03:00
Mark Liversedge
f0315ccca5 DataFilter vectors - metrics date range
.. metrics(symbol) now supports an optional start and stop date
   range.

.. metrics(symbol|date [, start [, stop]]) - where start and stop
   are numberically days since 1900/01/01 or can be date strings
   such as "2019/12/31" for 31st December 2019.

.. this is to provide an alternative way of working with metrics
   that was previously supported with the '[[' and ']]' operators.
2020-04-05 12:42:01 +01:00
Mark Liversedge
c082ec50e9 Datafilter vectors - Date vectors
.. be consistent with dates and always work with days since
   1900/01/01. That way date arithmetic is consistent in the
   data filter.

.. the GenericChart converts data to MS since Epoch if the axis
   is a date range, in the same way it does for Time axes.
2020-04-05 10:58:58 +01:00
Mark Liversedge
39660ecc37 NewMainWindow Prototype - MacOS Native
.. basics for Mac native toolbar without title and support
   for resize and full screen etc.

.. toolbar is empty and will need cocoa elements added but
   will fix up when MS Windows native support is to the
   same level.

.. suspect only Linux will use frameless and might move to
   accepting the toolbar is present on Linux.
2020-04-04 12:05:01 +01:00
riccioclista
685c176eca QwtPlotGappedCurve: Include the last point in the plot (#2678)
Also solves the same issue is present when plotting Measures in Trends.
2020-04-01 13:06:23 -03:00
Ale Martinez
77cf334f8a Add Device Wizard - Select Device screen capture for the wiki
[skip ci]
2020-04-01 11:23:32 -03:00
Mark Liversedge
18922e1316 NewMainWindow resizing
.. frameless window so we need to do it all ourselves.
   Works ok, so time to move onto titlebar with Mac.
2020-03-31 19:54:30 +01:00
Ale Martinez
b3f35597d3 Import Notes from TCX files
Fixes #3385
2020-03-29 22:41:48 -03:00
Ale Martinez
22c2cdd5d7 TcxParser - initialize for each activity to support multisession files
Fixes #3362
2020-03-29 22:30:01 -03:00
Ale Martinez
ecd6b13a26 Initialized WorkoutWindow to the currently selected workout
Fixes #3384
2020-03-29 20:12:45 -03:00
Mark Liversedge
f3e3209f32 NewMainWindow prototype - basic toolbar
.. simple start just to resolve functions typically performed
   by the window manager. Minimise/Maximise.

.. need to resolve resize by dragging sides/corners as well as
   drag from full screen.

.. Not 100% convinced this is the right strategy (frameless
   window and managing resize/drag within the mainwindow).
2020-03-29 21:40:42 +01:00
Mark Liversedge
c9bca752cc NewMainWindow prototype - close, minimize
.. very basic, no icons. Just to be able to close
   gracefully. Need to get same level of functionality
   on windows and macOS.
2020-03-29 13:46:24 +01:00
Mark Liversedge
102b5dff15 NewMainWindow Protoyping
.. prototyping a new qmainwindow layout, will only be shown
   if you pass --newgui on the command line.

.. there will be lots of commits as this develops across
   different platforms and building blocks are put into
   place.

.. this is likely to take 2 months or more before it becomes
   something usable.

.. the --newgui is for developers only, since there will not
   be any usable functionality for quite some time.
2020-03-29 12:25:53 +01:00
Ale Martinez
eaf54b692e Cloud Service Download - linked defaults and auto data processors
Fixes #3381
2020-03-28 11:49:47 -03:00
Alejandro Martinez
3c1adf90ef Update README.md
[skip ci]
2020-03-27 13:38:45 -03:00
Alejandro Martinez
43150e7c17 CloudDB sharing of Custom Metrics (#3370)
Upload/Download are similar to Export/Import in User Metrics config dialog.
Admin interfaces are similar to CloudDB charts for both user (edit/delete)
and curator (set curated/edit/delete).
Name and Description are initialized to the corresponding items for the metric
but both can be edited to provide different/more complete information for the
CloudDB interfase.
Fixes #3361
2020-03-26 15:03:44 -03:00
Mark Liversedge
4d1ef200bf UserChart & GenericLegend config nits
.. when you change colors in preferences the user chart didn't honor
   the new plot marker color and the generic legend did not update the
   background color.
2020-03-26 17:57:59 +00:00
Mark Liversedge
afa5d01a31 Datafilter vectors - lowerbound()
.. lowerbound(v, value) - returns the index into v for the first
   element that does not evaluate to < value.

   This is a binary search modelled after std::lower_bound (and
   uses it in the implementation too)
2020-03-26 10:00:52 +00:00
Mark Liversedge
52dc384447 Fix user chart program regression introduced in last commit
.. need to refresh the user program when it is edited by the user.
   the last commit fixed a memory leak in this code but broke it.

.. should think about changing this piece of code and allowing the
   userchartdata to accept a new program to process (instead of
   it being set in the constructor).
2020-03-25 21:44:40 +00:00
Mark Liversedge
bda728696f Datafilter vectors - curve()
.. curve(series, x|y|z|d|t) - retrieve the data from another curve so
   we don't have to recompute it when working with user charts.

   if the datafilter is not on a user chart it will return 0. User
   needs to ensure the series are ordered correctly for this to work.
2020-03-25 21:12:37 +00:00
Mark Liversedge
b24869e1a8 DataFilter vectors - vectorize + - / * ^ operations
.. you can now use algebraic operators with vectors. If a vector
   is shorter it is repeated to match, e.g.

   a<-c(1,2); b<-c(1,2,3,4,5); d<- a * b;

   is calculated as;

   d<- c(1,2,1,2,1) * c(1,2,3,4,5) and will yield: 1,4,3,8,5
2020-03-25 15:22:48 +00:00
Mark Liversedge
d32152f6dc Datafilter vectors - vectorize the trig functions
.. cos() et al now support vectors, so you can do e.g.
   a<-c(0,90,180,270); b<-cos(a);

.. need to also do the binary operations * / + - ^ next.
2020-03-25 14:33:20 +00:00
Mark Liversedge
8ee52edeee Datafilter vectors - stddev() and variance()
.. both take a single parameter (a vector) and compute the standard
   deviation and variance accordingly. sigma and sigma^2.
2020-03-24 20:01:17 +00:00
Mark Liversedge
74c8fddb1a Datafilter vectors - arguniq() and uniq()
.. arguniq(list) - returns an index into unique values in the list. the
   list does not need to be sorted, the returned list index always
   refers to the first item in a list (not the later duplicates).

.. uniq(list [,list n]) - will de-dupe the first list by removing
   duplicates. All remaining lists will have the same items removed
   by index, in the same way as sort/argsort.
2020-03-24 13:45:20 +00:00
Mark Liversedge
9282bd783e Fix windows compile error
.. bool function must return a value; Bindings::addAnnotation()
2020-03-22 18:56:29 +00:00
Mark Liversedge
ce89389451 Datafilter - meanmax(efforts)
.. meanmax(efforts) - runs the filtering scheme used on the cp plot to
   filter out submaximal data; a mixture of comparison to a LR, maximal
   from same date considered as an averaging tail and use of power
   index.

.. it returns a vector of indexes into the meanmax data for power;
   so meanmax(POWER)[meanmax(efforts)] can be used, but since the
   index starts at 0, need to add 1 to get seconds.
2020-03-22 09:40:41 +00:00
Mark Liversedge
d36b39d31e Generic Plot Cosmetic
.. show x-avg on select at the top of a line chart, stops it overwriting
   the min/max values. Especially relevant when using a time/date axis
   hence limiting to a line chart where this is most common.
2020-03-21 08:34:49 +00:00
Mark Liversedge
987e79024f Fix select linear regress paint for time x-axis
.. scaling and transformation of x-value was needed before painting the
   linear regression line when using a time axis.
2020-03-20 18:39:17 +00:00
Mark Liversedge
63ebd5fc7c V3.6 Development Build Numbers
.. not neccessary to get out a build just yet, but cycling on the
   build number and version string for any development builds
   users download from travis or build themselves.
2020-03-20 10:01:41 +00:00
Mark Liversedge
3fab386fb2 PythonChart Toggle Web/Qt
Fixes #3375
2020-03-20 08:42:13 +00:00
Mark Liversedge
fc02b8a38b GenericChart Data Labels
.. allow data labels for points on the chart, added to User, R and
   Python chart addCurve() etc.

.. NOTE: opengl painting ignores this setting so should be disabled
         for data series that want labels. We do not do this
         automatically, but might consider that later.
2020-03-20 08:06:56 +00:00
Mark Liversedge
71690f32a7 Generic Chart Python Label Annotation - Part 2b of 2
.. GC.annotate(type="label", series="Power", label="CP=222") added to
   the python chart to add a label to the legend for displaying things
   like parameter estimates.

.. it does feel like annotations will need to be thought thru and likely
   result in a GenericAnnotation class. But lets cross that bridge
   when we get there.

.. Label annotations are enough to get started and are now present in
   User, R and Python charts.
2020-03-20 07:16:52 +00:00
Mark Liversedge
d3ba4b0f1e Generic Chart R Label Annotation - Part 2a of 2
.. GC.annotate(type="label", series="Power", c("cp", cp))

   Provide call for adding label annotations from R to
   match the recent update for the user chart.
2020-03-19 21:48:28 +00:00
Mark Liversedge
2a08c4c2b2 Nits from last commit
.. windows builds bork as bool function doesn't return anything

.. left in a couple of debug messages.
2020-03-19 19:43:01 +00:00
Mark Liversedge
e2e9fe63cf Generic Chart Label Annotation - Part 1 of 2
.. add annotation labels from within  a datafilter, ultimately
   gets shown alongside the legend in generic plot.

.. this only works from a user chart, so need to add an equivalent
   API to call from Python and R.
2020-03-19 17:30:52 +00:00
Mark Liversedge
917bbab173 Datafilter - bool()
.. bool(expr) - returns 0 or 1 for the expression passed. This allows a
   logical expression to be used in a formula (which is useful when
   fitting models).

   e.g a*(x>1) is invalid, whilst a*bool(x>1) is not.
2020-03-19 11:31:20 +00:00
Mark Liversedge
a4727c8a46 DataFilter - better error feedback
.. when editing programs the syntax errors were not being
   shared with the user, just a wavy red line.

.. this commit adds the errors to the two main dialogs for
   editing user metrics and user charts.

.. in addition a completer was added to the user chart
   series editor to help (it already existed on the metric
   editor).
2020-03-19 10:45:00 +00:00
Mark Liversedge
323a97fb40 DataFilter - lm()
.. lm(formula, xlist, ylist) - fits a formula to the x,y data using
   the levenberg-marquardt OLS algorithm.

   the formula is expressed as any other expression and the starting
   values must be set beforehand- this is also reinforced by the fact
   the parameters must exist before the formula is declared.

   the fit returns a vector [ success, RMSE, CV).

.. an example, to fit the morton 3p model to meanmax would be:

   # fetch mmp data
   mmp <- meanmax(POWER);
   secs <- seq(1,length(mmp),1);

   # set starting values, then fit Morton 3p to first 20 min data
   cp <- 200; W<-11000; pmax <- 1000;
   fit <- lm((W / (x - (W/(cp-pmax)))) + cp,
             head(secs,1200),
             head(mmp,1200));

.. along the way I needed to refactor the way lmfit is managed and
   also corrected banister to avoid threading issues.

.. also snuck in a sqrt() function as needed for testing and was
   rather an egregious oversight.
2020-03-18 21:06:24 +00:00
Mark Liversedge
d7603b7fa6 GenericPlot fixup hover/hide with decorations
.. when adding symbols to lines or lines to a scatter we
   need to show/hide the decoration with the main series.

.. in addition if the decoration is the only thing visible
   e.g. symbols for line (with no line style) then still
   need to show the hover on the symbols.
2020-03-17 19:28:21 +00:00
Mark Liversedge
95eca909c1 Lines can have symbols, scatters can have lines
.. honour both the symbol and line style settigns for curves. This
   means you can have a series on a line chart that is dots and a
   series on a scatter that is a line.

.. need to think about best way to manage hover, but suspect it should
   only apply when a line chart has a series with no line but has
   symbols -- we should hover on them. Currently they are ignored.
2020-03-16 16:30:36 +00:00
Mark Liversedge
4912f3731d Fix [index] reduce/reduce warning for Datafilter.y
.. increasing the precedence for the [ ] symbols resolved the
   reduce/reduce issue introduced in commit 1231f59b1a

.. as a result the new rule added in that commit has been
   removed.

.. thanks to Ale Martinez for the correct fix.
2020-03-16 15:04:15 +00:00
Mark Liversedge
95365b647c Datafilter vectors - smooth() ewma
.. smooth(list, ewma, alpha) - smooth data using an exponentially
   weighted moving average. alpha must be between 0 and 1, if not
   0.3 is used as a fallback.
2020-03-15 21:23:59 +00:00
Mark Liversedge
0f5f44053f Datafilter vectors - smooth()
.. part of a few updates to add some smoothing algorithms to apply
   to vector data, this first one is just a simple moving average.

.. smooth(list, sma, centered|forward|backward, window) will apply
   smoothing to the list. Note that centered doesn't use multiple
   windows when the window size is even, so recommend always using
   an odd number for this parameter.

.. will add ewma and maybe some others over the next few commits.
2020-03-15 20:22:42 +00:00
Mark Liversedge
3f9774b2c2 Generic Chart Series - show on legend
.. you can now configure if a series is shown on the legend, this is
   for lines or curves that are there for illustration but do not
   need to be displayed in the legend / hovered.
2020-03-15 18:43:11 +00:00
Mark Liversedge
cc462f49a3 Datafilter - deprecate [[ ]] "vectors"
.. they are rather anachronistic. use of vectors across the datafilter
   and the metrics() function replaces them.

.. as a by-product nested indexing works without a syntax error (yes
   you could add a space, but most folks would be lost).

   e.g. a[b[1]] works as you would expect.
2020-03-15 16:56:39 +00:00
Mark Liversedge
207e20a369 User Chart Screen Shots for wiki
Wiki page for user chart needs some pics.
2020-03-15 16:10:15 +00:00
Mark Liversedge
1231f59b1a DataFilter Grammar for [index]
.. expressions like a+b*c[n] were being parsed as equivalent to
   (a+b*c)[n] instead of a+b+(c[n]).

.. to resolve this symbol[index] is declared first in the grammar
   and whilst it will introduce reduce/reduce warnings that is
   actually what we want (we declare it early to override the
   definition from expr below).

.. keener yacc wizards might have a more elegant solution for
   this one....
2020-03-15 14:16:44 +00:00
Mark Liversedge
7f81ac76a9 Datafilter vectors - lr()
.. lr(xdata,ydata) - perform a linear regression returning the results
   in a vector of 4 values [ slope, intercept, r2, see ].

.. as a by-product the slope on generic plots now show r2 and see as
   they are being calculated by GenericCalculator.
2020-03-15 11:38:30 +00:00
Mark Liversedge
48fbdbd542 Generic Plot Linear Regress with Time Axis
.. need to transform values from MS since Epoch back to seconds
   when doing the LR- since we convert when setting up the chart
   as Qt wants time based axes to use MS since Epoch (they do not
   offer any transformations for the axis).

.. this means that the slope/intercept are now calculated correctly
   on charts that use time based axes.
2020-03-15 09:08:59 +00:00
Mark Liversedge
7e0fcf32f9 Wiki screen grabs
.. some images to use on the wiki page for working with user charts.
2020-03-14 16:52:30 +00:00
Mark Liversedge
3559395c83 Fix [ expr ] when expr is a vector
.. whilst its possible to assign to a selection of elements in a
   vector e.g. v[c(3,5,7)] <- 99 to assign 99 to el 3,5 and 7
   I forgot to update the code to /return/ a vector e.g.;

   a <- v[c(3,5,7)]

   was not handled at all. This commit fixes that. It means we
   can select from a vector element-wise -or- via a logical
   expression.
2020-03-14 16:12:52 +00:00
Mark Liversedge
0125e2aadf DataFilter vectors - sapply(list, expr)
.. sapply(list, expr) - as in R sapply returns a vector of the results
   of expression applied to every element in list. Values for x and i
   are made available in the expression.
2020-03-14 15:34:30 +00:00
Mark Liversedge
cc0108d48f Datafilter vectors - selection with [ lexpr ]
.. v[ lexpr ] - returns a subset of vector v where logical expression
   lexpr returned non-zero.

   lexpr is evaluated for every element in the vector and has two
   variables to work with 'x' is the current element value and 'i'
   is the index into the vector (starting from 0).

.. additionally, positional vectors can be used in assign statements
   but we did not go so far as to allow selections to do the same in
   this commit. that might be fixed later.
2020-03-14 13:45:57 +00:00
Mark Liversedge
2b58c20cc9 DataFilter vectors - [] indexing
.. changed the indexing operators [ ] to work solely with vectors.
   so it is now possible to reference an element in a vector:

   a<-c(1,2,3,4);
   b<-a[1]

   will assign the value 2 to variable b.

.. additionally you can assign to an element of a vector, following
   on from above:

   a[0]<-99;

   will mean a how has 4 elements: [99, 2, 3, 4]

.. lastly you can use [] with an expression, so:

   c(1,2,3,4)[2]

   evaluates as value 3.
2020-03-13 19:47:27 +00:00
Mark Liversedge
ef97cc84a0 Data Filter vectors - banister()
.. banister(metric1, metric2, series) - get a vector of banister
   data where stress metric1 and performance metric2 are used and
   fetch the series which is one of nte,pte,perf,cp or date.

   E.g. to get the predicted CP curve using PowerIndex you would
   use: banister(BikeScore, Power_Index, cp)
2020-03-13 15:43:25 +00:00
Mark Liversedge
b1c9f7071b DataFilter vectors - pmc()
.. pmc(expr, series) work with PMC, generating it from an expression
   that is evaluated for every ride (as a stress metric). Returns a
   vector of the series specified e.g. pmc(BikeScore, lts)
2020-03-13 14:17:38 +00:00
Mark Liversedge
87d1af5b13 Generic Plot Time Axis support
.. support for axes that are time based, assuming the user has
   supplied in seconds starting from 0 (which is true for an
   activity).

.. since QT charts requires times to be in MS since Epoch
   and we don't know if we need to convert from seconds
   until the axis is configured the series data is updated
   just before charts are created in GenericChart.

   This means that anyone using generic plot directly will
   need to do this conversion. For this reason all integration
   across the GC codebase should be via GenericChart.

   R, Python and now User charts integrate via Generic Chart
   so this should not really be an issue.
2020-03-13 10:11:50 +00:00
Mark Liversedge
694be2d111 Generic Plot DateTime Axis support
.. when plotting on trends view the x-axis is a date based range.

.. still need to update for time based axis when looking at activities.
2020-03-12 19:26:51 +00:00
Mark Liversedge
c0869f5caf GenericPlot auto axis min/max
.. set the axis min max from the series data if not set explicitly
   by the user. Especially useful for date ranges.
2020-03-12 15:48:43 +00:00
Mark Liversedge
3461af38d5 User Chart Part 2 of 2
.. now works on trend view (in rangemode).

.. needed to add daterange to eval in datafilter to provide context
   for operations; e.g. meanmax return for activity or daterange.

.. fixed up a few bugs along the way. But now need to resolve the
   x-axis in generic plot when using dates and to auto set to some
   kind of sensible default.
2020-03-12 14:43:11 +00:00
Mark Liversedge
1e9f8ee174 UserChart user program (formula) re-design
.. the way data is prepared in a user chart has been redesigned, it now
   follows a similar pattern to the user metric program where a number
   of functions can be written and will be called at different points.

.. init { .. } can be called to initialise variables
   relevant { .. } can be called to shortcut computation
   sample { .. } is called for every ride sample
   activity { .. } is called for every activity
   finalise { .. } is called once iteration completes
   x { .. } is called to get the series x values vector
   y { .. } is called to get the series y values vector
   z { .. } is called to get the series z values vector
   d { .. } is called to get the series d values vector (dates)
   t { .. } is called to get the series t values vector (times)

.. at present z,d and t serve no real purpose but will be used to
   augment data points and be shown on the legend when hovering.
   This is a planned future development.
2020-03-12 09:49:15 +00:00
Mark Liversedge
1740fd488b Fix datafilter meanmax memory leak
.. use stack not heap for temporary ridefilecache object.
2020-03-12 06:22:33 +00:00
ericchristoffersen
5ec95681f2 Optimize splines and bikesim dvdt. (#3349)
* Optimize splines and bikesim dvdt.

* Trig identity

* Refactor to provide WattsForV.

* Optimize gps route smoothing, spline distance.
2020-03-11 22:15:20 +00:00
ericchristoffersen
0676ce1d89 Derived stats for sim bicycle config screen (#3332) 2020-03-11 22:14:55 +00:00
Erik Botö
ab2c1048d1 Fix issue with font being "white on white" in dark-mode on Mac (#3331) 2020-03-11 22:00:30 +00:00
Mark Liversedge
66d1d47b1d DataFilter vectors - meanmax()
.. meanmax(SERIES) - returns a meanmax array starting from 1s and
   length out to longest value available for the selected season.

   NOTE: the first point 0s has been removed from the array before
         being returned so you do not need to ignore it or remove
         it programmatically.
2020-03-11 20:30:03 +00:00
Mark Liversedge
96285c874c DataFilter vectors - argsort(), sort(), head(), tail()
.. for creating and syncing ordered lists.

.. argsort(ascend|descend, list) - will return a sort index in the same
   way as numpy.argsort(). It can be used to sort other lists and is in
   fact also used internally by sort.

.. sort(ascend|descend, list [,list .. listn]) - sort 1 or more vectors
   using the first vector as the set to sort, the remaining lists are
   re-ordered together with the first.

   this is useful where you may have timeseries data that is related but
   in separate vectors- you can sort them together.

.. head(list, n), tail(list, n) do as you'd expect, returning a vector
   of length n from the head or the tail. if n is greater than the size
   of the vector the maximal sized vector will be returned.
2020-03-11 16:31:18 +00:00
Mark Liversedge
85fb985d2f DataFilter vectors - metrics()
.. metrics(symbol|date) will return a vector of metrics for the current
   date range selected on trends view honoring all the filters etc.
2020-03-10 18:08:16 +00:00
Mark Liversedge
44eded59b7 DataFilter vectors - samples()
.. samples(SERIES) will return a vector of all datapoints for the
   specified series. e.g. samples(POWER) will return a vector of
   3600 elements for a 1hr ride with 1s sampling.

.. to make sure it doesn't go haywire and open all ridefiles if
   used in a datafilter or in a naive way by users, it will not
   open a ridefile, just return an empty vector.

.. this is safe to use in user metrics; e.g. for average power
   you could use value { mean(samples(POWER)); } and this would
   work well as the ride is opened before calculation starts.

.. there is an added bonus that this means a datafilter:
   length(samples(SECS)) will filter only those rides that are
   open. A useful debug tool for memory usage from download or
   ride import activity.
2020-03-10 16:56:42 +00:00
Mark Liversedge
4ab6bd9809 DataFilter vector - mid()
.. mid(v,pos,count) no equivalent in R but returns a subset of another
   vector v starting from pos for length count.
2020-03-10 14:52:00 +00:00
Mark Liversedge
c0893c052a DataFilter vectors - append() and remove()
.. append(a, b [, pos]) follows the R convention for append and
   will append b to symbol a, optionally inserting from pos. it
   returns the number of elements in a rather than a copy of the
   vector (it is supposed to be quick).

.. remove(a, pos, count) has no R equivalent but does what it says
   calling the underlying QVector function, so should be quick. It
   also bounds checks (does nothing if bound invalid). Just like
   append it will also return the number of elements in a after the
   operation is completed.
2020-03-10 14:22:58 +00:00
Mark Liversedge
98e224b10b DataFilter vectors - seq, rep, length functions
.. some more functions for creating vectors and working with them

.. seq(start,stop,step) - create range vector and negative
   values are allowed e.g. seq(1000,1,-1)

.. rep(value, n) - create a vector repeating the same value
   n times.

.. length(s) - return the length of the *vector*, so if the
   parameter is a single value then the length is zero. this
   might change, but for now it seems useful. An object that
   is created and updated as a vector will return 1 if it
   only contains one element.
2020-03-10 10:50:53 +00:00
Mark Liversedge
70bef43ccd DataFilter vectors - c() function
.. added the c() function, same syntax as the R function it simply
   creates a vector comprised of the parameters passed.

.. if one of the parameters evaluates to a string it will try and
   convert to a number. We only support vectors of doubles for
   simplicity and ease of implementation.
2020-03-10 09:34:20 +00:00
Mark Liversedge
495dff77ca Generic Chart Slope Paint
.. full for scatter, in selection rect for line. Seems a compromise
   between providing useful context on a scatter and avoiding lots of
   noise on a line chart.
2020-03-09 21:03:56 +00:00
Mark Liversedge
35a37ff846 Add QT Charts to R Chart
.. mostly complete, following the Python charts lead on the
   API and basic UX.

.. some nits left in there; pie/bar chart categories and labels
   and an open question on whether/how we let users set the axis
   color / leave it alone.
2020-03-09 19:40:17 +00:00
Mark Liversedge
9e7f843d43 Generic Plot log axes
.. add log axes support.
2020-03-09 11:06:54 +00:00
Mark Liversedge
b17c337979 Generic Plot Slope Fixups
.. paint for whole chart so can compare to data outside of the
   selection area (which is probably the most useful thing to
   do with the slop line).

.. fixup the paint co-ords which assumed x-axis started at 0.
2020-03-09 09:54:33 +00:00
Mark Liversedge
40983afa7b User Chart Opacity Setting
.. was missed in original commit.
2020-03-09 09:05:48 +00:00
Mark Liversedge
b8a6fd40e3 Fix generic plot missing top label on axis
.. when working out the hover area. this is because the first label
   is sometimes aligned above the plot area. so we look a little higher.
2020-03-09 08:35:11 +00:00
Mark Liversedge
67801f4ce7 Export Chart Dont Use Native Dialog
.. a regression from Qt5.12, native dialogs hang if threads are
   in use (!). Not doubt will be fixed, but for now lets avoid
   it -- need to revisit this before releasing since the Qt
   dialog is horrible. Will add to github issues.
2020-03-09 08:04:06 +00:00
Mark Liversedge
4fd07e7688 Fix User Chart Axis Hover bug
.. turns out the jsonunprotect function wasn't stripping the trailing
   spaces that jsonprotect was adding. This caused axis labels to have
   spaces at the end that the qt charts code stripped-- so when we went
   looking for axis label texts they didn't match.

.. this commit causes jsonunprotect to strip trailing spaces. This
   should not result in any regression as use of jsonunprotect is
   limited to HomeWindow properties.
2020-03-08 21:49:17 +00:00
Mark Liversedge
20b00ea33b User Chart Nits
.. x-axis label colors

.. y-axis alignment should not be managed upstream

.. still have issue finding hover area which is not
   present in the python chart.
2020-03-08 20:45:57 +00:00
Ale Martinez
a7debe567b Change Python and R season meanmax to honor left sidebar filters
Fixes #3369
2020-03-08 16:10:54 -03:00
Mark Liversedge
0f1224bb35 User Chart (Part 1 of 2)
.. basic user chart only on analysis view. Users can specify
   a data filter script to prepare data for the x and y axes.
   It uses the generic chart to visualise so one step closer
   to a UX where all charts have the same behaviour.

.. will need to update to place on trends view, including
   updating the way userdata works and possibly adding a
   few new functions to support working with models and mmp
   data amongst a few other things.

.. likely contains quite a few nits as most of the code
   is related to configuration and is a bit thorny.
2020-03-08 16:29:42 +00:00
Ale Martinez
d913e75402 REST API - use default metadata.xml when the file does not exist
Fixes #3368
2020-03-07 20:49:40 -03:00
Ale Martinez
95c1d822a7 Use thread-safe setUrlRequestInterceptor in WebPageWindow
When Qt version >= 5.13
Fixes #3365
2020-03-03 19:35:01 -03:00
Mark Liversedge
10ae17868d Fix jarring update GenericChart with multiple plots
.. setUpdatesEnabled() to stop output did not help at
   all with respect to the jarring effet of watching
   plots added when in stack mode.

.. for some reason adding this QApplication::processEvents()
   fixes that. Go figure.
2020-03-03 19:38:51 +00:00
Ale Martinez
c0b057a48d Strava - Upload Manual Activities
Use Create Activity in Strava API when there is no samples
Fixes #3363
Also map some known sports to the Strava API equivalents,
we should think about a generalization as part of #3280
2020-03-03 11:15:10 -03:00
Mark Liversedge
876ce83c96 Add QChart to Python Chart (4c of 5)
Fixup stack view a) minimum height for plots, b) added a
scroll area to manage more plots than fit on the screen
and will layout horizontally or vertically.
2020-03-02 20:11:56 +00:00
Mark Liversedge
85cbbc3840 Add QChart to Python Chart (4b of 5)
Stack charts now when set as an option, in which case all
data series are given their own plot.

Or alternatively, where data series have different x-axis
names, they get a plot for each x-axis.

Need to fixup a) minimum height as can get squashed and
b) scroll area needed as well as c) layout direction.
2020-03-02 18:59:07 +00:00
Mark Liversedge
ce955e01a5 Add QChart to Python Chart (4a of 5)
.. added GenericChart which manages a collection of plots, so
   you can plot multiple series stacked (like in AllPlot).

.. additionally added option to set layout vertical or
   horizontal, since its useful to layout scatter plots
   horizontally where time series will be largely vertical.

.. at this point the code is slightly refactored to add
   GenericChart between PythonChart and GenericPlots.

.. will shortly add code to support managing multiple plots
   in layouts and adapting if settings change (.e.g the
   python script is edited, settings are changed).
2020-03-02 10:39:58 +00:00
Mark Liversedge
e83c9e8bb3 GenericPlot legend placement and line styles
.. updated to support different linestyles and also legend can
   now be placed above, below, left or right of the chart and
   orientated to list series vertically or horizontally.

.. the vertical legend is a bit ugly as nothing lines up, will
   fix up separately.
2020-03-01 17:37:07 +00:00
Mark Liversedge
6ce905509f Add QChart to Python Chart (3i of 5)
Isolate curves by hovering on axis for scatter and line
charts. Also added horizontal guide line and click to
add horizontal annotations (but not added yet).

Annotations will come later, but added as was the right
part of the code.

Also tidied up a bit of the paint code in selection tool
since it was a bit messy.
2020-03-01 10:03:47 +00:00
Mark Liversedge
ec24536f65 Blank texts break axes login in GenericPlot
.. for some reason in earlier version of Qt Charts there are errant
   items in the same area as the axes that are blank, these break
   the code that derives the axes rectangles in Qt Charts <= 5.10
2020-02-29 16:47:50 +00:00
Mark Liversedge
c81576e311 Fix axis paint of cursor values in GenericPlot
.. now we have the axis rectangle (previous commit) we can paint
   the cursor values in the axis rather than on the canvas. Lots
   of work to fix a cosmetic issue, but damn, it was worth it.
2020-02-29 14:01:23 +00:00
Mark Liversedge
73be187b15 QAbstractAxis get rect
.. amongst a few other nits when a plot is resized or the chart is
   being finalised we get the scene rectangle for each of the axes.

   This is so we can trap when the mouse hovers over an axis and
   also so we can paint the current mouse coordinates on the y-axis
   in the scatter plot (they are painted on the canvas at present
   and paint over each other causing a nasty artefact).

   Will fixup y-value cursor tracking shortly.
2020-02-29 11:50:06 +00:00
Mark Liversedge
85bdb48ab7 GenericPlot selector hover highlight
.. to indicate the selection area can be grabbed and moved. Just
   a minor UX tweak to help signpost interactive elements.
2020-02-28 20:26:33 +00:00
Mark Liversedge
40195ab0ce Fixup GenericPlot legend hover for pie and bar charts
.. the legend is mostly static for pie and bar charts
   but should be shown nonetheless.
2020-02-28 18:56:21 +00:00
Mark Liversedge
0ecfa0e67e Add QChart to Python Chart (3h of 5)
Use legend to select which series are plotted by clicking to
show hide a series. Hover just shows a hover background and
does not temporarily isolate the series, this may be something
to consider for later.

Applies to scatter and line charts.
2020-02-28 14:31:50 +00:00
Mark Liversedge
21d1e071bf Ignore '.' folders in ChooseCyclistDialog
.. mostly because this is good practice but also to avoid showing
   the .pyfixes folder.
2020-02-28 09:14:34 +00:00
Mark Liversedge
f4d954c3ee Initialise Calc member variables
.. rather egregiously did not set any to zero etc and expected
   cummulative ops to just work. they didn't.
2020-02-28 09:13:31 +00:00
ericchristoffersen
426c28b961 Remove CRS_LOC. (#3352) 2020-02-27 15:58:37 +00:00
ericchristoffersen
da3e8212cf Allow TTS Files for VideoSync. (#3354)
Rewrite TTSReader Stream Merge

Add gpi reset.
2020-02-27 15:56:42 +00:00
Mark Liversedge
cee6f0329a GenericPlot refactor source files
.. created separate source files for the legend and selection tool
   classes and removed some of the interdependency.

.. partly because GenericPlot.h and GenericPlot.cpp were becoming
   unwieldy and partly to support using the generic legend in
   other charts (notably CP, LTM and AllPlot).
2020-02-24 20:20:57 +00:00
Mark Liversedge
37ebd06564 Generic Plot tidy up state transitions
.. fix a few nits when moving between states for the selection tool
   and updating the display.
2020-02-24 19:00:00 +00:00
Mark Liversedge
5ad1f1624d Fix GenericPlot performance when select active
The scene was being updated unneccessarily when it was active but
not changing (i.e. selection rectangle was stationary etc).

Added a state variable rectchanged to the selection tool to notify
the updateScene() method that nothing has changed since the last
event. So do nothing.
2020-02-24 17:48:57 +00:00
Mark Liversedge
bbc0a1f0ea Add QChart to Python Chart (3g of 5)
Added selection on line chart, uses a range selector and
works in pretty much the same way as the scatter rectangle
selector.

I've removed a lot of the calculated values from the plot
since it gets very busy very quickly.

I also noticed there is a significant performance problem
when selections are active- suspect there are a large
number of unneccessary scene updates. Will investigate.
2020-02-24 17:16:25 +00:00
Mark Liversedge
0da3142f6b Fix line chart legend when series missing
.. when no value present was miscalculating the nearest point to the
   cursor on the x-axis because distance was calculated as a large
   negative by using a series point value of 0 (when no value was
   available). Fixed by just ignoring zero values.
2020-02-24 11:49:46 +00:00
Mark Liversedge
16a5cb0c6f X-Axis in Generic Plot Legend
.. to show the current x-axis value, missed off when concentrating
   on showing y-axis values for the data series.
2020-02-24 11:08:09 +00:00
Mark Liversedge
ad3024ac7f Add QChart to Python Chart (3f of 5)
Added hover code to line chart, so get legend values on hover
and marker points as you mouse over the series and an x-axis
label at the bottom to show current x value.

Also added Utils::removeDP() to remove decimal places from a
number string e.g. 24.000 becomes 24, 987.3440500 becomes
987.34405. This is a hack to avoid handling decimal places
in the user settings, but will keep as reduces the amount
of "digital ink" regardless.
2020-02-24 09:22:48 +00:00
Ale Martinez
0035530f29 Add some validations to User Metrics creation and modification
Enable accept only when boty symbol and name are non empty
Warn on name and symbol collisions to avoid silently discarded
metrics or metrics not usable from formulas
Complements 635eccd001, related to #2279
2020-02-22 21:15:06 -03:00
Mark Liversedge
03acacbd7d Some minor Generic Plot fixups
.. recent fix to check for points on the boundary (checking with >=
   and <= instead of > and <) mean't that items on the boundary
   would be inserted into multiple quadrants. This wasn't much of
   and issue as only using quadtree for mouse hover, but it is a
   bug none the less and needed fixing.

.. compile time warning nits also tidied up for new code, to stop
   errors spewing on build and hiding real issues.
2020-02-22 06:16:48 +00:00
Ale Martinez
635eccd001 Add custom metrics export and import to .gmetric files
The .gmetric file it is the same xml format as usermetrics.xml
with just one metric, on import only the first is imported.
Import is similar to Add with the imported settings prefilled,
so the user can change it before to effectively add it or cancel.
Fixes #2279
TODO: we should check for duplicate symbols on Add/Edit/Import
2020-02-21 19:07:47 -03:00
Ale Martinez
6659262ae2 Fix Travis-ci build matrix configuration
There were errors and warnings in config due to format issues
and deprecated keywords.
2020-02-21 17:54:11 -03:00
Mark Liversedge
78e74ddaa9 Add QChart to Python Chart (3e of 5)
Added new legend which displays hover over value from the
prior commit. Also fixed up the quadtree issue with some
points being hard to hover.

Need to consider what to do with multiple x-axes; am tempted
to create a new chart for each x-axis since hover and general
interaction gets very messy with multiple x-axes.

Next commit will extend the current functionality onto line
charts before we move onto hover for pie and bar charts.
2020-02-21 20:00:43 +00:00
Ale Martinez
78b94c9d8f Upgrade travis-ci builds to Qt 5.14.1 2020-02-20 11:29:45 -03:00
flo
fae2b935e1 Support Multisport fit files
GoldenCheetah lacks support for splitting multisport fit files.
These files combine multiple sports recorded into a single
activity. Those sports are marked by session entries. These
session entries are parsed but ignored.

Fit files are parsed on-the-fly without caching data. This is
great in terms of memory useage but bad in terms of splitting
the activity into sessions because of the fit specification.
The specification allows session entries to appear either
grouped at the beginning of the file or at the end of the session
spread throughout the file.

We do cache the most relevant data entries along with the
session field entries. This hopefully adds as little overhead
as possible while parsing and in memory useage, but allows
us to determine if there are multiple session entries in one
file. If so, we can split the single file into multiple ones,
each representing a single sport (activity). Eg.: If a triathlon
is recorded using the multisport method it is split up into
the following activities:

 - Swim
 - Transition
 - Bike
 - Transition
 - Run

This corrects the metric calculation. Prior to this change
the parsed activity is tagged as a run activity and the whole
data - swim/bike HR, bike cadence, ... - was taken into account
for the run metrics calculation. Now only the relevant part of
the file is taken into account.

Laps as well as XData records are also split up to the files
created out of a single multisport file and are aligned in time.

It turned out that it is best to treat transitions as run.

Fixes: #3211
2020-02-19 17:45:53 -03:00
flo
5ecc2470aa Allow deep copies of XDataSeries
Doing shallow copies of Objects when explicitly declaring a copy c-tor
is very dangerous.
When the object is cloned, the second to be destroyed crashes w/ double
freeing memory or/and, even worse, dangling pointers are left around.
That in turn leads to unpredictable crashes.

There's only one thing left to say, use smart pointers wherever
possible. Or simply do not use arrays of pointers. The vector class
already get it right to alloc/free memory for objects stored in it.
2020-02-19 17:45:53 -03:00
Mark Liversedge
0495cb786d Add QChart to Python Chart (3d of 5)
Hover now wired into the SelectionTool with scatter points
being highlighted as you move the mouse. The code to select
nearest neighbours looks correct, but in practice it can
be hard to select some points (this needs further investigation).

Highlighting the selected point is done in the paint method
of the selection tool (its just one dot), but zorder issues
with opengl accelerated series means it appears underneath
we may need to create a curve with one point to avoid this
(this also needs further investigation).

Need to work next on a legend widget of our own to manage
the hover display and axis interaction (and better aesthetics
than the standard offerings).
2020-02-19 09:02:58 +00:00
Ramon van Belzen
706b79f8fc travis-ci: force cpp detection 2020-02-18 12:25:51 -03:00
Ale Martinez
022d403f97 Quadtree Compile nits
Even when it is passing ci they give problems on my local build
2020-02-18 12:22:00 -03:00
Mark Liversedge
fe05d635e6 Generic Plot Selection Tool and OpenGL
When curves are painted via openGL there are a number of limitations
regarding aesthetics, setColor() doesn't work once the series is
created, opacity is ignored etc.

So when we create a selection from an openGL enabled curve we cannot
set it gray etc. Instead, this commit will set the selection curve
to gray and use opengl rendering on the selection (on the assumption
that the user specified opengl rendering for performance and so we
should reflect that in the selection curve).

This has a dramatic improvement in performance on a scatter plot of
activity data where there are 1000s and 10000s of points in some
cases.

We should recommend that opengl is enabled for curves that have large
number of points, and indeed, the default is to enable it unless the
user specifically overrides (e.g. for better aesthetics).
2020-02-18 09:53:10 +00:00
Mark Liversedge
902c18078e Fix misleading comment 2020-02-18 09:12:00 +00:00
Mark Liversedge
6fb3baae95 Add QChart to Python Chart (3c of 5)
Added Quadtree for identifying points on the plot when
hovering with mouse, but should also be reused for the
rect selection tool (it currently iterates over all points
for a series).

This commit just adds basic algorithm will need to follow
up with a) refactor it into the selection tool and
b) display the hover value somewhere (legend?)
2020-02-18 07:59:15 +00:00
Ale Martinez
6d3811f981 Add default name and extension to Export Chart Image
Name defaults to chart Title, similar to Export Chart
Extension defaults to .png bug .svg is also supported for high definition
printing.
2020-02-17 16:24:06 -03:00
Ale Martinez
279919a747 Add default .erg extension to Workout Editor Save As
When a valid extension is not included by the user
Fixes #3342
2020-02-17 16:15:04 -03:00
Ale Martinez
2efe686c14 Changed QStringList to QSet<String> in FilterSet implementation
The hash near constant time vs linear search in pass method
speeds up considerably operations s.t. seasonMetrics in R and Python
APIs when there are lots of activities, since they were O(n^2) otherwise.
2020-02-17 12:55:47 -03:00
Mark Liversedge
4c9f237c20 Fix Generic Plot Flickering
.. the chart was being redrawn as series added because initialiseChart()
   was removing axes, be waiting until finaliseChart() to do this we
   avoid the flicker.
2020-02-17 11:21:39 +00:00
ericchristoffersen
d755a3a892 Trainmode must honor slope unless ergfile opts out. (#3346) 2020-02-17 08:22:17 +00:00
Mark Liversedge
226d704f1d Quieten down selection tool painting
.. My eyes! My eyes! Tuft would not be impressed with all the
   extraneous plotting and noise from the selection tool that
   detracted from the data.

   Have removed the guide lines, limited the slope line to the
   selection rectangle, and toned it down as well as making the
   selection rectangle more subtle when its not being manipulated.
2020-02-17 08:19:46 +00:00
Mark Liversedge
b60bb0e6db Settings.h missing compile error
.. needed for GenericPlot.
2020-02-16 22:45:45 +00:00
Mark Liversedge
0c3d748424 Add QChart to Python Chart (3b of 5)
SelectionTool now calculates a bunch of useful values
for the selected items (mean, min, max etc) and they
are plotted with guidelines on the scatter plot wehen
a selection is active.
2020-02-16 21:19:50 +00:00
Mark Liversedge
ab4601cc33 Add QChart to Python Chart (3a of 5)
Added a rectangle selection tool for scatter charts. Click on
the canvas and drag to highlight points of interest and click
on rectangle to drag around, resize with wheel events.

Additionally, improved some of the aesthetics on axes and labels
etc to make the chart look and feel similar to the rest of the
qwt based charts.

There are likely to be a large number of commits for part 3, to
cover auto calculation of mean/max/sum/regree for selected points
and extend to other types of selections and apply to other chart
types.
2020-02-16 13:49:23 +00:00
Mark Liversedge
70e31235ed Refactor QChart out of PythonChart into GenericPlot
.. the qchart code is now becoming more generic, with interactivity
   and generalised rendering so refactored out into its own class
   before adding too much more code.

.. this is also because we will be creating a generic chart for users
   to plot their own 'userdata' (currently in allplot/trends charts)
   using this generic plot and want to have a common widget for this
   to get a more consistent and less jarring user experience.
2020-02-15 09:32:34 +00:00
ericchristoffersen
127166a0e9 Support for TTS files. (#3333)
Support training with Tacx TTS files:

TTS distance and gradient are honored meaning training
load should exactly match tacx. Ride altitude is recomputed
based on distance and gradient, so training work will
match The Tacx Experience and might not match reality.

When TTS file contains no location, altitude is still computed
from distance and gradient but will start from 0.

Gradient during training is interpolated from distance and
altitude so will change smoothly while summing perfectly
to the correct load.

The TTS Reader source was adapted from the WattzApp
Community Edition java source.

Highly recommended that 'Use Simulated Speed' option
is enabled when riding TTS files.

This change was only tested against a small number of
dvds that I own. I would appreciate feedback and problem
reports. I would especially appreciate anyone that can
compare this behavior against Tacx as I only tested with
my Wahoo Kickr.

Issues and Future work:

I guessed about how to set starting distance and might
have got it wrong.

TTS Files contain video synchronization data. Currently
this is ignored and rlv file must be specified. I've not
even looked at the video sync data and no idea if it is
better than the rlv.

There are data fields in the TTS that Ive not investigated
and they might contain useful info, for example a starting
altitude for rides that have no location info.

Other changes:

Fix numerical stability around zero in blinn and quadratic
solvers. Improve quadratic solver accuracy.

Fix issues with computing gradient from non-uniform
cubic splines.

RideFiles now record additional altitude accuracy.
2020-02-13 21:58:31 +00:00
Ale Martinez
48670ff566 Setup Duration, initial sample bracketing and metrics for erg2 files
Parsing is correct, but without this initialization they cannot be executed.
Fixes #3338
2020-02-11 20:56:34 -03:00
Mark Liversedge
1b3792d4a8 Add QChart to Python Chart (2b of 5)
Basics now in place to plot line, scatter, pie and bar
charts. This commit finishes off the final bit of part
2, adding axes control.

A new GC api, GC.setAxis(..) has been added allowing
fine grained control on the axes added automatically.

They reference axes by name, based upon the xaxis and yaxis
parameters passed to the GC.setCurve(..) function.

GC.setAxis(..) should be called /after/ the curves are
added since it will not create axes in advance.
2020-02-11 17:41:46 +00:00
Ale Martinez
3cae9815c4 Enable workout import via Drag and Drop only in Train View
Fixes a copy/pase problem preventing workout import via Drag and Drop
and allows to import GPX files as workouts or activities according to
active view.
Fixes #3337
2020-02-11 13:23:35 -03:00
Mark Liversedge
54dc089705 Add QChart to Python Chart (2a of 5)
Added Pie and Bar charts with some rudimentary axes
being created automatically.

Need to follow up with mechanism to work with axes from
within the python script, likely needs a new binding.
2020-02-10 19:19:28 +00:00
Joern
8f33ebdd3d Merge pull request #3339 from Joern-R/CDB-Picture-Size
CloudDB - Chart Upload
2020-02-10 17:33:14 +01:00
Joern
125ecbb4bb CloudDB - Chart Upload
... Limit picture size to not go beyond max. size for CloudDB datastore call
2020-02-10 16:39:55 +01:00
Mark Liversedge
d88a94fa7d Fix SEGV Python/QT change chart type
.. needs to be done via the right thread and the qmap
   should be cleared to avoid double free crash.
2020-02-10 12:44:16 +00:00
Mark Liversedge
b4eb1191fd Add QChart to Python Chart (1 of 5)
Updating the python chart to render via a Qt Chart in addition
to the existing web page rendering.

Five aspects are planned:
1. Add QT chart option, basic rendering of Line+Scatter (this commit)
2. Add legend and axes, support for Pie and Bar charts
3. Add interactivity / hover etc
4. Add options for annotations and markers
5. Add more advanced charts and chart objects

There is an example in the tests folder, but at this point the
chart is very basic, but the main plumbing is in place.
2020-02-10 11:57:42 +00:00
Erik Botö
d1e2f38e07 Add support for VO2 measurements and VO2Master VM Pro
Add support for a generic set of VO2 measurements:

* Respiratory Frequency
* Respiratory Minute Volume aka Ventilation
* Volume O2 consumed
* Volume CO2 produced
* Tidal Volume
* FeO2 (Fraction of O2 expired)
* Respiratory Exchange Rate (calculated as VCO2/VO2)

Make the new metrics usable in TrainView, and store VO2 data as XDATA
using the same pattern as for HRV data.

Add support for VM Pro by VO2Masters

The VM Pro is a BLE device, so support is added in the BT40Device class.
Since the device requires some configuration in order to be usable, such
as the size of the "User Piece" a special configuration widget is added
and shown in a separate window when the device is connected.

This window is also used to set a number of useful settings in the
device, and to show calibration progress. There's also a detailed log of
the status messages shown, and this can also be saved to file.

Allow notifications from RealtimeControllers and devices in the
notification area of Train View. In order for devices to display
information in the notification field in TrainBottom the signals need
to added and propagated from from device level via RealtimeController
to TrainSidebar and finally TrainBottom.

Fix an issue with multiple BT40Device per actual device

Currently on MacOS there will be multiple BT40Device per actual device,
since the QBluetoothDeviceDiscoveryAgent::deviceDiscovered() signal is
emitted multiple times with e.g. updated RSSI values. Avoid this by
checking the previously created devices first.

MacOS doesn't disclose the address, so QBluetoothDeviceInfo::address()
can't be used there, instead deviceUuid() is used which is instead only
valid on MacOS.
2020-02-03 12:00:08 +00:00
ericchristoffersen
67384872d0 Implement kinetic energy simulation
Implement kinetic energy simulation
BikeSim values into athlete data with ui.
Add ui for sim constants, also tooltips

Fixes #3261
2020-02-02 08:27:30 +00:00
ericchristoffersen
9018ad7a28 Use tangent vector to compute interpolated grade.
Use tangent vector to compute interpolated grade.
Implement correct bracket mapping for cubic spline
Case sensitive include file name.

#Fixes #3283
2020-02-02 08:26:21 +00:00
Mark Liversedge
46514538b5 Train view layout
.. was out of date.
2020-02-01 21:48:52 +00:00
ericchristoffersen
cf5d0d1f29 Issue 3320: FixGPS: Route Smoothing and Multipass Outlier Removal (#3321)
* FixGPS: add outlier removal

* Parameterized multipass route smoothing.

* Better defaults. Fix avgSlope calcs.

* Cleanup.
2020-02-01 17:16:24 +00:00
Mark Liversedge
8ea4524630 DPI Scale errors
.. overview window constraints on size

.. workout editor hide toolbar when small
2020-02-01 17:10:51 +00:00
Ale Martinez
2ef1f407b5 Workout Chart - Reset cadence during multiple training sessions
Copy/Paste error
Fixes #2251
2020-02-01 09:46:03 -03:00
mayerflash
a0ed8d020f Add support for Ergofit Bike (#3324) 2020-01-31 14:24:05 +00:00
Mark Liversedge
071cb35d15 Add Device Wizard Scroll Devices
.. add a scroll area when listing device types to add since there
   are so many of them these days (!)
2020-01-31 14:08:59 +00:00
Erik Botö
2c0eb835d4 Fix import of HRV from Fit files where single records occur (#3323)
* FitRideFile: handle single values in decodeHRV()
Currently only records of type ListValue are handled, but single
RR-intervals can also come as type SingleValue. Before such records
were silently ignored.
* FitRideFile: Unify indentation of decodeHRV()
The indentation before was a mix of tabs and spaces, which made the code
quite a challenge to read. This unifies to use 4 spaces at least
throughout the function.
* Added test file
Fixes #3297
2020-01-28 20:19:53 -03:00
ericchristoffersen
6e5fb42171 Add BSpline altitude smoothing to FixGPS. (#3310)
Fixes #3302
2020-01-27 10:57:39 -03:00
Poncho
40d03c4402 Add New Device IDs for FIT files (#3315)
add Garmin Edge 830
add Stages Cycling
Add test file for Garmin Edge 830 with Stages Cycling power meter
2020-01-26 18:52:13 -03:00
Alejandro Martinez
e64b6fb557 Allow Estimate Distance to run automatically without crash (#3313)
Fixes #3311
2020-01-25 19:48:58 -03:00
thebaron06
8a94666e91 Add the identification of Garmin HRM-Tri and Vector 3
Fixes #3306
2020-01-25 09:12:45 -03:00
Kamen Naydenov
1bf8f43f0a Add Garmin Instinct device ID (#3300)
Device information:
https://buy.garmin.com/en-US/US/p/621802/pn/010-02064-00#specs
2020-01-23 09:06:19 -03:00
Mark Liversedge
835f7cff92 Add Sync from Cloud for new athlete
.. when a new athlete is created and opened the blankstate page
   currently provides options to get data by importing files or
   downloading from a device.

.. this update adds the ability to configure a cloud service and
   start a sync straight away

.. this UX is introduced since cloud services are now much
   more ubiquitous and v3.5 introduced broad support for a wide
   range of services.
2020-01-20 18:50:42 +00:00
Ale Martinez
8c775e5d2f Disable Qt5 video for macOS travis-ci builds
It buils but makes Train mode to chash
2020-01-20 10:23:10 -03:00
Mark Liversedge
16fc7a192b GPL2 in about box
.. was pointing to GPL3 which we downgraded from last year.
2020-01-18 20:22:08 +00:00
Ale Martinez
432926f4b9 Revert "Travis-ci build Linux AppImage with version string for v3.5 re-issue"
[skip ci]
This reverts commit 5c47bdb633.
2020-01-17 19:21:06 -03:00
Ale Martinez
5c47bdb633 Travis-ci build Linux AppImage with version string for v3.5 re-issue
To avoid creation of a new tag
2020-01-17 18:00:44 -03:00
Mark Liversedge
e90ba2e567 3.5 BUILD INCREMENT
.. re-issue of 3.5 binaries with Strava API guideline compliance, as
   part of the 'rate limit' requirements.
2020-01-17 20:15:28 +00:00
Mark Liversedge
fca5d9eb20 Connect with Strava
.. the authorise button on the add cloud wizard now
   shows a 'Connect with Strava' icon

.. all other services continue to have a button that
   is labelled 'Authorise'

.. this is needed to comply with the Strava API application
   guidelines.
2020-01-17 16:04:27 +00:00
Mark Liversedge
2914f16e89 Compatible with Strava
.. logo added to the about box, only tested on hi-dpi display
   (may need scaling applied for lower resolution displays).
2020-01-17 14:49:16 +00:00
Mark Liversedge
878b281ffc View on Strava
.. when data is downloaded from strava we now set the metadata
   tag "StravaID" to the id of the activity on Strava.

.. On RideSummary a link is added at the bottom to view the activity
   on Strava if the "StravaID" is set.

.. if the user clicks on the link the summary is replaced with the
   strava page for the ride:
      e.g. https://www.strava.com/activities/962515512

.. this is part of a couple of updates to comply with the Strava
   guidelines for consumption of the Strava v3 API, see:
      https://developers.strava.com/guidelines/
2020-01-17 12:30:29 +00:00
rb83421
a92833f919 Python Embedding - Add flush function to class CatchOutErr
It does nothing for now
Fixes #3293
2020-01-16 15:59:53 -03:00
Alejandro Martinez
ba2213bb73 Remove ampersand from menu and button text before compare (#3298)
To avoid issues with kde injecting them, it is not pretty
but simple and safe.
Fixes #1852
Fixes #2930
2020-01-16 15:53:07 -03:00
Alejandro Martinez
2c20561caa Update ISSUE_TEMPLATE.md 2020-01-15 20:58:30 -03:00
Ale Martinez
17541b373d Revert "travis-ci - build linux AppImage with version string for v3.5 release"
This reverts commit c6691bf2d7.
[skip ci]
2020-01-13 21:24:08 -03:00
Ale Martinez
c6691bf2d7 travis-ci - build linux AppImage with version string for v3.5 release
This is a temporary hack to avoid creating a new tag
2020-01-13 17:51:39 -03:00
Mark Liversedge
151c98d8cc SEGV on Overview Chart
.. when no rides available on new user.

Fixes #3295
2020-01-13 20:21:31 +00:00
Mark Liversedge
21bf52c786 Version 3.5 release presentation
Slides used during the 'What's new in v3.5' video
2020-01-13 15:34:09 +00:00
Ale Martinez
c42f06f727 Add screen captures for the wiki - Web Chart 2020-01-13 12:20:10 -03:00
Ale Martinez
46107635c2 Add screen captures for the wiki - Cloud Accounts and sync
[skip ci]
2020-01-11 18:31:31 -03:00
Mark Liversedge
435e8e9bd5 VERSION 3.5 RELEASE
.. version and build number.
2020-01-10 16:51:47 +00:00
Mark Liversedge
9df093cff6 Overview to defaul layout 2020-01-10 16:38:42 +00:00
Ale Martinez
a35e09fd0a Withings download - disable debug
In preparation for v3.5 release
2020-01-09 20:31:43 -03:00
Ale Martinez
cd9f130b4b Add Body Measures Download screen capture for the wiki
[skip ci]
2020-01-09 20:30:58 -03:00
Alejandro Martinez
a5b9409789 Merge pull request #2837 from peterbrant14/Fix_RLV_Sync
Improve RLV Syncronization
2020-01-08 16:10:02 -03:00
peterbrant14
7cce47526f Allow for RLV files with no final speed indicator
Some older (Tacx) RLVs do not have a sync point at the end of the course.
This work-around calculates the total distance of the course and sets a final sync point
if one does not already exist.
2020-01-07 17:48:57 +00:00
peterbrant14
49bc592a56 Improve RLV video syncronization.
Revised code in VideoSyncFile::parseTacx to build syncpoint list with correct distances
	when speed varies between two points

	Revised code in VideoWindow::telemetryUpdate to interpolate position between 2 sync points.
	Also do not update video if paused or not running.

	Revised code in VideoWindow::startPlayback to set a minimal rate to start if video is
	controlled by syncfile.	This avoids the initial "rush" that otherwise happened and
	makes for a smoother start.
	Also reset distance to 0 on start.

	As the rlv length now more accurately matches the workout length, we also need a check in
	TrainSidebar::guiUpdate that will terminate the workout if the end of the video is reached.
2020-01-07 17:48:57 +00:00
peterbrant14
3f177cae9e Fix truncation of Workouts with respect to pgmf file and corresponding rlv
Add a final point to the ErgFilePoint list to terminate the last section of the ride
2020-01-07 17:48:56 +00:00
peterbrant14
721cd2646b Fix error in RLV distance calculation when using ffwd or rwd
In guiUpdate, don't add manualOffset from VideoSyncFile.cpp when updating displayWorkoutDistance
as its already been included in the km value.
2020-01-07 17:48:56 +00:00
Ale Martinez
24fad147d0 Workout Wizard - Save distance in km since header indicates METRIC
Conversion is required when imperial units are used
Also fixed cumulative distance in Gradient case
Fixes #3288
2020-01-07 13:46:12 -03:00
Joern
db2de2be1f Merge pull request #3287 from Joern-R/tp
Today'sPlan Integration
2020-01-06 14:44:29 +01:00
Ale Martinez
744f6c79d4 Fix LTMPlot behaviour when there is only one group in date range
Fixes #3281
2020-01-06 10:14:12 -03:00
Joern
3728615c09 Today'sPlan Integration
... also synchronize Swim and Run activities
2020-01-06 13:45:44 +01:00
Ale Martinez
9e16d1dbf0 Map newlines to html <br> tags on CloudDB chart descriptions
When displayed on tableWidget, newlines are already preserved
across cloudDB interactions.
Fixes #3286
2020-01-05 13:41:33 -03:00
Ale Martinez
f385831d5e Enable Qt5 video for macOS travis-ci builds
Experimental build until #2242 is implemented
2020-01-05 12:22:55 -03:00
Ale Martinez
0887acdc89 travis-ci don't remove qt5 since it is required by other software
This error prevented to upload the generated dmg
2020-01-02 19:34:55 -03:00
Ale Martinez
8d6ea4fa72 Strava Download - Map VirtualRun and VirtualRide to Run and Ride
Use SubSport to preserve the original type when Sport is mapped.
Fixes #3278
2020-01-01 15:07:40 -03:00
Ale Martinez
4b53b24669 Fix previous commit
load instead of target
2019-12-31 13:14:52 -03:00
Alejandro Martinez
9524d56966 Video Overlays - Move HRM units from code to config file
To give more flexibility to users willing to use circular meters for HRM
2019-12-31 09:36:26 -03:00
Ale Martinez
29d28c93f4 Veloclinic Chart - Refresh when CP changes in Trends View
Fixes #3277
2019-12-30 15:01:25 -03:00
Jan Dvořák
edb2340b35 Czech translation (#3276)
Translate to Czech - Part 2
2019-12-30 08:18:01 -03:00
Ale Martinez
5ee004f355 Added Python Fixes Screen Captures for the wiki
[skip ci]
2019-12-29 10:14:55 -03:00
Ale Martinez
6eea504796 Fix travis-ci macOS builds 2019-12-28 14:31:19 -03:00
ericchristoffersen
4eae552846 Fix Issue 3273: Busy Hang in FixDeriveDistance (#3275)
Fix #3273: Busy Hang in FixDeriveDistance
Init goodii to 0 so tolerate no valid points.
2019-12-28 05:17:07 -03:00
Ale Martinez
26723b2755 Add missing QMap include to PowerProfile.h
Some toolchains report an error
Fixes #3270
2019-12-23 23:46:53 -03:00
Ale Martinez
b0d3e08ef9 Update default charts to remove remaining TSS and IF references
Replaced by BikeStress and BikeIntensity
2019-12-23 10:25:18 -03:00
Ale Martinez
f0482bf00c Revert "Plot R-R from Xdata"
This code has problems when distance is used on x-axis (#2842)
and it is redundant since there is a general mechanism to plot
any XData series as User Data in Activitiy chart.
This reverts commit f095416c5c.
2019-12-20 18:00:30 -03:00
riccioclista
9f1187390f Python data processors (#2951)
* Initial implementation of Python data processors
* Add RideEditor to PyFIx script editor
* Enable write-access to activity data for python fixes
* Add GC.deleteActivitySample method
* Add GC.deleteSeries method
* Check for python fix for changes before close
* Build python fixes menu dynamically
* Make python fixes first class data processors
* Add GC.postProcess method
* Check GC_WANT_PYTHON and "Enable Python" setting for python fixes
* Add GC.createXDataSeries method
* Clean up ScriptContext ctor mess
* Support editing xdata series
* PDP: Implement xdata append/remove methods
2019-12-19 22:05:51 -03:00
Ale Martinez
a3e6ab8e09 Video Overlays - Load is target power or Slope according to mode
Similar to DialWindow
Added to sample video-layout.xml and adjust positions
2019-12-15 17:20:06 -03:00
Ale Martinez
e06c93ca0e CPPlot - Show as percentage only applies to ride curve
Fixes #3260
2019-12-15 10:26:04 -03:00
Alejandro Martinez
edb53806d8 Video Overlays - Add Distance as source
honoring metric/imperial setting.
Fixes error on Speed when imperial units are used.
Adds Distance to video-layout.xml and adjusts widget positions.
2019-12-15 00:08:49 -03:00
Ale Martinez
145d5ccae6 Fix travis-ci Linux builds
Fix libpulse-dev install and change python3.6 source
2019-12-14 23:05:57 -03:00
Ale Martinez
a2a94b3b41 Video Overlays - Speed widget honors metric/imperial setting 2019-12-14 21:13:45 -03:00
Ale Martinez
5fa59d1cf8 get Strava description
Save to Notes if Notes is not already used for name.
Complements d1e0e13ce1
2019-12-14 21:11:25 -03:00
Ale Martinez
c0889179da Remove deprecated CFBundleGetInfoString from info.plist
Fixes #2938
2019-12-11 14:34:52 -03:00
Ale Martinez
bc6ca7fee1 Added CFBundleVersion and CFBundleShortVersionString to Info.plist
Also updated values for the comming v3.5 release.
Fixes #2938
2019-12-11 12:49:04 -03:00
Quentin Heath
96b36aef0d fix am/pm time for HRV 2019-12-09 17:56:19 -03:00
ericchristoffersen
03e8da2c92 Issue 3241: Fix variance control in FixPowerSpikes (#3253)
Fixes #3241
2019-12-09 17:12:03 -03:00
Stranger
5420d92cc1 Update Russian translation (#3252) 2019-12-09 16:47:01 -03:00
Quentin Heath
d1e0e13ce1 add Strava description
direct copy from `Notes` (with UTF8 charset, as for the Strava title),
except if `Notes` was already used for the title
2019-12-09 16:15:46 -03:00
Quentin Heath
c978d6eb80 fix Strava title encoding
the website appears to expect UTF8 by default, so let's send a UTF8
title (plus an explicit header)

tokens and boundaries are supposed to be ASCII, so they can keep their
latin1 encoding
2019-12-09 16:15:46 -03:00
Jan Dvořák
5df46eebc7 Translate to Czech, part 1, 2725/5426 2019-12-08 21:17:57 -03:00
Ale Martinez
2cb9bc113e Export Chart Image as SVG
Add .svg as an alternative format for high resolution printing.
Fixes #3246
2019-12-08 20:07:06 -03:00
Ale Martinez
0009c280a8 Fix Export Chart Image in Tiled mode
Use rect instead of geometry to grab the complete widget.
Tested on Windows and Linux
Fixes #3055
2019-12-08 20:07:06 -03:00
Ale Martinez
715dc15133 Enable travis-ci tagged builds
To have binaries with version string set automatically and remove
the temporary hacks.
[skip ci]
2019-12-08 11:59:52 -03:00
Ale Martinez
657bb70d23 Define version string for travis-ci builds
To restore lupdate for OSX and to force new build with version strings
since tag builds are rejected. This will be fixed in next commit.
2019-12-08 10:16:50 -03:00
703 changed files with 223063 additions and 89488 deletions

View File

@@ -1,10 +1,20 @@
if: commit_message =~ /\[publish binaries\]/
branches:
- master
os:
- osx
- linux
dist: xenial
language: c++
only:
- master
- /^[vV]\d+\.\d+(\.\d+)?(-\S*)?$/
language: cpp
cache:
directories:
- $HOME/Library/Caches/Homebrew
- qwt
- D2XX
- site-packages
- VLC
env:
global:
- BRANCH=master
@@ -26,33 +36,27 @@ env:
- secure: cc0pAJjkmFNw2bO3zVACmtyHTwINAHALrtUxi+nRD+FhOO9KxuxuuwvcKCZKfp9EUOjz5PrYWKV1ZH/zt/jMix8A4Gyue2mWX8WYih7aTmJBcJWsFNTCybnClreKBCh18kHdWWhkmhk8EMINDvlqxzJZGpcNO04gxhL9wuLLrNQ=
- secure: em0xXIm69rMHsHXYQiizeJB7dEFBkX33PsWDHwBNrX6lFBued23eL96KJC4RVbk6A+AHFtXFATrreZ14D5JH/E/37CXhe3X2R93WqiPUSH0s7NI4fFA1BroKUNAlqO4bMqDBidtNmwMPaLTXjaOnOZyvbAG7z+QV3TKC8tOeZDU=
- secure: VFaSERlgsjzjiDQhKw8XFvQrjdvFzHHL7V3NQg+RfELHoT6I1pAGFdl/+lRBIVOiVkbQ6XnpBA28nlf0QydPHElRZdqmh0azQV/bkUXD4ffPE8q0iSqeqhAZ+5L05K5K+Gby/y8TZE4FX6e/7trFL7oq+h9x0gq5RQO8rAcTV84=
matrix:
include:
- os: osx
osx_image: xcode10.1
compiler: clang
- os: linux
compiler: gcc
jobs:
include:
- os: osx
osx_image: xcode11.3
compiler: clang
- os: linux
dist: bionic
compiler: gcc
before_install:
- travis/$TRAVIS_OS_NAME/before_install.sh
before_script:
- travis/$TRAVIS_OS_NAME/before_script.sh
script:
- travis/$TRAVIS_OS_NAME/script.sh
after_success:
- if [[ $TRAVIS_OS_NAME == "osx" ]]; then
export FINAL_NAME=dev-prerelease-branch-master-build-${TRAVIS_BUILD_NUMBER}.dmg;
else
export FINAL_NAME=dev-prerelease-branch-master-build-${TRAVIS_BUILD_NUMBER}.AppImage;
fi
- travis/$TRAVIS_OS_NAME/after_success.sh
deploy:
provider: releases
api_key:
secure: KlfkRM8oGP02y5LhbdxetnhqUG3YzVylvyhT8BTYjdoJtkJr7YXYpdhj9byZ9aiy1gSWI/g7A1X6/P8/McqRtgt4dEYr4Zg8QO7Y7QdTpgNQEwu8ZrkyyG/7b/rSkfFHDjrOAHslLVXuBNwWgi8YW1aTn0rY2AqDbOri7u6tt9Q=
file: src/$FINAL_NAME
skip_cleanup: true
on:
tags: true
repo: GoldenCheetah/GoldenCheetah
before_cache:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew cleanup; fi
after_success:
- travis/$TRAVIS_OS_NAME/after_success.sh

View File

@@ -4,74 +4,88 @@
Mark Liversedge
John Ehrlinger
Ale Martinez
Jan 2015
Version 1.2
Mar 2021
Version 3.6
A walkthrough of building GoldenCheetah from scratch on Ubuntu linux. This walkthrough
should be largely the same for any Linux distro.
A walkthrough of building GoldenCheetah from scratch on Ubuntu linux 18.04
This walkthrough should be largely the same for any Debian derivative Linux
distro, and very similar for others using their correspoing package manager.
CONTENTS
1. BASIC INSTALLATION WITH MANDATORY DEPENDENCIES
- QT
- git
- flex
- bison
- QT
- OpenGL
- gsl
2. ADDING OPTIONAL DEPENDENCIES WHEN BUILDING VERSION 2
2. ADDING OPTIONAL DEPENDENCIES
- FTDI D2XX
- SRMIO
- liboauth
- libkml
3. ADDING OPTIONAL DEPENDENCIES WHEN BUILDING VERSION 3
- checking out the release 3 branch & building with MANDATORY dependencies
- flex
- bison
- libical - Diary window and CalDAV support (google/mobileme calendar integration)
- libvlc - Video playback in training mode
- libical - Diary window and CalDAV support (external calendar integration)
- libusb - If you want support for using USB2 sticks in Train View
- R - If you want R charts
- Python - If you want Python charts, scripts and data processors
1. BASIC INSTALLATION WITH MANDATORY DEPENDENCIES
=================================================
Installed Linux distribution of choice on platforms i386 or amd-64 (currently Debian-based distributions and Arch-based distributions are covered). You will not need to do this if you
already have a Linux distribution installed. Left this step in to highlight the
Linux distribution the commands below were executed on.
Install the Linux distribution of choice on amd64 platform (Ubuntu 18.04 is used
for this document). You will not need to do this if you already have a Linux
distribution installed. Left this step in to highlight the Linux distribution
the commands below were executed on.
login and open a terminal to get a shell prompt
Download MANDATORY DEPENDENCIES (browser)
-----------------------------------------
Install Qt
----------
Download and install the Qt SDK from http://qt-project.org/
Once that is completed test qmake is ok with: qmake --version (should report 4.9.8 or higher)
You can use a browser to download and run the interactive installer, be sure to
select version 5.14.2 or higher including at least the following modules:
- Desktop gcc 64-bit
- Qt Charts
- Qt WebEngine
Once this step is completed add the bin directory to PATH and test qmake is ok:
$ qmake --version
DEBIAN-BASED DISTRIBUTION INSTRUCTIONS
--------------------------------------
Install git with:
Install git
-----------
$ sudo apt-get install git
Said Y to prompt about all git files installed (git-gui et al)
Install FLEX and BISON
----------------------
You will need flex v2.5.9 or later
$ sudo apt-get install bison
$ sudo apt-get install flex
Install Mesa OpenGL utility library
-----------------------------------
sudo apt-get install libglu1-mesa-dev
ARCH-BASED DISTRIBUTION INSTRUCTIONS
------------------------------------
Install GSL development libraries
---------------------------------
sudo apt-get -qq install libgsl-dev
Install git:
$ sudo pacman -S git
Get latest GOLDEN CHEETAH source files
--------------------------------------
$ mkdir -p ~/Projects
$ cd ~/Projects
$ git clone git://github.com/GoldenCheetah/GoldenCheetah.git
$ cd GoldenCheetah
INSTALL FLEX and BISON
----------------------
$ sudo pacman -S flex bison
NEXT STEPS
----------
Configure MANDATORY DEPENDENCIES
--------------------------------
$ cd qwt
$ cp qwtconfig.pri.in qwtconfig.pri
$ cd ../src
$ cp gcconfig.pri.in gcconfig.pri
$ vi gcconfig.pri
Ensure you have the following lines (which are now also in gcconfig.pri.in which has
@@ -85,47 +99,17 @@ win32 {
QMAKE_DEL_FILE = rm -f
}
Build!
------
$ make clean
$ qmake
$ make
To compile translation you need QT tool - lrelease
If it is not found using he defaults in src/src.pro then set the full path and filename in gcconfig.pri
To compile translation you need the QT tool lrelease
If it is not found using the defaults in src/src.pro then set the full path and
filename in gcconfig.pri, s.t.
QMAKE_LRELEASE = /usr/bin/lrelease
When build first time you get number of error messages on .qm files missing:
"RCC: Error in 'Resources/application.qrc': Cannot find file 'translations/gc_fr.qm'"
You can ignore these messages for your build. The .qm files will be created during the
build at a later point in time via the "lrelease" command you configured in gcconfig.pri)
If your QT build includes its own local compress libs then you should comment the line below in gcconfig.pri,
otherwise you will need to have the compress libraries installed separately.
#LIBZ_INCLUDE =
#LIBZ_LIBS = -lz
otherwise you will need to have the compress libraries installed separately.
LIBZ_LIBS = -lz
You will now have a release3 binary but with none of the release3 dependencies compiled in.
Get latest GOLDEN CHEETAH source files
--------------------------------------
$ mkdir -p ~/Projects/Live
$ cd ~/Projects/Live
$ git clone git://github.com/GoldenCheetah/GoldenCheetah.git
$ cd GoldenCheetah
Configure MANDATORY DEPENDENCIES
--------------------------------
$ cd qwt
$ cp qwtconfig.pri.in qwtconfig.pri
$ cd ../src
$ cp gcconfig.pri.in gcconfig.pri
$ vi gcconfig.pri
Comment out the D2XX_INCLUDE and SRMIO_INSTALL lines for now (put # in first character of the line
to comment out), we will install that in a moment, if we need to.
If you are building for your local host you may find that you get better performance if
compiling with gcc -O3 (tree vectorization can have a significat impact) [or -Ofast]
compiling with gcc -O3 (tree vectorization can have a significat impact)
[or -Ofast]
If so you might like to uncomment:
@@ -136,32 +120,42 @@ Save and exit
$ cd ..
BUILD WITH BASIC CONFIGURATION
------------------------------
$ qmake -recursive
$ make
Congratulations you have now build a basic GoldenCheetah and can run this safely. See below for
optional dependencies you can install to support other features.
When build first time you get number of error messages on .qm files missing:
"RCC: Error in 'Resources/application.qrc': Cannot find file 'translations/gc_fr.qm'"
You can ignore these messages for your build. The .qm files will be created
during the build at a later point in time via the "lrelease" command you
configured in gcconfig.pri
ADDING OPTIONAL DEPENDENCIES WHEN BUILDING VERSION 2
====================================================
Congratulations you have now build a basic GoldenCheetah and can run this
safely. See below for optional dependencies you can install to support
other features.
2. ADDING OPTIONAL DEPENDENCIES
===============================
D2XX - For Powertap downloads via USB
-------------------------------------
Download the FTDI drivers from http://www.ftdichip.com/Drivers/D2XX.htm (e.g. I used Linux
64-bit drivers from http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx1.0.4.tar.gz)
Download the FTDI drivers from http://www.ftdichip.com/Drivers/D2XX.htm and
extract:
Extract into your home directory (I put mine into ~/Projects/ with archive manager which
created a sub-directory ~/Projects/libftd2xx1.0.4
$ cd ~/Projects
$ wget http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-x86_64-1.3.6.tgz
$ tar xf libftd2xx-x86_64-1.3.6.tgz
$ cd src
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
Uncomment the D2XX_INCLUDE entry and make it match (my home is /home/markl)
D2XX_INCLUDE = /home/markl/libftd2xx1.0.4
D2XX_INCLUDE = /home/markl/Projects/libftd2xx-x86_64-1.3.6
Make clean is needed if you have previouslt built, since source files examine #defines before
including this feature. You can skip it if you know why ;)
Make clean is needed if you have previouslt built, since source files examine
#defines before including this feature. You can skip it if you know why ;)
$ make clean
$ qmake
$ make
@@ -186,20 +180,20 @@ $ make
$ sudo make install
Lets go config GC and build with SRMIO
$ cd ~/Projects/Live/GoldenCheetah/src
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
Uncomment the SRMIO_INSTALL and replace with the target used from srmio install:
SRMIO_INSTALL = /usr/local/
At the bottom of gcconfig.pri you will see the include directory should reference from
the base install location (/usr/local) make sure it says:
At the bottom of gcconfig.pri you will see the include directory should
reference from the base install location (/usr/local) make sure it says:
SRMIO_INCLUDE = $${SRMIO_INSTALL}/include
SRMIO_LIB = $${SRMIO_INSTALL}/lib/libsrmio.a
Make clean is needed if you have previouslt built, since source files examine #defines before
including this feature. You can skip it if you know why ;)
Make clean is needed if you have previouslt built, since source files examine
#defines before including this feature. You can skip it if you know why ;)
$ make clean
$ qmake
$ make
@@ -209,9 +203,7 @@ You now have SRM support built in.
LIBKML - For export to Google Earth
-----------------------------------
You will need Google Earth 5.2 or later and therefore libkml that supports this. Unfortunately at the time of writing
the officially packaged libkml is too old, so you will need to install from source, which means you will need to have
subversion installed and expat. You may be able to use the currently packaged libkml with
You will need Google Earth 5.2 or later and therefore libkml that supports this.
$ sudo apt-get install libkml-dev
@@ -220,7 +212,8 @@ if this does not work you will need to build from source:
$ sudo apt-get install subversion
$ sudo apt-get install expat libexpat1 libexpat1-dev
Once svn is installed you can grab the libkml source and configure build etc:
Once svn is installed you can grab the libkml source, configure, build and
install:
$ cd ~/Projects
$ svn checkout http://libkml.googlecode.com/svn/trunk/ libkml
$ cd libkml
@@ -237,55 +230,32 @@ if this does not work you will need to build from source:
- examples/{engine,gpx,gx,hellonet,helloworld,regionator,xsd}/Makefile
- and look for the flag -pedantic and remove it. I got this on Linux 64bit builds ymmv.
Once libkml is installed and built:
Once libkml is installed:
$ cd ~/Projects/Live/GoldenCheetah/src
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
Ensure KML_INSTALL=/usr/local
Make clean is needed if you have previously built, since source files examine #defines before
including this feature. You can skip it if you know why ;)
Make clean is needed if you have previously built, since source files examine
#defines before including this feature. You can skip it if you know why ;)
$ make clean
$ qmake
$ make
You can now export rides to Google Earth kml format.
ADDING OPTIONAL DEPENDENCIES WHEN BUILDING VERSION 3
====================================================
NOTE: When you run version 3 it will refresh ride metrics and CP files -- this only occurs the
first time it runs (and will refresh only rides that change after that). I find it is best
to import ride files once your build where you want it. i.e. don't import until you have
got all your dependencies sorted.
NOTE: To reduce the dependencies on 'dormant' code there are a number of new pieces of source
that are included in the release3 tree. Notably; qtsoap from qt-solutions, since they
work but are likely to be archived and deprecated. If and when that happens we may well
adopt whatever classes Trolltech introduce.
LIBICAL - Diary integration with Google or MobileMe calendars
-------------------------------------------------------------
$ cd ~/Projects/Live/GoldenCheetah/src
$ sudo apt-get install libical-dev
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
ICAL_INSTALL=/usr/include
ICAL_LIBS=-lical
Since the src.pro wants ICAL installed in a different place we need to hack it, *** this will
be fixed shortly ***
$ vi src.pro
Comment out the ICAL_LIBS entry:
#ICAL_LIBS = $${ICAL_INSTALL}/lib/libical.a
ICAL_INSTALL = /usr
ICAL_INCLUDE = /usr/include
ICAL_LIBS = -lical
$ make clean
$ qmake
@@ -293,21 +263,89 @@ $ make
You should now have diary functions.
NOTE: That upload to MobileMe and Google requires a functioning https lib in QT. Depending
upon the version installed this might not be the case and will need to be built and
configured -- this is beyond the scope of this walkthough. Sorry.
LIBVLC - Video playback in Realtime
-----------------------------------
LIBVLC - Video playback in Realtime (Experimental)
--------------------------------------------------
You will need libvlc 3.0.8 or higher for better performance:
You will need libvlc 1.1.9 or higher (1.1.8 is ok but will segv on exit)
$ sudo apt-get install libvlc-dev
sudo add-apt-repository ppa:jonathonf/vlc-3
sudo add-apt-repository ppa:jonathonf/ffmpeg-4
sudo apt-get update
sudo apt-get install vlc libvlc-dev libvlccore-dev
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
Comment out VLC_INSTALL and it should read:
VLC_INSTALL = /usr/include/vlc/
VLC_INSTALL = /usr
$ make clean
$ qmake
$ make
LIBUSB - for using USB2 sticks in Train View on Linux or Windows
----------------------------------------------------------------
$ sudo apt-get install libusb-1.0-0-dev libudev-dev
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
Uncomment or add the following lines:
LIBUSB_USE_V_1 = true # don't use on Windows
LIBUSB_INSTALL = /usr/local
$ make clean
$ qmake
$ make
R Embedding
-----------
Install R 4.0
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/"
sudo apt-get update
sudo apt-get install r-base-dev
R --version
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
Uncomment or add the following line:
DEFINES += GC_WANT_R
$ make clean
$ qmake
$ make
Python Embedding
----------------
Install Python 3.7
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.7-dev
python3.7 --version
Install SIP 4.19.8:
cd ~/Projects
wget https://sourceforge.net/projects/pyqt/files/sip/sip-4.19.8/sip-4.19.8.tar.gz
tar xf sip-4.19.8.tar.gz
cd sip-4.19.8
python3.7 configure.py
make
sudo make install
$ cd ~/Projects/GoldenCheetah/src
$ vi gcconfig.pri
Uncomment or add the following lines:
DEFINES += GC_WANT_PYTHON
PYTHONINCLUDES = -I/usr/include/python3.7/
PYTHONLIBS = -L/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu -lpython3.7m
$ make clean
$ qmake

View File

@@ -1,3 +1,12 @@
Update Note: to build GoldenCheetah v3.6 we are using the Homebrew Package
Manager to install dependencies, including Qt and GSL, on Travis-ci
macOS High Sierra build environment.
You can check the travis/osx folder for the complete and updated build scripts,
the minimum Qt version known to work is 5.13 with Qt WebEngine and Qt Charts.
GSL - GNU Scientific Library is a mandatory dependency starting with v3.6
Ale Martinez - May, 2020
+++++++++++++++++++++++
MAC OSX BUILD WALKTHROUGH
+++++++++++++++++++++++

View File

@@ -1,4 +1,11 @@
Update Note: to build GoldenCheetah v3.6 we are using Microsoft Visual C++ 2017,
included in Microsoft Visual Studio 2019, with pre-installed Qt and GSL
insalled with vcpkg, on AppVeyor continuous integration platform.
You can check the appveyor.yml for the complete and updated build script,
the minimum Qt version known to work is 5.13 with Qt WebEngine and Qt Charts.
GSL - GNU Scientific Library is a mandatory dependency starting with v3.6
Ale Martinez - May, 2020
+++++++++++++++++++++++
WIN32 BUILD WALKTHROUGH
+++++++++++++++++++++++
@@ -7,6 +14,7 @@
February 2017
This instruction will guide you through a standard build of GoldenCheetah (without external
dependencies or API based services included).
@@ -199,9 +207,3 @@ to contribute is to provide a pull-request.
Cheers.
Joern

View File

@@ -1 +1,10 @@
Issue tracker is **only** for Bugs and Features, before to open a new issue please read the Contributing document (link at the right) and use the forums if you need help.
Issue tracker is **only** for Bugs and Features, please don't open issues for questions or technical support. Before to open a new issue please read the contributing guidelines (link below).
If you have questions, please read the FAQs and User's/Developer's Guide:
* FAQs - https://github.com/GoldenCheetah/GoldenCheetah/wiki/FAQ
* User's Guide - https://github.com/GoldenCheetah/GoldenCheetah/wiki/UG_Main-Page_Users-Guide
* Developer's Guide - https://github.com/GoldenCheetah/GoldenCheetah/wiki/Developers-guide
If you need help or technical support please use the forums:
* Users - https://groups.google.com/forum/#!forum/golden-cheetah-users
* Developers - https://groups.google.com/forum/#!forum/golden-cheetah-developers

View File

@@ -4,18 +4,11 @@
## About
GoldenCheetah is an open-source data analysis tool primarily written in C++
with Qt for cyclists and triathletes
with support for training as well.
GoldenCheetah can connect with indoor trainers and cycling equipment such
as cycling computers and power meters to import data.
In addition, GoldenCheetah can connect to cloud services.
It can then manipulate and view the data, as well as analyze it.
GoldenCheetah is a desktop application for cyclists and triathletes and coaches, providing a rich set of tools and models to analyse, track and predict performance, optimise aerodynamics and train indoors.
GoldenCheetah integrates with most popular cloud services like Strava and Todays Plan, imports data from bike computers, imports downloads from any website like TrainingPeaks and Garmin and will also connect to smart trainers using ANT+ and Bluetooth.
GoldenCheetah is free for everyone to use and modify, released under the GPL v2 open source license with pre-built binaries for Mac, Windows and Linux.
## Installing
@@ -29,12 +22,10 @@ INSTALL-LINUX For building on Linux
INSTALL-MAC For building on Apple OS X
OSX: [![Build Status](https://travis-ci.org/GoldenCheetah/GoldenCheetah.svg?branch=master)](https://travis-ci.org/GoldenCheetah/GoldenCheetah)
macOS and Linux: [![Build Status](https://travis-ci.com/GoldenCheetah/GoldenCheetah.svg?branch=master)](https://travis-ci.com/GoldenCheetah/GoldenCheetah)
Windows: [![Build status](https://ci.appveyor.com/api/projects/status/i6dwn4m8oyu52ihi?svg=true)](https://ci.appveyor.com/project/Joern-R/goldencheetah-knhd8)
[![Coverity Status](https://scan.coverity.com/projects/7503/badge.svg)](https://scan.coverity.com/projects/goldencheetah-goldencheetah)
Alternatively, official builds are available from http://www.goldencheetah.org
whilst the latest developer builds are available from https://github.com/GoldenCheetah/GoldenCheetah/releases
Official release builds, snapshots and development builds are all available from http://www.goldencheetah.org

View File

@@ -1,32 +1,213 @@
version: ci.{build}
image: Visual Studio 2015
image: Visual Studio 2019
clone_depth: 1
environment:
GC_GOOGLE_CALENDAR_CLIENT_SECRET:
secure: hwjHTrSAMEbKd9PA+5x/zI4x5Uk4KQm1hdfZzkwiu8k=
GC_GOOGLE_DRIVE_CLIENT_ID:
secure: mNqG+pqpMl21ZFVvAMKvhm2rfOdv42fFpnLwfrvX5QqpWVcHEeBuUFeJeUAZfTR0GQGfWfPOEmhb9CG0W1ZJ05TIyb+kTLrWF7iijCiVR6s=
GC_GOOGLE_DRIVE_CLIENT_SECRET:
secure: T+BaB/L7x4dPPf592e0kfw4sTlAslUXl10irJqiUjpY=
GC_GOOGLE_DRIVE_API_KEY:
secure: oxTAhK/kiLUsXdYvITAgzSqeB5FRcL+XANFuAYpoW5P/xBb7XaLbNnL2gyrmzQeG
GC_CLOUD_OPENDATA_SECRET:
secure: 6fPhBiHKvJeOMqXdHGqpkPS+NpUDMczEXjedx8GcjbHr82ISX+gwSuXfOUDLq/S9
GC_WITHINGS_CONSUMER_SECRET:
secure: 86xAkdoQB8mLXq964/lGCp3ElTSF4k3a27R3UUXt3618guWLyBfsEK5Q0+XSOI3Q38w80CTpmNdwejoISv8Ilg==
GC_NOKIA_CLIENT_SECRET:
secure: pvPWraDplrKeRNamt5MKga8fzDmI2+zgFx+y3lsQE6gmBadZU2xkTIc/xCaP7UPv2erNCmKivfMOh2NIcRmqvIHynDoifNVy2P61KyG5v3E=
GC_DROPBOX_CLIENT_SECRET:
secure: 7pCVnVEKKmSU4SZN6IFqUw==
GC_STRAVA_CLIENT_SECRET:
secure: n3cMS1yy709xhSnTeWABMsoAIkJzy5euh3Pw4ehv0BzszJKoWkypF0cyW8RXSm3M
GC_TODAYSPLAN_CLIENT_SECRET:
secure: 7PnFB8cfahFT6LyP64eB7N1vkbwVaULpB2ORmEkn+J75zNB1xxGClFNXSHZ7kXhB
GC_CYCLINGANALYTICS_CLIENT_SECRET:
secure: UY+m3YypNNLUzKyGdrLw8xdCvxuQWRZi9EHS3j1ubLC4qyRL7iEVW6ubumfdh6gT
GC_CLOUD_DB_BASIC_AUTH:
secure: OEBetrOnXjsY7wN8hYqmMj6482oDORmAmCq8PI7mfnfiWE6Z4jB676JvgdNlP98q
GC_CLOUD_DB_APP_NAME:
secure: bpkyuw/BsJw0OrpuBqQwZ46CHbhkbmcjcMttVtfJoZU=
GC_POLARFLOW_CLIENT_SECRET:
secure: h2JdlC1i4QOmwpkz+Xxbrw==
GC_SPORTTRACKS_CLIENT_SECRET:
secure: n6a8nJgqMyg+VsVeoIIR8TFzxyDFVi2w/ggetQk5agY=
init:
# Setup QT 5.9 - 64Bit
- set QTDIR=C:\Qt\5.9\msvc2015_64
# Setup QT 5.14 - 64Bit
- set QTDIR=C:\Qt\5.14\msvc2017_64
- set PATH=%QTDIR%\bin;%PATH%
- qmake --version
# Setup MSVC - VS 2015
# Setup MSVC - VS 2019
- call c:\"Program Files (x86)"\"Microsoft Visual Studio"\2019\Community\VC\Auxiliary\Build\vcvarsall.bat amd64
- CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
# Setup NSIS
- set PATH=%PATH%;C:\"Program Files (x86)"\NSIS
# Get the libraries
- ps: Start-FileDownload 'https://github.com/Joern-R/gc-ci-libs/releases/download/0.0.2/gc-ci-libs.zip' -Filename 'c:/gc-ci-libs.zip'
- 7z x c:/gc-ci-libs.zip -oC:\libs
cache:
- gc-ci-libs.zip -> appveyor.yml
- jom_1_1_3.zip
- sip-4.19.8.zip
- C:\R
- C:\Python -> src\Python\requirements.txt
- c:\tools\vcpkg\installed\
- qwt
install:
# choco install winflexbison
# Get the libraries
- if not exist gc-ci-libs.zip appveyor DownloadFile "https://github.com/GoldenCheetah/WindowsSDK/releases/download/v0.1.1/gc-ci-libs.zip"
- 7z x -y gc-ci-libs.zip -oC:\libs
# GSL
- vcpkg install gsl:x64-windows
# Get config
- copy qwt\qwtconfig.pri.in qwt\qwtconfig.pri
- copy c:\libs\gcconfig64-Release.appveyor.pri src\gcconfig.pri
# Get jom
- if not exist jom_1_1_3.zip appveyor DownloadFile "https://download.qt.io/official_releases/jom/jom_1_1_3.zip"
- 7z x -y jom_1_1_3.zip -oc:\jom\
- set PATH=%PATH%;c:\jom\;
# Get R and add to config
- ps: >-
if (-not (Test-Path 'C:\R')) {
$rurl = $(ConvertFrom-JSON $(Invoke-WebRequest https://rversions.r-pkg.org/r-release-win).Content).URL
Start-FileDownload $rurl "R-win.exe"
Start-Process -FilePath .\R-win.exe -ArgumentList "/VERYSILENT /DIR=C:\R" -NoNewWindow -Wait
}
- set PATH=%PATH%;c:\R\bin\;
- R --version
- echo DEFINES+=GC_WANT_R >> src\gcconfig.pri
# Get Python embeddable and install packages
- ps: >-
if (-not (Test-Path 'C:\Python')) {
Start-FileDownload "https://www.python.org/ftp/python/3.7.9/python-3.7.9-embed-amd64.zip" Python.zip
7z x Python.zip -oC:\Python\
echo python37.zip . '' 'import site' | Out-File C:\Python\python37._pth -Encoding ascii
mkdir C:\Python\lib\site-packages
c:\python37-x64\python -m pip install --upgrade pip
c:\python37-x64\python -m pip install -r src\Python\requirements.txt -t C:\Python\lib\site-packages
}
# Get SIP and and install on Python
- c:\python37-x64\python --version
- if not exist sip-4.19.8.zip appveyor DownloadFile "https://sourceforge.net/projects/pyqt/files/sip/sip-4.19.8/sip-4.19.8.zip"
- 7z x sip-4.19.8.zip
- cd sip-4.19.8
- c:\python37-x64\python configure.py
- jom -j4
- nmake install
- cd ..
# Add Python (avoiding colision between GC Context.h and Python context.h)
- echo DEFINES+=GC_WANT_PYTHON >> src\gcconfig.pri
- echo PYTHONINCLUDES=-ICore -I\"c:\python37-x64\include\" >> src\gcconfig.pri
- echo PYTHONLIBS=-L\"c:\python37-x64\libs\" -lpython37 >> src\gcconfig.pri
# GSL
- echo GSL_INCLUDES=c:\tools\vcpkg\installed\x64-windows\include >> src\gcconfig.pri
- echo GSL_LIBS=-Lc:\tools\vcpkg\installed\x64-windows\lib -lgsl -lgslcblas >> src\gcconfig.pri
before_build:
# Define GC version string, only for tagged builds
- if %APPVEYOR_REPO_TAG%==true echo DEFINES+=GC_VERSION=VERSION_STRING >> src\gcconfig.pri
# Enable CloudDB
- echo CloudDB=active >> src\gcconfig.pri
# Add Train Robot
- echo DEFINES+=GC_WANT_ROBOT >> src\gcconfig.pri
# Add debug console
#- echo CONFIG+=console >> src\gcconfig.pri
# Patch Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_GOOGLE_CALENDAR_CLIENT_SECRET__', $env:GC_GOOGLE_CALENDAR_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_GOOGLE_DRIVE_CLIENT_ID__', $env:GC_GOOGLE_DRIVE_CLIENT_ID | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_GOOGLE_DRIVE_CLIENT_SECRET__', $env:GC_GOOGLE_DRIVE_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_GOOGLE_DRIVE_API_KEY__', $env:GC_GOOGLE_DRIVE_API_KEY | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace 'OPENDATA_DISABLE', 'OPENDATA_ENABLE' | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_CLOUD_OPENDATA_SECRET__', $env:GC_CLOUD_OPENDATA_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_WITHINGS_CONSUMER_SECRET__', $env:GC_WITHINGS_CONSUMER_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_NOKIA_CLIENT_SECRET__', $env:GC_NOKIA_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_DROPBOX_CLIENT_SECRET__', $env:GC_DROPBOX_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_STRAVA_CLIENT_SECRET__', $env:GC_STRAVA_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_TODAYSPLAN_CLIENT_SECRET__', $env:GC_TODAYSPLAN_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_CYCLINGANALYTICS_CLIENT_SECRET__', $env:GC_CYCLINGANALYTICS_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_CLOUD_DB_BASIC_AUTH__', $env:GC_CLOUD_DB_BASIC_AUTH | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_CLOUD_DB_APP_NAME__', $env:GC_CLOUD_DB_APP_NAME | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_POLARFLOW_CLIENT_SECRET__', $env:GC_POLARFLOW_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_SPORTTRACKS_CLIENT_SECRET__', $env:GC_SPORTTRACKS_CLIENT_SECRET | Set-Content src\Core\Secrets.h
build_script:
- qmake.exe build.pro -r -spec win32-msvc
- nmake
- cd qwt\
- jom -j1
- cd ..
- jom -j4
#notifications:
#- provider: GitHubPullRequest
# on_build_success: true
# on_build_failure: true
# on_build_status_changed: true
after_build:
- cd src\release
# copy dependencies
- windeployqt --release GoldenCheetah.exe
- copy c:\libs\10_Precompiled_DLL\usbexpress_3.5.1\USBXpress\USBXpress_API\Host\x64\SiUSBXp.dll
- copy c:\libs\10_Precompiled_DLL\libsamplerate64\lib\libsamplerate-0.dll
- copy c:\libs\10_Precompiled_DLL\VLC\win64\lib\libvlc*.dll
- xcopy /s /i /e /q c:\libs\10_Precompiled_DLL\VLC\win64\plugins plugins
- copy c:\OpenSSL-v111-Win64\bin\lib*.dll
- copy c:\OpenSSL-v111-Win64\license.txt "OpenSSL License.txt"
- xcopy /s /i /e /q C:\Python .
- copy C:\Python\LICENSE.txt "PYTHON LICENSE.txt"
- copy c:\tools\vcpkg\installed\x64-windows\bin\gsl*.dll
# ReadMe, license and icon files
- copy ..\Resources\win32\ReadMe.txt
- echo GoldenCheetah is licensed under the GNU General Public License v2 > license.txt
- echo. >> license.txt
- type ..\..\COPYING >> license.txt
- copy ..\Resources\win32\gc.ico
# Installer script
- copy ..\Resources\win32\GC3.6-Dev-Master-W64-QT5.14.2.nsi
# Build the installer
- makensis GC3.6-Dev-Master-W64-QT5.14.2.nsi
- move GoldenCheetah_v3.6-DEV_64bit_Windows.exe ..\..\GoldenCheetah_v3.6-DEV_x64.exe
- cd ..\..
- ps: Set-AppveyorBuildVariable -Name 'PUBLISH_BINARIES' -Value false
- ps: if ($env:APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED -Match "\[publish binaries\]") { Set-AppveyorBuildVariable -Name 'PUBLISH_BINARIES' -Value true }
test_script:
# minimum test
- src\release\GoldenCheetah --version 2>GCversionWindows.txt
- git log -1 >> GCversionWindows.txt
- ps: CertUtil -hashfile GoldenCheetah_v3.6-DEV_x64.exe sha256 | Select-Object -First 2 | Add-Content GCversionWindows.txt
- type GCversionWindows.txt
artifacts:
- path: GoldenCheetah_v3.6-DEV_x64.exe
name: GCinstaller
- path: GCversionWindows.txt
name: GCversionWindows
deploy:
# deploy continuous builds to s3
- provider: S3
access_key_id:
secure: RoEkfKfOnF7JHOiLZX5qfZM08X+bu4oaDzzSKgdooNM=
secret_access_key:
secure: GPAArawatirYwgpHJBthdrbvyFU5bBzPOdK7VYYPiG2YHYi/DNJZ5Q5qGK1A440p
bucket: goldencheetah-binaries
region: us-east-1
remove_files: true
set_public: true
folder: Windows
artifact: GCinstaller, GCversionWindows
on:
PUBLISH_BINARIES: true
APPVEYOR_REPO_NAME: "GoldenCheetah/GoldenCheetah"

File diff suppressed because it is too large Load Diff

View File

@@ -22,6 +22,9 @@
#endif
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
#pragma GCC diagnostic ignored "-Wcpp"
/* precision-specific definitions */
#define LEVMAR_CHKJAC LM_ADD_PREFIX(levmar_chkjac)
#define LEVMAR_FDIF_FORW_JAC_APPROX LM_ADD_PREFIX(levmar_fdif_forw_jac_approx)
@@ -426,7 +429,7 @@ int info, rank, worksz, *iwork, iworksz;
static int LEVMAR_LUINVERSE(LM_REAL *A, LM_REAL *B, int m)
{
void *buf=NULL;
int buf_sz=0;
//int buf_sz=0;
register int i, j, k, l;
int *idx, maxi=-1, idx_sz, a_sz, x_sz, work_sz, tot_sz;
@@ -439,7 +442,7 @@ LM_REAL *a, *x, *work, max, sum, tmp;
work_sz=m;
tot_sz=(a_sz + x_sz + work_sz)*sizeof(LM_REAL) + idx_sz*sizeof(int); /* should be arranged in that order for proper doubles alignment */
buf_sz=tot_sz;
//buf_sz=tot_sz;
buf=(void *)malloc(tot_sz);
if(!buf){
fprintf(stderr, RCAT("memory allocation in ", LEVMAR_LUINVERSE) "() failed!\n");

View File

@@ -32,6 +32,7 @@ void lmcurve_evaluate(
const double *const par, const int m_dat, const void *const data,
double *const fvec, int *const info)
{
(void)(info);
for (int i = 0; i < m_dat; i++ )
fvec[i] =
((lmcurve_data_struct*)data)->y[i] -

View File

@@ -29,7 +29,7 @@ void QwtPlotGappedCurve::drawSeries(QPainter *painter, const QwtScaleMap &xMap,
return;
if (to < 0)
to = dataSize() - 1;
to = dataSize();
int i = from;
double last = 0;

View File

@@ -200,6 +200,8 @@ void QxtSpanSliderPrivate::triggerAction(QAbstractSlider::SliderAction action, b
case QAbstractSlider::SliderMove:
if ((main && mainControl == QxtSpanSlider::UpperHandle) || (!main && altControl == QxtSpanSlider::UpperHandle))
up = true;
no = true;
break;
case QAbstractSlider::SliderNoAction:
no = true;
break;

Some files were not shown because too many files have changed in this diff Show More