RouteWindows has beeen inactivated for years,
Replaced by a more flexible Python chart added
to default layout.
Required Jinja2 package added to included Python.
[publish binaries]
* New chart to visualize the adherence to the current plan
* Allowing retrospective analysis of behavior: Shifted, missed,
completed, unplanned activities
* Grouping is always on a monthly basis
[publish binaries]
Python is moved to 3.11 and packaged in Appveyor. This version is a good spot in the lifecycle.
Packaged SIP at the current version, I needed this to get around some of the reparsing that was required.
Eventually this will break but make -f Makefile.SIP likely creates a new build, we should do this at
every "major" release. Unfroze the rest so it can move freely.
Add iterator support to GoldenCheetah container data types in Python. This avoids the Pandas regression that held us back.
Added code signing for MacOS as this was a requirement to run my local binaries and unfortunately needed to rewrite the build.
This puts us at a good jumping off spot for building a universal Mac binary but there's a lot of work left.
A user reported having severe performance issues on macOS Tahoe
with v3.8-DEV2601 not present when using v3.7-sp1
Besides 6.5.3 is LTS and 6.6.1 is deprecated, so lets play safe
until we can upgrade to 6.8.3
* list all (non-zero) fields and metrics
* filter list by field / metric name
* select an operator per field (ignore, equals, contains, larger than, ...)
* available in the context menus of activity- and calendar view
In GenericSelectTool::moved, inside the XRANGE mode handling:
Remove pointsVector() call which copies all data.
Implement a binary search using count() and at()
methods of QXYSeries (base of QLineSeries).
This changes complexity from O(N) copy + O(log N) search to O(log N) search only (assuming at() is O(1)).
Fixes ##4442
* Improve the build speed by 2-3X by using PCH. This avoids rebuilding large parts of QT and C++ std headers over and over.
* Unfortunately QMake is too opinionated for this to work on macOS so it is used on Windows and Linux only.
* Remove qwindowsvistastyle.dll opengl32sw.dll from QT6 as they're not needed.
* Revert fa84a37 since we don't need it anymore.
* New chart: Agenda
* Removed the agenda from the calendar chart
* Reworked the agenda
* Separate panes for activities, phases, events
* Phases and events can be edited from this chart
* Showing descriptions of activities and events (optional)
* TimeUtils: New functions to convert days to weeks or months for user
friendly UIs
* EditPhaseDialog: Enforcing from-date < to-date
* Hack: Since ids of events are not filled, matching them by comparing
all available fields when selecting the instance to edit
* Read-only view to show
* missed planned activities (configurable number of days to look back)
* todays planned activities, phases and events
* upcoming planned activities, phases and events (configurable number
of days to look ahead)
* Color of planned activities is now user configurable (coming from
global color theme)
* Added a hint to show whether a filter is active (all calendar views)
* Configuration: Reorganized in tabs
* Refactoring: Created enums for all user roles used in the calendar
(all views, all delegates) to improve readability; removed data that
was only written but never read
* New dialog Options > Data Fields > Icons
* New IconManager to centrally assign icons (svg only) to Sport / SubSport
* Removed all material symbols due to license incompatibility
* Using IconManager in PlanningCalendarWindow and ManualActivityWizard
* Added dialog to repeat planned workouts
* New Wizard to select planned workouts based on past timerange
* Implemented simple conflict resolution strategies (remove all
preexisting, skip days with preexisting, fail)
* Create new planned activities based on the selected, past ones
* Created new Trends-Chart "Planning Calendar"
* Added supporting tools to Colors
* Added notification about changed season
* Updated ManualActivityWizard to optionally take the date as parameter
* Added some new icons for the calendar
* Reading normalized sport from RideItem
* Showing all events from all seasons
* Added chart-setting to configure the first day of the week
* Added chart-setting to show / hide the summary column
* Updated the appearance of planned workouts (orange icon with no background)
* Setting a pixmap next to the cursor while dragging an activity
* Added a weekly summary
* Summary and entries can be configured in chart-settings
* Replaced some material icons (phases, events, generic sport) with
ones from breeze (https://github.com/KDE/breeze-icons)
* Updated the calendar-navigation-header
* Minor visual updates (no orange icons on blue selection, ...)
* Always showing subsport when creating a completed / planned activity
* Added "Show in Train Mode..." to Calendar
* Transformed the dialog into a wizard
* Only allowing activities in the past
* Considering the sport for estimations and shown metrics
* Added TriScore and SwimScore
* Removed Daniel Points, Notes and Average Speed
* See https://groups.google.com/g/golden-cheetah-users/c/Yz8g2J1Ue6w/m/6u0UAfSRAgAJ
* Added illustrative icons and page-titles
Source of the icons: https://github.com/Templarian/MaterialDesign-SVG
License: Apache 2.0 (https://github.com/Templarian/MaterialDesign-SVG?tab=License-1-ov-file)
* Added a margin around the icons
* Added machine generated translations
* Only translated for languages with latin alphabet
* Used DeepL for the translation, therefore did not mark translations as
complete
* Added rpe and notes
* Additional: Moved svgAsColouredPixmap to Colors.[h|cpp]
* Coloring the entries in the RPE-combobox
* Renamed files ManualRideDialog.* to ManualActivityWizard.*
* Added manager for named workout filters
* Including a tag-browser
* Changed behaviour of WorkoutFilterBox from editingFinished to
returnPressed for consistency with SearchFilterBox and to prevent
parallel execution of the update-slot (resulting in segv)
* WorkoutFilterBox: The clear-button updates the filtered list
* Repainting when changing the visibility of the error icon
Now the search/filter box in the toolbar depends on the active view:
- No search/filter box for Athletes view
- Activities search/filter box for Activities/Trends/Diary views
- Workout filter box for Train, view styled like SearchBox
and applied when editing finished
Fixes#4591
* Created a new class ActionButtonBox, similar to QDialogButtonBox to
reduce code duplication when adding footers (add/delete, up/down) to
QTreeWidgets
* Created a new QStyledItemDelegate for inline editing of lists
* Highlighting the current category (General, Appearance, ...)
* Using the same reset button for Appearance and Measures that is hidden
in all other categories
* Using the same style and behaviour as in athlete settings for all
QTreeWidgets
* Using QFormLayout as much as possible, introducing additional support
for the setting Mac styled Forms
* General: Reordered the settings, grouped them and added a (optional)
scrollbar
* Data Fields
* Fields
* Enabled inline editing
* Added autocompletion to Screen Tab
* Added a uniqueness validator to Field
* Added the list-delegate to Values
* Colour Keywords: Added the list-delegate to Related Notres Words
* Defaults: Added autocompletion to Field and Linked field
* Metrics
* Swapped the tab order
* Favourites
* Made the lists wider
* Moved the up-/down-buttons below the Favourites list
* Training
* Swapped the tab order of Preferences and Train Devices
* Remote Controls
* Switched to inline editing
* Made the Action non-editable
* Virtual Bicycle Specifications: Redesigned the dialog
Settings
* About
* Show the athletes name
* Mask the avatar-image as a circle
* Model
* Add button to revert to defaults
* Auto Import
* Use inline editing
* Backup
* Add a "Backup now"-button
Create new athlete
* Rename NewCyclistDialog to NewAthleteWizard and turned it into a
2-page wizard
* ChooseCyclistDialog: Open the NewAthleteWizard without interaction
if no athlete is available
Common
* Avatar image
* Use Qt::SmoothTransformation for improved quality
* Crop to the center of the original image
* Keep aspect ratio of the original image
* All forms: Use QFormLayout to simplify the code and provide a
desktop aware layout
* Switch to QDialogButtonBox for a button order aligned with the
desktop
Centralized creation of QFormLayouts
* Added option to use either system-style or mac-style for QFormLayouts
Fixes#4512
* Added additional time range options for user defined seasons
* Relative start (e.g. 3 months ago)
* Duration after start / Duration before end (e.g. 2 months)
* Year to Date end, defining the end as the closest day with todays
day and month after start
* Refactored Season.h/cpp and SeasonParser.h/cpp for better testability
* Kept Season, Phase, SeasonEvent, SeasonOffset, SeasonLength in
Season.h/cpp
* Moved all UI related classes to SeasonDialogs.h/cpp
* Renamed SeasonParser.h/cpp to Seasons.h/cpp, moved class Seasons
there
* Replaced deprecated Qt classes
* Replaced QRegExp by QRegularExpression in SeasonParser
* Rewrote parsing seasons.xml to use QXmlStreamReader instead of
QXmlSimpleReader
* Unittesting
* Added a simple way to implement and execute (make check) unittests
in Golden Cheetahs source tree based on Qt Test
(https://doc.qt.io/qt-6/qttest-index.html), tested on Linux and
Windows
* Implemented unittests for classes (mostly before refactoring)
* Season
* SeasonParser
* SeasonOffset
* Added support for the TrainerDay workouts/find API
* Added a new (optional) tab to the TrainerDay workouts download dialog
* Deferring loading of the classic list of workouts until this tab is
activated
* Implemented the API for TrainerDays /workouts/find (see
https://api.trainerday.com/api-explorer/)
* Visualizing the workouts using a colored ErgFilePlot
* Modified ErgFilePlot::setData to directly use the data of the given
ErgFile instead of falling back to the ErgFile set in the context
(required to display multiple plots at once)
* Added a simplified version of the existing workouts query sytnax
(supported verbs: duration, dominantzone)
* Saving the workouts as trainerday-<hash>.erg
* Using the segments-section as input for the hash and to identify
duplicates
* Functionality can be enabled in gcconfig.pri (GC_WANT_TRAINERDAY_API)
* Prepared the travis-scripts before_script.sh to inject the API key to Secrets.h
* Prepared appveyor.yml to inject the API key to Secrets.h
* Patching GC_TRAINERDAY_API_PAGESIZE for appveyor
* Configured api key for TrainerDay in appveyor
* DialWindow: Scaling font in both dimensions
Currently the font in DialWindow is only scaled to make the text fit
into the label vertically. This commit scales the font in both
dimensions and prevents cutting off the content.
The font is rescaled
* If the DialWindow itself is resized
* If the text set and is longer than the previous one
* Every 10 text-changes
* Trainmode: Added a global setting to finetune telemetry font scaling
* Added option to Options -> Train -> Preferences for configuring the
font scaling strategy of Telemetry / DialWindows
* "Height only" (default, as before)
* "Height and width"
* Changed the layout of this Page to QFormLayout to match the other
Pages
Added support to
* filter workouts by multiple metrics
* rate and tag workouts
* view detailed information about the selected workout
* Preserving user-content in trainDB on rescan for workouts
Fixes#411
Currently the font in DialWindow is only scaled to make the text fit
into the label vertically. This commit scales the font in both
dimensions and prevents cutting off the content.
The font is rescaled
* If the DialWindow itself is resized
* If the text set and is longer than the previous one
* Every 10 text-changes
* 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
Allows to download Strava routes as GPX files automatically imported as workouts.
To access to private Routes it is necessary to grant read_all permission at authorization
time, existing Strava users need re-authorization.
Downloaded files are named as Strava-Route-id-RouteName.gpx
Adapts the build system to accept Qt6 and enable testing.
It accounts for webengine rename to webenginequick.
It further drags in qtcore5compat, which provides QRegExp,
QXmlInputSource, and QXmlSimpleReader. Those classes are not
part of Qt6, but they are provided in qtcore5compat to reduce
the porting effort in projects like GoldenCheetah.
Minimum supported version is Qt 5.15 now
This commit is based on https://github.com/GoldenCheetah/GoldenCheetah/pull/3956
with the following additions / changes:
* Upgraded to the latest version of the multiaxes-branch, thus eliminating crashes of GoldenCheetah on startup
* Disabled the emitting of Layout Requests on geometry changes of QwtScaleWidget - without this, CPU utilization was up to 100% on one core
* Added the class SplineLookup, reusing small portions of code from Qwt 6.1
* Re-added the splines in WPrime and RideFile (resampling), using the new interface of QwtSpline
* Appveyor: qwt in cache-section now depends on qwt/qwtconfig.prin.in for refresh on version change
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>