Compare commits

..

979 Commits

Author SHA1 Message Date
Alejandro Martinez
bd224c8251 Revert "Trigger v3.6 builds with version string"
[skip ci]
This reverts commit 22f45f364f,
it was a temporary hack to include version string in regular commit.
2023-08-05 10:39:08 -03:00
Alejandro Martinez
22f45f364f Trigger v3.6 builds with version string
[publish binaries]
2023-08-05 10:36:55 -03:00
Mark Liversedge
0286802d1c RELEASE 3.6 BUILD TRIGGER
.. trigger build of release binaries

[publish binaries]
2023-08-05 12:24:25 +01:00
Mark Liversedge
925445a215 VERSION 3.6 RELEASE
.. final release of version 3.6
2023-08-05 10:02:09 +01:00
Alejandro Martinez
511456bacd Update snapshot builds
To test latest changes before release
[publish binaries]
2023-07-30 13:39:32 -03:00
Alejandro Martinez
28f623b517 Preserve current layout as Legacy perspective
appending default perspectives for the view.
Fixes #4363
2023-07-03 15:16:57 -03:00
peret2000
4931ad1bd7 Upgrade Python AppImage version for Linux builds (#4375)
Python 3.7.16 AppImage is no longer available, upgrade to 3.7.17
2023-06-27 19:56:22 -03:00
Alejandro Martinez
7173437ab2 Update FIT SDK definitions to 21.115 2023-06-22 20:03:43 -03:00
dconka
14cb588f55 Update nongarmin.json (#4373)
Add new SIGMA ROX 12.1 EVO
2023-06-22 19:57:59 -03:00
Alejandro Martinez
2934bfe3bd Update German translation
Contributed by Marcen at the users forum
2023-06-20 17:45:51 -03:00
Mark Liversedge
dc3436dc65 Update README.md
.. OS X is now called MacOS (bit late to this one)
2023-06-08 15:24:10 +01:00
grauser
190aca8a73 Avoid double warning message 2023-06-07 22:47:07 +02:00
Mark Liversedge
6ef1cb7b96 Update README.md
.. include references to community sharing via cloud db
   open data and erg db

[skip ci]
2023-06-05 10:37:13 +01:00
Mark Liversedge
169c23ee58 Update README.md
.. more informative description with more fact based 
   statements and less emotive or hyperbolic language

[skip ci]
2023-06-05 10:31:26 +01:00
Mark Liversedge
7bf96285e7 Update README.md
.. screenshot instead of icon for github readme

[skip ci]
2023-06-05 10:06:28 +01:00
Mark Liversedge
067696aafd Screenshot for README.md
... Rather than the GC icon, lets put a screenshot of the app on the github
    welcome page for the repo

[skip ci]
2023-06-05 10:02:33 +01:00
peret2000
b07a7ef491 Use bicycle weight in Virtual Speed while training (#4365)
When computing virutalspeed based on slope, altitude, etc, total weight is relevant, specially in up and down hills

It was using 10kg plus the athlete weight. Now, it considers configured bicycle weigth. Not very relevant, but consistent with the data GH has for training
2023-06-04 17:05:02 -03:00
Mark Liversedge
7a1d99fca9 Refresh snapshot builds
.. last MacOS snapshots has an issue with the version of
   QT used and font matching which was fixed via a new commit.

[publish binaries]
2023-06-03 09:12:45 +01:00
Mark Liversedge
8b3dbbca7b Python 'printd' debug output strings not wide
.. we cannot pass wide strings to the 'printd' debug macro
   since it uses printf not wprintf. Not a major problem
   in this case since it is just a debug statement.

   introduced in previous commit that fixed crashes
   when embedding python v3.11 or higher
2023-06-01 09:12:58 +01:00
Poncho
e0a198a164 Fix python embedding crash with Python 3.11
.. use of standard strings instead of wide strings.

Fixes #4362
2023-05-31 21:14:11 +01:00
Mark Liversedge
f965345abc MacOS default font scaling smaller
.. for numerous reasons the font scaling on MacOS should be slightly
   less than for other platforms to be in keeping with the native
   systems font selections
2023-05-30 12:24:32 +01:00
Mark Liversedge
9b88abdeee Search QFontDatabase for installed fonts
.. instead of trying to create a font and use exactMatch()

.. this is faster and also avoids a qt-bug on MacOS for
   QFont::exactMatch() that keeps recurring
2023-05-30 08:28:49 +01:00
Alejandro Martinez
a37e27770c Update snapshot builds
For testing new default appearance settings
[publish binaries]
2023-05-28 18:20:46 -03:00
Mark Liversedge
228e2f24f9 Better fallback font sets
.. more likely to find Clear Sans and PT Sans on Linux
   and Mac respectively. Should avoid the dreaded Arial.
2023-05-28 17:17:42 +01:00
Mark Liversedge
93f8599070 Weird issue with QString arguments
.. fixed but not really sure why there was a problem
2023-05-27 12:04:53 +01:00
Mark Liversedge
7447af7053 About dialog show UI info
.. what dpi scaling and font size are we using. helpful for
   understanding how the ui is reacting to different resolutions
   and OS specific settings for scaling
2023-05-27 11:37:47 +01:00
Mark Liversedge
922c5e6985 Default Appearance Settings 2 of 2
.. default font scaling wasn't working (it was always 1.0). This is
   now fixed and means fonts are scaled so that GC always looks the
   same.

   For some users the fonts will appear too large, in this case they
   can reduce the font scaling to suit their own preferences.
2023-05-27 09:55:45 +01:00
Mark Liversedge
8a5bbc276f Fixup MacOS compiler error
.. last commit broke MacOS build and also left an errant debug
   statement in there for good measure
2023-05-26 13:23:04 +01:00
Mark Liversedge
c97efc1e49 Preferences reset appearances
.. a button on the config dialog to reset appearance settings
   to default values. Will be useful when fonts go squiffy
   of the user changes the resolution of their display.
2023-05-26 10:42:35 +01:00
Mark Liversedge
c01797b422 Minor fixup for default appearance recent commit
.. missing header broke build on MacOS

.. default width for mainwindow corrected
2023-05-25 11:24:26 +01:00
Mark Liversedge
47688ba754 Font fallback list use QString not char *
.. since initialising the array from strings is not supported
   in c++11 and causes a compile time error on Windows
2023-05-25 09:33:43 +01:00
Mark Liversedge
c97eac67a2 Default Appearance Settings 1 of 2
.. The default appearance settings on new install or directly
   after and upgrade are terrible and create a poor impression
   for new users

.. This commit fixes up scaling, font selection and themes so
   that for a new install or directly after upgrade they are
   set to defaults that are sensible for the current release

.. It is expected that these defaults will change and extend as
   we implement new features and the UI evolves- so these should
   be used as a basis for defaulting in the future.

.. A second update is required to resolve issues with scaling in
   overview charts dependant upon the screen resolution
2023-05-25 08:44:43 +01:00
Poncho
1a39471ad6 src/Python/PythonEmbed.cpp: forward python errors to the console (#4359) 2023-05-14 12:19:34 -03:00
Paul Johnson
0bf39ec4dd Stop batch processing entries from being edited (#4356) 2023-05-14 12:18:28 -03:00
Alejandro Martinez
103c87c600 Deprecate NewMainWindow
Complements fc3de5f
2023-04-22 21:13:34 -03:00
Alejandro Martinez
a3873a30fe Deprecate GProgressDialog
It was used only by the also deprecated MetricAggregator
2023-04-22 20:15:49 -03:00
Alejandro Martinez
efe64d3a96 Biweekly snapshot builds
Cumulative changes from v3.6-RC4
dbd33465c Update FIT SDK to 21.105
708d8744f Support larger font scaling
c85dab80a Skip previously imported files on Auto-Import (#4347)
1ecc6f9ec Python - Add compare support to activity series (#4349)
f0c9f12b4 FitRideFile - Identify Pulse Ox field
ab337f165 WorkoutWizard - Remove references to FTP and CP60
00d09af48 Highlight current selection in Train and Trends (#4320)
e7b9275a3 Update Italian translation
fdb35bf74 Athlete tab colour fix (#4257)
e32eabc10 Update German translation
[publish binaries]
2023-04-15 18:55:20 -03:00
Alejandro Martinez
dbd33465c4 Update FIT SDK to 21.105 2023-04-14 20:02:39 -03:00
Mark Liversedge
708d8744f6 Support larger font scaling
.. as 8k displays become more popular and affordable we need to
   support greater font scaling - we now scale up to x5 the
   default font size

   This should be good for devices well over 8k resolution but
   does highlight some limitations with Qt widgets and maximum
   sizes they support internally.
2023-04-13 11:01:11 +01:00
Alejandro Martinez
c85dab80a8 Skip previously imported files on Auto-Import (#4347)
If the importable file (after export when inside a .zip/.gz archive)
is present in imports files it means it was previously imported,
so it is skipped on Auto-Import for better performance and to avoid
re-appearance of deleted activities still present in the source folder.
Fixes #3696
Fixes #1892
2023-04-12 10:28:24 -03:00
Alejandro Martinez
1ecc6f9ec9 Python - Add compare support to activity series (#4349)
All activity functions working with data series,
both standard and xdata, now include an optional
compareindex=-1 parameter.
When compare mode is enabled compareindex parameter
is used as an index to get data for the corresponding
compare item, be an activity or an interval.
Sample chart contributed by Marcen at the users forum
Fixes #4346
2023-04-11 18:06:39 -03:00
Alejandro Martinez
26bf31a3d6 Biweekly snapshot builds
Just a few changes from RC4:
- Updated German, Italian and Spanish translations
- Better contrast in Athlete Tabs when using dark colors
- Better contrast for selected items in Trends/Train sidebar
  when using dark colors
- Clarify texts in Relative Wattage Workout Creator
[publish binaries]
2023-04-01 10:29:25 -03:00
vlcvboyer
97d5c896bd Code clean out (removing few warnings from build log) (#4331)
* Use wchar when 2 bytes charachers are used
* Mark provisional parameters as UNUSED
* Static cast OR select appropriate data type
* Fill up comment with missing parameter
---------
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2023-03-29 19:36:46 -03:00
Alejandro Martinez
f0c9f12b44 FitRideFile - Identify Pulse Ox field
Generated by Garmin Health Snapshot activity.
Fixes #4344
2023-03-28 21:28:18 -03:00
Alejandro Martinez
ab337f165a WorkoutWizard - Remove references to FTP and CP60
Workouts are scaled using CP in GoldenCheetah.
2023-03-26 12:59:19 -03:00
Alejandro Martinez
1ae41e576a Revert "Workout Wizard - Honor Use CP as FTP setting"
This reverts commit 0767a98d0d.
My former interpretation was wrong, Workout Editor only
uses FTP for Coggan metrics, scaling uses CP.
2023-03-25 18:56:13 -03:00
Alejandro Martinez
0767a98d0d Workout Wizard - Honor Use CP as FTP setting
Like Workout Editor does, it is confusing otherwise.
2023-03-25 10:54:33 -03:00
vlcvboyer
00d09af489 Highlight current selection in Train and Trends (#4320)
Change on select bg and fg colors for Trends and Train,
currently are barely/no noticeable on Windows and macOs
when using dark colors.
---------
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2023-03-25 10:33:46 -03:00
Alejandro Martinez
e7b9275a36 Update Italian translation
Contributed by Giuseppe Cifelli at the users forum.
2023-03-24 10:05:27 -03:00
Mark Liversedge
fc10661541 Revert SearchBox styling updates
.. the original behaviour is reverted, which is not ideal but
   does not cause rendering issues on Linux/MacOS and is compatible
   with searchbox usage on dialog widgets.

.. any updates to the toolbutton styling will need to consider
   a) placement on toolbar and dialog widgets
   b) platform specific considerations across Linux/Windows/MacOS
2023-03-24 09:44:05 +00:00
Mark Liversedge
536057bf66 Fixup Search/Filter Toolbutton on Linux
.. at least its fine on Linux, but need to consider how these
   changes have impacted MacOS separately.
2023-03-24 09:16:51 +00:00
Paul Johnson
fdb35bf74e Athlete tab colour fix (#4257)
* Corrects Athlete QTabBar tab colours to match NewSideBar,
  abstract on select background color selection from NewSideBar
  to Colors for reuse in MainWindow
* Fixes dropMenu visibility within the Filter/Search Box on Dark Themes
---------
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2023-03-23 20:01:46 -03:00
Alejandro Martinez
e32eabc102 Update German translation
Contributed by Marcen at the users forum
2023-03-22 13:26:10 -03:00
Alejandro Martinez
985710a828 Update v3.6-RC4 builds
Fixes AZUM secret and Batch Processing localization issues
[publish binaries]
2023-03-21 10:30:07 -03:00
Alejandro Martinez
1aa166bea1 Patch Secrets.h with AZUM secret
Missing from previous commit
2023-03-20 22:01:47 -03:00
Alejandro Martinez
884cfef788 Update translation files for BatchProcessingDialog 2023-03-20 20:19:59 -03:00
Alejandro Martinez
02ad9767e2 BatchProcessingDialog - Fix localization errors
- DataProcessor primary key is english name,
  but localized name is displayed in combobox
- tr() macro only works on string constants
- make all messages translatable
- remove unused messages
2023-03-20 20:19:02 -03:00
jgpallero
574c8005c3 Spanish translation update (#4342) 2023-03-20 13:44:41 -03:00
Alejandro Martinez
b907e7f0a6 V3.6 RC4 BUILD
Trigger v3.6 RC build.
[publish binaries]
2023-03-18 13:38:09 -03:00
Mark Liversedge
29f59e3e24 Fixup MacOS compile error
.. missing header for QMessageBox
2023-03-17 18:50:15 +00:00
Alejandro Martinez
36cb446810 Update translation files
to include strings in BatchProcessing dialog.
2023-03-17 13:45:36 -03:00
Alejandro Martinez
6bf7781aea Change running Python DPs from Edit menu
To better match the new BatchProcessing dialog
- Python DPs are listed together with builtin processors
  to be executed like parameterless built in DPs, with
  option to cancel.
- They also appear under the Python Fixes submenu, but in
  this case they also can be edited.
2023-03-17 13:40:19 -03:00
Paul Johnson
add0f301e9 Batch processing (#4226)
Batch Processing - Delete, Data Processors & Export

Extension of Batch Export dialog to include other operation on multiple activities:
- run data processor (Builtin or Python)
- delete (after confirmation)

Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2023-03-17 13:01:48 -03:00
Alejandro Martinez
c77b32efaa Azum - Update Client ID and Secret 2023-03-16 15:28:29 -03:00
Alejandro Martinez
3aed45e96b FilterHRV - don't assume current activity
Fixes use from formulas and Python fixes
2023-03-14 13:07:26 -03:00
Alejandro Martinez
392ec2a74a Add Azum secret for AppVeyor builds 2023-03-13 11:49:46 -03:00
DanielZelei
2fc0c1d9ca Disable Azum logging 2023-03-13 09:08:53 +00:00
DanielZelei
dae573c939 Add optional user key to the Azum cloud provider 2023-03-13 09:08:53 +00:00
DanielZelei
0f5ec45308 Azum - disable logging 2023-03-13 09:08:53 +00:00
DanielZelei
a808b68ad7 Add new cloud service provider - Azum 2023-03-13 09:08:53 +00:00
Alejandro Martinez
5c0eb9910b Fix Travis-ci Linux build
[skip AppVeyor]
Copy sip.h to default Python include directory.
[publish binaries]
2023-03-05 20:08:34 -03:00
Alejandro Martinez
67136b3cdf Enable Python DPs use Metadata in automatic mode (#4336)
Data Processors running on import are applied before the activity
is added to RideCache and metrics are computed, this behavior is
by design, likely to optimize resource usage on bulk import.
So activityMetrics API is not available; a new getTag API was
added for this case and setTag/delTag/hasTag changed to work
in this context too.
When the Python fix is executed on activities already in the cache
either via Edit menu, Filters or other Python Fix changes are
notified via the corresponding RideItem.
Fixes #4095
[publish binaries]
2023-03-05 16:26:25 -03:00
Alejandro Martinez
42c43c7689 Fix Data Processors running on save after import
Currently they are ignored since applied to a RideFile
object immediatly discarded.
Changed to mimic behavior of CloudServices.
2023-03-05 13:16:02 -03:00
Alejandro Martinez
97570efdd2 Revert "Disable automatic execution of Python Data Processors"
This reverts commit 0d979f9fb9.
2023-03-01 21:25:15 -03:00
Alejandro Martinez
9b10f73422 Revert "Disable execution of Python DPs from formulas and Python API"
This reverts commit 434580ee81.
2023-03-01 21:22:32 -03:00
Alejandro Martinez
92963c8c83 Update default ODPM and WKO4 charts
Use the newly added timestring to format TTE
2023-02-27 13:06:24 -03:00
Alejandro Martinez
0e8fe3f9c9 Performance Tests - Add images for the wiki
[skip ci]
Contributed by Marcen at the forum
2023-02-27 11:33:06 -03:00
Alejandro Martinez
f2f519c44c New images for the wiki
[skip ci]
Contributed by Marcen at the forum
2023-02-19 22:10:16 -03:00
Alejandro Martinez
5f759c0b31 TabBar Chart Menu - image for the wiki
[skip ci]
Contributed by Marcen at the users forum
2023-02-18 16:21:30 -03:00
Alejandro Martinez
64907a3d2b Update CP Chart image for the wiki
[skip ci]
Contributed by Marcen at the users forum
2023-02-17 10:48:21 -03:00
Mark Liversedge
4e3e82655e Datafilter - double(p1) coerce to numeric
.. we already had string(p1) to coerce to string values but
   somehow forgot to do the reverse.
2023-02-13 08:54:36 +00:00
Alejandro Martinez
528259db3e Biweekly snapshot build
[publish binaries]
Cumulative changes from RC3
https://github.com/GoldenCheetah/GoldenCheetah/compare/v3.6-RC3...13167e0
2023-02-12 19:12:46 -03:00
Alejandro Martinez
13167e021c CP Chart - Add Delta Compare to standard settings
It was available only via reveal controls,
which are disabled in v3.6.
Fixes #4256
2023-02-07 22:07:57 -03:00
vlcvboyer
0904ebe1e0 Train - Accept gpx as videosynch source (#4329)
Fixes #4330
2023-02-06 12:48:42 -03:00
Alejandro Martinez
984f1f9d99 Fix German Translation
Contributed by Marcen at the users forum.
2023-02-02 20:13:33 -03:00
Alejandro Martinez
7c05a7f895 Update German Translation
Contributed by Marcen at the users forum
2023-02-02 16:04:20 -03:00
Alejandro Martinez
dda82c9a62 Images for the wiki - Overview Tiles for Trends
[skip ci]
Contributed by Marcen at users forum
2023-01-30 10:48:40 -03:00
Alejandro Martinez
dd8f8ebdce Images for the wiki-Overview Tiles for Activities
[skip ci]
Contributed by Marcen at users forum
2023-01-30 10:42:12 -03:00
Alejandro Martinez
ee65609143 Revert "New screen captures for the wiki - Overview Tiles for Activities"
[skip ci]
This reverts commit fb013c63e2.
Spaces in filenames are a PITA in github, will add them
again with underscores
2023-01-29 21:03:04 -03:00
Alejandro Martinez
84afd26262 Revert "New screen captures for the wiki - Overview Tiles for Trends"
[skip ci]
This reverts commit 7b7de8463b.
Spaces in filenames are a PITA in github, will add them
with underscores
2023-01-29 21:01:57 -03:00
Alejandro Martinez
7b7de8463b New screen captures for the wiki - Overview Tiles for Trends
[skip ci]
Contributed by Marcen at users forum
2023-01-29 20:19:45 -03:00
Alejandro Martinez
fb013c63e2 New screen captures for the wiki - Overview Tiles for Activities
[skip ci]
Contributed by Marcen at users forum
2023-01-29 20:17:15 -03:00
Alejandro Martinez
54d388c2a3 Update screen captures to v3.6 for the wiki
[skip ci]
Contributed by Marcen at the users forum
2023-01-29 20:14:19 -03:00
Alejandro Martinez
11decfc508 Biweekly snapshot build
[publish binaries]
Cumulative changes from RC3
402edf5 Stop signal processing during resetPerspective()
64386bc Perspective Selector Sync on switch Athlete tabs
b6fae05 Revert "Keep Perspective Selecto synced when switching athletes"
9eb8138 Revert "Fix strange behaviour when changing views"
0ddea94 Fix strange behaviour when changing views
88246a8 Overview Chart - Update metric pointer in tiles config
46bfab5 Overview - Use sport instead of isRun/isSwim
663bde0 Update Spanish translation (#4322)
30895b0 Update translation files to include latest strings
af21c35 FIT Files - Update sport list and sub sports (#4315)
68c7954 Add test FIT file from Garmin 945 swim with RR data
dfe572c Collect R-R data from Garmin HRM swim (#4319)
ef0eac8 Estimator - Use normalized Sport names
9531acf Remove Garmin devices already included in latest FIT SDK
523d2d1 Update FITmetadata.json to FIT SDK 21.94
bfa4b4b DataFilter - Metric aggretation honors AggregateZero and Count
c65f313 Revert "DataFilter - use RideCache::getAggregate continuation"
e95d116 DataFilter - Avoid crashes when no ride is selected
3c3d202 Fix DataFilter use of PowerIndex
cc5eaf4 Estimates and Performances - Generalize to any sport with power data (#4307)
abb69b8 DialWindow - Fix rolling average initialization
841766e DataFilter - use RideCache::getAggregate continuation
afbb43e DataFilter - asaggstring uses RideCache::getAggregate
33ba1c0 FitRideFile - Avoid crashes on multi-sessions from CloudServices
018bd40 FTMS: Add support for Spin Down Calibration (#4073)
4f97bae DOB - display using 4 digits year
dfeb853 macOS plist - Add required BTLE keys for newer versions
2a99c87 Python 3.7.15 AppImage is no longer available, upgrade to 3.7.16 (#4299)
0296693 Workout Chart - Imperial units support (#4232)
8919eab Map Chart - Update default Tile Servers
7d0e6de Bug Fixes for live map base url and remove erroneous debug message (#3901)
1c5bbec Train - Improve L/R Balance Dial display
8e0b0a6 R/Python API - Sport case insensitive in Athlete Zones
b08e662 Train - Show lap notifications only when available
2c3eabd RideCache - Fix refresh to inclu=de the oldest activity
9c7d1d4 Strava Sync - Tag simulation rides as VirtualRide
53f8f51 Fix memory leak in Python API - part 2
e477b05 ErgDB Download - Decode title to be used as name
3a16d1e Keep Perspective Selecto synced when switching athletes
63d13ba Update Italian translation
f947b6b VideoSync - Distance scaling only applies to CRS workouts
67962bf Fix memory leak in Python API
5f22d12 fix(doc): mention QMAKE_MOVE requirement for bison > 3.7
996ee63 Remove MapQuest API Key from gcconfig.pri.in
a7ad134 Measures CSV Import - Last field can be empty
90172a4 Replace Tracker in default Trends layout
68b70e0 Fix Elevation - Avoid 302 network error
434580e Disable execution of Python DPs from formulas and Python API
cb23914 Honor chart filters in Trends view Histogram and CP charts (#4287)
1941b9a Minimum bison version is now 2.7
2023-01-28 18:42:36 -03:00
Mark Liversedge
402edf51fc Stop signal processing during resetPerspective()
.. fixes undesirable behaviour with click thru on user charts

Fixes #4325
2023-01-28 17:44:51 +00:00
Mark Liversedge
64386bc1ba Perspective Selector Sync on switch Athlete tabs
.. when switching athlete tabs the perspective selector would
   always be reset to the first entry, this update makes sure
   we reset to the correct one.

Fixes #4325
2023-01-28 16:28:08 +00:00
Alejandro Martinez
b6fae05d48 Revert "Keep Perspective Selecto synced when switching athletes"
This reverts commit 3a16d1ecc2.
2023-01-26 15:31:58 -03:00
Alejandro Martinez
9eb81385e8 Revert "Fix strange behaviour when changing views"
This reverts commit 0ddea94b7a.
2023-01-26 15:31:29 -03:00
Alejandro Martinez
0ddea94b7a Fix strange behaviour when changing views
The problem was introduce by 3a16d1e, the change in perspectiveSelector
current index triggers currentIndexChanged when the view change has
not been finished, to avoid this we use activated signal and add
a check to do nothing when the index has not changed.
The problem was reported at the forum.
2023-01-26 12:06:37 -03:00
Alejandro Martinez
88246a8b15 Overview Chart - Update metric pointer in tiles config
When metric selection changes in tiles config the metric
pointer was not updated accordingly leading to inconsistencies
s.t. a Total metric displayed as an Average metric in Trends
until restart, since at tile creation the correct pointer is used.
2023-01-25 16:40:37 -03:00
Alejandro Martinez
46bfab5c8b Overview - Use sport instead of isRun/isSwim
It is simpler and more general to get activities from the same sport.
2023-01-24 20:37:03 -03:00
jgpallero
663bde04c5 Update Spanish translation (#4322) 2023-01-23 11:22:08 -03:00
Alejandro Martinez
30895b028d Update translation files to include latest strings 2023-01-23 09:43:12 -03:00
vlcvboyer
af21c35022 FIT Files - Update sport list and sub sports (#4315)
* move sports list in a function for other calls
* Decode sport and sub-sport and push into activity tag
* Remove inaccurate comments
* Populate additional sports ID from documentation
* use of standardized RideFile::sport()

Fixes #4312
Fixes #4313
2023-01-21 18:58:30 -03:00
Alejandro Martinez
68c795440c Add test FIT file from Garmin 945 swim with RR data
[skip ci]
2023-01-20 20:58:53 -03:00
vlcvboyer
dfe572c005 Collect R-R data from Garmin HRM swim (#4319)
Fixes #4024
2023-01-20 20:51:16 -03:00
Alejandro Martinez
ef0eac8908 Estimator - Use normalized Sport names
Otherwise Rowing will not match Row activities, for example.
Continuation of cc5eaf4
2023-01-18 21:29:05 -03:00
Alejandro Martinez
9531acf366 Remove Garmin devices already included in latest FIT SDK 2023-01-18 21:27:39 -03:00
Alejandro Martinez
6f6d7c6a8f Biweekly snapshot build update
[publish binaries]
Cumulative changes from RC3
523d2d1 Update FITmetadata.json to FIT SDK 21.94
bfa4b4b DataFilter - Metric aggretation honors AggregateZero and Count
c65f313 Revert "DataFilter - use RideCache::getAggregate continuation"
e95d116 DataFilter - Avoid crashes when no ride is selected
3c3d202 Fix DataFilter use of PowerIndex
cc5eaf4 Estimates and Performances - Generalize to any sport with power data (#4307)
abb69b8 DialWindow - Fix rolling average initialization
841766e DataFilter - use RideCache::getAggregate continuation
afbb43e DataFilter - asaggstring uses RideCache::getAggregate
33ba1c0 FitRideFile - Avoid crashes on multi-sessions from CloudServices
018bd40 FTMS: Add support for Spin Down Calibration (#4073)
4f97bae DOB - display using 4 digits year
dfeb853 macOS plist - Add required BTLE keys for newer versions
2a99c87 Python 3.7.15 AppImage is no longer available, upgrade to 3.7.16 (#4299)
0296693 Workout Chart - Imperial units support (#4232)
8919eab Map Chart - Update default Tile Servers
7d0e6de Bug Fixes for live map base url and remove erroneous debug message (#3901)
1c5bbec Train - Improve L/R Balance Dial display
8e0b0a6 R/Python API - Sport case insensitive in Athlete Zones
b08e662 Train - Show lap notifications only when available
2c3eabd RideCache - Fix refresh to inclu=de the oldest activity
9c7d1d4 Strava Sync - Tag simulation rides as VirtualRide
53f8f51 Fix memory leak in Python API - part 2
e477b05 ErgDB Download - Decode title to be used as name
3a16d1e Keep Perspective Selecto synced when switching athletes
63d13ba Update Italian translation
f947b6b VideoSync - Distance scaling only applies to CRS workouts
67962bf Fix memory leak in Python API
5f22d12 fix(doc): mention QMAKE_MOVE requirement for bison > 3.7
996ee63 Remove MapQuest API Key from gcconfig.pri.in
a7ad134 Measures CSV Import - Last field can be empty
90172a4 Replace Tracker in default Trends layout
68b70e0 Fix Elevation - Avoid 302 network error
434580e Disable execution of Python DPs from formulas and Python API
cb23914 Honor chart filters in Trends view Histogram and CP charts (#4287)
1941b9a Minimum bison version is now 2.7
2023-01-17 18:59:11 -03:00
Alejandro Martinez
523d2d1909 Update FITmetadata.json to FIT SDK 21.94 2023-01-17 18:48:35 -03:00
Alejandro Martinez
bfa4b4b977 DataFilter - Metric aggretation honors AggregateZero and Count
When computing metric averages
2023-01-16 12:54:29 -03:00
Alejandro Martinez
c65f313de5 Revert "DataFilter - use RideCache::getAggregate continuation"
This reverts commit 841766effb
since it provokes crashes in some Trends Overview charts.
TODO: fix aggregation to consider AggregateZero and count
properties of metrics.
2023-01-15 21:44:56 -03:00
Alejandro Martinez
b689d29653 Biweekly snapshot build
[publish binaries]
Cumulative changes from RC3
e95d11671 DataFilter - Avoid crashes when no ride is selected
3c3d2024a Fix DataFilter use of PowerIndex
cc5eaf418 Estimates and Performances - Generalize to any sport with power data (#4307)
abb69b8fb DialWindow - Fix rolling average initialization
841766eff DataFilter - use RideCache::getAggregate continuation
afbb43edd DataFilter - asaggstring uses RideCache::getAggregate
33ba1c03e FitRideFile - Avoid crashes on multi-sessions from CloudServices
018bd404e FTMS: Add support for Spin Down Calibration (#4073)
4f97bae97 DOB - display using 4 digits year
dfeb8532a macOS plist - Add required BTLE keys for newer versions
2a99c8762 Python 3.7.15 AppImage is no longer available, upgrade to 3.7.16 (#4299)
0296693dd Workout Chart - Imperial units support (#4232)
8919eab5b Map Chart - Update default Tile Servers
7d0e6de0b Bug Fixes for live map base url and remove erroneous debug message (#3901)
1c5bbecf1 Train - Improve L/R Balance Dial display
8e0b0a67a R/Python API - Sport case insensitive in Athlete Zones
b08e662c9 Train - Show lap notifications only when available
2c3eabdd8 RideCache - Fix refresh to inclu=de the oldest activity
9c7d1d4f3 Strava Sync - Tag simulation rides as VirtualRide
53f8f5102 Fix memory leak in Python API - part 2
e477b05a9 ErgDB Download - Decode title to be used as name
3a16d1ecc Keep Perspective Selecto synced when switching athletes
63d13ba9e Update Italian translation
f947b6bd3 VideoSync - Distance scaling only applies to CRS workouts
67962bfff Fix memory leak in Python API
5f22d12a6 fix(doc): mention QMAKE_MOVE requirement for bison > 3.7
996ee63cd Remove MapQuest API Key from gcconfig.pri.in
a7ad1346e Measures CSV Import - Last field can be empty
90172a4a6 Replace Tracker in default Trends layout
68b70e0e4 Fix Elevation - Avoid 302 network error
434580ee8 Disable execution of Python DPs from formulas and Python API
cb23914a5 Honor chart filters in Trends view Histogram and CP charts (#4287)
1941b9af7 Minimum bison version is now 2.7
2023-01-14 19:38:19 -03:00
Alejandro Martinez
e95d11671a DataFilter - Avoid crashes when no ride is selected
This is an edge case, no ride available or no one selected,
but it can happens, so lets avoid the crash.
2023-01-14 10:29:42 -03:00
Mark Liversedge
3c3d2024ac Fix DataFilter use of PowerIndex
.. 3rd param is not required as it gets defaulted, and has
   recently changed from bool to QString

Fixes #4308
2023-01-14 10:50:37 +00:00
Alejandro Martinez
cc5eaf4187 Estimates and Performances - Generalize to any sport with power data (#4307)
Weekly estimates and performances are precomputed for any sport
with power data, not just Bike and Run.
In Trends view both LTM charts and DataFilter select sport based
on applied filters: when all activities are from the same sport,
that is used to select estimates and performances, otherwise
Bike estimates and performances are used for backward compatibility.
This reverts 1a285d1050
2023-01-13 14:58:05 -03:00
Alejandro Martinez
abb69b8fb5 DialWindow - Fix rolling average initialization
Reported in #4298
2023-01-11 19:40:29 -03:00
Alejandro Martinez
841766effb DataFilter - use RideCache::getAggregate continuation
This completes afbb43edd1
2023-01-03 16:19:03 -03:00
Alejandro Martinez
afbb43edd1 DataFilter - asaggstring uses RideCache::getAggregate
For consistency and simplicity, getAggregate honors AggregateZero
and count properties of metrics, beside some special cases.
Fixes #4302
TODO: aggmetric and aggmetricstrings likely have a similar problem.
2023-01-02 15:38:50 -03:00
Alejandro Martinez
33ba1c03ec FitRideFile - Avoid crashes on multi-sessions from CloudServices
CloudServices doesn't request for multi-sessions and a crash
happens when available.
Reported at the forum by CloudServices developer.
2022-12-29 09:30:11 -03:00
Alejandro Martinez
bb972b7e8a Biweekly snapshot build
[publish binaries]
Cumulative changes from RC3
018bd404e FTMS: Add support for Spin Down Calibration (#4073)
4f97bae97 DOB - display using 4 digits year
dfeb8532a macOS plist - Add required BTLE keys for newer versions
2a99c8762 Python 3.7.15 AppImage is no longer available, upgrade to 3.7.16 (#4299)
0296693dd Workout Chart - Imperial units support (#4232)
8919eab5b Map Chart - Update default Tile Servers
7d0e6de0b Bug Fixes for live map base url and remove erroneous debug message (#3901)
1c5bbecf1 Train - Improve L/R Balance Dial display
8e0b0a67a R/Python API - Sport case insensitive in Athlete Zones
b08e662c9 Train - Show lap notifications only when available
2c3eabdd8 RideCache - Fix refresh to inclu=de the oldest activity
9c7d1d4f3 Strava Sync - Tag simulation rides as VirtualRide
53f8f5102 Fix memory leak in Python API - part 2
e477b05a9 ErgDB Download - Decode title to be used as name
3a16d1ecc Keep Perspective Selecto synced when switching athletes
63d13ba9e Update Italian translation
f947b6bd3 VideoSync - Distance scaling only applies to CRS workouts
67962bfff Fix memory leak in Python API
5f22d12a6 fix(doc): mention QMAKE_MOVE requirement for bison > 3.7
996ee63cd Remove MapQuest API Key from gcconfig.pri.in
a7ad1346e Measures CSV Import - Last field can be empty
90172a4a6 Replace Tracker in default Trends layout
68b70e0e4 Fix Elevation - Avoid 302 network error
434580ee8 Disable execution of Python DPs from formulas and Python API
cb23914a5 Honor chart filters in Trends view Histogram and CP charts (#4287)
1941b9af7 Minimum bison version is now 2.7
2022-12-23 18:11:49 -03:00
Erik Botö
018bd404e8 FTMS: Add support for Spin Down Calibration (#4073)
Initial implementation - merged for testing since it seems to be safe.
2022-12-21 17:25:54 -03:00
Alejandro Martinez
4f97bae97d DOB - display using 4 digits year
To avoid issues like #2584
2022-12-21 13:28:38 -03:00
Alejandro Martinez
dfeb8532a9 macOS plist - Add required BTLE keys for newer versions
[skip AppVeyor]
According to https://bugreports.qt.io/browse/QTBUG-96557
Intended to fix #4093
2022-12-19 19:00:56 -03:00
peret2000
2a99c87620 Python 3.7.15 AppImage is no longer available, upgrade to 3.7.16 (#4299) 2022-12-19 08:34:03 -03:00
Peter Kanatselis
0296693ddd Workout Chart - Imperial units support (#4232)
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2022-12-17 19:47:25 -03:00
Alejandro Martinez
8919eab5b2 Map Chart - Update default Tile Servers 2022-12-16 17:35:01 -03:00
Peter Kanatselis
7d0e6de0b1 Bug Fixes for live map base url and remove erroneous debug message (#3901)
Use default OSM tile server
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2022-12-16 16:26:18 -03:00
Alejandro Martinez
1c5bbecf1c Train - Improve L/R Balance Dial display
Includes proper treatement for NA, switched L/R and
enables averaging.
Fixes #4298
2022-12-16 15:49:22 -03:00
Alejandro Martinez
8e0b0a67a6 R/Python API - Sport case insensitive in Athlete Zones
For backward compatibility with existing charts
2022-12-14 13:43:17 -03:00
Alejandro Martinez
b08e662c9d Train - Show lap notifications only when available
It is misleading otherwise.
2022-12-12 19:53:16 -03:00
Alejandro Martinez
5af234d6ad Biweekly snapshot build
[publish binaries]
Cumulative changes from RC3
2c3eabdd8 RideCache - Fix refresh to include the oldest activity
9c7d1d4f3 Strava Sync - Tag simulation rides as VirtualRide
53f8f5102 Fix memory leak in Python API - part 2
e477b05a9 ErgDB Download - Decode title to be used as name
3a16d1ecc Keep Perspective Selecto synced when switching athletes
63d13ba9e Update Italian translation
f947b6bd3 VideoSync - Distance scaling only applies to CRS workouts
67962bfff Fix memory leak in Python API
5f22d12a6 fix(doc): mention QMAKE_MOVE requirement for bison > 3.7
996ee63cd Remove MapQuest API Key from gcconfig.pri.in
a7ad1346e Measures CSV Import - Last field can be empty
90172a4a6 Replace Tracker in default Trends layout
68b70e0e4 Fix Elevation - Avoid 302 network error
434580ee8 Disable execution of Python DPs from formulas and Python API
cb23914a5 Honor chart filters in Trends view Histogram and CP charts (#4287)
1941b9af7 Minimum bison version is now 2.7
2022-12-11 13:13:14 -03:00
Alejandro Martinez
2c3eabdd8b RideCache - Fix refresh to include the oldest activity
This boundary error provokes the cache entry for the oldest
activity don't be refreshed on full cache refresh, only
when the activity is imported or opened (s.t. selecting it
in Activities View).
For most users this may be uneventfull, but if the oldest
activity becomes dirty, a full cache will happend on each
following start, until the oldest activity is opened and
it may explain the behavior reported ocasionally at the forum
and recently in #4297
2022-12-10 10:14:44 -03:00
Alejandro Martinez
9c7d1d4f31 Strava Sync - Tag simulation rides as VirtualRide
Also map Walking Sport to Walk activity type
2022-12-05 17:10:04 -03:00
Alejandro Martinez
53f8f5102c Fix memory leak in Python API - part 2
Py_buildValue does not steal references, leading to an incorrect
reference counter and therefore resources not freed by the
garbage collector.
Contributed by Joachim at the forum.
2022-12-03 12:07:06 -03:00
Alejandro Martinez
e477b05a98 ErgDB Download - Decode title to be used as name
Title is html encoded, we need to decode it for readability and,
since name is used as a filename, replace "/" by "-".
This still has some limitations s.t. duplicate titles, but they
have easy workarounds for the user and they don't justify to change
the database schema now in my POV.
2022-12-01 13:16:47 -03:00
Alejandro Martinez
3a16d1ecc2 Keep Perspective Selecto synced when switching athletes
Fixed error reported by Marcen in users forum
2022-11-30 10:27:10 -03:00
Alejandro Martinez
63d13ba9e5 Update Italian translation
Contributed by https://github.com/gicif
Fixes #4296
2022-11-29 16:57:59 -03:00
Alejandro Martinez
f947b6bd31 VideoSync - Distance scaling only applies to CRS workouts 2022-11-29 14:35:22 -03:00
Alejandro Martinez
67962bfff8 Fix memory leak in Python API
PyDict_SetItemString does not steal references, leading to an incorrect
reference counter and therefore resources not freed by the garbage collector.
Contributed by Joachim at the forum.
[publish binaries]
2022-11-28 14:33:49 -03:00
Christoph Hasse
5f22d12a61 fix(doc): mention QMAKE_MOVE requirement for bison > 3.7
[skip ci]
2022-11-20 19:46:15 -03:00
Alejandro Martinez
996ee63cd5 Remove MapQuest API Key from gcconfig.pri.in
It was deprecated and replaced by OpenElevation public API
[publish binaries]
2022-11-15 12:48:16 -03:00
Alejandro Martinez
a7ad1346e8 Measures CSV Import - Last field can be empty
Fixes #4292
2022-11-13 17:36:35 -03:00
Alejandro Martinez
90172a4a62 Replace Tracker in default Trends layout
It is now an Overview with a Table tile, original
LTM Tracker still available as a Library chart.
2022-11-10 12:17:56 -03:00
Alejandro Martinez
68b70e0e4d Fix Elevation - Avoid 302 network error
Even when the API is unlimited we get 302 error for longer rides,
lets avoid it breaking requests in smaller chunks.
2022-11-09 13:58:29 -03:00
Alejandro Martinez
434580ee81 Disable execution of Python DPs from formulas and Python API
Metadata and metrics don't work in these contexts as documented
in #4095 so we disable them to avoid confusion until the root
issue is solved.
Fixes #4288
2022-11-07 20:21:56 -03:00
Alejandro Martinez
cb23914a5f Honor chart filters in Trends view Histogram and CP charts (#4287)
Just appending the file lists doesn't work like addFilter
does, isfiltered and files are added as optional parameters
to Pespective:filterlist so they are accounted for when
the list of files is generated.
Fixes #4285
2022-11-01 18:29:34 -03:00
Alejandro Martinez
1941b9af7f Minimum bison version is now 2.7
[skip ci]
2022-10-30 12:16:46 -03:00
Mark Liversedge
67352f6dc2 V3.6 RC3 BUILD
.. trigger build of RC3

[publish binaries]
2022-10-29 20:23:56 +01:00
Alejandro Martinez
fa8eb0b6da DataFilter parser - remove warnings and avoid crash on syntax error
- Crash on syntax error happened on <leaf> destructor and the cause
  was tokens declared as <leaf> but not creating a leaf, to avoid
  this a new <string> type without destructor was added for them.
- Warnings indicated semantic value not set for some rules due to
  the lack of $$ = $1, likely bening, but lets avoid it.
2022-10-28 17:24:10 -03:00
Alejandro Martinez
5a77180957 Enable builds using bison 3.7 or higher
[skip ci]
Fixes #3586
2022-10-27 13:54:34 -03:00
Alejandro Martinez
50a027ad70 Update Italian translation
Contributed by https://github.com/gicif, Fixes #4283
2022-10-27 10:36:56 -03:00
Alejandro Martinez
a99cc3305e Datafilter - Add Compound case to Leaf::toString
For debugging and completenes
2022-10-26 18:01:01 -03:00
Alejandro Martinez
6f4da994a2 Strava download - avoid crashes when lap swim file has 0 lenght lap
Includes sample file from users forum
2022-10-26 11:20:43 -03:00
Alejandro Martinez
8946c53650 Update default Favourite Metrics
To include Time Recording, Time Moving and Running Cadence.
2022-10-25 20:53:51 -03:00
Alejandro Martinez
92ab04ac8a Upgrade bison to v2.7 for macOS builds on Travis-ci
[skip AppVeyor]
This is the minimum change to be able to use %destructor in
DataFilter.y, the same version is used for Windows builds.
2022-10-24 14:09:49 -03:00
Mark Liversedge
cfa767a854 VERSION 3.6 RC3 DEVELOPMENT BUILD
.. another release candidate prior to release

[publish binaries]
2022-10-23 11:51:54 +01:00
Alejandro Martinez
9af08b7f3c Release memory when DataFilter parsing fails
This is a continuation of 523ffcc, %destructor bison
directive is used to clean and delete Leaf nodes
allocated and discarded by the parser.
Hopefully fixes #4249
2022-10-22 17:22:23 -03:00
Alejandro Martinez
523ffcc702 Avoid crashes when DataFilter parsing fails
This started to happen after #4277, problem is when parsing fails
treeRoot can point ot non Leaf objects. This does not happens when
parsing from the DataFilter constructor since treeRoot is forced
to NULL on errors, this commit does the same for check and parseFilter.
Remaining problem is the memory leak in these cases, which are frequent
when editing filters in User or LTM charts as explained in #4249
2022-10-20 20:27:19 -03:00
peret2000
5c4f6e1f82 Upgrade Python AppImage version for Linux builds (#4281)
Python 3.7.14 AppImage is no longer available, upgrade to 3.7.15
2022-10-18 14:25:51 -03:00
Alejandro Martinez
761e0527a2 Change DataFilter lexer to process non ASCII string constants
Fixes #4278
2022-10-18 11:18:33 -03:00
Alejandro Martinez
fd3bab7e85 Add swimscore.pdf and govss.pdf to repository
[skip ci]
They are no available anymore from the original source
Fixes #4279
2022-10-18 10:43:41 -03:00
Alejandro Martinez
327150d659 Add DataFilter destructor calling clearFilter to release memory
The crash documented in #4249 was related to the conversion of
Leaf of type Symbol to Function when () are found afterwards.
This is fixed in this commit, but more testing is necessary to
see if there are other cases.
2022-10-16 15:58:37 +01:00
Alejandro Martinez
d5905d92d0 Leaf::clear - delete container elements after clear 2022-10-16 15:58:37 +01:00
Alejandro Martinez
10c2660f0b clearFilter - release memory avoiding crashes
clearFilter - delete root Leaf
Leaf constructor: initialize left,right and cond to null pointers
Leaf::clear avoid crashes when called with a null pointer parameter,
and release memory in all cases allocated in the parser
TODO: still crashes if called from DataFilter destructor, see #4249
2022-10-16 15:58:37 +01:00
Alejandro Martinez
82e79fa898 Disable Leaf::clear method to avoid crashes
Lets avoid crashes until #4249 is fixed
2022-10-09 10:46:22 -03:00
Alejandro Martinez
8860d5da08 Don't show the option to hide Activity labels in Options > Apperarance
Since it is commented out in RideNavigator.
TODO: cleanup if this is not useful anymore
2022-10-02 19:43:35 -03:00
Alejandro Martinez
746cea2d26 Add Preferences > Intervals image for the wiki
[skip ci]
2022-10-02 15:58:31 -03:00
jgpallero
edfc3ba642 Small syntax correction in Spanish translation (#4275) 2022-10-01 17:39:27 -03:00
Alejandro Martinez
a6338ee381 Update Share menu image for the wiki
[skip ci]
2022-10-01 10:58:18 -03:00
Alejandro Martinez
234bdb67e6 Add Equipment chart to default Trends layout
Contributed at the forum, it is a nice example of User Chart,
and it allows a general exploit of the Equipment data field.
2022-09-28 12:24:27 -03:00
Alejandro Martinez
b43723e8ff Use default Overview configuration when replacing old Summary charts
They are likely more useful for existing users and, hopefully,
they will produce less user complains than blank Summary charts.
2022-09-26 21:35:23 -03:00
Alejandro Martinez
6b15b7e50e kml files are not supported for import
Just as output files for Google Earth et. al.
Fixes #4271
2022-09-25 19:54:18 -03:00
grauser
7b64448912 fix(xert):name can be utf8
[publish binaries]
2022-09-15 14:15:11 +02:00
grauser
925d5c3521 fix(oauth):correct nolio secret param name
[publish binares]
2022-09-15 12:50:23 +02:00
Alejandro Martinez
0185080f3f Upgrad Python AppImage version for Linux builds
[skip AppVeyor]
Python 3.7.13 AppImage is no longer available,
upgrade to 3.7.14
[publish binaries]
2022-09-09 19:19:19 -03:00
Alejandro Martinez
3b528f8a12 Update VERSION36_BUILD and generate snapshots
Missing from RC2 build, also include the fix to avoid crashes when
myPerspective is not set in existing charts and default layouts
without R charts to avoid #4267 for newly create athletes.
[publish binaries]
2022-09-09 18:12:10 -03:00
Alejandro Martinez
56500cf357 R Chart API - Add missing constants 2022-09-08 10:21:42 -03:00
Alejandro Martinez
eca82afa4e Wiki - Remove old scope bar image 2022-09-08 10:20:58 -03:00
Alejandro Martinez
abde31ecc3 Wiki - Update UILayout_MainWindowElements image
[skip ci]
Contributed by Marcen at the users forum
2022-09-06 20:38:57 -03:00
Alejandro Martinez
1be14feb6d Wiki - Update Help Menu
[skip ci]
2022-09-06 14:12:37 -03:00
Alejandro Martinez
0d30d446f8 Avoid crashes if perspective is not set
Continuation of fbae10f
2022-09-06 10:18:46 -03:00
Alejandro Martinez
fbae10f103 Avoid crash in CP chart when perspective is not set
This was reported at the forum and it is reproducible with
the supplied home-perspectives.xml, it was likely generated
by an older version, but lets get defensive just in case.
2022-09-05 12:39:08 -03:00
Alejandro Martinez
cc6738bdf5 Remove R charts from default layouts
SS-RR and Tri Mix replaced by Python versions
contributed by Fe at the users forum.
The intention is to avoid triggering #4267
2022-09-05 11:51:44 -03:00
Alejandro Martinez
7d7ed5cfb3 Fix drag and drop to compare pane issues for v3.6
- DragDropMode is changed from InternalMove to DragDrop in RideTreeView,
  this enables compare of activities again
- DragDropMode is changed from InternalMove to DragDrop in SeasonTreeView,
  MoveAction is made the default action and dragEnterEvent ignores
  events other than move or from other origins. This avoids compared
  date ranges loosing their names.
- DragDropMode is changed from InternalMove to DragDrop in IntervalTreeView,
  MoveAction is made the default action and dragEnterEvent ignores
  events other than move or from other origins. This avoids removal
  of compared intervals from the intervals list.
This solution was contributed by Joachim at the users forum.
Fixes #3622
[publish binaries]
2022-09-03 11:17:28 -03:00
Alejandro Martinez
300960f234 Add Repository Search imgage for the Wiki
[skip ci]
2022-09-01 10:14:13 -03:00
Alejandro Martinez
b02b5f1265 Trends Sidebar - Don't process itemChanged event from date range tree
Items are not editable, so it is not used in the normal flow,
and it worsen a bug which clears the date range name in the item
when dropping on compare pane commiting the change to seasons.xml
2022-08-31 20:07:02 -03:00
Alejandro Martinez
80b671f4aa Update German Translation
Contributed by forum user Marcen
2022-08-29 19:00:17 -03:00
Alejandro Martinez
ef23cb5d1c Estimator - Add model identification to debug log 2022-08-29 13:28:01 -03:00
jgpallero
a212ff6408 Update Spanish translation (#4265) 2022-08-27 19:20:29 -03:00
Alejandro Martinez
efd9253352 Update translations to include latest strings before release
To enable testing and finish translations
[publish binaries]
2022-08-27 10:38:42 -03:00
Alejandro Martinez
aae3376135 R athlete.zones - generalize for all sports and add hr/pace lows
Fixes #4262
2022-08-25 22:59:45 -03:00
Alejandro Martinez
c1bbe1b590 Python athleteZones - generalize for all sports and add hr/pace lows
Part 1 of #4262
2022-08-25 20:03:36 -03:00
Alejandro Martinez
f8b6cc6c17 FixElevation - Use post instead of get for open-elevation requests
This allows to request all points at once since post api has
no limits according the documentation.
Break logic is preserve just in case we need it in the future.
Fixes #4261
2022-08-25 12:21:46 -03:00
Alejandro Martinez
82df874e54 Update German translation
Contributed by Marcen at the users forum
2022-08-24 19:00:53 -03:00
Alejandro Martinez
7b44eaa7a8 Deprecate Google Drive and Calendar due to changes in OAuth
Fixes #4259
2022-08-24 18:55:44 -03:00
Alejandro Martinez
a31ce926dc Enable Estimator debug as a runtime option
It can be enables adding:
--debug-rules "gc.estimator.debug=true"
to the command line.
2022-08-24 13:04:03 -03:00
Alejandro Martinez
481e11fffc Avoid random crash in HrPwPlot when HR>=220
Fixes #4260
2022-08-24 12:37:14 -03:00
Alejandro Martinez
0108a05f5a Fit file import - Interpolate lrbalance between valid values only
Fixes #4117
2022-08-23 18:03:59 -03:00
Alejandro Martinez
700f855ce1 Strava download - Update RPE field if present
Fixes #3444
NB: activity creation doesn't support this paramter,
so it is only one way sync for the moment.
2022-08-23 12:37:03 -03:00
Alejandro Martinez
1e8220237c Update Python library with missing constants for Qt Charts
Documented in the wiki. Fixes #4009
TODO: annotate is disabled and it needs work to support the different
types.
2022-08-23 11:27:42 -03:00
Alejandro Martinez
6914832c24 Snapshot builds to test Fix Elevation using Open-Elevation.com
MapQuest API reaches EOL on Aug-31, let's test the replacement
in all the supported platforms.
Reveal Controls are disabled in this build for all charts,
with Show Console on chart settings for R and Python charts.
[publish binaries]
2022-08-22 18:49:53 -03:00
Alejandro Martinez
07f672ff80 Add GC_ALIGN_NONE to Python Library
[skip ci]
2022-08-22 10:05:38 -03:00
Alejandro Martinez
d58c539c00 User Chart Axis Settings - Show/Hide log option
According to Axis type, currently it is supported
for continuous axis only.
2022-08-21 19:05:55 -03:00
Alejandro Martinez
a0a2b28629 Update user chart dialogs for the wiki
[skip ci]
Fixes #4115
2022-08-21 19:04:56 -03:00
Alejandro Martinez
3a34f7ce55 FixElevation - Change MapQuest to Open-Elevation (#4258)
Since MapQuest elevation service reaches end of life on aug-31,
it is replaced by Open-Elevation public API with minimum changes.
TODO: use Post instead of Get to request more points at a time
Fixes #4206
2022-08-20 12:17:56 -03:00
Mark Liversedge
84eceebd00 Fix metric refresh SEGV
.. when athlete has < 10 activies modulo 0 causes arithmetic
   operation crash (divide by zero).
2022-08-17 23:20:42 +01:00
Mark Liversedge
853e248383 FIT nongarmin.json remove duplicate entries
.. added same rows twice in error.

[skip ci]
2022-08-17 14:28:32 +01:00
Mark Liversedge
ce089de33e FITmetadata.json
.. clarify how to make updates in the README

.. replace the fit_example.h from the current SDK

.. added Garmin devices not yet supported in the SDK to
   the nongarmin.json file

.. updated the makefile to use python3 and update when
   the python program is changed.
2022-08-17 14:20:16 +01:00
Alejandro Martinez
3180a166d8 Disable Reveal Controls
For R and Python charts the Show Console setting is now
part of regular settings, and it is replaced by a warning
label when R or Python are disabled to help users.
Since for remaining charts reveal controls are redundant,
they are globally disabled in Perspective class.
TODO: remove all reveal code to simplify charts,
eventually after v3.6 release to minimize risks?
Fixes #4256
2022-08-14 21:12:10 -03:00
Alejandro Martinez
f3b78338ac Update German translation
Contributed by Marcen at the forum
2022-08-14 17:42:10 -03:00
Alejandro Martinez
02cab3029b Travis-ci - cache macOS app package
[skip AppVeyor]
To avoid rebuild when after_success is cancelled,
so restarting the job can complete the packaging.
Drawback is we need to clear the cache to rebuild
[publish binaries]
2022-08-13 16:41:37 -03:00
Mark Liversedge
47355d17fe V3.6-RC2 Build Trigger
[publish binaries]
2022-08-13 11:22:12 +01:00
Mark Liversedge
d8dc986c1e VERSION 3.6 RELEASE CANDIDATE 2 AUGUST 2022
.. second release candidate with no open defects in the
   backlog for 3.6 this is likely the last release candidate
   before we release (unless we find a major defect that
   needs to be corrected and tested).
2022-08-13 10:28:22 +01:00
Alejandro Martinez
e3611455e4 Add default metadata.xml to Athlete config on upgrade
To incorporate new metadata supported in v3.6 to global metadata.xml
for existing users, for new users we use default as before.
Fixes #3913
2022-08-12 15:55:56 -03:00
Alejandro Martinez
d4f382e35d Simplify default named filters
isRide is new for v3.6, <>0 is redundant
2022-08-12 11:26:59 -03:00
Alejandro Martinez
3bbd6ca334 Fix Triathlon and Measure default Trends perspectives
Colors and TriMix
2022-08-11 15:23:11 -03:00
Alejandro Martinez
d21ea7b26b Update toolbar image for the wiki
[skip ci]
2022-08-11 11:44:32 -03:00
Alejandro Martinez
4065534882 Add Perspectives to Default Trends Layout
- General is what we have with updated default Trends Overview minus
CP related charts moved to Power Duration perspective.
- Power Duration includes CP related charts in previous layout plus
some useful charts from CloudDB for modelling and profiling.
- Triathlon includes a multisport Overview, TriScore PMC, VO2 Scores
for Bike and Run, CV chart for run and swim and Run profile for now.
- Measures include Weight, HRV and Nutrition charts.
Complements 5e4189f and fixes #3899
2022-08-10 18:11:42 -03:00
Alejandro Martinez
5e4189fa1a Add Run, Swim and combined Map perspectives to Default Analysis layout
Run perspective includes Power analysis, Swim includes HR,
and General defaults for Bike and remaining sport.
Map is an experimental tiled perspective including Map and
Performance charts, intended to create and analize intervals.
2022-08-10 11:39:42 -03:00
Alejandro Martinez
c0ec0aaa28 Train View Perspective Switch on Workout selection
To enable workout preview in the more specific layout,
provided the current perspective allows switching,
to avoid unwanted swithing when using the Workout Editor.
Reorder perspectives in default layout.
2022-08-07 17:05:44 -03:00
Alejandro Martinez
d35f7b22e5 Remove qDebug from previous commit
[skip ci]
2022-08-07 15:09:51 -03:00
Alejandro Martinez
be797ffb31 Train View Perspective Switch - Add Map Workout option
So workouts with GPS data but no video can use LiveMap chart,
without messing with basic slope workouts
Update default layout to include a perspective for each mode
Part of #3899
2022-08-07 14:49:15 -03:00
Alejandro Martinez
f015322040 Change FITmetadata.json git mode from symlink to file
[skip AppVeyor]
Fixes #4254
2022-08-07 11:27:43 -03:00
Alejandro Martinez
09686a2cb7 Update Library Charts for v3.6 using standard colors
Part of #3899
2022-08-06 14:09:40 -03:00
Alejandro Martinez
9e13b73375 Add standard color for Stress Ramp Rate
Part of #3914
2022-08-06 14:08:55 -03:00
Alejandro Martinez
f82dd1b456 Metric Trends Charts - Disable ws and multi models 2022-08-06 11:02:30 -03:00
Alejandro Martinez
394309a7a6 Decode Garmin Real-time Stamina from FIT files
Fixes #4253
2022-08-03 11:06:35 -03:00
Alejandro Martinez
dc470ecf74 FITmetadata.json - Avoid symlinks due to git behavior on Windows
Continuation of c50cd4c
2022-08-03 10:56:32 -03:00
Mark Liversedge
c50cd4c0cc Minor tweaks for FIT metadata code/json
.. since it is a generated file lets symlink FITmetadata.json
   to the source maintained in util/fit to save having to copy it etc.

.. also removed unused variable 'write' that was left behind from
   some unused code during development
2022-08-02 08:11:16 +01:00
Alejandro Martinez
4ed7425d0c Fit import - add new sensor types and devices 2022-08-01 23:01:42 -03:00
Mark Liversedge
1b007014f1 Refresh FITmetadata.json from website
.. we try and download the latest from the website when
   the first FIT file is opened.

   Since importing data is generally not a time critical
   action and we only try for the first file this is more
   appropriate than checking at each launch.

.. the version number is not checked, it is assumed the
   version on the website will always be the very latest.
2022-07-31 15:47:53 +01:00
Alejandro Martinez
76bf1bba21 FitRideFile - Fix compiler errors for MSVC Windows builds
Avoid the clash between implicit default constructors and member variables
Continuation of a5d57cf
2022-07-31 11:19:57 -03:00
Mark Liversedge
a5d57cf3fa FitRideFIle uses FITMetadata.json
.. the file is now baked in to the GC binary and loaded
   the first time a FIT file is parsed.

.. the getManuProd() function has been changed to use the
   loaded metadata to derive product descriptions.

.. we still need to update the code to check the version
   available a www.goldencheetah.org and use it if it is
   newer than the one cached/baked in.
2022-07-31 10:50:36 +01:00
Mark Liversedge
0a0c46b0e2 FITmetadata.json
Added the tooling to the util directory to generate a
JSON file with product and manufacturer metadata for
use by the FITRideFile decoder.

[skip ci]
2022-07-30 19:40:09 +01:00
Alejandro Martinez
8dcd869084 New FIT devices, manufacturer and types from FitSDK 21.8
and forum contributions
2022-07-29 12:19:18 -03:00
Alejandro Martinez
0e22bd8d1a Workout and VideoSync Import - Avoid unnecessary Warnings
When the file is imported from Workout and VideoSync Library
Complements c560f80
2022-07-28 20:14:31 -03:00
Alejandro Martinez
73e2e0709b Fix wrapper code for zlib to recognize directories
encoded as files of size=0 with names ending in "/"
Fixes #4189
2022-07-28 15:48:39 -03:00
Alejandro Martinez
c560f80245 Fix misleading warnings on Workout and VideoSync import
Different warnings for 2 cases:
- When the imported filename already exists in the library
- When the copy fails for other reasons
They were merged with different messages.
2022-07-28 14:13:44 -03:00
Alejandro Martinez
83c145c270 ErgDB Download - add erg2 extension and uncheck All by default
Add erg2 extension as one of admited workout formats to avoid
Scan Workouts removing all referenes to them.
Also uncheck Select All setting by default since currently
there are hundreds of workouts and downloading all of them is unlikely
what the users want to do, besides they are not that easy to remove.
2022-07-28 11:47:35 -03:00
Alejandro Martinez
e738b81c7c DataFilter - Add events function to get current season events
events(date|name|priority|description) returns a vector with the
required field for each event in the current date range span.
For example, to create vertical lines in a Trends User Chart:
sapply(events(date), { annotate(vline, events(name)[i], solid, x); });
2022-07-27 14:54:14 -03:00
Michal Powalko
d282d1f5b2 Add ID for Garmin Edge 1040 Solar 2022-07-27 12:02:27 +02:00
Alejandro Martinez
34b028ae1a Generic Plot Line Annotations - convert units according to axis type (#4250)
Time example for Activities: annotate(vline, "mid", solid, Duration/2);
Date example for Trends: annotate(vline, "mid", solid, Duration/2);
Fixes #4116
2022-07-26 19:21:36 -03:00
Alejandro Martinez
8fdc78b3fe Remove perspectives from stacks on Reset Layout
Fixes #4190
2022-07-25 21:00:51 -03:00
Alejandro Martinez
774704c072 Avoid to mischaracterize OW swims as Pool swims
When GPS data was available before the first distance tick,
includes test file contributed at the forum.
Fixes #4251
Also reverts the TCX part of 1f094f5 since it is incomplete,
and not such a good idea anyway.
2022-07-25 14:28:13 -03:00
Alejandro Martinez
5ef4146971 Escape backslash and quotes from KPK and DATATABLE tiles program
Fixes #4113
[publish binaries]
2022-07-24 12:13:24 -03:00
Mark Liversedge
eee2ee9be2 Fix Memory Leak Data Filter
.. a well known issue with deletion of datafilters that
   was a side-effect of the old metric refresh code and
   threading.

.. now the computation no longer uses QConcurrent::map
   the issue with deletion of the datafilter is removed.

.. have tested with metric refreshes and removal and
   addition of new user metrics.

.. more testing is required to be sure the problem is
   now completely gone.
2022-07-24 08:29:40 +01:00
Mark Liversedge
3b17371687 Fix Memory Leak in RideFile::apendOrUpdate
.. replacing an existing point failed to free memory
   allocated.

Fixes #4248
2022-07-23 15:01:17 +01:00
Mark Liversedge
75800ce49f Fix memory leak in RideFile::append and friends
.. data point allocated twice on heap in appendOrUpdatePoint
   which is always called by RideFile::append

.. this leak has been present since v3.4 (!)

Fixes #4248
2022-07-23 13:17:33 +01:00
Mark Liversedge
2674bf518b Fix SEGV on Import Chart
.. caused by not setting the perspective property when
   importing a chart.

Fixes #4247
2022-07-23 08:59:43 +01:00
Alejandro Martinez
387873d9f0 Guard GCC pragmas
To avoid warnings when using other compilers s.t. clang or msvc
2022-07-17 20:27:31 -03:00
Alejandro Martinez
9e99199553 Windows builds on AppVeyor - Avoid macro redefinition warnings
They made the build log practically unusable
[skip Travis]
2022-07-17 20:25:17 -03:00
Alejandro Martinez
0d979f9fb9 Disable automatic execution of Python Data Processors
They are only partially supported currently and this
confuses users. See #4095 for details.
2022-07-13 16:45:59 -03:00
jgpallero
3b073b9168 Update Spanish translation (#4245) 2022-07-11 20:52:54 -03:00
Alejandro Martinez
8d8d1a0601 Enable translation of IsoPower metric name and units
Update translation files to include the new strings added in latest
commits.
2022-07-11 19:46:21 -03:00
jgpallero
1967134418 Minor fixes in Spanish translation (#4243) 2022-07-11 17:35:54 -03:00
Alejandro Martinez
ecfc23455a Revert to Mojave for macOS Travis-ci builds
[skip appveyor]
Builds on Catalina are failing due to 50min max time limit.
[publish binaries]
2022-07-11 14:46:05 -03:00
Mark Liversedge
b96a31400b Fix Xert secret compile error
.. missing include for Secrets.h in source

Fixes #4244
2022-07-11 12:20:20 +01:00
Alejandro Martinez
98a3a6984c Update INSTALL documents to Qt5.15.2 and generate Snapshots
To enable more testing of the new background refresh, building with
Qt5.15 and Xert/Nolio credentials.
[publish binaries]
2022-07-10 13:05:47 -03:00
grauser
05992c8c2f ci:patch secret.h for Nolio 2022-07-09 17:43:12 +02:00
grauser
7e8f3a3228 Add GC_XERT_CLIENT_SECRET
[publish binares]
2022-07-09 17:11:56 +02:00
grauser
d3fb4f1685 Add GC_XERT_CLIENT_ID 2022-07-09 15:44:21 +02:00
Alejandro Martinez
cb1e59f9dd Histogram Chart - setIsBlank when data series is not available
Changes isDataPresent to check for derived series wattsKg and wbal
Fixes #4238
2022-07-07 11:46:33 -03:00
Alejandro Martinez
086be52ad9 Disable Power Index for running
We don't have standard model parameters for running, yet.
2022-07-06 20:13:34 -03:00
Alejandro Martinez
da01a8f39b Toolbar Perspectives - Screen captures for the wiki
[skip ci]
2022-07-04 21:48:19 -03:00
Alejandro Martinez
6d4921ba09 Add context sensitive help for the toolbar
Includes updated screen capture for the wiki.
2022-07-04 17:31:38 -03:00
Alejandro Martinez
48c8725507 Remove Velo and WS models from syntax helper
They are disabled in v3.6 due to fitting issues.
2022-07-03 13:21:56 -03:00
Mark Liversedge
ab055101e1 Dont use count {} in user metrics
.. lets not allow the user to call a user defined function
   called "count" - despite wanting it for user metrics.

.. terrible flaw in the user metric design, forcing users
   to define a function that conflicts with a builtin.

.. this means we can use the count() builtin function
   in user metric code, which is kind of important !
2022-06-25 23:50:05 +01:00
Mark Liversedge
66275c6c21 Template user metric infinite recurse
.. the template user metric defined a count { } user metric
   function that also used the builtin count() function, but
   at runtime the user defined function is called causing an
   infinite recurse.

.. it is right that user metrics can override builtin functions
   but is very unfortunate that the count function is named this
   way.

.. most users likely will never encounter this- but will cause a
   SEGV stack overflow.
2022-06-25 23:13:57 +01:00
Mark Liversedge
e602ba4d31 Better metric refresh progress updates
.. precious commit has a significant improvement in performance
   since it reduces total CPU activity not related to metric
   calculation dramatically.

.. this commit is a minor tweak to ensure updates are shown
   relative to the number of activities- so instead of giving
   visual feedback after every 100 activities we give feedback
   after every 10% of the activies are processed.
2022-06-25 09:33:12 +01:00
Alejandro Martinez
4345c97960 RideCache refresh - avoid overloading the GUI event loop
When using concurrent map QFutureWatcher flow controls progress
notifications, this commit implements a basic version sending
1/100 refresh updates.
2022-06-24 11:58:36 -03:00
Alejandro Martinez
9d2d8651ae DataFilter - Fix sma smooth direction
Reported at the forum, backward and forward are inverted,
lets use existing defines to avoid confusion.
2022-06-22 12:17:39 -03:00
Alejandro Martinez
f8b2a04b30 One time Summary chart was deprecated when upgrading athletes
With the option to cancel to give the user a chance to backup
before upgrading or reinstall v3.5
Fixes #4191
2022-06-17 11:44:52 -03:00
Alejandro Martinez
7fba9b1f5e Upgrade macOS builds on Travis-ci to xcode12.2 osx_image
[skip AppVeyor]
To use macOS 10.15 and newer Qt5 version
2022-06-14 15:37:57 -03:00
Alejandro Martinez
cb7b2a07d8 Upgrade Qt to 5.15.2 for Linux builds on Travis-ci
[skip AppVeyor]
2022-06-14 15:36:17 -03:00
Mark Liversedge
5684b89c69 Fixup previous commit
.. remove Qt5Concurrent.dll from windows installer as
   it is no longer required.

.. remove errant class member in RideCacheRefreshThread
   that was added then unused during development.
2022-06-12 19:24:36 +01:00
Mark Liversedge
9d9ad753f3 Metric refresh no longer uses QtConcurrent::map()
.. since Qt5.15 QtConcurrent::map() will use all available
   worker threads in the global thread pool. And this causes
   a deadlock in the GUI since QGraphicsView uses threads to
   manage updates.

.. we now manage the metric refresh via RideCacheRefreshThread
   and use at most 50% of the overall threads available in the
   global thread pool.

.. Have tested obvious triggers such as metric schema updates
   and user metrics being changed, but more testing is needed.

Fixes #3611
2022-06-12 17:00:01 +01:00
Paul Johnson
dd5bc51604 User selectable map route line color and switchable route line out & back opacity (#4030) 2022-06-10 16:59:28 -03:00
Alejandro Martinez
c85054ed61 ComparePane - Filter segments matching sport
When a segment is dropped in an empty compare pane
the user is given the choice to add matching segments
from other activities, after this change only activities
of the same sport are considered.
2022-06-02 20:26:37 -03:00
Alejandro Martinez
fcbe02e83e TrainBottom - Raise autorepeat delay
Current value is to eager for some setups
triggering unexpected jumps in play position.
2022-06-02 19:39:49 -03:00
Alejandro Martinez
a5d64686d9 FIT file Import - Set Weight field from user_profile
Fixes #4224
Also removed compiler warnings
2022-05-20 12:39:45 -03:00
Alejandro Martinez
a63bee518d CP Estimator - start 7 days periods on mondays
For consistency with the rest of GC and to make easier for users to understand how it works.
Fixes #4221
2022-05-19 13:38:49 -03:00
Alejandro Martinez
3e5fefa4ec Upgrade to Qt 5.15.2 for Windows build on Appveyor
Since Qt 5.14.2 was removed from Appveyor images
Also fixed R version to latest 4.1 since there are issues with 4.2
[skip Travis]
2022-05-15 19:25:08 -03:00
Alejandro Martinez
f74b5aed6d Tidy up ci scripts
Deprecated unused scripts and renamed Windows installer nsi file.
2022-05-15 13:33:48 -03:00
jgpallero
aeb6630ede Fix small typos in Spanish translation (#4218) 2022-05-15 09:48:09 -03:00
Alejandro Martinez
e97034fb7d Fix boundary condition in Estimator
Last activity is not considered when it starts a new 7 day period.
Fixes #4220
2022-05-13 20:58:28 -03:00
Poncho
9b29fb2f8d travis/linux: set QTWEBENGINE_DISABLE_SANDBOX=1 (#4216)
There is an issue with qtwebengine (chromium) and glibc 2.34 affecting Arch
and similar rolling release distributions when using Qt<5.15.5
See: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/374204
Fixes: https://github.com/GoldenCheetah/GoldenCheetah/issues/4196
[publish binaries]
2022-05-08 17:41:01 -03:00
Paul Johnson
3a9620a3d9 Pass ride context to Python DPs when available (#4214)
Partial fix for #4095 - Python DPs now work in automatic mode using the run on save option.
2022-04-28 12:55:39 -03:00
Alejandro Martinez
be1af0f6d6 Import Name element from fitlog files
Also fixes a (likely) typo when downloading from sporttracks.mobi
Fixes #4212
2022-04-20 19:33:38 -03:00
Alejandro Martinez
98c22dc185 AppVeyor - change to Previous Visual Studio 2019 image
Since Qt5.14.2 was removed from the current one.
Once this becomes unavailable we would need to go forward to Qt5.15
2022-04-12 20:31:46 -03:00
Alejandro Martinez
4c975c7af2 Filter by sport of selected activity on Activities view
Missing part of #3280
Fixes #4204
2022-04-12 12:52:03 -03:00
Alejandro Martinez
345b70f38f Upgrade python AppImage version for Linux builds
[skip AppVeyor]
Python 3.7.12 AppImage is no longer available,
upgrade to 3.7.13
2022-04-10 10:30:38 -03:00
Alejandro Martinez
12828cdce6 Revert "Upgrade Travis-ci Linux builds to Qt5.15.2"
This reverts commit 5251c5bbcc.
It doesn't fix #4196 according to feedback in the users forum
2022-04-10 10:24:22 -03:00
Alejandro Martinez
5251c5bbcc Upgrade Travis-ci Linux builds to Qt5.15.2
[skip AppVeyor]
Fixes #4196 but may trigger #3611, this is a test build
intented to help on release version selection.
Upgrade Python AppImage to 3.7.13 since 3.7.12 is no longer available.
[publish binaries]
2022-04-08 22:37:12 -03:00
Stranger
a0c2034fa9 Russian translation update (#4198) 2022-03-20 15:07:08 -03:00
Alejandro Martinez
93d0ac113a Remove autoRepeat from TrainBottom connect buttom
It is likely proking some weird behavior reported at the forum,
and it doesn't seems to make any sense in this case anyway.
2022-03-16 11:41:10 -03:00
Alejandro Martinez
2e33c745c6 Add cadence data to Xert download if present
It seems to be supported according to https://www.xertonline.com/API.html
2022-03-16 11:37:22 -03:00
Alejandro Martinez
6b7121bdcb Add encrypted keys for Nolio sync and generate test build
GC_NOLIO_CLIENT_SECRET shortened to GC_NOLIO_SECRET to avoid travis-ci limit.
[publish binaries]
2022-03-07 12:36:53 -03:00
Sping Zhao
c0894805ac Simplified Chinese updated. (#4188) 2022-03-02 02:04:50 -03:00
Alejandro Martinez
61afa38826 Python Charts - Replace $$ by chartid in scripts
It worked for the console, but it failed for scripts running on a separate thread.
Fixes #4185
2022-03-01 17:00:36 -03:00
Alejandro Martinez
eb66524775 Update default config URL for v3.6 release
Currently only Train layout is there, so on Reset Layout
the included layouts will be used for remaining views,
but these are more recent than the ones on v3.5 folder.
Part of #3899
2022-02-28 14:19:51 -03:00
Alejandro Martinez
c8f9b75624 Fix CP History chart in default Trends layout
To consider the change in models short names
2022-02-28 14:12:32 -03:00
Alejandro Martinez
bf09243cba Add Help Overview png for the wiki
[skip ci]
2022-02-27 17:22:45 -03:00
Alejandro Martinez
54e96060f3 Update German Translation
Contributed by Marcen at users forum
2022-02-26 22:04:22 -03:00
Alejandro Martinez
328cd2a64d Enable translation of Overview Table Legacy models 2022-02-23 20:30:12 -03:00
Alejandro Martinez
820a2f4b23 lupdate translations files to include last added terms
Includes updated spanish translations for these terms.
2022-02-21 18:55:42 -03:00
Alejandro Martinez
c2b82d1be7 Enable traslation of UserChart newer options 2022-02-21 18:55:00 -03:00
Alejandro Martinez
a0dc39822f Enable translation of HelpWhatsThis Table of Contents 2022-02-21 18:54:11 -03:00
Alejandro Martinez
1c157a69a1 Enable translation of Banister helper stats 2022-02-21 18:53:06 -03:00
Alejandro Martinez
a04976fa41 Update German translation
Contributed by Marcen at users forum
2022-02-21 18:41:29 -03:00
Alejandro Martinez
1a285d1050 DataFilter - Add isrun option to estimates function
To allow selection of Bike/Run precomputed models in Trends charts
2022-02-21 11:54:41 -03:00
Poncho
2373fc687a Cloud: include "Secrets.h" in Nolio.cpp
Otherwise, build fails with:
error: ‘GC_NOLIO_CLIENT_ID’ was not declared in this scope
error: ‘GC_NOLIO_CLIENT_SECRET’ was not declared in this scope
2022-02-20 14:17:17 +00:00
Thomas
7a19fe4b95 final changes 2022-02-18 13:20:50 +00:00
Thomas Plazas
f20d9ac85f Delete .idea directory 2022-02-18 13:20:50 +00:00
Thomas
65446397e2 code review 2022-02-18 13:20:50 +00:00
Thomas
041e426671 code review 2022-02-18 13:20:50 +00:00
Thomas
25307467c7 laps 2022-02-18 13:20:50 +00:00
Thomas
67294a61f3 Nolio version 1.1 2022-02-18 13:20:50 +00:00
Thomas
4d7b56a942 save 2022-02-18 13:20:50 +00:00
Thomas
789b1d90aa streams 2022-02-18 13:20:50 +00:00
Thomas
ba39715254 save 2022-02-18 13:20:50 +00:00
Thomas
37cacd51ae workout get from api 2022-02-18 13:20:50 +00:00
Thomas
9e41e22037 can refresh tokens now 2022-02-18 13:20:50 +00:00
Thomas
cd97b5b5f0 OAuth authentification works 2022-02-18 13:20:50 +00:00
Thomas
140621db42 OAuth start 2022-02-18 13:20:50 +00:00
Thomas
e8829c66ec Nolio added to cloud connectors 2022-02-18 13:20:50 +00:00
grauser
22a5930069 Translation : French update 3/3 2022-02-17 08:53:01 +01:00
grauser
6b878c906b Translation : French update 2/3 2022-02-16 21:51:14 +01:00
Stranger
1dbbd26dec Russian translation update (#4174) 2022-02-16 11:39:06 -03:00
Sping Zhao
ec6d7838d1 Improved Chinese translation (#4171) 2022-02-15 14:15:27 -03:00
Alejandro Martinez
f0b0d18e0e Update Spanish translation 2022-02-14 15:39:46 -03:00
Alejandro Martinez
326e5ff46d Enable translation of model fit summary in CP Chart 2022-02-14 15:39:14 -03:00
Alejandro Martinez
edf0cd72ea Update Spanish Translation 2022-02-14 15:11:48 -03:00
Alejandro Martinez
2a1e4e52cc Enable translation for new Metadata fields
Mostly Garmin metrics, Feel and Raw Data tab
2022-02-14 15:11:48 -03:00
grauser
7c80da9832 Translation : French update 1/3 2022-02-14 18:03:32 +01:00
Paul Vandenbosh
d3c7f7abc4 Translation (French) : Improve several translations 2022-02-12 18:54:18 +01:00
Alejandro Martinez
7417e9cf1f Train - Limit ant+/btle thread exclusion to avoid deadlocks
Mutual exclusion was held while the training file is imported after
workout stop, this was a mistake introduced in my previous commits
since it can lead to deadlocs. Sorry.
2022-02-12 11:58:02 -03:00
grauser
f09e357993 FIT : Add Polar in Manu/Product list 2022-02-12 10:36:08 +01:00
Mark Liversedge
150155ba84 VERSION 3.6 RELEASE CANDIDATE 1 FEB 2022
.. start of release cycle, pushed out to get the recent
   Withings API update out.

   standard config still needs to be fixed up before
   we move to the final release

[publish binaries]
2022-02-09 09:15:30 +00:00
Sping Zhao
919a418895 Updated Simplified Chinese translation. (#4155) 2022-02-06 05:34:08 -03:00
Poncho
130abda5fe Python Chart Web: allow LocalContentCanAccessRemoteUrls (#4154)
new versions of qtwebengine block those requests by default

fix "Access to fetch at *** from origin 'file://' has been blocked by CORS policy:
   Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https."

see https://forum.qt.io/topic/132956/qwebengineview-javascript-fetch-cors-error-but-works-on-chrome-desktop
2022-02-05 14:21:40 -03:00
Alejandro Martinez
a13da9e917 Train - Separate rr and vo2 file access coordination
This is a continuation of 3db1839, we need coordinate access to
rr and vo2 files at stop time, but there is no need to limit
concurrency between rr and vo2 recording.
2022-02-05 10:27:32 -03:00
Alejandro Martinez
3db1839471 Train - Sync rr and vo2 files closing to avoid data loss
rr/vo2 files are opened and appended in response to ANT+/BTLE
initiated signals but closed in response to a GUI event,
there has been data loss reports in the forum likely due to
concurrency problems between different threads, a QMutex
was added to coordinate access to these shared data structures.
2022-02-04 12:12:28 -03:00
Alejandro Martinez
5237b460f1 Withings - Use new OAuth2 API to get access and refresh tokens
Fixes #4152
2022-02-02 16:19:22 -03:00
Alejandro Martinez
2f1194b0bd Decode Stress extra field from FIT files
Fixes #4153
2022-02-01 20:35:10 -03:00
Alejandro Martinez
32b1f0f7d1 Enable language independent filter by interval type
R and Python API: add GC.intervalType(type=1) function to get the
localized interval description to be used as parameter for intervals.
Formulas: return the enumerator for intervals function while intervalstrings
continue to return localized type description.
Fixes #4114
2022-01-27 11:08:32 -03:00
jgpallero
bef7e51d52 Update Spanish translation (#4150) 2022-01-26 15:32:18 -03:00
Alejandro Martinez
1b0e6059cf Show Train Sidebar after the session stops
It is necessary to select files for the next session.
Complements 309907b
2022-01-25 21:21:14 -03:00
Alejandro Martinez
4812661c9c Move Settings in Athlete menu
It did't look good in the previous position.
2022-01-25 21:17:21 -03:00
Alejandro Martinez
cd75224105 lupdate translation files to include the latest strings 2022-01-25 21:12:17 -03:00
Alejandro Martinez
2b39ad28c8 Add SubSport to SpecialFields to enable translation 2022-01-25 21:10:50 -03:00
Alejandro Martinez
0449988fb1 Update Spanish translation
Continuation of f906e87
Contributed by @jgpallero
2022-01-22 20:50:17 -03:00
Alejandro Martinez
f906e8751c Update Spanish translation
1. Typos in spelling (some missing accents, keyboard typos, etc.) fixed
2. Non correct uppercase spelling in Spanish fixed
3. Translation of almost all untranslated source texts

Contributed by @jgpallero
2022-01-17 16:53:00 -03:00
Alejandro Martinez
7230e28730 Enable standard key bindings for Pause/Continue and Stop while training
Space for Pause/Continue and Escape for Stop.
This is helpful when the bottom bar is hidden, complements #4135
2022-01-12 20:43:27 -03:00
Alejandro Martinez
25dfe5bf3a Enable Auto-hide bottom bar in Train View option
Fixes #4135
2022-01-12 18:39:12 -03:00
Mark Liversedge
309907b0ad Hide sidebar when train mode starts
.. as a convenience, since it is not very useful during
   a workout session.
2022-01-12 09:13:53 +00:00
UgoBor
f66b7e13a7 Update Italian Translation (#4132) 2022-01-11 15:42:36 -03:00
Alejandro Martinez
09b987e595 Fix ErgFile copy paste bugs
Contributed by Joachim at the users forum
2022-01-09 21:01:40 -03:00
Mark Liversedge
50f5efbfdb Resintate metadata numeric min/max limits
.. a regression introduced in e0ec5ba2d1 removed the limits
   for double and integer metadata fields.

Fixes #4125
2022-01-09 08:28:58 +00:00
Alejandro Martinez
0e8702c3b0 Set RPE and Feel from FIT files from Garmin devices when present
New Garmin devices allows to enter RPE and Feel after some activities,
when these fields are present in FIT files they are used to set
corresponding metadata fields.
Fixes #4124
2022-01-08 11:49:51 -03:00
Alejandro Martinez
f4630ea078 Revert "Set HTTP User Agent in Web chart and OAuth dialog"
This reverts commit 46be903027.
Fixes #4123
2022-01-05 19:34:29 -03:00
Alejandro Martinez
beed0b2023 Update German Translation
Contributed by Marcen from goldencheetah-users forum.
2022-01-04 18:17:58 -03:00
Alejandro Martinez
214caf3389 Fix floating point regular expresion in DataFilter lexer
Source: https://www.regular-expressions.info/floatingpoint.html
Fixes #4109
2022-01-04 15:02:03 -03:00
Alejandro Martinez
346c84f8b7 Add Garmin Rally 100/200 PowerMeter to FIT file importer 2022-01-04 12:01:03 -03:00
Mark Liversedge
8aa6818f2d Use consistent terminology
.. more renaming of overview charts to tiles, and also renamed
   the AddChartWizard to AddTileWizard.
2021-12-30 09:56:56 +00:00
Mark Liversedge
a41935d8d2 Use consistent terminology
.. overview has tiles not cards (with apologies to translators
   but better to fix now than later).
2021-12-24 11:21:59 +00:00
Mark Liversedge
ecb7910d40 Remove sample{} from template examples
.. when creating a user chart or a user metric the template
   code included calls to sample{}

   seemed odd to warn it was a serious performance issue
   whilst at the same time using it in the template.

.. we should just deprecate sample{} altogether, will likely
   make that change before the release of v3.6
2021-12-23 14:44:45 +00:00
Mark Liversedge
066047354b Tweak theme colors
.. overview card alternate and vibrant colors.
2021-12-23 12:34:43 +00:00
Mark Liversedge
db28dd9fdf Overview Tiles and UserChart background setting
.. It is possible to select a background
   color for a user chart and an overview tile.

   the user should be encouraged to use a
   standard color if they intend on sharing
   the chart with others.

.. A couple of new standard colors are also
   introduced for alternate and vibrant
   overview tile backgrounds

.. Ironically, one of the most visually
   appealling approaches is to make one or
   more tiles in an overview have the same
   background as the overview.

.. Will push some tweaks to the new standard
   colors for each theme separately.
2021-12-22 17:35:58 +00:00
Mark Liversedge
13b026eb3a Use consistent terminology
.. overview contains tiles, not charts, except when its a
   user chart.
2021-12-20 18:42:03 +00:00
Mark Liversedge
7e10b0524a Fix annotations with standard colors
.. colors were not translated to standard colors when
   setting the style sheet for a label.

Fixes #4112
2021-12-19 19:47:06 +00:00
Mark Liversedge
b8beaf3946 DataFilter - round(expr) and round(expr, dp)
.. let folks supply the number of decimal places to round
   a number (or vector) by.

   e.g. round(config(weight), 1) will round weight to one
   decimal place; 75.55kg rounds to 75.5kg.
2021-12-19 16:04:03 +00:00
Mark Liversedge
6441a6faf8 Overview Minimum Columns Settings
.. most users likely won't use this, but the minimum number
   of columns to scale the scene is now configurable in
   the settings dialog for the overview.
2021-12-19 13:52:57 +00:00
Mark Liversedge
35cebf4747 Add Blank Overview
.. make it possible to add a blank overview chart, which is
   useful when building your own dashboards

.. at the same time added a minium scene columns, so when
   building a dashboard you don't get a huge item as you
   add things, its scaled to a default of 5 columns.

.. will add options to customise the minimum columns so
   users can adapt if needed.

.. whilst adding options to the window registry I also
   fixed the fact that the old summary was replaced by
   overview but with an incorrect window type that meant
   it didn't get retained.
2021-12-19 12:32:45 +00:00
Mark Liversedge
d7e9e305c5 Fixup color initialisation
.. color initialisation was broken by 7b93b2a5
2021-12-15 08:26:05 +00:00
Alejandro Martinez
3976a78977 Update Spanish Translation
Final version except for detected errors.
2021-12-14 20:24:05 -03:00
Alejandro Martinez
806f012dea Update German translation
Finished version, contributed by marcen from the users forum.
2021-12-14 18:50:49 -03:00
Alejandro Martinez
7b93b2a533 Enable translation for Color Selector and Add Tile Wizard
registerItems is now a static member of OverviewItemConfig called from main,
and GCColor::setupColors() is called a second time, both after the translator
is installed to enable translations.
Fixes #4089
2021-12-14 18:43:10 -03:00
Mark Liversedge
2554e033f0 Wiki Python Chart
Image for the wiki

[skip ci]
2021-12-11 09:11:10 +00:00
Alejandro Martinez
ede006341f xdata honors interval boundaries when set
Like samples function, to make it easier to write xdata based custom metrics.
Fixes #4103
2021-12-10 11:37:51 -03:00
Mark Liversedge
d2a1134dbc Ergfile text cues parsing
.. a bit more flexibility in how we parse these elements since
   there is no standard and they're pretty simple anyway.
2021-12-10 12:55:10 +00:00
Mark Liversedge
315d35dab1 Tweak chartbar menu indicator
.. was too subtle, especially with stealth themes and
   placement too far away from text.
2021-12-09 20:37:18 +00:00
Mark Liversedge
f934ae2a5b Perspective tile mode fixup again
.. this time lets just set the contents margins before we
   show. This is kinda ok, and avoids having to follow every
   path from lazy load to selection- since we always get a
   show event at the end.
2021-12-09 17:18:30 +00:00
Mark Liversedge
a32d0a781b Train View Perspective Switch - 2 of 2
.. switch train view perspective when connection is established
   but before we start.

   if a media file is selected we choose a video perspective
   otherwise we look to see if the mode is erg or slope and
   select the perspective that meets that.

   by choosing to switch on connect we don't jump around too
   soon (especially if editing) but does mean that those
   folks that like to autoconnect to devices will have to
   select their view manually.

Fixes #4104
2021-12-09 14:51:12 +00:00
Mark Liversedge
522844508e Train View Perspective Switch - 1 of 2
.. add configuration of switching mode for train view perspectives

   the next commit will add the code that switches when a
   workout or media is selected.
2021-12-09 12:30:28 +00:00
Mark Liversedge
be8ae85dbd Rename Overview
.. clunky, but for such an edge case its not worth the effort
   to make the UX slicker. At least now we can rename.

Fixes #4032
2021-12-09 10:13:19 +00:00
Mark Liversedge
7fd2c98a20 Manage Perspectives Drag/Drop on MacOS
.. drag/drop in the dialog ddn't work.

Fixes #4102
2021-12-08 21:41:09 +00:00
Mark Liversedge
c7d7972213 Stealth themes
.. more monotone and subtler coloring which is also used to
   change the chart bar hover and tab decorations.
2021-12-08 17:12:40 +00:00
Mark Liversedge
5704668007 Fix MacOS sidebar scrollbar styling
.. scrollbars no longer autohide and overlay with Qt on Mac
   running MacOS 12 (Monterey), so we style them in the same
   way as Linux and  Windows.
2021-12-06 16:58:11 +00:00
Mark Liversedge
71d9db909e Fix crash on 2nd athlete import ride
.. Fix crash when you open a 2nd athlete and import or download
   an activity whilst still on the athlete view.

Fixes #4094
2021-12-06 11:49:58 +00:00
Mark Liversedge
4ae6dbea93 Tweak TopN text color
.. to match the same text color used in data table since it
   was a little dull in dark mode and hard to read.
2021-12-01 08:31:40 +00:00
riccioclista
8b0af9abf5 Workout Editor: Only scale on Ctrl+mouse wheel (#3113)
Co-authored-by: Antonius Riha <antoniusriha@gmail.com>
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2021-11-30 14:09:40 -03:00
Mark Liversedge
48a3afc59e Fixup style sheet QString warning
.. recent update for MacOS generated a warning on Linux/Windows.
2021-11-30 14:40:10 +00:00
Mark Liversedge
257d877d03 Tweak styling for Zones/Measures config on MacOS
.. tab styling is very different there.
2021-11-30 13:23:56 +00:00
Mark Liversedge
e0ec5ba2d1 Tweak Metadata Styling on MacOS
.. removes spin boxes and border around fields
2021-11-30 13:10:19 +00:00
Mark Liversedge
006dbdf102 VERSION 3.6 DEVELOPMENT NOV 2021
.. sneaking out a beta release for last minute feedback and
   testing before finalising the release over December.

[publish binaries]
2021-11-29 18:10:13 +00:00
Mark Liversedge
5c996e2317 MacOS sidebar color name
.. wasn't updated when we separated toolbar and sidebar colors
2021-11-28 19:11:50 +00:00
Mark Liversedge
ec67b66023 Perspective tab/tile fixups (aka train view)
.. improved performance when switching between tab/tiled mode
   which is especially important in train view (and also when
   resizing or entering/exiting full screen mode there).

.. removed the title at the top of a chart, when the same info
   is already in the name of a tab, saving some real estate.

.. Dial window stop setting fonts via pixel size (its horribly
   slow on Qt with hi-dpi displays

.. some other perspective fixups for performance and also added
   some debug for stack tracing (disabled in the commit).
2021-11-28 17:51:09 +00:00
Mark Liversedge
acd510d65f Set view isTiled() when switchin perspective
.. the view (e.g. trends view) should set its tab/tile status on
   the basis of the current perspective.

   this fixes an issue where toggle style got out of whack with
   what was on screen.
2021-11-28 17:51:09 +00:00
Mark Liversedge
d6274c0fff Cache pixelsize calculation in pixelSizeForFont
.. train view resize performance was terrible because each time
   a telemetry item was resized it would recalculate the right
   pixel size for the font.

   this was only a problem in hidpi displays, but these are
   becoming more and more popular.
2021-11-28 17:51:09 +00:00
Yukihiro Nagano
d6d969f819 Update Japanese Translation (#4086) 2021-11-28 09:12:08 -03:00
Alejandro Martinez
8dbaad3876 Fix copy paste error in DataFilter intervals
Fixes #4084
2021-11-27 20:35:02 -03:00
Alejandro Martinez
0762f0daaf Critical Power Chart - Fix no use of performance tests in Trends
I introduced this bug in 3a07cc5, sorry.
2021-11-27 20:16:16 -03:00
Mark Liversedge
f9b2b60b37 Standard Colors selection sorted
.. when choosing a standard color the dialog now sorts the
   list of standard colors to make it easier to find.
2021-11-25 11:39:57 +00:00
Mark Liversedge
b27d3d42c8 Color options sort
.. colors are organised by group in preferences and can
   be sorted by the user to help find what they are
   looking for.
2021-11-25 10:47:45 +00:00
Mark Liversedge
c74a1e76a3 Grouping Colors
.. standard colors now belong to groups:
   * Chart - chart decorations e.g. grid lines
   * Data - data series e.g. Power
   * Gui - Gui elements e.g. toolbar background

.. when selecting colors in user and trends charts we
   now filter out any colors that are not data related
   to make it easier for users to find a standard color.
2021-11-24 13:45:00 +00:00
Mark Liversedge
a8de13b7cf Add chartbar background color config
.. so users can configure the color of the chartbar, but more
   likely to just setup via themes.
2021-11-24 12:34:01 +00:00
Mark Liversedge
680f7b9665 User chart scaling option name change
.. "Scaling" becomes "Font scaling" to make it clearer
   to users what the setting does.
2021-11-24 08:51:15 +00:00
Alejandro Martinez
79fd18ef55 Train - Use Simulated Speed enabled by default for new users
Intended to minimize support questions from new users.
Fixes #4075
2021-11-23 17:17:20 -03:00
Mark Liversedge
77c9b8d645 Datafilter - append() update sum
.. vectors sum is pre-calculated as functions are
   evaluated. but was missing for the append() function.
2021-11-22 22:36:48 +00:00
Alejandro Martinez
8d3f580c0f Aerolab - scale x-axis distance when imperials units are used
Also zoom to interval limits
Fixes #4074
2021-11-21 11:04:49 -03:00
Mark Liversedge
20201c16a8 View sidebar controls
.. when enter/leave full screen mode the view sidebar is
   hidden and shown to increase screen real estate (and
   especially useful in train view).

.. since the user may want to show/hide for other reasons
   the view menu now also has an option to show/hide the
   view sidebar selector too.
2021-11-18 09:16:34 +00:00
Stefan
b12e1fa9b6 Fix font issue under Windows 10. 2021-11-17 12:54:18 +00:00
Mark Liversedge
2f703594e9 Hovering Color
.. add GColor(CHOVER) and used in sidebar, chartbar and
   toolbar when hovering over a button or tab.
2021-11-15 16:47:33 +00:00
Alejandro Martinez
32bd7955a8 Extend the range of default crank length
To include custom lengths from 130 to 220, default 175.
2021-11-13 20:37:20 -03:00
Alejandro Martinez
6e7931508f DataFilter - Use Duration for fatigue zone percentanges
W'bal series doesn't have gaps, so Time Recording can inflate
percentanges when there are pauses.
2021-11-11 19:21:13 -03:00
Alejandro Martinez
552c44d847 Fixed pre target 2021-11-10 21:31:09 -03:00
Alejandro Martinez
0cfa1e7d49 PythonEmbed - Duplicate timeout waiting for Python version output
Some users have reported intermitent errors, likely depending on machine load.
2021-11-10 09:18:28 -03:00
Alejandro Martinez
7ca84ecd3e Withings Authorization - Use https for callback URL
Fixes #4065
2021-11-09 16:39:38 -03:00
Mark Liversedge
5a2e1cc3a8 Update README.md
Add link to NOTIO forl
2021-11-08 17:05:21 +00:00
Mark Liversedge
595b38360e User Chart Label Font Scaling
.. the label annotations needed the scaled font applied.
2021-11-04 18:03:22 +00:00
Alejandro Martinez
89dc137a52 Rename Withings key defines in gcconfig.pri.in
[skip ci]
To to match those currently used in the code.
Fixes #4060
2021-11-04 10:44:54 -03:00
Mark Liversedge
655fb69b42 Overwiew Layout fixup
.. the renumbering of columns removed empty columns. This was not
   desirable since in some instances where spanning tiles are used
   the user may have deliberately done this.

.. thanks to Alan Benstead at the forums for an example chart to
   test this fix against.
2021-11-04 09:21:41 +00:00
Alejandro Martinez
320cddb1e1 SportTracks download - ensure termination while processing samples
Fixes #4044
2021-11-03 10:40:29 -03:00
Yukihiro Nagano
7a08f9e92c Update Japanese translation (#4059) 2021-11-03 09:15:13 -03:00
Alejandro Martinez
f04a20db21 Add metric description as what's this help to MetricSelect
Handy when a user is inspecting a pre-built Overview chart
2021-10-31 19:53:06 -03:00
Alejandro Martinez
0c4e5f3080 CloudService Sync - Honor metric/imperial setting
Fixes #4056
2021-10-31 14:48:55 -03:00
Mark Liversedge
5225ef0f02 Re-apply Another ChartSpace Layout fix (resolved)
.. when a spanning tile moves the layout needs to restart to
   take into account its new position (since it will displace
   other tiles).

.. to enable us to restart the layout we needed to refactor
   the updateGeometry() method to separate out the creation
   of animations from layout changes (because an item may be
   moved several times as spanners take precedence).

.. tile column numbers also need to be renumbered from 0 when
   arranging since it is possible to get out of sync as items
   are dragged around.

.. this refactor should also make it slightly easier to fix
   any other layout tweaks (now the previous issues have been
   resolved).
2021-10-31 15:26:15 +00:00
Mark Liversedge
180af0ab04 Revert "Another ChartSpace Layout fix"
This reverts commit a023e0efc0.

There are a number of issues with this commit that need
more work and further testing, most notably:

* moving an item causes jarring and unneccessary updates
* moving an item to before the first column causes a SEGV
2021-10-31 13:09:44 +00:00
Mark Liversedge
a023e0efc0 Another ChartSpace Layout fix
.. when a spanning tile moves the layout needs to restart to
   take into account its new position (since it will displace
   other tiles).

.. to enable us to restart the layout we needed to refactor
   the updateGeometry() method to separate out the creation
   of animations from layout changes (because an item may be
   moved several times as spanners take precedence).

.. this refactor should also make it slightly easier to fix
   any other layout tweaks.
2021-10-31 10:04:12 +00:00
Mark Liversedge
16cc48f933 Add all the Metrics with W' to the lexer
.. annoying heritage issue with metric names that contain an
   apostrophe (') breaking the parser. So we need to add them
   as special cases to the lexer.

Fixes #4057
2021-10-31 08:25:37 +00:00
Erik Botö
04b6334f59 Add support for FTMS devices (#4045)
Add support for FTMS devices with Power and Slope control plus Power, Cadence and Speed telemetry
Implement a priority for controllable devices
Avoid connecting Cycling Power Service if there's another source
2021-10-29 12:49:06 -03:00
Alejandro Martinez
7929944f73 Update German Translation
Contributed by forum user Marcen
2021-10-27 15:41:23 -03:00
Alejandro Martinez
e1ce93728d Add What's this help for tile configuration in Overview charts 2021-10-27 12:21:55 -03:00
Alejandro Martinez
3096fb42a1 Fix expression precedence in Bike and Power estimators
Likely not too relevant, but it was an error.
Fixes #4049
2021-10-26 19:58:01 -03:00
peret2000
1ead8e0922 Estimate Power: corrected adjustment of CdA when not set (#4051)
When CdA is not set, it is estimated at every sample, using cadence. Beforehand, it was computed with the first sample

Co-authored-by: Peret <mail@mail.com>
2021-10-26 14:42:13 -03:00
Mark Liversedge
3f66fec5f7 UserChart refresh for intervals
.. a new checkbox setting for the user chart to refresh when interval
   selection changes.

   since there is a performance overhead the user must select this
   if they are plotting intervals-- most of the time it is not needed.
2021-10-23 19:17:54 +01:00
Mark Liversedge
6473ed76ce Default opacity 100% and width 2.00 on UserChart series
.. the defaults for opacity was set to 1% and line width of 0px
   when adding a series to a user chart were inappropriate.

   Some users wouldn't notice and wonder why curves rendered in
   a ghostly manner.

   Also made worse by the fact that when opengl rendering is
   enabled for a series (fast graphics) the opacity and width
   are ignored.

   This led to a false diagnosis of rendering issues
   when the root cause was the configuration of the curve.
2021-10-20 17:01:37 +01:00
Alejandro Martinez
9c727a8770 Update German Translation
Contributed by marcen at the forum
2021-10-17 14:46:03 -03:00
Mark Liversedge
5b838b4a0f Windows command line --no-angle
.. disable forcing of ANGLE for rendering, which helps where folks
   have multiple GPUs but cannot configure them for use in GC.

.. some reports in the forums of issues related to this.
2021-10-15 18:09:28 +01:00
Mark Liversedge
ee3c30f527 Tweak Linear Regression annotation
.. size too thick on low-dpi and virtual dpi displays and avoid trying
   to fit when there is no curve data being shown.
2021-10-15 18:09:28 +01:00
Alejandro Martinez
d9b768514a Update translation files 2021-10-14 11:54:12 -03:00
Mark Liversedge
970e44a913 annotate(lr, style, "colorname")
.. add a linear regression to the plot for the current series.

   style is solid, dash, dot, dashdot or dashdotdot
   "colorname" is a color e.g. "red" or a hex rgb "#fefefe"
2021-10-13 18:36:29 +01:00
Alejandro Martinez
007dc4b518 Avoid crashes in DataFilter when athlete has no activities
DataFilter evaluation requires an activity to get context,
so don't try to evaluate one when there is no current activity
to avoid crashes. It is a marginal edge case without practical
value, but better don't crash when a new user is playing around.
2021-10-13 11:51:02 -03:00
Alejandro Martinez
289962cd11 DataFilter - Avoid crash when evaluate(spec, dr) is called on a malformed expression
Reported at the forum, easily reproducible creating a KPI tile
in Trends Overview Chart.
The added check is already present in remaining evaluate versions.
2021-10-12 20:55:01 -03:00
Mark Liversedge
0e8d452956 Annotations tweak
.. show/hide along with associated curve
   honor scaling, e.g. when on an overview
   use plot marker color for line and text
2021-10-12 23:04:27 +01:00
Mark Liversedge
a3f42c0746 Horizontal and Vertical Line Annotations on UserChart
.. annotate(hline|vline, "text", style, value) to add a horizontal or
   vertical line to the plot for the current series on a UserChart.

   style is one of solid, dash, dot, dashdot or dashdotdot which are
   the standard Qt pen styles for drawing lines.

   I also took the opportunity to refactor how annotations are passed
   from the datafilter down to the generic plot. This should make it
   far easier to add annotations in the future.

.. fixed a SEGV in the voronoi annotation, which was related to memory
   management and the sqrt_nsites variable (honestly, I am amazed it
   ever worked).

.. labels in Python and R charts are now broken, will fixup shortly when
   worked out how it should work (annotations are related to a series).
2021-10-12 22:13:09 +01:00
Mark Liversedge
9976746e49 DataFilter::eval() more const pass by reference
.. for the specification and daterange.
2021-10-12 14:16:56 +01:00
Alejandro Martinez
c8c4666faa Add GoldenCheetah.pdb to Windows installer
To enable source file names and line numbers in stack traces
generated after crashes in crash*.log files.
Intended to make crash report from users easier to analyze.
2021-10-11 18:51:13 -03:00
Alejandro Martinez
f43e6433e3 Avoid crash in formulas when requested metric is not available
Found while testing Overview Charts contributed by users to CloudDB
using custom metrics without notice.
2021-10-10 18:48:10 -03:00
Alejandro Martinez
d2a7f5797a Add Athlete > Settings to main menu
For completeness and to allow access to Athlete Settings
from other views.
Fixes #3723
2021-10-10 18:45:59 -03:00
Alejandro Martinez
94ccac5e0f Avoid using HomeBrew on macOS ci builds for failing dependencies
[skip AppVeyor]
Install gsl and srmio from source
Install R and awscli using official installers
Disabled libsamplerate
This is a workaround to avoid a brew update which would force
the use of Qt 5.15 triggering #3611
[publish binaries]
2021-10-09 20:32:02 -03:00
Mark Liversedge
8f6d30d6d1 Trigger build of october development release
[publish binaries]
2021-10-09 11:21:48 +01:00
Mark Liversedge
474edee78f VERSION 3.6 DEVELOPMENT OCTOBER 2021
.. mark up a development release for more testing.
2021-10-09 11:18:46 +01:00
Alejandro Martinez
ae8a8c0b4b Python - add importlib_metadata to requirements
To support libraries using importlib.metadata in Python 3.8
Fixes #4047
2021-10-07 12:02:50 -03:00
Mark Liversedge
6c0c56ab5b Ignore Qt Creator build directories
.. keeps git status clean.

[skip ci]
2021-10-06 11:01:04 +01:00
Mark Liversedge
09e2ac95da Use doxygen to generate code documentation
.. run make in src/doc/doxygen to generate documentation for the
   source code in html and latex format.

.. doing this to get some basic docs going, since the codebase is
   now so large its getting difficult for even the core team to
   remember.

.. the subdirectories generated are ignored (see .gitignore)

[skip ci]
2021-10-05 09:58:56 +01:00
Alejandro Martinez
fab0c1aae4 Updated Linux build instructions
[skip ci]
2021-10-04 16:04:34 -03:00
Erik Botö
10317e4730 travis/linux: use quiet mode for unzip and pip 2021-10-04 13:02:19 -03:00
Erik Botö
8330664467 travis/linux: use --no-verbose on all wget commands
Use --no-verbose in order to avoid having a lot of wget progress
information in the travis logs, since the logs seems to be sometimes
becoming larger than 4 MB which results in aborted jobs.
2021-10-04 13:02:19 -03:00
Erik Botö
4f30e98e50 Fix python-version in travis after_success.sh for linux build
The upstream AppImage for python3.7.x got upgraded from 3.7.11 to
3.7.12, causing the script to fail.
2021-10-04 13:02:19 -03:00
Alejandro Martinez
272963b832 Python embedding - print error messages to stderr
To diagnose system dependent user reported problems
2021-10-02 19:26:21 -03:00
Mark Liversedge
ff3d6b4a63 Generic Annotations
.. refactor to introduce Generic Plot annotations that
   can draw onto the chart scene, but managed by our
   own controller so we can add/remove without affecting
   or interacting with the QtCharts code.
2021-10-02 12:06:38 +01:00
Alejandro Martinez
734d9c2739 Update Travis build status in Readme
[skip ci]
2021-10-01 17:29:54 -03:00
Mark Liversedge
d0bb437fc0 Chartspace more tolerance in hover on tile edges
.. on hidpi displays it took a deft touch to grab the edges of
   a tile, since the tolerances did not take into account the
   hi density of pixels.
2021-10-01 12:49:15 +01:00
Mark Liversedge
d7957363ff Fix Legend Proportions (and spacing bug)
.. legend item spacing and linewidth is now proportional to the
   text height, which resolves the jarring sizes when not scaled.

.. there was a bug related to the height calculation that did not
   take into account the space left below the colored line which
   made it overlap the text.
2021-10-01 12:47:53 +01:00
Mark Liversedge
aecc1c970a Datafilter syntax highlighter and "()[]{}"
.. bracket matching code for ( and ) fixed up as well as adding
   support for matching [ and ].

.. helps to highlight errors in code when it starts to get a
   little complex.
2021-10-01 08:50:54 +01:00
Mark Liversedge
7be34c1dcd malloc.h, you ok grandad?
.. its stdlib.h now old timer.
2021-09-30 19:56:43 +01:00
Mark Liversedge
70ed4e36e0 Voronoi diagram on chart
.. The diagram now displays on a chart, but there are a few issues.
   Will work through them as more testing done.
2021-09-30 19:00:35 +01:00
Mark Liversedge
4f005d4491 DataFilter - annotate(voronoi, centers)
.. added a new variant for annotations to plot a voronoi diagram
   via a datafilter.

   the centers are as returned by the kmeans() function so the
   x and y values follow each other (i.e. x1 x2 x3 y1 y2 y3)

.. it is ingrated into the userchart and down to the genericplot
   for the series it arrives in.

.. next commit will add the drawing code to generic plot.
2021-09-30 12:31:40 +01:00
Mark Liversedge
5502d87af7 Additional Refactor Voronoi
.. updated to have a more Qt/C++ friendly interface:

    Voronoi *test = new Voronoi();
    test->addSite(QPointF(2,5));
    test->addSite(QPointF(3,2));
    test->addSite(QPointF(6,4));
    test->run(QRectF());
    delete test;

    the output is still written to standard out as a
    series of points, lines, vertexes and edges. This
    was to enable validation against the original
    c program.

.. whilst the original functionality is now embedded a
   further update will need to convert the output into
   a vector of lines to draw.

   will do this as part of adding it to a plot as an
   annotation.
2021-09-30 08:42:38 +01:00
Mark Liversedge
d56d52c01f Refactor Future's algorithm
.. from C to a C++ class.

   Moved the original code to a sundirectory for reference and
   moved all the global variables and methods into a new class
   called Voronoi.

.. the code still needs more work but wanted to remove the global
   variables as there were lots and a big risk they interact
   with other parts of the codebase and libraries.
2021-09-29 10:07:30 +01:00
Mark Liversedge
d568dd0e06 Linux build error (Another Voronoi fixup)
.. apologies, working on multiple platforms at once is a pain.

   will refactor the Steven Future code into its own C++ class
   in the next few days.
2021-09-28 23:02:01 +01:00
Mark Liversedge
dfdf0c5898 Fixup last commit linker error (Future's algorithm)
.. last commit introduced a compiler error on missing global variables.

   the intention here is to take future's algorithm, embed into a class
   and add wrappers for user charts / datafilters.
2021-09-28 20:00:22 +01:00
Mark Liversedge
53ee8f358c Future's Algorithm
.. for calculating Vornoi diagrams.
2021-09-28 19:28:42 +01:00
Mark Liversedge
4c720884b6 DataFilter - kmeans()
.. kmeans(centers|assignments, k, dim1, dim2 .. dimn)

   perform a k means cluster on data with multiple dimensions
   and return the centers, or the assignments.

   the return values are ordered so they can be displayed
   easily in an overview table e.g.

   values {
       kmeans(centers, 3, metrics(TSS), metrics(IF));
   }

.. will look at how we might plot these in charts with either
   color coding of points or perhaps voronoi diagrams.
2021-09-28 17:31:09 +01:00
Mark Liversedge
4c6c8e6d71 Additional Windows fixups for Fast Kmeans
.. std::max needs <algorithm> and don't need <unistd> at all.
2021-09-28 11:45:34 +01:00
Mark Liversedge
5fb2dfb73e Fast Kmeans on Windows
.. remove unused general functions that work with memory and time
   in a non-portable way.
2021-09-28 11:35:32 +01:00
Mark Liversedge
1dc1cd678f Fast Kmeans Algorithm
.. with grateful thanks to Greg Hamerly

   A fast kmeans algorithm described here:
   https://epubs.siam.org/doi/10.1137/1.9781611972801.12

   The source repository is also here:
   https://github.com/ghamerly/fast-kmeans

   NOTE:

   The original source has been included largely as-is with
   a view to writing a wrapper around it using Qt semantics
   for use in GoldenCheetah (e.g. via datafilter)

   The original source included multiple kmeans algorithms
   we have only kept the `fast' Hamerly variant.
2021-09-28 10:25:17 +01:00
Alejandro Martinez
a3c1f6d2fc Check for inconsistencies between Speed and Distance/Time in Editor
Only the first 10 examples are reported to avoid anomalies log flooding.
This anomalies can be easily fixed using Fix Speed from Distance tool
with moving average windows set to 1.
2021-09-21 18:45:42 -03:00
Mark Liversedge
fb76ecc33c pdf and cdf for Gamma distribution
.. its quite handy.
2021-09-20 21:27:44 +01:00
Mark Liversedge
8580a45c38 Datafilter pdf/cdf for normal and beta distributions
.. renamed pdf/cdf to pdfnormal and cdfnormal as they returned
   a pdf for a guassian.

.. added pdfbeta(a,b,x) and cdfbeta(a,b,x) for working with
   beta distributions.
2021-09-20 19:16:52 +01:00
Mark Liversedge
ca3a48c0bc Fixup cdf
.. should be monotonically increasing not decreasing.
2021-09-19 12:11:43 +01:00
Mark Liversedge
e26ab4f957 Datafilter - Gaussian Probability functions
.. pdf(x) and cdf(x) return the probability density function
   and cumulative density function for x.
2021-09-19 09:00:47 +01:00
Mark Liversedge
d97adfe987 Overview User Chart Export
.. save to .gchart when a user chart is on an overview.

   rather annoyingly the scaling is preserved which should
   ideally be defaulted on import depending upon context.
   we should fix that.
2021-09-18 19:11:57 +01:00
Mark Liversedge
65853b095d Overview Import Chart
.. Create a new tile on an overview by importing the XML .gchart.

   The importer checks the chart is a user chart and also that
   it was created for the current view (Analysis vs Trends).
2021-09-18 17:53:42 +01:00
Mark Liversedge
c592de6af9 Export Overview Data Table to CSV
.. via an "Export Data" button in the config dialog.
2021-09-17 14:01:08 +01:00
Mark Liversedge
e0892371b7 Overview respond to interval hovering
.. Data table and Interval Bubble generate and respond to
   interval signals like hover and select.

.. a compromise to help users navigate the data when it
   is not possible to clickthru for intervals

.. the data table now accepts a new function i {} which
   returns the names of the intervals for each row in
   a similar way to f {} for activities.
2021-09-14 17:55:59 +01:00
Mark Liversedge
6236611aee Interval time tweak
.. time_to_string is for formatting durations, so it will
   use as few characters as possible (e.g 10s, 1:00).

   since the interval time is a time of day we want the
   full hh:mm:ss format.
2021-09-14 09:17:07 +01:00
Alejandro Martinez
ea26efc44a Add intervals(time) to formula language
Fixes #4040
2021-09-13 18:48:42 -03:00
Mark Liversedge
60430fa97b Datafilter - match() should only return first match
.. all matches were being returned, which was not the documented
   behaviour, nor generally the desired result

   i.e.
   match(c(1,2,3), c(1,2,3,1,2,3,1,2,3));
   would return
   [ 0, 3, 6, 1, 4, 7, 2, 5, 8 ]
   but should have returned
   [ 0, 1, 2 ]

.. there are likely two things users would like to be able to
   control that could be added in the future:

   - match all occurences (this commit stops that now)
   - return NA or -1 for items that are note found
2021-09-13 22:03:39 +01:00
Mark Liversedge
437c38f959 Limit palette for a Heatmap color
.. hue goes red-yellow-green-cyan-blue-magenta-purple-red

   we only really want the first half of that range for our
   heatmap, which effectively makes it red-amber-green with
   cyan for very low numbers.

   As a palette it will make a lot more sense to the majority
   of users.

   We may look to add multiple schemes, for example limit to
   a single color range or brown/blue etc etc.
2021-09-13 17:05:11 +01:00
Mark Liversedge
08876a9065 Datafilter - metrics(time)
.. to get time of day for ride.
2021-09-13 15:57:12 +01:00
Alejandro Martinez
4d9367ed20 Add Time for the current activity to formulas
Part 1 of #4040
2021-09-12 20:06:26 -03:00
Mark Liversedge
dab1520e39 Overview Data Table scroll wheel
.. horrible nested scrolling- when in a data table and there
   are multiple rows any wheel event will scroll whilst the
   mouse cursor is over the table.

.. we do check that the mouse moved too, so if just scrolling
   with the mouse wheel it won't trigger until the mouse
   is moved (but most folks aren't that steady on the mouse!).
2021-09-12 14:48:56 +01:00
Mark Liversedge
be5f0b3d22 Datafilter - "vector1[indexes] <- vector2" fixup
.. if you assign to a vector using indexes it was only setting
   with a single value. But it should be possible to assign
   a vector and have it repeat

   e.g.
   a <- c(1,2,3,4,5,6);
   indexes <- c(3,4,5);
   a[indexes] <- c(9,10);
   # a now contains [ 1, 2, 9, 10, 9, 6 ]

.. also as part of the data table click thru, the highlight
   that a row can be clicked to navigate to the ride
   should only be shown if that row has a file name.

.. both fixups are related to listing PMC data in an overview
   data table and allowing click through for the rows that
   have a ride associated, the code looks like this:

   f {
       # find dates that contain rides
       ridedates <- metrics(date);
       pmcdates <- pmc(BikeStress,date);
       index <- match(ridedates, pmcdates);

       # returning all blanks for filenames
       # except where there is a ride on that date
       returning <- rep("", length(pmcdates));
       returning[index] <- filename();
       returning;
   }
2021-09-11 17:00:38 +01:00
Mark Liversedge
bd64625c05 Heat and Normalize
.. tweaking the names from the last couple of commits

   * to return heatmap values (between 0 and 1) the
   Data Table function "h" is now called "heat".

   * the data filter function that does the unity based
   normalization is renamed from "heat" to "normalize".

.. did this since normalize() is more accurate and
   will be more appropriate when adapting data to
   use other algorithms in the future.
2021-09-11 08:58:38 +01:00
Mark Liversedge
cb874b6793 Heat color on trends overview
.. activities legacy program reinstated and also sets the h {}
   function for the activity list.

.. the DataOverviewItem::setDateRange() method now calls h {}
   if it is present (forgot in last commit)
2021-09-10 21:05:55 +01:00
Mark Liversedge
2477096345 Overview Data table heat coloring
.. added a heat(min,max,value) data filter function to convert
   values to a heat value between 0 and 1

   e.g. heat(0,config(pmax),Average_Power)

.. added Utils::heatcolor(x) method to convert a heat value
   from 0-1 to a hue/saturation value color

.. the overview program now has another user definable function
   called h {} which returns the heat values. If it is not
   present no heat coloring takes place.

.. added h {} to the legacy intervals program, it adds the
   h {} function but calling heat() with 0 for min and max
   which ultimately makes it do nothing-- crucially the
   user can adapt the min and max values to meet their
   requirements
2021-09-10 14:45:49 +01:00
Mark Liversedge
f6375f18f9 Overview Table Header Line too thin
.. not sure when this changed, but makes the line disappear
   when so thin.
2021-09-09 10:38:49 +01:00
Alejandro Martinez
a6628eb447 Reposition Interval and Banister helpers when off window
This is already fixed when it is out to the right,
but still can happen to the left, continuation of b36bbdc
2021-09-08 12:43:59 -03:00
Mark Liversedge
e3e826a017 Blocks can be used as datafilter function parameters
.. mostly to make using the activities() function a lot
   simpler. A parameter can include a block of code that
   should be evaluated as a parameter.

   e.g:

   activities("isRun", { xx <- metrics(date);
                         yy <- metrics(Pace); } );

   this avoids having to declare a function and call it
   just so we can pass as a function parameter.
2021-09-04 17:31:31 +01:00
Alejandro Martinez
578a7fb263 Spanish Translation - Last update
Until errors are reported or new terms added.
2021-09-03 12:25:22 -03:00
Alejandro Martinez
41fbd9563a Spanish Translation - Partial Update 2021-09-02 23:20:00 -03:00
Mark Liversedge
d953b44c00 OverviewItemConfig Legacy Selector
..is only needed for configuring data tables.

Fixes #4031
2021-08-31 21:08:56 +01:00
grauser
32c7b68f43 Translation : lupdate translations/gc_fr 2021-08-31 18:01:01 +02:00
Mark Liversedge
4ddaa041a9 Don't process events when recreating user charts
.. it was always rather dodgy, but caused issues when charts
   recreated on config changed (like interacts badly with
   the setUpdatesEnabled() call.

.. has a nice effect of stopping the jarring repaints too
   which were horrible when themes changed.

Fixes #4029
2021-08-31 10:48:16 +01:00
Mark Liversedge
b5046f4be1 Fix Dark Theme Stress Balance
.. it was black, which wasn't the best choice against a
   dark background (!)
2021-08-30 10:11:11 +01:00
MaksVasilev
01beed8f46 Untraslated string
Fixed version of #4027
2021-08-28 13:04:42 -03:00
Mark Liversedge
d7c1b66b27 Overview Data table remember sort
.. so it gets reinstated after restart
2021-08-28 09:49:18 +01:00
Mark Liversedge
9b679a7d79 Clip data overview table painting
.. it looked nasty going all the way to the tile boundary.
2021-08-27 15:31:29 +01:00
Mark Liversedge
78850dabc3 ChartBar buttons match main toolbar
.. aesthetics adapted to have same feel.

.. the actual + icon had embossing in it (!)
2021-08-27 14:56:30 +01:00
Mark Liversedge
494e01ba7a DataOverviewItem legacy program on trends
.. added the legacy selector to trends view.
2021-08-27 12:08:08 +01:00
Mark Liversedge
5e516aefca DataFilter Aggregate helpers for metrics
.. aggmetricstrings() and aggmetrics()

   data filter functions that return aggregated values as
   opposed to all values for the activities.

.. asaggstrings()

   data filter function that returns aggregated values for
   the list of metrics provided (primarily used in data
   tables).

.. the next commit includes an update to the data table
   settings tool to use asaggstrings on trends view.
2021-08-27 12:07:37 +01:00
Mark Liversedge
e31f05236c Fix Overview Data table date sorting in German
.. and possibly other locales/language combinations
2021-08-27 09:45:20 +01:00
Mark Liversedge
13dc1059bc Python console perspective setting
.. use perspective property from the chart.
2021-08-26 13:54:50 +01:00
Mark Liversedge
ec46e545f5 User Chart and property "perspective" SEGV
.. lots of problems related to this, notably:

   * UserChart is no longer a GcWindow so doesn't have any
     properties registered.

   * Even if it was the property was not being registered
     by GcWindow or GcChartWindow anyway

   * The value was not being initialised so checking for
     NULL was kinda pointless (groan)

   * OverviewItems looked up the property and never found
     it, so crashes were avoided by accident.

.. One interesting point that was revealed during testing
   and debugging-- the UserChart program does not honor
   any filtering EXCEPT for the activity{ } function, which
   although it is not by design, is quite useful.

Fixes #4021
2021-08-26 13:46:44 +01:00
Mark Liversedge
1e480b6965 Less debug
.. last commit had some erroneous debug
2021-08-25 15:54:53 +01:00
Mark Liversedge
5e8e490e51 Datafilter powerindex(power,duration)
.. returns the powerindex for the given power and duration
   which can be vectors.

.. useful to transform meanmax power to strengths and
   weakness rating.
2021-08-25 15:52:55 +01:00
Mark Liversedge
fa296f7c13 Further update for UserChart scale crash
.. need to also add blocking around generic chart which
   can be called in different threads.

.. see previous commit for details.
2021-08-25 11:15:15 +01:00
Mark Liversedge
cc8b6b114d UserChart Scaling causes crash
.. when moving the scaling slider the charts get updated
   immediately, this causes a SEGV as charts are deleted
   whilst they are being updated.

.. we now block updates whilst critical processing is
   happenning to avoid this.

Fixes #4026
2021-08-25 09:48:44 +01:00
Mark Liversedge
73d28661fa User Chart support Stacked Percent Style
.. we now support percent stack bar charts, which are useful (and
   popular) for time spent in zone style charts.
2021-08-25 08:38:25 +01:00
Mark Liversedge
a4d928e4a0 More muted and modern Toolbar buttons
.. the side bar, bottom bar and related buttons were still
   following a skeuomorphic design that has long since
   fallen into disuse.

.. now have a more muted feel with hover/press colors active
   on mouse events.

.. moved the whatsthis button to the far right since this
   is quite a common placement in other apps.

.. it is noticeable how we use many many different schemes
   for hover/pressed colors across the UI- at some point
   this should be unified.

.. also deprecated the segmentcontrol.
2021-08-24 20:56:31 +01:00
Stranger
7c944d6100 Russian traslation update (1 of 2)
Part 2 in a week
2021-08-24 09:39:36 -07:00
Stranger
c973bd7d85 Untraslated strings 2021-08-24 09:39:36 -07:00
Mark Liversedge
e02e19a979 Mac Toolbar UI Tweaks
.. bit more breathing space required, as overly compressed.
   Especially since there is no application menu bar on Mac.
2021-08-24 15:35:38 +01:00
Mark Liversedge
fecaad5cbf Titlebar/Toolbar icons
.. to replace current toolbar icons
2021-08-24 13:43:08 +01:00
Mark Liversedge
1e18321da7 User Chart UI tweaks
.. scaling maximum increased to x10 which helps on hi-dpi
   displays and the overview

.. slightly reduce the border on overview to make more of
   the available screen real estate.
2021-08-24 09:58:18 +01:00
Alejandro Martinez
524dad3f4d TcxParser - Handle files with missing Lap StartTime
Using the first Trackpoint Time as start_time.
Fixes #4015
2021-08-23 22:47:57 -03:00
Jérôme Launay
2096342fe4 Translation : Update French translation 2021-08-23 23:56:18 +02:00
Alejandro Martinez
15595090e7 Add Qt5OpenGL.dll to Windows installer
Required by f8cdbf3, both should be reverted together, if necessary.
2021-08-23 00:07:58 -03:00
grauser
bf2a1735ed FitRideFile : Add Giant and Scosche in manufacturers 2021-08-22 17:45:15 +02:00
grauser
78a4532793 FITRideFile : Add Device types
fix #4020
2021-08-22 17:30:30 +02:00
Mark Liversedge
31f51dbdd5 Toolbar Styling on MacOS
.. remove conditional for styling the toolbar on Mac. This is
   an artefact from the old "UnifiedTitleAndToolBar" which we
   no longer use.
2021-08-22 11:02:49 +01:00
Mark Liversedge
f4a14b6ac9 Athlete View Open Button rendering
.. not sure why, but the border was fugly. Tidied it up.
2021-08-22 10:26:02 +01:00
Mark Liversedge
33018aab77 Time Series User Chart plotting "Optimisation"
.. default to 5s smoothing for plotting time series (second by
   second samples).

.. if smoothing is applied we sample the smoothed data every
   3 seconds.

.. this reduces the number of points to plot to a 3rd and has
   a significant impact on plot/paint performance.

.. for those users that care about resolution they can set
   the smoothing to none, for those that don't they will
   get faster performance.
2021-08-22 08:41:14 +01:00
Mark Liversedge
81d59d4637 Fix overview data table paint on scroll
.. regression from 1297d76ee4 where the data table
   doesn't update on scrollbar moves.

.. this was because we optimised out unneccessary paints
   on mouse moves. But when we move the scrollbar we
   need to repaint the data table at the right position.
2021-08-21 18:04:08 +01:00
Mark Liversedge
6d3ae32e61 MacOS snafu for AthleteTab styling
.. no need to do any conditionals in stylesheet, and worse
   they break the styling anyway.
2021-08-21 17:08:42 +01:00
Mark Liversedge
5f548785ad ChartSpace wheel events more responsive
.. scroll by a larger factor, makes the scrolling feel
   far more responsive.
2021-08-21 16:47:24 +01:00
Mark Liversedge
1297d76ee4 UserChartOverviewItem paint events
.. the base class method ChartSpaceItem::sceneEvent() generates
   lots of paint events when the mouse moves about, and its
   mostly to repaint the top right corner.

.. for user charts this generates a lot of overhead that is
   99.99% unneccessary - so we now override this and do
   nothing.
2021-08-21 16:42:29 +01:00
Michal Powalko
f86bc6752e Add support for Garmin Forerunner 745 2021-08-21 13:01:58 +01:00
Mark Liversedge
f8cdbf3e39 Force ANGLE GPU acceleration on Windows
.. we know that opengl drivers for windows can be sketchy, so rather
   than not use opengl at all we insist on ANGLE at startup.

.. this is experimental and has been included as a single commit
   in the hope it will remain, but may be reverted if there are
   significant issues.
2021-08-20 13:32:03 +01:00
Mark Liversedge
e1ed960714 Another ChartSpace spanned tile layout tweak
.. to stop tiles that overlap by 1 pixel when including the spacing
   from being moved.
2021-08-20 11:30:33 +01:00
Mark Liversedge
39c135a29b Avoid translations in DataFilter expressions
.. as reported on the forums, translations can rename metric
   names inadvertently. We avoid this by using the untranslated
   names in datafilter expressions.
2021-08-19 18:49:14 +01:00
Mark Liversedge
efba58b509 Another ChartSpace spanning tile fixup
.. if a tile moves because it clashes with a spanning tile we need
   to repeat the process in case it clashes with another after it
   has been moved.

.. previously we moved on the first clash, but ignored any others.
2021-08-19 12:54:10 +01:00
Mark Liversedge
ba3c0bf34e UserChart Bar/Stacked show Category on legend
.. when hovering over a bar chart its sometimes useful to see the
   category name (x-axis) on the legend.
2021-08-18 20:05:05 +01:00
Mark Liversedge
e10aac4de4 UserChart support stacked bar chart
.. initial support, relatively basic but seems to work ok.

Fixes #4012
2021-08-18 16:15:26 +01:00
Mark Liversedge
7cc2219293 Axis group by fill zero for bar charts
.. when aggregating on a date axis we do not fill gaps
   e.g. when no rides for a period. This causes the bar
   chart to be somewhat misleading.
2021-08-18 08:40:10 +01:00
Mark Liversedge
29485aa327 Fix DIV0 crash in Overview
.. possible cause of crash reported on the forums.
2021-08-18 08:38:37 +01:00
Mark Liversedge
f9fa6ca401 Overview Data Table Sort incl. Files
.. when sorting the table we sorted all the columns that are
   visible to the user, but not the associated filenames
   that are used by clickthru, so clickthru would jump to the
   wrong activity.
2021-08-17 19:36:23 +01:00
Mark Liversedge
d57c3c9ce5 Fix TopNOverviewItem refresh when config changes
.. lookup metric when the configuration changes.
2021-08-17 18:44:42 +01:00
Mark Liversedge
0d2310e76a Overview Zone tile refresh
.. updates when config changes, not just at restart.
2021-08-17 18:24:00 +01:00
Mark Liversedge
d7ae5610cf Overview items respond to config changes
.. added configChanged() to base class

.. added calling configChanged() when preferences are
   changed and when the items config is updated.

.. updated MetaOverviewItem to use this, but also need
   to update the Zone and Best tiles too.
2021-08-17 17:45:21 +01:00
Mark Liversedge
eaa6120467 Overview Vertical Scrollbar
.. rounded and color changes when dragging, to align with the
   tile scrollbars and basically a bit more modern.
2021-08-17 12:17:26 +01:00
Mark Liversedge
e464762f7f Imperial/metric conversion error
.. in metricstrings(), asstring() and intervalstrings()
2021-08-16 22:53:03 +01:00
Mark Liversedge
195514c30e Fix Invalid JSON for .gchart
.. the irony that adding a __LAST__ property to ensure we
   had well formed JSON made sure it was /always/ invalid.

.. see fd546b4da for impact (almost none, but hey).
2021-08-15 09:42:15 +01:00
Mark Liversedge
5fd1a08419 Save/Restore Overview column widths
Fixes #4007.
2021-08-15 09:36:24 +01:00
Mark Liversedge
2ea3080d24 VERSION 3.6 DEVELOPMENT BUILD AUGUST 2021
.. marking up for release of a new development build.

[publish binaries]
2021-08-14 11:17:36 +01:00
Mark Liversedge
fd546b4da1 Overview default config
.. when adding an overview chart it configures from a .gchart
   file built in via application.qrc

.. to update the default config all the developer needs to do
   is design using GC then export the .gchart into the
   appropriate src/Resources/charts/file.gchart

.. NOTE: the exported file has an errant comma (,) after the
         __LAST__ element. This is invalid JSON and should
         be fixed. It needs to be removed manually right now
         otherwise the JSON does not parse.
2021-08-14 10:13:51 +01:00
Mark Liversedge
2b30f9aa50 DataOverviewItem Vertical Scrollbar
.. progressively boldens as you hover and overlays contents
   to avoid taking screen real estate and being a distraction.

.. only watches mouse events and ignores wheel events since
   these clash with chartspace scrolling.

Fixes #4006.
2021-08-13 12:35:43 +01:00
Alejandro Martinez
09de27b0d2 Estimate Power - Add warning about accuracy
The sooner new users realize (or accept) they need a power meter
for power analysis of general outdoor rides, the better.
2021-08-12 16:50:15 -03:00
Alejandro Martinez
cc3f291113 Add encrypted API Key for RideWithGPS to Travis-ci builds
[skip AppVeyor]
To enable #3371 for Linux and macOS builds
2021-08-12 13:36:04 -03:00
Alejandro Martinez
dcd2a69951 Merge branch 'master' of https://github.com/GoldenCheetah/GoldenCheetah 2021-08-12 13:01:16 -03:00
Magnus Gille
c3bbd3a9ee Add support for Garmin HRM-Pro
Fixes: #3984
2021-08-12 16:51:56 +01:00
Mark Liversedge
d449933ab1 Refresh Perspective Selector on Add/Delete
.. commit 91f2c46 introduced a regression where the selector
   is not updated when the perspectives are changed (via
   the manage/add perspective functions).

.. this was because resetPerspective() returned if the
   athlete/view combination was last used to set the
   selector -- we now override this, but only when the
   perspectives config is changed.
2021-08-12 16:50:06 +01:00
Alejandro Martinez
7b2bd79448 Add encrypted API Key for RideWithGPS to AppVeyor builds
To enable #3371 for Windows builds
2021-08-12 12:23:57 -03:00
Mark Liversedge
6e88ee4ca6 Date consistency
.. datestring() was using 2 digit years and Overview data table
   sorting only expected 4 digit years.

.. datestring() now uses 4 digit years in line with everywhere
   else in the code.

.. data table sorting now supports 2 digit years and xx/xx/xx
   style dates too (just in case).
2021-08-12 16:11:18 +01:00
Mark Liversedge
b893e702b3 Iverview Data Table Negative Numbers
.. negative numbers were treated as strings because the
   matching pattern did not contain a '-'.
2021-08-12 13:35:55 +01:00
Mark Liversedge
18dbedc586 Fix Overview tile config
.. because the config widget is created before the tile
   configuration is loaded it needs to be updated before
   being shown to the user.

Fixes #4001.
2021-08-12 10:01:00 +01:00
grauser
fcad1ed196 RideWithGPS : Correct/implement API v2
Fix #3371
2021-08-11 22:20:23 +02:00
Mark Liversedge
8375f539db Bar Chart and Group By Category Labels
.. slightly improved category labels on a bar chart when groupby
   and date range is used. Labels for week, month and year are now
   specific e.g. 23/5, May and 2021 labels are applied respectively.
2021-08-10 21:02:59 +01:00
Mark Liversedge
cc0bb2e6d6 UserChart Smoothing and GroupBy
.. axis settings updated to enable users to smooth and group by
   for data series on the axis.

.. since group by needs to aggregate the series also have a new
   config term to define the aggregation method (Average, Total,
   Peak et al).

.. grouping and smoothing is applied in UserChart not the Generic
   chart or plot, so this functionality will not be available from
   Python and R charts (mostly because axis management and config
   is done differently).

Fixes #3999.
2021-08-10 18:47:39 +01:00
Alejandro Martinez
95cd28a279 Python embedded - Include Pandas 1.2.3
Pandas 1.3.x provokes problems on some charts, like HRV Trends
and otheres reported at the forum. Let's wait until it stabilizes
2021-08-09 20:27:46 -03:00
Alejandro Martinez
39fc9e4537 Enable View - Reset Layout considering perspectives
It behaves as before: current view layout is discarded and default
layout with perspectives is fetched from goldencheetah.org first and,
if not available, baked in layout is used.
Website defaults are not updated yet, so baked in layouts are used now.
2021-08-09 17:30:10 -03:00
Alejandro Martinez
1f77f08ae0 V3.6 Upgrade processing - put the current chart config into a general perspective
Renamed Resouces/xml/*-layout.xml files to Resources/xml/*-perspectives.xml
Removed deprecated Summary from Activities and Trends, and added default Overview to Trends
Added enclosing <Layouts></Layouts> and General perspective with proper type to each one
This provides default layouts for newly created athletes.
We still need to update layouts before release and to enable Reset Layout.
2021-08-08 14:24:29 -03:00
Mark Liversedge
91f2c46c3e Athlete/View switch update perspective selector
.. along the way renamed AthleteTab related methods in MainWindow
   to reflect the last commit renaming the classes.

.. there are also a handful of fixups to SEGV when no ride is
   selected in DataFilter (triggered by opening a second athlete
   and switching to trends view, which need to recreate the athlete
   switch bug that is also part of #3997).

.. and the logic to reset perspectives is changed in MainWindow
   with a special method resetPerspective that is called everywhere
   but will check the athlete/view combination has not already
   been set (to avoid multiple passes).

.. multi-athlete and perspectives need better testing as there are
   probably more SEGV in there, and if we fix them we could also
   remove the requirement for the opening view to always be Analysis.

Fixes #3997.
2021-08-08 15:19:36 +01:00
Mark Liversedge
01e0d14757 Renaming classes
.. Tab becomes AthleteTab - since Tab is almost meaningless
   TabView becomes AbstractView - since its the base for all the views

   there are no functional changes or fixes in this commit.
2021-08-08 13:05:06 +01:00
Mark Liversedge
29a76773a6 Overview Data Table tweaks
.. honour the sort order when refreshing (e.g. select new daterange or
   a new activity).

.. thin line to separate headings from data to make easier to read.
2021-08-07 20:44:13 +01:00
Mark Liversedge
abdce42223 User Sort DataTable on Overview
.. by clicking the header column the user can toggle sorting of
   the contents.

.. we try to infer the type of data in the column for sorting which
   probably works 80/20, but is better than adding yet more of a
   burden on the program that supplies the data.
2021-08-07 14:39:10 +01:00
Mark Liversedge
98466cc9cf Overview Data Table and Intervals
.. add legacy program to analysis view for an interval table.

.. highlight row in data table when mouse hovers over a row, but
   only when not using clickthru, since that already highlights
   the row to indicate click is available.
2021-08-07 09:23:12 +01:00
Alejandro Martinez
924da10958 DataFilter intervals() and intervalstrings() for Activity and Trends views
intervals(symbol|name|start|stop|type|test|color|route|selected|date|filename [,start [,stop]])
    returns a vector of values for the metric or field specified for each interval
    if no start/stop is supplied it uses the currently selected date range, or activity when no date range.

intervalstring(symbol|name|start|stop|type|test|color|route|selected|date|filename [,start [,stop]])
    same as intervals above but instead of returning a vector of numbers, the values
    are converted to strings as appropriate for the metric (e.g. Pace_Rowing mm:ss/500m).

Both metricname and metricunit now support name, start, stop, type, test, color, route, selected, date, filename,
in addition to metric names and date, to get corresponding localized string.

Example program to build an intervals table in Activities displaying all intervals for selected activity,
similar to the one in RideSummary:

{

names {
    metricname(name,
               Duration,
               Distance,
               Pace,
               xPace,
               Average_Heart_Rate
               );
}

units {
    metricunit(name,
               Duration,
               Distance,
               Pace,
               xPace,
               Average_Heart_Rate
               );
}

values {
    c(
      intervalstrings(name),
      intervalstrings(Duration),
      intervalstrings(Distance),
      intervalstrings(Pace),
      intervalstrings(xPace),
      intervalstrings(Average_Heart_Rate)
      );
}

}

Fixes #3626
2021-08-06 16:54:23 -03:00
Alejandro Martinez
0f9b92f8cf Datafilter - remove tabs introduced accidentally in previous commit 2021-08-06 14:44:07 -03:00
Mark Liversedge
171760097d GenericPlot scale labels
.. the scale factor was not being applied to data labels on
   a user chart.
2021-08-06 11:46:26 +01:00
Mark Liversedge
db9623a201 Alternate Json string protection
.. when embedding json in xml element attributes the string
   decoding mangles results.

   this is because of the way \ and " are handled at each
   pass, causing combinations to be lost early when decoding.

   This is largely a non-issue, except the user chart config
   is stored in perspectives.xml and worse, when embedded on
   an overview is encoded as .gcchart (xml) before being
   encoded in the perspective.xml.

   To avoid this issue, specifically with user charts and
   to leave all other json string encoding and decoding
   unaffected (e.g. ridefile.json) a new protect/unprotect
   method has been introduced.

   Utils::jsonprotect2() and Utils::jsonunprotect2() will
   still decode older style encoding for backwards
   compatibility, but now will translate \ and " in the
   encoded string with :sl: and :qu:

   This means that, for example, the following substitutions
   will be made:

   newline (\n) -> :sl:n
   cr (\r) -> :sl:r
   \ -> :sl:
   " -> :qu:

   If users add text with these characters (e.g. :sl:) then
   it will be decoded to a slash, but it is highly unlikely
   they will do this, and if they do, it should be harmless
   as these text strings aren't part of the the datafilter
   syntax.

Fixes #3996
2021-08-06 07:28:21 +01:00
Mark Liversedge
62012f1990 Fix Overview BubbleViz refresh bug
.. since axis min and max values were not initialised the
   visualisation would fail to refresh and was generally
   unpredictable.

.. we now set initial values and check when updating.
2021-08-05 18:06:22 +01:00
Alejandro Martinez
b36bbdc3c0 CP Chart - Reposition model helper when off window
This is already fixed when it is out to the right,
but still can happen to the left.

Fixes #3995
2021-08-05 13:09:17 -03:00
Mark Liversedge
00b50b47c3 activities() datafilter function
.. activities("Workout_Code=\"FTP\"", metrics(BikeStress))

   A new function that provides an activities filter
   to apply as a closure to an expression, following the
   same approach as the daterange() function.

   In the example above metrics() will only return values where the
   activity has a workout code "FTP".
2021-08-05 13:48:18 +01:00
Mark Liversedge
1986df1c95 DataFilter string escaping
.. unescape datafilter strings since the lexer supports that
   but they are not parsed.

.. Only supports \n, \r and \" for now, but that should be
   enough.
2021-08-05 10:56:23 +01:00
Alejandro Martinez
15bbe288a0 Enable DataFilter zones to be used in Trends View
Formula doesn't change.
When date range is set Trends View is assumed and we use the sport of included
activities with default to Bike (Run for Pace) when mixed, and date is the end
date for the date range.
Otherwise we use activity sport and date as before.
2021-08-04 16:06:28 -03:00
Mark Liversedge
534a6a4ef1 Overview table clickthru fix for single row
.. need to highlight first row of table when only a
   single row for click thru. Since values are shown in
   rows not columns.
2021-08-04 15:15:52 +01:00
Mark Liversedge
d41e7dd1f6 Logical and is '&&' not 'and'
.. annoyingly gcc allows this which is why I keep making
   this silly mistake.
2021-08-04 13:36:28 +01:00
Mark Liversedge
a98ac12d0e Fix clickthru SEGV for Bubble and TopN overview items
.. they raised signals in paint events which was highly
   problematic (!)

Fixes #3993
2021-08-04 13:21:09 +01:00
Mark Liversedge
49989f95b6 Overview Data Table - Part 3 of 4
.. click thru from the data row to the trends view to
   view it on the activity view.

.. Added a function "f {}" that returns the activity
   filenames- the same semantics used in the user chart.

.. the mechanism used in the overview items to click thru
   from the itemPaint function is dropped and we now
   do it from the mouse release event.

.. see issue #3993 which will get fixed using the same
   scheme as this one.
2021-08-04 13:05:46 +01:00
Mark Liversedge
98e49c3228 Fixup UserChart mouse interaction on a Chartspace
.. when a user chart is placed on an overview we filter mouse
   events from the chartspace and not the widget due to
   events being discarded.

   See this issue for more details:
   https://github.com/GoldenCheetah/GoldenCheetah/issues/3992
2021-08-03 22:38:15 +01:00
Alejandro Martinez
171882dc9f DataFilter zones - use translated strings from WPrime and RideFile
Also use joules for fatigue zone limits like the old summary.
2021-08-03 17:14:44 -03:00
Mark Liversedge
bd864344bb Fixup for legend mouse events in chartspace
.. when a userchart is embedded into an overview mouse events
   do not propagate in their entirety- as a result the legend
   widgets do not see MouseRelease (even though they see
   MousePress).

   So the click to show/hide when hovering over a legend item
   responds to the press not the release.
2021-08-03 19:39:31 +01:00
Mark Liversedge
72f91c31a8 Fix user chart axis color
.. when using named colors the axis was always black because
   the color was not being translated via the RGBColor macro.
2021-08-03 15:51:36 +01:00
Mark Liversedge
155273232f User Chart on Overview - Part 2 of 3
.. User charts can be scaled (lines, texts, markers, legend)

.. Plot area background color honours overview card color
   when we're on an overview.

.. when adding a user chart to an overview make it span a couple
   of columns and 3 times deeper than a metric tile.

NOTE:

   There are two bugs that need to be squashed individually
   and are related to user charts on overview:

   1. Mouse event handling seems to be broken for user
      charts in Overview.

   2. User chart axis colors are always black when the series
      are configured to use named colors.
2021-08-03 14:36:35 +01:00
Alejandro Martinez
a0f77fbf70 Remove sport parameter from zones DataFilter function
zones(hr|power|pace|fatigue, name|description|low|high|units|time|percent)
applies to the currently selected activity and sport is implicit.

Also changed name() by metricname() and unit() by metricunit() in script comments.
2021-08-02 20:32:47 -03:00
Alejandro Martinez
fd384d69ba Fix zero div crash in Overview Data Table when names() returns an error
Found while removing sport parameter from zones.
2021-08-02 20:21:13 -03:00
Alejandro Martinez
7e998d965a Report full OS version string for all supported platforms
Fixes #3991
2021-08-02 18:00:13 -03:00
Alejandro Martinez
f1045d1aed DataFilter zones - use pace units instead of %CV
Like old Summary and most APPs, easier for athletes and coaches.
2021-08-01 16:55:58 -03:00
Mark Liversedge
557a0a27ec Fix User Chart Legend CPU hog
.. was caused by an eventfilter that caused a redraw on every single
   event (which included the repaint it caused, hence an infinite loop).

Fixes #3989
2021-08-01 18:40:33 +01:00
Mark Liversedge
e772e068d5 Add User Chart to Overview - Part 1 of 3
.. You can now add a user chart to the overview dashboard
   using a new tile UserChartOverviewItem.

.. Had to refactor UserChart away from a GcChartWindow and
   into a QWidget so the QGraphicsProxyWidget would play
   along.

.. A new UserChartWindow has been added to manage adding
   a UserChart to a perspective.

.. fixed chartspace item config widgets being destroyed across
   the add wizard and config dialog (existing bug).

.. fixed initialisation of items when added via wizard

NOTE the following issues/todo:

.. mouse click events are squiffy for some reason

.. need to add a way to scale as the text is tiny

.. legend has a performance issue (see #3989)

.. overall performance is good even tho we are using
   a QGraphicsProxyWidget- might need to reevaluate
   this later and embed the QChart directly into the
   QGraphicsScene. To be reviewed.
2021-08-01 10:20:24 +01:00
Mark Liversedge
c91f6d89ac Quieten gcc warnings a little
.. for R and Python embedding code, where casting and pointers
   are complex and not an issue, but gcc likes to warn us.
2021-07-31 11:54:41 +01:00
Mark Liversedge
031b268270 Sustain metrics needed isTime()
.. to ensure they are formatted as time metrics.
2021-07-30 22:02:03 +01:00
Mark Liversedge
b086b779cf Overview Data Table - Part 2 of 4
.. config dialog offers options to recreate the old summary
   window sections;
   * totals, averages, maximums, metrics
   * zone summary
2021-07-30 18:40:02 +01:00
Mark Liversedge
c60f6f4bb6 Zones DataFilter Function
.. a new zones datafilter function to retrieve zone info
   and metrics for the current activity.

.. zones(sport, series, field)

   sport is one of run, bike, swim
   series is one of power, hr, pace
   field is one of
   * name - zone name (e.g. L1)
   * description - zone desc (e.g. Active Recovery)
   * low - the low mark for the zone (e.g. 0)
   * high - the high mark for the zone (e.g. 100)
   * unit - units for low/high (e.g watts)
   * time - time spent in zone
   * percent - time spent in zone as a percentage

   each call will return a vector of strings for all
   zones available.

.. to support the syntax the old functions 'name' and
   'unit' have been renamed to 'metricname' and
   'metricunit' to avoid clashing with symbols and
   were bad choices in the first place.

.. the motivation for this function is mostly about the
   overview data table, where we might create a tile
   with the following program to display the zone
   table that was previously available on RideSummary

   names {
       c("Name","Description","Low","High","Time","%");
   }

   units {

       c("", "",
         zones(bike,power,units),
         zones(bike,power,units),
         "", "");
   }

   values {

      c(zones(bike,power,name),
        zones(bike,power,description),
        zones(bike,power,low),
        zones(bike,power,high),
        zones(bike,power,time),
        zones(bike,power,percent));
   }
2021-07-30 13:57:04 +01:00
Mark Liversedge
173b1a754e Stop Filter box expanding in config dialogs
.. we have a filter box on most trends charts config dialogs
   and elsewhere. But when you resized the dialog the filter
   box would also stretch (even though it is a QLineEdit).

.. this commit sets the vertical size policy to fixed to stop
   this ugly behaviour.
2021-07-28 21:46:49 +01:00
Mark Liversedge
0f432a7824 ChartSpace fixups for spanned tiles
.. when a column contains no tiles it may still be spanned
   by a tile (since we add that feature).

.. this means we should check if the column contains a spanned
   tile before shifting all remaining tiles left.

.. also enabled dropping into an empty column which was
   not possible previoisly (impossible to have an empty
   column)
2021-07-28 20:36:04 +01:00
Mark Liversedge
0ffca019ea Chartspace scene resize when spanning into empty column
.. when you extend a tile across an empty column to the right
   the scene was not being resized to take this into account.
2021-07-28 10:25:22 +01:00
Mark Liversedge
360bc29d52 DataFilter unit() and name() functions support 'date'
.. so we can get a translation of the word "Date".

.. also fixed up the default trends view data table tile to
   use it, instead of hardcoded "Date".
2021-07-28 08:20:29 +01:00
Mark Liversedge
7f005935e5 Overview Data Table - Part 1 of 4
A new overview tile that can be placed on trends or activity view to
display a table of data.

.. It uses a program to fetch the data to display via 3 functions:
   * names() returns a list of column names
   * units() returns a list of column unit names
   * values() returns a list of values to show

.. If there are more values than names then it is assumed there
   are multiple rows to be shown.

.. When adding a data tile an example program is provided to
   demonstrate how this works (will need to also document this
   on the wiki, or possibly a video tutorial).
2021-07-27 21:34:46 +01:00
Alejandro Martinez
b9fbcce56e Fix copy paste error in FixElevation
Introduced by 061cb93.
Fixes #3973
2021-07-26 11:29:57 -03:00
Alejandro Martinez
a918a5c28e Histogram Chart - Disable Show Zone Limits option for Trends
Since time in zone is computed using the active zones for the series according
to sport and date, there is no good choice of limits to show in the general case.
This is part 4 of #3911
2021-07-24 20:52:48 -03:00
Alejandro Martinez
c89d15e067 Histogram Chart - Add Show Zone Limits option for Polarized zones
Power, HR and Pace use separate scales now.
This is part 3 and fixes #3911
The sport used to select zones in rangemode needs an update,
this will be included in a separate commit.
2021-07-23 17:21:46 -03:00
Alejandro Martinez
86e6b4781c Allow Running Model estimates in DataFilter formulas
This should have been part of ff0b329
Fixes #3958
2021-07-23 15:26:25 -03:00
Alejandro Martinez
92e3438ef3 Histogram Chart - Add Show Zone Limits option for WBal zones
This is part 2 of #3911, part 3 Polarized Zones.
The sport used to select zones in rangemode needs an update,
this will be part 4.
2021-07-23 12:22:55 -03:00
Alejandro Martinez
59a2f3841f Histogram Chart - Add Show Zone Limits option for Power/HR/Pace
This is part 1 of #3911, part 2 will be WBal zones and part 3 Polarized Zones.
2021-07-22 21:14:45 -03:00
Mark Liversedge
a52a07de7a DataFilter functions for Overview Data Table
.. some new functions to help prepare data for the new overview
   data table item. Possibly useful in other contexts too.

   datestring(v) - returns v converted to a string date where
   v can be a single value or vector of values, as days since
   01/01/1900. e.g. datestring(Date)

   timestring(v) - returns v converted to a string time
   where v can be a single value or vector of values.

   name(metric1 ... metricn) - returns the metric name in
   the local language

   units(metric1 ... metricn) - returns the metric unit name
   in the local language
2021-07-20 22:25:29 +01:00
Mark Liversedge
806e907584 Fix Overview resize spanned column fencepost bug
.. when calculating the spanned item's width there was a
   fencepost error in the logic causing the spanned item
   to be resized incorrectly.
2021-07-20 18:27:35 +01:00
Mark Liversedge
0cc4a338d2 Overview Items Span Columns
.. resize an overview item column width whilst holding down the shift key
   to make it span columns, it will expand across and back.

.. this is largely to support the data table overview item type that
   is pending, but also may be useful in the future when items can
   contain charts (not planned for v3.6).
2021-07-20 17:37:16 +01:00
grauser
b6f1151990 FitRideFile : correction for byte ff is not NA 2021-07-19 22:22:49 +02:00
Mark Liversedge
85e5353990 Train view honor colors better
.. train plot background color is now honored more completely
   with the backgrounds, sidebars and tabs all taking the
   right color.

.. additionally, when applying any theme the train view will
   always be set to a black background since it works best
   like that (but users are still free to change it).
2021-07-19 15:37:56 +01:00
grauser
456b06348f FitRideFile : Change hex convertion 2021-07-19 12:38:10 +02:00
grauser
c502c9bbc0 FitRideFile : Add decodeDeveloperID
Just read values (without storing)
2021-07-18 10:08:33 +02:00
Mark Liversedge
e34a36f98a V3.6 upgrade processing - reset theme
.. based upon current background plot color, so those with a
   preference for dark themes get the new dark theme and those
   with a preference for light get the new light theme.

.. making it mandatory will likely annoy some users but for the
   most part it will mean the UI will get updated to a more
   thoughtful color scheme.
2021-07-18 07:55:33 +01:00
Mark Liversedge
663b6af8fb Fix toolbar vs sidebar color configuration
.. they got conflated, now are separate colors but when we
   apply a theme they are set to the same color, of course
   the user can override this.
2021-07-17 11:41:49 +01:00
Mark Liversedge
1b38e556c3 Tab Bar menu image for WIKI 2021-07-15 13:46:59 +01:00
grauser
3e21d6bd39 FitRideFile : Use qbswap 2021-07-14 10:49:50 +02:00
Alejandro Martinez
8e3863218d Avoid crashes when Python APIs are called from User Metrics
There is no perspective involved in this case.
2021-07-12 20:41:28 -03:00
grauser
c29a776c21 FitFile : Some devices (eg Coros Pace 2) declare uint32 with size 1
Fix #3645
2021-07-11 16:42:53 +02:00
grauser
566d562982 FitFile : Add IpBike and correct float32 for endian
Fix #3682
2021-07-11 16:11:17 +02:00
grauser
c78fcda1e3 Translation : lupdate + french update/progression (1/3) 2021-07-11 15:03:42 +02:00
Alejandro Martinez
61d00c161f Fix crash on PythonChart - set perspective on RunScript 2021-07-10 11:15:15 -03:00
Alejandro Martinez
bd49279553 Upgrade Python to 3.7.11 for Travis-ci Linux builds
[skip appveyor]
Python 3.7.10 AppImage is not available anymore.
[publish binaries]
2021-07-09 18:14:28 -03:00
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
732 changed files with 229568 additions and 141062 deletions

5
.gitignore vendored
View File

@@ -36,6 +36,11 @@ plugins/
resources/
src/debug/
src/release/
doc/doxygen/latex
doc/doxygen/html
# qt creator builds
build-src*
qwt/src/debug/
qwt/src/release/

View File

@@ -1,3 +1,5 @@
if: commit_message =~ /\[publish binaries\]/
branches:
only:
- master
@@ -11,6 +13,8 @@ cache:
- qwt
- D2XX
- site-packages
- VLC
- src/GoldenCheetah.app
env:
global:
@@ -33,14 +37,19 @@ env:
- secure: cc0pAJjkmFNw2bO3zVACmtyHTwINAHALrtUxi+nRD+FhOO9KxuxuuwvcKCZKfp9EUOjz5PrYWKV1ZH/zt/jMix8A4Gyue2mWX8WYih7aTmJBcJWsFNTCybnClreKBCh18kHdWWhkmhk8EMINDvlqxzJZGpcNO04gxhL9wuLLrNQ=
- secure: em0xXIm69rMHsHXYQiizeJB7dEFBkX33PsWDHwBNrX6lFBued23eL96KJC4RVbk6A+AHFtXFATrreZ14D5JH/E/37CXhe3X2R93WqiPUSH0s7NI4fFA1BroKUNAlqO4bMqDBidtNmwMPaLTXjaOnOZyvbAG7z+QV3TKC8tOeZDU=
- secure: VFaSERlgsjzjiDQhKw8XFvQrjdvFzHHL7V3NQg+RfELHoT6I1pAGFdl/+lRBIVOiVkbQ6XnpBA28nlf0QydPHElRZdqmh0azQV/bkUXD4ffPE8q0iSqeqhAZ+5L05K5K+Gby/y8TZE4FX6e/7trFL7oq+h9x0gq5RQO8rAcTV84=
- secure: eTSJmS38EsTkI22yvDJLUrBxSyLDwd3pDRsyLQfZ3ThN0UJ9cQN2uB7aLy3OzNYadpi+Axlr46MgG0G5qGV1hHXkf+C4orGkURQWxHA7L5R/oE98TuYMO1bisZu9dJEVbmEM4cehCjbB7DExzxK4m6+oTJsWhVbIwlNh5Poq/v4=
- secure: gUDTEErUOhzkSVofEvdw1jqHHsE/K+/SOqRBKDToaFPhi6XK+Tvu1LqPMjfPdjYLaCSiwc/R79fJrAEuK+7KSwdiLEnDv3RMpRS5g1UWyJ/ZYd5xNR+WiBqUvnY/S/CJokuNw7gBbGq7JCO4pmIGV5YB9FA4Na6MG/eHzTSOIig=
- secure: Qk+gzBLwjrB8abUYzxap10dYSpIeKpB1gqhdoMbqS23G0r1lejnsjutIfReuJGK/efCmhisKN1xIX/InvJWD8z6GsLJFmf3F0oRj7aDJ/X5UIn9Upflje9xgHQafP1FJuzZBWtzandNfPE8EmEOgAQsJZ3c7xBE1SY/6xcJaQTc=
- secure: m4+k3/QcYvqmMoRO8uq3ef2jAO1FWeRVDG/XtlbjBlgmB5OR/zW5c7c1Ywm6IM5yzsi1rRks8GFffZ6gYqXhML10EfGKVbnyBcZZ7HVylNtvxDF68W1BLacChzDs4mGYQSV8kJRGI3EaVNdyFJ5yln/HUZ6qBbQ473MtxprO6BI=
- secure: GEyUuLuIc7D3F4noKhtTCbWbQAlm61Y7Vh2mOKBEgmyfoV1johwlEL0RaeRyr9MnU2MN+4jeFthvDjxm3LGP19zrpB46GTGHU6/H9BZBodDCJsFTqj32T+5QTcAF2RQ66ZgYpSyTf063/RLlfy7YjCb8KLiJ2asCaoYtQIjx3hA=
jobs:
include:
- os: osx
osx_image: xcode10.1
osx_image: xcode11.3
compiler: clang
- os: linux
dist: xenial
dist: bionic
compiler: gcc
before_install:

View File

@@ -1,124 +1,82 @@
Update Note: to build GoldenCheetah v3.6 we are using the APT Package
Manager to install dependencies, including Qt and GSL, on Travis-ci
Ubuntu Xenial build environment.
You can check the travis/linux 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
+++++++++++++++++++++++
LINUX BUILD WALKTHROUGH
+++++++++++++++++++++++
Mark Liversedge
John Ehrlinger
Ale Martinez
Jan 2015
Version 1.2
Jul 2022
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.15.2 or higher Qt 5 version, 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
INSTALL FLEX and BISON
----------------------
$ sudo pacman -S flex bison
NEXT STEPS
----------
$ vi gcconfig.pri
Ensure you have the following lines (which are now also in gcconfig.pri.in which has
been updated to reflect the new dependencies in version 3)
QMAKE_LEX = flex
QMAKE_YACC = bison
win32 {
QMAKE_YACC = bison --file-prefix=y -t
QMAKE_MOVE = cmd /c move
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
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
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
$ mkdir -p ~/Projects
$ cd ~/Projects
$ git clone git://github.com/GoldenCheetah/GoldenCheetah.git
$ cd GoldenCheetah
@@ -130,11 +88,32 @@ $ 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.
Uncomment below and configure the location of the GNU scientific library, this is a mandatory dependency.
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]
#GSL_INCLUDES = /usr/include
#GSL_LIBS = -lgsl -lgslcblas -lm
Uncomment the following lines to use flex and bison:
#QMAKE_LEX = flex
#QMAKE_YACC = bison
and if you are using bison 3.7 or higher, make sure to also uncomment:
#QMAKE_MOVE = cp
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
If your QT build doesn't include its own local compress libs then you should uncomment the lines below,
and add the library path to LIBZ_INCLUDE =, you will need to have the compress libraries installed separately.
#LIBZ_INCLUDE =
#LIBZ_LIBS = -lz
compiling with gcc -O3 (tree vectorization can have a significat impact)
[or -Ofast]
If so you might like to uncomment:
@@ -145,32 +124,43 @@ 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 from src folder.
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
@@ -195,20 +185,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
@@ -218,9 +208,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
@@ -229,7 +217,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
@@ -246,55 +235,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
@@ -302,21 +268,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,11 +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.
macOS Mojave 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
GSL - GNU Scientific Library is a mandatory dependency starting with v3.6 and
minimum bison version is 2.7, both can be installed using Homebrew.
Ale Martinez - May, 2020
Ale Martinez - Oct, 2022
+++++++++++++++++++++++
MAC OSX BUILD WALKTHROUGH

View File

@@ -1,11 +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
Update Note: to build GoldenCheetah v3.6 we are using Microsoft Visual C++ 2019,
included in Microsoft Visual Studio 2019 AppVeyor image, with Qt5.15.2 and GSL 2.7
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
Ale Martinez - Jul, 2022
+++++++++++++++++++++++
WIN32 BUILD WALKTHROUGH
+++++++++++++++++++++++

View File

@@ -1 +1,10 @@
Issue tracker is **only** for Bugs and Features, before to open a new issue please read the contributing guidelines (link below), and use the forums if you need help or technical support.
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

@@ -1,17 +1,30 @@
<img src="src/Resources/images/gc.png" height="25%" width="25%">
# GoldenCheetah
<img src="https://raw.githubusercontent.com/GoldenCheetah/GoldenCheetah/067696aafdad21c702672b2c9c41da03c076451c/doc/wiki/GoldenCheetah-Screenshot.png" width="100%">
## About
GoldenCheetah is an open-source desktop application for cyclists and triathletes.
GoldenCheetah is a desktop application for cyclists and triathletes and coaches
* Analyse using summary metrics like BikeStress, TRIMP or RPE
* Extract insight via models like Critical Power and W'bal
* Track and predict performance using models like Banister and PMC
* Optimise aerodynamics using Virtual Elevation
* Train indoors with ANT and BTLE trainers
* Upload and Download with many cloud services including Strava and Todays Plan
* Import and export data to and from a wide range of bike computers and file formats
GoldenCheetah works with cloud services like Strava, imports data from bike computers
and will also connect to indoor trainers.
GoldenCheetah provides tools for users to develop their own own metrics, models and charts
* A high-performance and powerful built-in scripting language
* Local Python runtime or embedding a user installed runtime
* Embedded user installed R runtime
GoldenCheetah provides a rich set of metrics and charts for tracking and managing
training as well as implementations of power duration and impulse response models
to estimate and track changes in performance.
GoldenCheetah supports community sharing via the Cloud
* Upload and download user developed metrics
* Upload and download user, Python or R charts
* Import indoor workouts from the ErgDB
* Share anonymised data with researchers via the OpenData initiative
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
@@ -22,15 +35,18 @@ INSTALL-WIN32 For building on Microsoft Windows
INSTALL-LINUX For building on Linux
INSTALL-MAC For building on Apple OS X
INSTALL-MAC For building on Apple MacOS
macOS and Linux: [![Build Status](https://travis-ci.org/GoldenCheetah/GoldenCheetah.svg?branch=master)](https://travis-ci.org/GoldenCheetah/GoldenCheetah)
macOS and Linux: [![Build Status](https://app.travis-ci.com/GoldenCheetah/GoldenCheetah.svg?branch=master)](https://app.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
Official release builds, snapshots and development builds are all available from http://www.goldencheetah.org
## NOTIO Fork
If you are looking for the NOTIO fork of GoldenCheetah it can be found here: https://github.com/notio-technologies/GCNotio
whilst the latest developer builds are available from https://github.com/GoldenCheetah/GoldenCheetah/releases

View File

@@ -33,10 +33,20 @@ environment:
secure: h2JdlC1i4QOmwpkz+Xxbrw==
GC_SPORTTRACKS_CLIENT_SECRET:
secure: n6a8nJgqMyg+VsVeoIIR8TFzxyDFVi2w/ggetQk5agY=
GC_RWGPS_API_KEY:
secure: uUtCyF5ByZ1VYJOztUngIA==
GC_NOLIO_CLIENT_ID:
secure: /OFVjEBwU7o3SItIQVf/YlJ8XErxneXIT2N0JyPMSXR1tCbdZVWixMHpqKNWoNk4
GC_NOLIO_SECRET:
secure: mmMksvVnfBiXufBDn2gAhQY53n0J9BokSCtDY51uU918QJ/LL4XOojtJp5tMFn8T7ugyDhNASpqZXiK55vxSD53vm+tjufpfzppKEeh93Babvc/VrndLB1X/RZCRUQTR6rka05fYl4e0eBzP1H091A==
GC_XERT_CLIENT_SECRET:
secure: /1rVLT8LyJCZ4xNJ5W+NtAcZ1rtKaUjW9SYm/T3gHoc=
GC_AZUM_CLIENT_SECRET:
secure: 2ZpXsA3TQv1zftYVyZSF6f83ftCzza+K22ZX1doj7Yc/5dmGl1bnsSeVChJgJ8lQ2fRPYpdmun9cjqwcrtG/zXTTsYuTvYWegHz/4Y0u6Mg=
init:
# Setup QT 5.14 - 64Bit
- set QTDIR=C:\Qt\5.14\msvc2017_64
# Setup QT 5.15 - 64Bit
- set QTDIR=C:\Qt\5.15\msvc2019_64
- set PATH=%QTDIR%\bin;%PATH%
- qmake --version
@@ -47,7 +57,7 @@ init:
- set PATH=%PATH%;C:\"Program Files (x86)"\NSIS
cache:
- gc-ci-libs.zip
- gc-ci-libs.zip -> appveyor.yml
- jom_1_1_3.zip
- sip-4.19.8.zip
- C:\R
@@ -74,7 +84,9 @@ install:
# 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
# Lets use 4.1 until 4.2 issues are fixed
#$rurl = $(ConvertFrom-JSON $(Invoke-WebRequest https://rversions.r-pkg.org/r-release-win).Content).URL
$rurl = "https://cran.r-project.org/bin/windows/base/old/4.1.3/R-4.1.3-win.exe"
Start-FileDownload $rurl "R-win.exe"
Start-Process -FilePath .\R-win.exe -ArgumentList "/VERYSILENT /DIR=C:\R" -NoNewWindow -Wait
}
@@ -85,7 +97,7 @@ install:
# Get Python embeddable and install packages
- ps: >-
if (-not (Test-Path 'C:\Python')) {
Start-FileDownload "https://www.python.org/ftp/python/3.7.7/python-3.7.7-embed-amd64.zip" Python.zip
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
@@ -114,7 +126,7 @@ install:
before_build:
# Define GC version string, only for tagged builds
- if %APPVEYOR_REPO_TAG%==true echo DEFINES+=GC_VERSION=VERSION_STRING >> src/gcconfig.pri
- if %APPVEYOR_REPO_TAG%==true echo DEFINES+=GC_VERSION=VERSION_STRING >> src\gcconfig.pri
# Enable CloudDB
- echo CloudDB=active >> src\gcconfig.pri
@@ -122,6 +134,9 @@ before_build:
# Add Train Robot
- echo DEFINES+=GC_WANT_ROBOT >> src\gcconfig.pri
# Avoid macro redefinition warnings
- echo DEFINES+=_MATH_DEFINES_DEFINED >> src\gcconfig.pri
# Add debug console
#- echo CONFIG+=console >> src\gcconfig.pri
@@ -142,6 +157,11 @@ before_build:
- 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
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_RWGPS_API_KEY__', $env:GC_RWGPS_API_KEY | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_NOLIO_CLIENT_ID__', $env:GC_NOLIO_CLIENT_ID | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_NOLIO_SECRET__', $env:GC_NOLIO_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_XERT_CLIENT_SECRET__', $env:GC_XERT_CLIENT_SECRET | Set-Content src\Core\Secrets.h
- ps: (Get-Content src\Core\Secrets.h) -replace '__GC_AZUM_CLIENT_SECRET__', $env:GC_AZUM_CLIENT_SECRET | Set-Content src\Core\Secrets.h
build_script:
- qmake.exe build.pro -r -spec win32-msvc
@@ -173,10 +193,10 @@ after_build:
- copy ..\Resources\win32\gc.ico
# Installer script
- copy ..\Resources\win32\GC3.6-Dev-Master-W64-QT5.14.2.nsi
- copy ..\Resources\win32\GC3.6-Dev-Master-W64-QT5.nsi
# Build the installer
- makensis GC3.6-Dev-Master-W64-QT5.14.2.nsi
- makensis GC3.6-Dev-Master-W64-QT5.nsi
- move GoldenCheetah_v3.6-DEV_64bit_Windows.exe ..\..\GoldenCheetah_v3.6-DEV_x64.exe
- cd ..\..
- ps: Set-AppveyorBuildVariable -Name 'PUBLISH_BINARIES' -Value false

View File

@@ -2,6 +2,12 @@
// BSplineCurve.h from Geometric Tools along with all the GTC headers
// it requires.
// disable warning messages
#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wunused-value"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#endif
#define LogError(a) (0); return 0;
#define LogAssert(a,b) (0)

19
contrib/kmeans/INFO Normal file
View File

@@ -0,0 +1,19 @@
NOTE
The sources in this sub-directory including the LICENSE and README files
are imported with permission granted by the author (Greg Hamerly).
The original sources are available from Github here:
https://github.com/ghamerly/fast-kmeans
Whilst the original source implements multiple algorithms we only kept
the hamerly variant.
The source files have not been adapted to use Qt containers or to refactor
any of the class inheritance. So updating to newer versions should be
very straightforward (although the base functionality and performance is
good enough).
Usage in Qt applications will likely use the Kmeans wrapper class
28/09/2021

22
contrib/kmeans/LICENSE Normal file
View File

@@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2014 Greg Hamerly
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,15 @@
# doesn't work now since the source has been placed in a subdir
# left for info and fairly trivial to fixup if you want to work
# directly with the original sources
OBJECTS=kmeans_dataset.o \
general_functions.o \
hamerly_kmeans.o \
kmeans.o \
original_space_kmeans.o \
triangle_inequality_base_kmeans.o \
driver-standalone.o
driver-standalone: $(OBJECTS)
gcc -o $@ $(OBJECTS) -lstdc++ -lm
./driver-standalone hamerly smallDataset.txt 4 centers

106
contrib/kmeans/README Normal file
View File

@@ -0,0 +1,106 @@
===============================
Fast K-means Clustering Toolkit
===============================
----------------------
Version 0.1 (Sat May 17 17:41:11 CDT 2014)
- Initial release.
----------------------
WHAT:
This software is a testbed for comparing variants of Lloyd's k-means clustering
algorithm. It includes implementations of several algorithms that accelerate
the algorithm by avoiding unnecessary distance calculations.
----------------------
WHO:
Greg Hamerly (hamerly@cs.baylor.edu, primary contact) and Jonathan Drake
(drakej@hp.com).
----------------------
HOW TO BUILD THE SOFTWARE:
type "make" (and hope for the best)
----------------------
HOW TO RUN THE SOFTWARE:
The driver is designed to take commands from standard input, usually a file
that's been redirected as input:
./kmeans < commands.txt
You can read the source to find all the possible commands, but here is a
summary:
- threads T -- use T threads for clustering
- maxiterations I -- use at most I iterations; default (or negative)
indicates an unlimited number
- dataset D -- use the given path name to a file as the dataset for
clustering. The dataset should have a first line with the number of points
n and dimension d. The next (nd) tokens are taken as the n vectors
to cluster.
- initialize k {kpp|random} -- use the given method (k-means++ or a random
sample of the points) to initialize k centers
- lloyd, hamerly, annulus, elkan, compare, sort, heap, adaptive -- perform
k-means clustering with the given algorithm (requires first having
initialized the centers). The adaptive algorithm is Drake's algorithm with
a heuristic for choosing an initial B
- drake B -- use Drake's algorithm with B lower bounds
- kernel [gaussian T | linear | polynomial P] -- use kernelized k-means with
the given kernel
- elkan_kernel [gaussian T | linear | polynomial P] -- use kernelized
k-means with the given kernel, and Elkan's accelerations
- center -- give the previously-loaded dataset a mean of 0.
- quit -- quit the program
Note that when a set of centers is initialized, that same set of centers is used
from then on (until a new initialization occurs). So running a clustering
algorithm multiple times will use the same initialization each time.
Here is an example of a simple set of commands:
dataset smallDataset.txt
initialize 10 kpp
annulus
hamerly
adaptive
heap
elkan
sort
compare
----------------------
CAVEATS:
- This software has been developed and tested on Linux. Other platforms may not
work. Please let us know if you have difficulties, and if possible fixes for
the code.
- This software uses a non-standard pthreads function called
pthread_barrier_wait(), which is implemented on Linux but not on OSX.
Therefore, multithreading doesn't currently work on OSX. To turn it off,
comment out the lines in the Makefile that say:
CPPFLAGS += -DUSE_THREADS
LDFLAGS += -lpthread
----------------------
REFERENCES:
Phillips, Steven J. "Acceleration of k-means and related clustering algorithms."
In Algorithm Engineering and Experiments, pp. 166-177. Springer Berlin
Heidelberg, 2002.
Elkan, Charles. "Using the triangle inequality to accelerate k-means." In ICML,
vol. 3, pp. 147-153. 2003.
Hamerly, Greg. "Making k-means Even Faster." In SDM, pp. 130-140. 2010.
Drake, Jonathan, and Greg Hamerly. "Accelerated k-means with adaptive distance
bounds." In 5th NIPS Workshop on Optimization for Machine Learning. 2012.
Drake, Jonathan. "Faster k-means clustering." MS thesis, 2013.
Hamerly, Greg, and Jonathan Drake. "Accelerating Lloyd's algorithm for k-means
clustering." To appear in Partitional Clustering Algorithms, Springer, 2014.

View File

@@ -0,0 +1,70 @@
#include <iostream>
#include <fstream>
#include <string>
#include <cassert>
#include "kmeans/general_functions.h"
#include "kmeans/kmeans.h"
#include "dataset.h"
#include "hamerly_kmeans.h"
Dataset *load_dataset(std::string const &filename) {
std::ifstream input(filename.c_str());
int n, d;
input >> n >> d;
Dataset *x = new Dataset(n, d);
for (int i = 0; i < n * d; ++i) input >> x->data[i];
return x;
}
Kmeans *get_algorithm(std::string const &name) {
if (name == "hamerly") return new HamerlyKmeans();
return NULL;
}
int main(int argc, char **argv) {
if (argc != 5) {
std::cout << "usage: " << argv[0] << " algorithm dataset k [centers|assignment]\n";
return 1;
}
std::string algorithm_name(argv[1]);
std::string filename(argv[2]);
int k = std::stoi(argv[3]);
std::string output(argv[4]);
Dataset *x = load_dataset(filename);
Kmeans *algorithm = get_algorithm(algorithm_name);
Dataset *initialCenters = init_centers_kmeanspp_v2(*x, k);
unsigned short *assignment = new unsigned short[x->n];
assign(*x, *initialCenters, assignment);
algorithm->initialize(x, k, assignment, 1);
algorithm->run(10000);
Dataset const *finalCenters = algorithm->getCenters();
if (output == "centers") {
finalCenters->print();
} else {
assign(*x, *finalCenters, assignment);
for (int i = 0; i < x->n; ++i) {
std::cout << assignment[i] << "\n";
}
}
delete x;
delete algorithm;
delete initialCenters;
delete [] assignment;
return 0;
}

View File

@@ -0,0 +1,179 @@
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*/
#include "hamerly_kmeans.h"
#include "kmeans_general_functions.h"
#include <cmath>
#include <algorithm>
/* Hamerly's algorithm that is a 'simplification' of Elkan's, in that it keeps
* the following bounds:
* - One upper bound per clustered record on the distance between the record
* and its closest center. It is always greater than or equal to the true
* distance between the record and its closest center. This is the same as in
* Elkan's algorithm.
* - *One* lower bound per clustered record on the distance between the record
* and its *second*-closest center. It is always less than or equal to the
* true distance between the record and its second closest center. This is
* different information than Elkan's algorithm -- his algorithm keeps k
* lower bounds for each record, for a total of (n*k) lower bounds.
*
* The basic ideas are:
* - when lower(x) <= upper(x), we need to recalculate the closest centers for
* the record x, and reset lower(x) and upper(x) to their boundary values
* - whenever a center moves
* - calculate the distance it moves 'd'
* - for each record x assigned to that center, update its upper bound
* - upper(x) = upper(x) + d
* - after each iteration
* - find the center that has moved the most (with distance 'd')
* - update the lower bound for all (?) records:
* - lower(x) = lower(x) - d
*
* Parameters:
* - threadId: the index of the thread that is running
* - maxIterations: a bound on the number of iterations to perform
*
* Return value: the number of iterations performed (always at least 1)
*/
// this version only updates center locations when necessary
int HamerlyKmeans::runThread(int threadId, int maxIterations) {
int iterations = 0;
int startNdx = start(threadId);
int endNdx = end(threadId);
while ((iterations < maxIterations) && ! converged) {
++iterations;
// compute the inter-center distances, keeping only the closest distances
update_s(threadId);
synchronizeAllThreads();
// loop over all records
for (int i = startNdx; i < endNdx; ++i) {
unsigned short closest = assignment[i];
// if upper[i] is less than the greater of these two, then we can
// ignore record i
double upper_comparison_bound = std::max(s[closest], lower[i]);
// first check: if u(x) <= s(c(x)) or u(x) <= lower(x), then ignore
// x, because its closest center must still be closest
if (upper[i] <= upper_comparison_bound) {
continue;
}
// otherwise, compute the real distance between this record and its
// closest center, and update upper
double u2 = pointCenterDist2(i, closest);
upper[i] = sqrt(u2);
// if (u(x) <= s(c(x))) or (u(x) <= lower(x)), then ignore x
if (upper[i] <= upper_comparison_bound) {
continue;
}
// now update the lower bound by looking at all other centers
double l2 = std::numeric_limits<double>::max(); // the squared lower bound
for (int j = 0; j < k; ++j) {
if (j == closest) { continue; }
double dist2 = pointCenterDist2(i, j);
if (dist2 < u2) {
// another center is closer than the current assignment
// change the lower bound to be the current upper bound
// (since the current upper bound is the distance to the
// now-second-closest known center)
l2 = u2;
// adjust the upper bound and the current assignment
u2 = dist2;
closest = j;
} else if (dist2 < l2) {
// we must reduce the lower bound on the distance to the
// *second* closest center to x[i]
l2 = dist2;
}
}
// we have been dealing in squared distances; need to convert
lower[i] = sqrt(l2);
// if the assignment for i has changed, then adjust the counts and
// locations of each center's accumulated mass
if (assignment[i] != closest) {
upper[i] = sqrt(u2);
changeAssignment(i, closest, threadId);
}
}
verifyAssignment(iterations, startNdx, endNdx);
// ELKAN 4, 5, AND 6
// calculate the new center locations
synchronizeAllThreads();
if (threadId == 0) {
int furthestMovingCenter = move_centers();
converged = (0.0 == centerMovement[furthestMovingCenter]);
}
synchronizeAllThreads();
if (! converged) {
update_bounds(startNdx, endNdx);
}
synchronizeAllThreads();
}
return iterations;
}
/* This method does the following:
* - finds the furthest-moving center
* - finds the distances moved by the two furthest-moving centers
* - updates the upper/lower bounds for each record
*
* Parameters:
* - startNdx: the first index of the dataset this thread is responsible for
* - endNdx: one past the last index of the dataset this thread is responsible for
*/
void HamerlyKmeans::update_bounds(int startNdx, int endNdx) {
double longest = centerMovement[0], secondLongest = (1 < k) ? centerMovement[1] : centerMovement[0];
int furthestMovingCenter = 0;
if (longest < secondLongest) {
furthestMovingCenter = 1;
std::swap(longest, secondLongest);
}
for (int j = 2; j < k; ++j) {
if (longest < centerMovement[j]) {
secondLongest = longest;
longest = centerMovement[j];
furthestMovingCenter = j;
} else if (secondLongest < centerMovement[j]) {
secondLongest = centerMovement[j];
}
}
// update upper/lower bounds
for (int i = startNdx; i < endNdx; ++i) {
// the upper bound increases by the amount that its center moved
upper[i] += centerMovement[assignment[i]];
// The lower bound decreases by the maximum amount that any center
// moved, unless the furthest-moving center is the one it's assigned
// to. In the latter case, the lower bound decreases by the amount
// of the second-furthest-moving center.
lower[i] -= (assignment[i] == furthestMovingCenter) ? secondLongest : longest;
}
}

View File

@@ -0,0 +1,29 @@
#ifndef HAMERLY_KMEANS_H
#define HAMERLY_KMEANS_H
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*
* HamerlyKmeans implements Hamerly's k-means algorithm that uses one lower
* bound per point.
*/
#include "triangle_inequality_base_kmeans.h"
class HamerlyKmeans : public TriangleInequalityBaseKmeans {
public:
HamerlyKmeans() { numLowerBounds = 1; }
virtual ~HamerlyKmeans() { free(); }
virtual std::string getName() const { return "hamerly"; }
protected:
// Update the upper and lower bounds for the given range of points.
void update_bounds(int startNdx, int endNdx);
virtual int runThread(int threadId, int maxIterations);
};
#endif

165
contrib/kmeans/kmeans.cpp Normal file
View File

@@ -0,0 +1,165 @@
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*/
#include "kmeans.h"
#include "kmeans_general_functions.h"
#include <cassert>
#include <cmath>
Kmeans::Kmeans() : x(NULL), n(0), k(0), d(0), numThreads(0), converged(false),
clusterSize(NULL), centerMovement(NULL), assignment(NULL) {
#ifdef COUNT_DISTANCES
numDistances = 0;
#endif
}
void Kmeans::free() {
delete [] centerMovement;
for (int t = 0; t < numThreads; ++t) {
delete [] clusterSize[t];
}
delete [] clusterSize;
centerMovement = NULL;
clusterSize = NULL;
assignment = NULL;
n = k = d = numThreads = 0;
}
void Kmeans::initialize(Dataset const *aX, unsigned short aK, unsigned short *initialAssignment, int aNumThreads) {
free();
converged = false;
x = aX;
n = x->n;
d = x->d;
k = aK;
#ifdef USE_THREADS
numThreads = aNumThreads;
pthread_barrier_init(&barrier, NULL, numThreads);
#else
numThreads = 1;
#endif
assignment = initialAssignment;
centerMovement = new double[k];
clusterSize = new int *[numThreads];
for (int t = 0; t < numThreads; ++t) {
clusterSize[t] = new int[k];
std::fill(clusterSize[t], clusterSize[t] + k, 0);
for (int i = start(t); i < end(t); ++i) {
assert(assignment[i] < k);
++clusterSize[t][assignment[i]];
}
}
#ifdef COUNT_DISTANCES
numDistances = 0;
#endif
}
void Kmeans::changeAssignment(int xIndex, int closestCluster, int threadId) {
--clusterSize[threadId][assignment[xIndex]];
++clusterSize[threadId][closestCluster];
assignment[xIndex] = closestCluster;
}
#ifdef USE_THREADS
struct ThreadInfo {
public:
ThreadInfo() : km(NULL), threadId(0), pthread_id(0) {}
Kmeans *km;
int threadId;
pthread_t pthread_id;
int numIterations;
int maxIterations;
};
#endif
void *Kmeans::runner(void *args) {
#ifdef USE_THREADS
ThreadInfo *ti = (ThreadInfo *)args;
ti->numIterations = ti->km->runThread(ti->threadId, ti->maxIterations);
#endif
return NULL;
}
int Kmeans::run(int maxIterations) {
int iterations = 0;
#ifdef USE_THREADS
{
ThreadInfo *info = new ThreadInfo[numThreads];
for (int t = 0; t < numThreads; ++t) {
info[t].km = this;
info[t].threadId = t;
info[t].maxIterations = maxIterations;
pthread_create(&info[t].pthread_id, NULL, Kmeans::runner, &info[t]);
}
// wait for everything to finish...
for (int t = 0; t < numThreads; ++t) {
pthread_join(info[t].pthread_id, NULL);
}
iterations = info[0].numIterations;
delete [] info;
}
#else
{
iterations = runThread(0, maxIterations);
}
#endif
return iterations;
}
double Kmeans::getSSE() const {
double sse = 0.0;
for (int i = 0; i < n; ++i) {
sse += pointCenterDist2(i, assignment[i]);
}
return sse;
}
void Kmeans::verifyAssignment(int iteration, int startNdx, int endNdx) const {
#ifdef VERIFY_ASSIGNMENTS
for (int i = startNdx; i < endNdx; ++i) {
// keep track of the squared distance and identity of the closest-seen
// cluster (so far)
int closest = assignment[i];
double closest_dist2 = pointCenterDist2(i, closest);
double original_closest_dist2 = closest_dist2;
// look at all centers
for (int j = 0; j < k; ++j) {
if (j == closest) {
continue;
}
double d2 = pointCenterDist2(i, j);
// determine if we found a closer center
if (d2 < closest_dist2) {
closest = j;
closest_dist2 = d2;
}
}
// if we have found a discrepancy, then print out information and crash
// the program
if (closest != assignment[i]) {
std::cerr << "assignment error:" << std::endl;
std::cerr << "iteration = " << iteration << std::endl;
std::cerr << "point index = " << i << std::endl;
std::cerr << "closest center = " << closest << std::endl;
std::cerr << "closest center dist2 = " << closest_dist2 << std::endl;
std::cerr << "assigned center = " << assignment[i] << std::endl;
std::cerr << "assigned center dist2 = " << original_closest_dist2 << std::endl;
assert(false);
}
}
#endif
}

147
contrib/kmeans/kmeans.h Normal file
View File

@@ -0,0 +1,147 @@
#ifndef KMEANS_H
#define KMEANS_H
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*
* Kmeans is an abstract base class for algorithms which implement Lloyd's
* k-means algorithm. Subclasses provide functionality in the "runThread()"
* method.
*/
#include "kmeans_dataset.h"
#include <limits>
#include <string>
#ifdef USE_THREADS
#include <pthread.h>
#endif
class Kmeans {
public:
// Construct a K-means object to operate on the given dataset
Kmeans();
virtual ~Kmeans() { free(); }
// This method kicks off the threads that do the clustering and run
// until convergence (or until reaching maxIterations). It returns the
// number of iterations performed.
int run(int aMaxIterations = std::numeric_limits<int>::max());
// Get the cluster assignment for the given point index.
int getAssignment(int xIndex) const { return assignment[xIndex]; }
// Initialize the algorithm at the beginning of the run(), with the
// given data and initial assignment. The parameter initialAssignment
// will be modified by this algorithm and will at the end contain the
// final assignment of clusters.
virtual void initialize(Dataset const *aX, unsigned short aK, unsigned short *initialAssignment, int aNumThreads);
// Free all memory being used by the object.
virtual void free();
// This method verifies that the current assignment is correct, by
// checking every point-center distance. For debugging.
virtual void verifyAssignment(int iteration, int startNdx, int endNdx) const;
// Compute the sum of squared errors for the data on the centers (not
// designed to be fast).
virtual double getSSE() const;
// Get the name of this clustering algorithm (to be overridden by
// subclasses).
virtual std::string getName() const = 0;
// Virtual methods for computing inner products (depending on the kernel
// being used, e.g.). For vanilla k-means these will be the standard dot
// product; for more exotic applications these will be other kernel
// functions.
virtual double pointPointInnerProduct(int x1, int x2) const = 0;
virtual double pointCenterInnerProduct(int xndx, unsigned short cndx) const = 0;
virtual double centerCenterInnerProduct(unsigned short c1, unsigned short c2) const = 0;
// Use the inner products to compute squared distances between a point
// and center.
virtual double pointCenterDist2(int x1, unsigned short cndx) const {
#ifdef COUNT_DISTANCES
++numDistances;
#endif
return pointPointInnerProduct(x1, x1) - 2 * pointCenterInnerProduct(x1, cndx) + centerCenterInnerProduct(cndx, cndx);
}
// Use the inner products to compute squared distances between two
// centers.
virtual double centerCenterDist2(unsigned short c1, unsigned short c2) const {
#ifdef COUNT_DISTANCES
++numDistances;
#endif
return centerCenterInnerProduct(c1, c1) - 2 * centerCenterInnerProduct(c1, c2) + centerCenterInnerProduct(c2, c2);
}
#ifdef COUNT_DISTANCES
#ifdef USE_THREADS
// Note: numDistances is NOT thread-safe, but it is not meant to be
// enabled in performant code.
#error Counting distances and using multiple threads is not supported.
#endif
mutable long long numDistances;
#endif
virtual Dataset const *getCenters() const { return NULL; }
protected:
// The dataset to cluster.
const Dataset *x;
// Local copies for convenience.
int n, k, d;
// Pthread primitives for multithreading.
int numThreads;
#ifdef USE_THREADS
pthread_barrier_t barrier;
#endif
// To communicate (to all threads) that we have converged.
bool converged;
// Keep track of how many points are in each cluster, divided over each
// thread.
int **clusterSize;
// centerMovement is computed in move_centers() and used to detect
// convergence (if max(centerMovement) == 0.0) and update point-center
// distance bounds (in subclasses that use them).
double *centerMovement;
// For each point in x, keep which cluster it is assigned to. By using a
// short, we assume a limited number of clusters (fewer than 2^16).
unsigned short *assignment;
// This is where each thread does its work.
virtual int runThread(int threadId, int maxIterations) = 0;
// Static entry method for pthread_create().
static void *runner(void *args);
// Assign point at xIndex to cluster newCluster, working within thread threadId.
virtual void changeAssignment(int xIndex, int newCluster, int threadId);
// Over what range in [0, n) does this thread have ownership of the
// points? end() returns one past the last owned point.
int start(int threadId) const { return n * threadId / numThreads; }
int end(int threadId) const { return start(threadId + 1); }
int whichThread(int index) const { return index * numThreads / n; }
// Convenience method for causing all threads to synchronize.
void synchronizeAllThreads() {
#ifdef USE_THREADS
pthread_barrier_wait(&barrier);
#endif
}
};
#endif

View File

@@ -0,0 +1,95 @@
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*/
#include "kmeans_dataset.h"
// #include <iostream>
#include <iomanip>
#include <cassert>
#include <cstring>
// print the dataset to standard output (cout), using formatting to keep the
// data in matrix format
void Dataset::print(std::ostream &out) const {
//std::ostream &out = std::cout;
out.precision(6);
int ndx = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < d; ++j) {
out << std::setw(13) << data[ndx++] << " ";
}
out << std::endl;
}
}
// returns a (modifiable) reference to the value in dimension "dim" from record
// "ndx"
double &Dataset::operator()(int ndx, int dim) {
# ifdef DEBUG
assert(ndx < n);
assert(dim < d);
# endif
return data[ndx * d + dim];
}
// returns a (const) reference to the value in dimension "dim" from record "ndx"
const double &Dataset::operator()(int ndx, int dim) const {
# ifdef DEBUG
assert(ndx < n);
assert(dim < d);
# endif
return data[ndx * d + dim];
}
// fill the entire dataset with value. Does NOT update sumDataSquared.
void Dataset::fill(double value) {
for (int i = 0; i < nd; ++i) {
data[i] = value;
}
}
// copy constructor -- makes a deep copy of everything in x
Dataset::Dataset(Dataset const &x) {
n = d = nd = 0;
data = sumDataSquared = NULL;
*this = x;
}
// operator= is the standard deep-copy assignment operator, which
// returns a const reference to *this.
Dataset const &Dataset::operator=(Dataset const &x) {
if (this != &x) {
// reallocate sumDataSquared and data as necessary
if (n != x.n) {
delete [] sumDataSquared;
sumDataSquared = x.sumDataSquared ? new double[x.n] : NULL;
}
if (nd != x.nd) {
delete [] data;
data = x.data ? new double[x.nd] : NULL;
}
// reflect the new sizes
n = x.n;
d = x.d;
nd = x.nd;
// copy data as appropriate
if (x.sumDataSquared) {
memcpy(sumDataSquared, x.sumDataSquared, x.n * sizeof(double));
}
if (x.data) {
memcpy(data, x.data, x.nd * sizeof(double));
}
}
// return a reference for chaining assignments
return *this;
}

View File

@@ -0,0 +1,85 @@
#ifndef DATASET_H
#define DATASET_H
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*
* A Dataset class represents a collection of multidimensional records, as is
* typical in metric machine learning. Every record has the same number of
* dimensions (values), and every value must be numeric. Undefined values are
* not allowed.
*
* This particular implementation keeps all the data in a 1-dimensional array,
* and also optionally keeps extra storage for the sum of the squared values of
* each record. However, the Dataset class does NOT automatically populate or
* update the sumDataSquared values.
*/
#include <cstddef>
#include <iostream>
class Dataset {
public:
// default constructor -- constructs a completely empty dataset with no
// records
Dataset() : n(0), d(0), nd(0), data(NULL), sumDataSquared(NULL) {}
// construct a dataset of a particular size, and determine whether to
// keep the sumDataSquared
Dataset(int aN, int aD, bool keepSDS = false) : n(aN), d(aD), nd(n * d),
data(new double[nd]),
sumDataSquared(keepSDS ? new double[n] : NULL) {}
// copy constructor -- makes a deep copy of everything in x
Dataset(Dataset const &x);
// destroys the dataset safely
~Dataset() {
n = d = nd = 0;
double *dp = data, *sdsp = sumDataSquared;
data = sumDataSquared = NULL;
delete [] dp;
delete [] sdsp;
}
// operator= is the standard deep-copy assignment operator, which
// returns a const reference to *this.
Dataset const &operator=(Dataset const &x);
// allows modification of the record ndx and dimension dim
double &operator()(int ndx, int dim);
// allows const access to record ndx and dimension dim
const double &operator()(int ndx, int dim) const;
// fill the entire dataset with value. Does NOT update sumDataSquared.
void fill(double value);
// print the dataset to standard output (cout), using formatting to keep the
// data in matrix format
void print(std::ostream &out = std::cout) const;
// n represents the number of records
// d represents the dimension
// nd is a shortcut for the value n * d
int n, d, nd;
// data is an array of length n*d that stores all of the records in
// record-major (row-major) order. Thus data[0]...data[d-1] are the
// values associated with the first record.
double *data;
// sumDataSquared is an (optional) sum of squared values for every
// record. Thus,
// sumDataSquared[0] = data[0]^2 + data[1]^2 + ... + data[d-1]^2
// sumDataSquared[1] = data[d]^2 + data[d+1]^2 + ... + data[2*d-1]^2
// and so on. Note that this is the *intended* use of the sumDataSquared
// field, but that the Dataset class does NOT automatically populate or
// update the values in sumDataSquared.
double *sumDataSquared;
};
#endif

View File

@@ -0,0 +1,256 @@
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*/
#include "kmeans_dataset.h"
#include "kmeans.h"
#include "kmeans_general_functions.h"
#include <cassert>
#include <cmath>
#include <algorithm>
#include <numeric>
#include <cstring>
#include <cstdio>
void addVectors(double *a, double const *b, int d) {
double const *end = a + d;
while (a < end) {
*(a++) += *(b++);
}
}
void subVectors(double *a, double const *b, int d) {
double const *end = a + d;
while (a < end) {
*(a++) -= *(b++);
}
}
double distance2silent(double const *a, double const *b, int d) {
double d2 = 0.0, diff;
double const *end = a + d; // one past the last valid entry in a
while (a < end) {
diff = *(a++) - *(b++);
d2 += diff * diff;
}
return d2;
}
void centerDataset(Dataset *x) {
double *xCentroid = new double[x->d];
for (int d = 0; d < x->d; ++d) {
xCentroid[d] = 0.0;
}
for (int i = 0; i < x->n; ++i) {
addVectors(xCentroid, x->data + i * x->d, x->d);
}
// compute average (divide by n)
for (int d = 0; d < x->d; ++d) {
xCentroid[d] /= x->n;
}
// re-center the dataset
const double *xEnd = x->data + x->n * x->d;
for (double *xp = x->data; xp != xEnd; xp += x->d) {
subVectors(xp, xCentroid, x->d);
}
delete [] xCentroid;
}
Dataset *init_centers(Dataset const &x, unsigned short k) {
int *chosen_pts = new int[k];
Dataset *c = new Dataset(k, x.d);
for (int i = 0; i < k; ++i) {
bool acceptable = true;
do {
acceptable = true;
chosen_pts[i] = rand() % x.n;
for (int j = 0; j < i; ++j) {
if (chosen_pts[i] == chosen_pts[j]) {
acceptable = false;
break;
}
}
} while (! acceptable);
double *cdp = c->data + i * x.d;
memcpy(cdp, x.data + chosen_pts[i] * x.d, sizeof(double) * x.d);
if (c->sumDataSquared) {
c->sumDataSquared[i] = std::inner_product(cdp, cdp + x.d, cdp, 0.0);
}
}
delete [] chosen_pts;
return c;
}
Dataset *init_centers_kmeanspp(Dataset const &x, unsigned short k) {
int *chosen_pts = new int[k];
std::pair<double, int> *dist2 = new std::pair<double, int>[x.n];
double *distribution = new double[x.n];
// initialize dist2
for (int i = 0; i < x.n; ++i) {
dist2[i].first = std::numeric_limits<double>::max();
dist2[i].second = i;
}
// choose the first point randomly
int ndx = 1;
chosen_pts[ndx - 1] = rand() % x.n;
while (ndx < k) {
double sum_distribution = 0.0;
// look for the point that is furthest from any center
for (int i = 0; i < x.n; ++i) {
int example = dist2[i].second;
double d2 = 0.0, diff;
for (int j = 0; j < x.d; ++j) {
diff = x(example,j) - x(chosen_pts[ndx - 1],j);
d2 += diff * diff;
}
if (d2 < dist2[i].first) {
dist2[i].first = d2;
}
sum_distribution += dist2[i].first;
}
// sort the examples by their distance from centers
sort(dist2, dist2 + x.n);
// turn distribution into a CDF
distribution[0] = dist2[0].first / sum_distribution;
for (int i = 1; i < x.n; ++i) {
distribution[i] = distribution[i - 1] + dist2[i].first / sum_distribution;
}
// choose a random interval according to the new distribution
double r = (double)rand() / (double)RAND_MAX;
double *new_center_ptr = std::lower_bound(distribution, distribution + x.n, r);
int distribution_ndx = (int)(new_center_ptr - distribution);
chosen_pts[ndx] = dist2[distribution_ndx].second;
/*
cout << "chose " << distribution_ndx << " which is actually "
<< chosen_pts[ndx] << " with distance "
<< dist2[distribution_ndx].first << std::endl;
*/
++ndx;
}
Dataset *c = new Dataset(k, x.d);
for (int i = 0; i < k; ++i) {
double *cdp = c->data + i * x.d;
memcpy(cdp, x.data + chosen_pts[i] * x.d, sizeof(double) * x.d);
if (c->sumDataSquared) {
c->sumDataSquared[i] = std::inner_product(cdp, cdp + x.d, cdp, 0.0);
}
}
delete [] chosen_pts;
delete [] dist2;
delete [] distribution;
return c;
}
Dataset *init_centers_kmeanspp_v2(Dataset const &x, unsigned short k) {
int *chosen_pts = new int[k];
std::pair<double, int> *dist2 = new std::pair<double, int>[x.n];
// initialize dist2
for (int i = 0; i < x.n; ++i) {
dist2[i].first = std::numeric_limits<double>::max();
dist2[i].second = i;
}
// choose the first point randomly
int ndx = 1;
chosen_pts[ndx - 1] = rand() % x.n;
while (ndx < k) {
double sum_distribution = 0.0;
// look for the point that is furthest from any center
double max_dist = 0.0;
for (int i = 0; i < x.n; ++i) {
int example = dist2[i].second;
double d2 = 0.0, diff;
for (int j = 0; j < x.d; ++j) {
diff = x(example,j) - x(chosen_pts[ndx - 1],j);
d2 += diff * diff;
}
if (d2 < dist2[i].first) {
dist2[i].first = d2;
}
if (dist2[i].first > max_dist) {
max_dist = dist2[i].first;
}
sum_distribution += dist2[i].first;
}
bool unique = true;
do {
// choose a random interval according to the new distribution
double r = sum_distribution * (double)rand() / (double)RAND_MAX;
double sum_cdf = dist2[0].first;
int cdf_ndx = 0;
while (sum_cdf < r) {
sum_cdf += dist2[++cdf_ndx].first;
}
chosen_pts[ndx] = cdf_ndx;
for (int i = 0; i < ndx; ++i) {
unique = unique && (chosen_pts[ndx] != chosen_pts[i]);
}
} while (! unique);
++ndx;
}
Dataset *c = new Dataset(k, x.d);
for (int i = 0; i < c->n; ++i) {
double *cdp = c->data + i * x.d;
memcpy(cdp, x.data + chosen_pts[i] * x.d, sizeof(double) * x.d);
if (c->sumDataSquared) {
c->sumDataSquared[i] = std::inner_product(cdp, cdp + x.d, cdp, 0.0);
}
}
delete [] chosen_pts;
delete [] dist2;
return c;
}
void kmeans_assign(Dataset const &x, Dataset const &c, unsigned short *assignment) {
for (int i = 0; i < x.n; ++i) {
double shortestDist2 = std::numeric_limits<double>::max();
int closest = 0;
for (int j = 0; j < c.n; ++j) {
double d2 = 0.0, *a = x.data + i * x.d, *b = c.data + j * x.d;
for (; a != x.data + (i + 1) * x.d; ++a, ++b) {
d2 += (*a - *b) * (*a - *b);
}
if (d2 < shortestDist2) {
shortestDist2 = d2;
closest = j;
}
}
assignment[i] = closest;
}
}

View File

@@ -0,0 +1,83 @@
#ifndef GENERAL_KMEANS_FUNCTIONS_H
#define GENERAL_KMEANS_FUNCTIONS_H
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*
* Generally useful functions.
*/
#include <iostream>
#include <string>
#include "kmeans_dataset.h"
/* Add together two vectors, and put the result in the first argument.
* Calculates a = a + b
*
* Parameters:
* a -- vector to add, and the result of the operation
* b -- vector to add to a
* d -- the dimension
* Return value: none
*/
void addVectors(double *a, double const *b, int d);
/* Subtract two vectors, and put the result in the first argument. Calculates
* a = a - b
*
* Parameters:
* a -- vector to subtract from, and the result of the operation
* b -- vector to subtract
* d -- the dimension
* Return value: none
*/
void subVectors(double *a, double const *b, int d);
/* Initialize the centers randomly. Choose random records from x as the initial
* values for the centers. Assumes that c uses the sumDataSquared field.
*
* Parameters:
* x -- records that are being clustered (n * d)
* c -- centers to be initialized. Should be pre-allocated with the number of
* centers desired, and dimension.
* Return value: none
*/
Dataset *init_centers(Dataset const &x, unsigned short k);
/* Initialize the centers randomly using K-means++.
*
* Parameters:
* x -- records that are being clustered (n * d)
* c -- centers to be initialized. Should be pre-allocated with the number of
* centers desired, and dimension.
* Return value: none
*/
Dataset *init_centers_kmeanspp(Dataset const &x, unsigned short k);
Dataset *init_centers_kmeanspp_v2(Dataset const &x, unsigned short k);
/* Print an array (templated). Convenience function.
*
* Parameters:
* arr -- the array to print
* length -- the length of the array
* separator -- the string to put between each pair of printed elements
* Return value: none
*/
template <class T>
void printArray(T const *arr, int length, std::string separator) {
for (int i = 0; i < length; ++i) {
if (i > 0) {
std::cout << separator;
}
std::cout << arr[i];
}
}
void centerDataset(Dataset *x);
void kmeans_assign(Dataset const &x, Dataset const &c, unsigned short *assignment);
#endif

View File

@@ -0,0 +1,106 @@
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*/
#include "original_space_kmeans.h"
#include "kmeans_general_functions.h"
#include <cmath>
#include <cassert>
#include <numeric>
OriginalSpaceKmeans::OriginalSpaceKmeans() : centers(NULL), sumNewCenters(NULL) { }
void OriginalSpaceKmeans::free() {
for (int t = 0; t < numThreads; ++t) {
delete sumNewCenters[t];
}
Kmeans::free();
delete centers;
delete [] sumNewCenters;
centers = NULL;
sumNewCenters = NULL;
}
/* This method moves the newCenters to their new locations, based on the
* sufficient statistics in sumNewCenters. It also computes the centerMovement
* and the center that moved the furthest.
*
* Parameters: none
*
* Return value: index of the furthest-moving centers
*/
int OriginalSpaceKmeans::move_centers() {
int furthestMovingCenter = 0;
for (int j = 0; j < k; ++j) {
centerMovement[j] = 0.0;
int totalClusterSize = 0;
for (int t = 0; t < numThreads; ++t) {
totalClusterSize += clusterSize[t][j];
}
if (totalClusterSize > 0) {
for (int dim = 0; dim < d; ++dim) {
double z = 0.0;
for (int t = 0; t < numThreads; ++t) {
z += (*sumNewCenters[t])(j,dim);
}
z /= totalClusterSize;
centerMovement[j] += (z - (*centers)(j, dim)) * (z - (*centers)(j, dim));
(*centers)(j, dim) = z;
}
}
centerMovement[j] = sqrt(centerMovement[j]);
if (centerMovement[furthestMovingCenter] < centerMovement[j]) {
furthestMovingCenter = j;
}
}
#ifdef COUNT_DISTANCES
numDistances += k;
#endif
return furthestMovingCenter;
}
void OriginalSpaceKmeans::initialize(Dataset const *aX, unsigned short aK, unsigned short *initialAssignment, int aNumThreads) {
Kmeans::initialize(aX, aK, initialAssignment, aNumThreads);
centers = new Dataset(k, d);
sumNewCenters = new Dataset *[numThreads];
centers->fill(0.0);
for (int t = 0; t < numThreads; ++t) {
sumNewCenters[t] = new Dataset(k, d, false);
sumNewCenters[t]->fill(0.0);
for (int i = start(t); i < end(t); ++i) {
addVectors(sumNewCenters[t]->data + assignment[i] * d, x->data + i * d, d);
}
}
// put the centers at their initial locations, based on clusterSize and
// sumNewCenters
move_centers();
}
void OriginalSpaceKmeans::changeAssignment(int xIndex, int closestCluster, int threadId) {
unsigned short oldAssignment = assignment[xIndex];
Kmeans::changeAssignment(xIndex, closestCluster, threadId);
double *xp = x->data + xIndex * d;
subVectors(sumNewCenters[threadId]->data + oldAssignment * d, xp, d);
addVectors(sumNewCenters[threadId]->data + closestCluster * d, xp, d);
}
double OriginalSpaceKmeans::pointPointInnerProduct(int x1, int x2) const {
return std::inner_product(x->data + x1 * d, x->data + (x1 + 1) * d, x->data + x2 * d, 0.0);
}
double OriginalSpaceKmeans::pointCenterInnerProduct(int xndx, unsigned short cndx) const {
return std::inner_product(x->data + xndx * d, x->data + (xndx + 1) * d, centers->data + cndx * d, 0.0);
}
double OriginalSpaceKmeans::centerCenterInnerProduct(unsigned short c1, unsigned short c2) const {
return std::inner_product(centers->data + c1 * d, centers->data + (c1 + 1) * d, centers->data + c2 * d, 0.0);
}

View File

@@ -0,0 +1,54 @@
#ifndef ORIGINAL_SPACE_KMEANS_H
#define ORIGINAL_SPACE_KMEANS_H
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*
* OriginalSpaceKmeans is a base class for other algorithms that operate in the
* same space as the data being clustered (as opposed to kernelized k-means
* algorithms, which operate in kernel space).
*/
#include "kmeans.h"
/* Cluster with the cluster centers living in the original space (with the
* data). This is as opposed to a kernelized version of k-means, where the
* center points might not be explicitly represented. This is also an abstract
* class.
*/
class OriginalSpaceKmeans : public Kmeans {
public:
OriginalSpaceKmeans();
virtual ~OriginalSpaceKmeans() { free(); }
virtual void free();
virtual void initialize(Dataset const *aX, unsigned short aK, unsigned short *initialAssignment, int aNumThreads);
virtual double pointPointInnerProduct(int x1ndx, int x2ndx) const;
virtual double pointCenterInnerProduct(int xndx, unsigned short cndx) const;
virtual double centerCenterInnerProduct(unsigned short c1ndx, unsigned short c2ndx) const;
virtual Dataset const *getCenters() const { return centers; }
protected:
// Move the centers to the average of their current assigned points,
// compute the distance moved by each center, and return the index of
// the furthest-moving center.
int move_centers();
virtual void changeAssignment(int xIndex, int closestCluster, int threadId);
// The set of centers we are operating on.
Dataset *centers;
// sumNewCenters and centerCount provide sufficient statistics to
// quickly calculate the changing locations of the centers. Whenever a
// point changes cluster membership, we subtract (add) it from (to) the
// row in sumNewCenters associated with its old (new) cluster. We also
// decrement (increment) centerCount for the old (new) cluster.
Dataset **sumNewCenters;
};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,79 @@
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*/
#include "triangle_inequality_base_kmeans.h"
#include "kmeans_general_functions.h"
#include <cassert>
#include <limits>
#include <cmath>
void TriangleInequalityBaseKmeans::free() {
OriginalSpaceKmeans::free();
delete [] s;
delete [] upper;
delete [] lower;
s = NULL;
upper = NULL;
lower = NULL;
}
/* This function computes the inter-center distances, keeping only the closest
* distances, and updates "s". After this, s[j] will contain the distance
* between center j and its closest other center, divided by two. The division
* here saves repeated work later, since we always will need the distance / 2.
*
* Parameters: none
*
* Return value: none
*/
// TODO: parallelize this
void TriangleInequalityBaseKmeans::update_s(int threadId) {
// initialize
for (int c1 = 0; c1 < k; ++c1) {
if (c1 % numThreads == threadId) {
s[c1] = std::numeric_limits<double>::max();
}
}
// compute inter-center squared distances between all pairs
for (int c1 = 0; c1 < k; ++c1) {
if (c1 % numThreads == threadId) {
for (int c2 = 0; c2 < k; ++c2) {
if (c2 == c1) {
continue;
}
double d2 = centerCenterDist2(c1, c2);
if (d2 < s[c1]) { s[c1] = d2; }
}
// take the root and divide by two
s[c1] = sqrt(s[c1]) / 2.0;
}
}
}
/* This function initializes the upper/lower bounds, assignment, centerCounts,
* and sumNewCenters. It sets the bounds to invalid values which will force the
* first iteration of k-means to set them correctly. NB: subclasses should set
* numLowerBounds appropriately before entering this function.
*
* Parameters: none
*
* Return value: none
*/
void TriangleInequalityBaseKmeans::initialize(Dataset const *aX, unsigned short aK, unsigned short *initialAssignment, int aNumThreads) {
OriginalSpaceKmeans::initialize(aX, aK, initialAssignment, aNumThreads);
s = new double[k];
upper = new double[n];
lower = new double[n * numLowerBounds];
// start with invalid bounds and assignments which will force the first
// iteration of k-means to do all its standard work
std::fill(s, s + k, 0.0);
std::fill(upper, upper + n, std::numeric_limits<double>::max());
std::fill(lower, lower + n * numLowerBounds, 0.0);
}

View File

@@ -0,0 +1,43 @@
#ifndef TRIANGLE_INEQUALITY_BASE_KMEANS_H
#define TRIANGLE_INEQUALITY_BASE_KMEANS_H
/* Authors: Greg Hamerly and Jonathan Drake
* Feedback: hamerly@cs.baylor.edu
* See: http://cs.baylor.edu/~hamerly/software/kmeans.php
* Copyright 2014
*
* This class is an abstract base class for several other algorithms that use
* upper & lower bounds to avoid distance calculations in k-means.
*/
#include "original_space_kmeans.h"
class TriangleInequalityBaseKmeans : public OriginalSpaceKmeans {
public:
TriangleInequalityBaseKmeans() : numLowerBounds(0), s(NULL), upper(NULL), lower(NULL) {}
virtual ~TriangleInequalityBaseKmeans() { free(); }
virtual void initialize(Dataset const *aX, unsigned short aK, unsigned short *initialAssignment, int aNumThreads);
virtual void free();
protected:
void update_s(int threadId);
// The number of lower bounds being used by this algorithm.
int numLowerBounds;
// Half the distance between each center and its closest other center.
double *s;
// One upper bound for each point on the distance between that point and
// its assigned (closest) center.
double *upper;
// Lower bound(s) for each point on the distance between that point and
// the centers being tracked for lower bounds, which may be 1 to k.
// Actual size is n * numLowerBounds.
double *lower;
};
#endif

View File

@@ -22,6 +22,11 @@
#endif
#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
#pragma GCC diagnostic ignored "-Wcpp"
#endif
/* 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 +431,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 +444,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] -

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