Commit Graph

640 Commits

Author SHA1 Message Date
Alejandro Martinez
f89e8bbb74 Deprecate RouteWindow and add Segments chart
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]
2026-03-30 15:02:24 -03:00
Joachim Kohlhammer
bbf4722ef2 New chart: Plan Adherence (#4836)
* 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]
2026-03-09 16:34:14 -03:00
Magnus Gille
2eaf1bccc1 Upgrade Python, Pandas, and SIP versions (#4747)
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.
2026-01-29 12:11:45 -03:00
Alejandro Martinez
686f4310f9 Revert to Qt 6.5.3 for macOS builds
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
2026-01-17 18:24:32 -03:00
Joachim Kohlhammer
a00e27638f Dialog to build filter queries for similar activities (#4805)
* 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
2026-01-17 14:36:34 -03:00
Alejandro Martinez
beede09500 Deprecate VeloHero integration
The service is being shutdown.
Fixes #4782
2026-01-04 16:38:02 -03:00
Alejandro Martinez
c6c5ff0bac Remove deprecated macextras
Removed from Qt6 and we don't support Qt5 anymore
2026-01-04 16:32:18 -03:00
Paul Johnson
f3d50c4f3a Remove unused httpsession and httpsessionstore from build (#4785) 2026-01-04 14:28:56 -03:00
Alejandro Martinez
b0b65e4e1f Update minimum Qt version 6.6.1 recommended 6.8.3 2025-12-21 21:35:44 -03:00
Paul Johnson
c67d913f11 Deprecate QT5 support (#4751)
* Remove Qt5 Compatibility
* Remove QT compiler directives < QT6.5.3, set QT6.5.3 as minimum GC version
* Remove references to QT5 Video
Fixes #4750
2025-12-18 10:37:55 -03:00
Paul Johnson
4488b6e4f4 Rebrand Diary View to Plan View (#4690)
It shares Trends sidebar minus the charts library.
Initially hosting Calendar, Agenda and Expected PMCs.
Let's see how it works and evolve.
2025-12-13 19:06:31 -03:00
Magnus Gille
0207eddaae Optimization of User Chart Hover Performance (#4748)
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
2025-12-13 15:43:45 -03:00
Magnus Gille
bf20980dd1 Improve the build speed by 2-3X by using PCH (#4746)
* 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.
2025-12-10 15:38:29 -03:00
Joachim Kohlhammer
bcf486cfc3 Moved the agenda to a dedicated chart (#4740)
* 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
2025-12-08 10:00:27 -03:00
Joachim Kohlhammer
5e5f4af72f Renamed PlanningCalendar to Calendar (class and label) 2025-11-19 20:18:41 -03:00
Joachim Kohlhammer
84d7272f6d Calendar: Agenda View (#4727)
* 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
2025-11-10 12:08:27 -03:00
Joachim Kohlhammer
f84f9a410e Added a day view to PlanningCalendarWindow (#4704)
* Reusing the existing configuration
* Linked from days in month view to the more detailed view
* Fixed color setting after construction
2025-09-15 22:08:35 -03:00
Joachim Kohlhammer
be55156336 Global config dialog to assign icons to Sport / SubSport (#4695)
* 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
2025-09-06 09:49:40 -03:00
Joachim Kohlhammer
a1ddf9b8e0 New dialog to repeat planned workouts (#4692)
* 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
2025-09-05 20:19:11 -03:00
Alejandro Martinez
b7429db207 Deprecate DiaryWindow
Old calendar is replaced by the new Planning Calendar
2025-08-18 19:15:01 -03:00
Joachim Kohlhammer
49cbe3db0c New monthly calendar (#4679)
* 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
2025-08-18 18:53:34 -03:00
Joachim Kohlhammer
e099e89d76 Reworked the dialog for manually creating activities (#4656)
* 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.*
2025-06-23 19:32:44 -03:00
Paul Johnson
55f95e594c Overview Metric Tile - support for metric overrides (#4649)
Use italics for overrides
2025-06-16 10:55:25 -03:00
Alejandro Martinez
19b6bf8f77 Deprecate QUICKTIME and AV support
They are not working from long time ago, VIDEO options
for macOS now are the same as for Linux and Windows.
2025-03-18 10:16:45 -03:00
Peret
8eb96b2d63 Elevation chart as a new widget for train window (#4620)
It shows a short term view of the slope during a slope workout.
2025-03-04 08:08:24 -03:00
Joachim Kohlhammer
e909fad85a Named workout filters (#4614)
* 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
2025-02-05 20:39:01 -03:00
Alejandro Martinez
9cf362559e Move workout filter to the toolbar (#4596)
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
2025-01-24 15:48:26 -03:00
Joachim Kohlhammer
80ba6ea06a Reworked the Options-Dialog (#4578)
* 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
2024-12-09 19:46:35 -03:00
Joachim Kohlhammer
c86b5a6be9 Harmonize the layout of athlete settings (#4562)
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
2024-10-29 09:49:19 -03:00
Paul Johnson
8aea1cfed6 Editable metadata tile (#4519)
* New edit icon on metadata tiles that have editable content
* New metadata dialog
* Ensure metadata dialog remains within GC window
2024-10-20 15:02:30 -03:00
Joachim Kohlhammer
9242f724db Implemented user defined relative date ranges (#4534)
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
2024-09-27 11:25:03 -03:00
Joachim Kohlhammer
ef716f8568 Added support for the TrainerDay workouts/find API (#4522)
* 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
2024-07-24 12:01:14 -03:00
Joachim Kohlhammer
ad6a0c30e2 Dialwindow font scaling (v2) (#4511)
* 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
2024-06-13 13:11:30 -03:00
Alejandro Martinez
fb768969ee ErgDB is now TrainerDay
Fixes #2963
2024-06-03 17:16:57 -03:00
Joachim Kohlhammer
77df5b372c Train View: Improved the selection of workouts (#4400)
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
2024-05-20 13:57:58 -03:00
Alejandro Martinez
f6237e02c4 Revert "DialWindow: Scaling font in both dimensions (#4469)"
This reverts commit 63a14d0edf.
2024-05-07 10:24:24 -03:00
Joachim Kohlhammer
63a14d0edf DialWindow: Scaling font in both dimensions (#4469)
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
2024-05-06 20:40:16 -03:00
Joachim Kohlhammer
8718974722 Added a graphical splashscreen (#4468)
* 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
2024-04-08 11:34:55 -03:00
mattipee
159804284a Download Strava Routes as Workouts (#3413)
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
2024-03-23 18:12:54 -03:00
Alejandro Martinez
e3ad77e9c6 Remove levmar dependency
It is not being used
2024-03-19 16:36:34 -03:00
Alejandro Martinez
642eae96cb Deprecate Today's Plan integration
Fixes #4450
2024-03-02 19:02:30 -03:00
Alejandro Martinez
ecdfe0c4e2 Deprecate export to KML files
Related to #3983, see discussion there for the rationale.
2024-03-01 15:22:29 -03:00
Damien Grauser
b47b72b013 QT6 : no more macextras 2024-01-18 13:31:43 +01:00
Andreas Buhr
0c5e4435b3 Qt6: adapt build system to accept Qt6 (#3949)
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
2024-01-12 22:10:58 -03:00
Joachim Kohlhammer
49cf6340a4 Upgraded Qwt to 6.2 (branch: qwt-multiaxes) (#4427)
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
2024-01-06 18:59:55 -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
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
DanielZelei
a808b68ad7 Add new cloud service provider - Azum 2023-03-13 09:08:53 +00:00
Alejandro Martinez
7b44eaa7a8 Deprecate Google Drive and Calendar due to changes in OAuth
Fixes #4259
2022-08-24 18:55:44 -03:00