* Based on QSplashScreen
* Shrinking the image for low resolutions (screen width <= 1280, < 1024)
* Dynamically adding Golden Cheetahs version and build id
* Showing messages related to the current loading state (including the
current counter)
* Closing the splashscreen as close as possible to showing the MainWindow
* The image (splashscreen.svg) was created using Inkscape
.. if a ride has sport "Aero" or has "AERO" xdata then it is
identified as an aero ride file
.. isBike will now also check for isAero and return true, so
you can record aero data but the ride is still treat as a
bike ride in filters
.. string manipulation using raw C since its simple character
replacement, halved time over previous approach.
.. lookup rideitem in ridecache via binary search (lower_bound)
rather than serial. Minor speed up.
.. Overall, loading should be noticeably quicker for most users.
.. introducing the athlete view
.. at startup the first athlete is loaded as normal, but once the
mainwindow is open the athletes are managed from the athlete view
.. athlete ride cache restore happen in background (via a thread) to
enable the GUI to remain responsive whilst it takes place (since
for most non-trivial cases it can take 30 seconds or more).
.. multiple mainwindows has been deprecated and whilst each open
athlete is selected via a tab, this will change to a combobox
in later commits.
.. the tiles in the athlete view do very little apart from show the
avatar and progress/load status when an athlete is being loaded.
.. future commits will introduce more detail and actions for the
athlete tile and deprecate the athlete tab bar for a combo on
the toolbar (amongst other things).
Exiting isRun/isSwim are preserved and new isRide/isXtrain added.
Use them in DataFilter to provide isRide, isRun, isSwim and isXtrain
and in RideSummary for better filtering of activities in rides, runs
swims and xtrains.
Part 1 of #3280
Since counts are relevant for averaging them between different rides.
Required to fix the issues when aggregating Time in Zones Percentages.
The previous solution worked until you exit GC since when the RideDB
was reloaded the counts with zero values were lost.
.. allow the user to set a flag "Performance Test" against an interval
within an activity.
.. the distinction is needed to highlight the section of an activity
that was a test (as opposed to the entire activity containing
test efforts.
.. this is so we can fit them to PD and IR models in the future
avoiding the need to use algorithms to extract TTE type efforts.
.. the update was surprisingly complex since we need to update the
ridefile to record this with the interval and also update the
ride cache as well as adding the bool to all the interval helper
functions.
.. along the way it became clear why user specified colors for
intervals were getting lost (they are not in the ridefile) and
will fix this in another post.
.. NOTE: ridefiles created with this version will not be backward
compatible with earlier versions because they contain a
new field for intervals marked as performance tests.
.. were skipped when writing the ridecache file, so lost on restart!!
.. also now fix a refresh with new user metric version, almost certainly
not needed but better to be safe than sorry.
.. the ride cache writer will write opendata format files
when passed the right parameters.
.. the file does not contain PII or user metadata or sample
level data.
.. instead it contains metrics as well as distribution and
mmp summary level info for Power, HR, Cadence and Speed.
.. Leif Warland is developing the HRV metric support
and some of these are std deviations. When you
aggregate std deviations the mean and variances
are needed.
.. RideMetric::stdmean() and ::stdvariance() return
a value that is stored in the RideDB if it is
non-zero.
.. RideItem::getStdMeanForSymbol()
RideItem::getStdVarianceForSymbol
return the stored value for use when aggregating in
the same way that RideItem::getCountForSymbol() does.
.. the RideMetric::count() value is written to the ride
cache (rideDB.json) if it is non-zero.
.. it is not used in the aggregation logic yet, but the
rideDB version number has been incremented to force
a rebuild on first run.
.. Filter rides for presence of XDATA by name using the syntax:
XDATA("XDATANAME", "SERIESNAME", sparse|repeat|interpolate|resample)
.. this is the first of 2 commits, in this one we have added XDATA to
the rideitem and rideDB.json so we can check if XDATA is present
without opening the ridefile
.. this allows us to return true or false for an XDATA(..) call when
working across rideitems (not data points) in DataFilter evaluate,
note that the join control (sparse,repeat etc) is ignored when you
are filtering ride items
.. in the next commit we will add the ability to get at the xdata
values when iterating in user data or user metrics
.. there are likely to be further refinements for the outer join
required to support interpolation and resampling in a third commit.
Introducing a directory structure to make it a bit less
daunting for new developers and perhaps even old hands.
The main folders all start with an upper character, so src
files are now located in;
* Core - Core data structures
* Gui - Main GUI elements
* Metrics - Models and Metrics
* FileIO - Device and File I/O
* Charts - All the chart types
* Cloud - Working with Web Resources
* Train - Anything Train View specific
* ANT - Our ANT+ Stack
* Resources - Images, Translations, Web etc
Apologies to anyone who needs to merge across this update.