11307 Commits

Author SHA1 Message Date
jgpallero
0f5314dc65 Update Spanish translation (#4861) 2026-04-11 20:05:46 -03:00
Joachim Kohlhammer
77aea55daf Fixes for repeast schedule reported on the list (#4860)
See https://groups.google.com/g/golden-cheetah-users/c/_ljv8-9VnbY/m/6N-U7NjRAwAJ
* Fixed allowed date ranges after selecting a season / phase
* Actions on the reported crash:
  * Prevent COW detach race in RideCache::save(): Capturing
    item->metrics() and item->counts() as const references
  * Additional (preexisting typo? RideCache::save() line 811):
    Using index instead of i to reference elements in item->count()
    consistent with other arrays
* Fixed a possible crash by disconnecting a signal on cleanup
* Fixed preselection and highlighting of seasons and phases
2026-04-08 16:39:30 -03:00
Paul Johnson
31653d8534 Avoid Import perspective lockup (#4858)
When a wrong perspective file is imported into a view
2026-04-07 16:24:08 -03:00
Alejandro Martinez
11ce6f8f72 DataFilter vectors - vectorize = <> < <= > >= operations
Similar to b24869e for relational operators
Fixes #4856
2026-04-06 19:08:59 -03:00
Alejandro Martinez
efe680c9a5 Avoid crash on bad chart.xml
An example reported at the users forum shows
lcoung can be negative leading to a crash.
2026-04-04 11:38:08 -03:00
Alejandro Martinez
d313103e2f Add isPlanned to DataFilter autocompleter
Also restore planned functionality for backward compatibility,
being a special field it is already present in autocompleter.
[publish binaries]
2026-04-02 13:01:58 -03:00
Paul Johnson
0eb913e7b6 Correct startup view analysis to activities (#4855) 2026-04-02 09:03:42 -03:00
Alejandro Martinez
2ef87c9ed5 Trigger v3.8-DEV2603
VERSION 3.8 DEVELOPMENT MAR 2026
[publish binaries]
snapshot
2026-03-31 20:41:44 -03:00
Alejandro Martinez
ff4f46ed91 Trigger v3.8-DEV2603
VERSION 3.8 DEVELOPMENT MAR 2026
v3.8-DEV2603
2026-03-31 19:25:30 -03:00
Joachim Kohlhammer
30a9155b20 Reworked the repeat schedule wizard (#4850)
* Simplified design and concept
* Sticking closer to the original schedule
* Added option to keep gap days (front and back)
* Added option to use originally planned dates
* Removed options to insert rest days or spread same day activities
* Improved source range preselection
2026-03-31 11:48:55 -03:00
Joachim Kohlhammer
e30ce69ef2 Calendar summary was missing homeFilter (#4853)
Calendar summary only used filter, not homeFilter, thus showing wrong
values. This fix adds support for both filters
2026-03-30 19:32:52 -03:00
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
Alejandro Martinez
753758f893 Don't update intervals when metadata changes
It may be to expensive in some cases making the
user interfase too slow when updating fields
for little benefit, intervals are updated on save.
2026-03-29 13:16:37 -03:00
Joachim Kohlhammer
c4a78cea28 Highlighting linked activities in last row (#4852)
Fixed a off-by-one-error when highlighting linked activities on click.
This error missed linked activities in the last row of the month view.

Additional: Measure-dialog in day view automatically focuses the first
field and selects its content. This saves a click and manual deletion
of content when adding or editing data.
2026-03-29 13:16:08 -03:00
Alejandro Martinez
20ebbfdd9b RouteParser - Use 11 significant digits for lat/lon (#4849)
To match how lat/lon are stored in JSON files increasing precision on route discovery.
2026-03-28 16:38:09 -03:00
Joachim Kohlhammer
1675464d47 Excluding planned future but linked activities from expected load (#4851)
Status Quo: When executing a planned activity early, its load is counted
twice: Once from the planned activity (future), once from the actual
activity (past)
This fix excludes such planned activities from calculation (while
keeping unlinked ones)
2026-03-28 13:55:30 -03:00
Paul Johnson
ad84a58920 Athlete View's tiles functionality (#4815)
AthleteView
- The original structure has been retained, with numerous additions/changes
- New AthleteCard placement, now takes the first available space, supports the dragging of tiles and prevents overlapping issues
- The currently selected athlete's card is now highlighted
- Athlete switching via avatar click
- New buttons, delete, backup,etc
- New actual activity, planned activity & unsaved activity figures
- The first opened athlete can now be closed
- New button state and label management code
- Most events are now registered once on the AthleteView, which updates the athlete cards, this is required as some actions update other cards, like the change of the selected athlete.

MainWindow
- Close button is re-enabled in the tabbar.
- To allow the closure of the initial (bootstrap) athlete, no signals, events or similar can be attached to the athlete's context that have a lifetime greater than the athlete (now it can be closed). I have reviewed all uses of the bootstrap context within MainWindow and have modified a number of classes to ensure they don't use or store the bootstrap context, or in the case of the searchbox they are updated when the selected athlete changes.
- The actionPlan start & stop handlers cannot be connected to the bootstrap athlete now, and it probably wasn't right if more than one athlete is open and the bootstrap isn't the current athlete, so now these are attached to global context events, and these are triggered by the currently selected athlete context events, see context.h.
- The tabbar self generated events are now blocked when an athlete is being closed, as this led to multiple athlete selections ( I think this maybe an existing GC issue), this generated unwanted events when the current athlete was switched and the old athlete was removed from the tabbar, see athleteTabbarChange(). This was the issue that took time to track down.
- The WebEngine paths are initialised, see PR: #4824
- Removed the unused no parameter version of closeAthleteTab()
- Removed the commented out MAC code in switchAthleteTab, I couldn't see its relevance
- Removed the comment about needing a mechanism to show unsaved rides, the unsaved button on the AthleteCard provides the overall number, so I think this sort of addresses this issue.
- Moved the New Athlete option from the Athlete->Open sub menu to be a top level Athlete->New Athlete option, I think this aligns with the usual new, open, close options in other applications

NewSideBar
- This class no longer requires the bootstrap athlete context to register for configChanged() events, and it probably wouldn't have received configChanged() events when another athlete was the current athlete. It now uses the global configChanged() event.

RideImportWizard, MainWindow & SaveDialogs
- A number of the warning dialogues now indicate which athlete they relate to, to help understanding when they opened/closed quickly.

Library
- Library was being passed the bootstrap athlete context, but was only ever extracting the gcroot path from it

ChartSpace
- Removed the athlete context held in GraphicsView, as it was only ever using MainWindow pointer, so it now has a mainwindow pointer, as its athlete context could now be deleted.

OverviewItems
- Changes to the chart space item buttons to allow the background colour to be changed.

CloudService
- Context protection in case it is deleted whilst the thread is running in the background

LTMSidebar
- Removed the initialised and unused maxLength variable
[publish binaries]
2026-03-21 18:54:24 -03:00
Joachim Kohlhammer
19ad8699d3 Fix disappearing userchart content when changing the type (#4848)
Removing the explicit copy-constructor and operator= from
GenericSeriesInfo introduced by #4841.
Instead setting user1-4 explicitly to nullptr when duplicating a series.
[publish binaries]
2026-03-21 07:49:38 -03:00
Alejandro Martinez
7437e82a5f Change Planned to isPlanned in DataFilter
Since isPlanned is more consistent with other functions s.t.
isRun, isSwim, etc. Planned function was introduced by #4670
but it is intended to be used starting with v3.8 Planning features.
2026-03-18 10:29:39 -03:00
Joachim Kohlhammer
961456ff19 Calendar: New option to hide planned activities from summary (#4843)
* Options:
  * Include all planned activities
  * Include no planned activities
  * Include upcoming planned activities
  * Include upcoming or missed planned activities
* Tooltip shows if an activity is skipped in the summary
* Added new filter type to Specification
[publish binaries]
2026-03-14 19:36:39 -03:00
Joachim Kohlhammer
5a13b7d6a4 Userchart: New action to duplicate a series (#4841)
On User Charts
2026-03-14 18:33:03 -03:00
Joachim Kohlhammer
5b10ab1288 Using real path (/activities / /planned) for batch export (#4840)
Otherwise export of planned activities fail.
2026-03-14 14:40:45 -03:00
Joachim Kohlhammer
d7167b1cbf Plan activity: Allow to enter Workout Code (#4842)
Similar to "Log activity".
2026-03-14 12:38:42 -03:00
Joachim Kohlhammer
b5a85f313b Addressing crashes reported on the users list (#4839)
See https://groups.google.com/g/golden-cheetah-users/c/tn5TirOOVdk/m/MKYMpsdMAQAJ
Plus a crash in PlanAdherenceWindow
2026-03-13 16:16:05 -03:00
Alejandro Martinez
12d67dd79f Revert "Combine view indexes and view relevance definitions into single enumerated type (#4795)" (#4838)
This reverts commits b716c547cd and 9087c0df99.
It is a problematic non-functional refactoring which doesn't account
for the impact on external representation of the changed
index, the first problem detected was fixed in the complementary
commit but it also breaks chart import/export and likely other
functionality without a clear benefit.
I should not have merged it, sorry for the inconvenience.
[publish binaries]
2026-03-12 15:40:08 -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
Joachim Kohlhammer
d813585927 Crashes related to seasons (#4834)
* Added safeguards
* Blocking signals during construction
* DateRange no longer inherits from QObject since signal 'changed' was nowhere connected in the codebase
* Safeguards when dragging seasons; preventing phases from being dragged
* Preventing the use of dangling pointers when creating a new season
[publish binaries]
2026-03-07 11:02:36 -03:00
Joachim Kohlhammer
1d37396334 Using QObject as baseclass for ICalendar (#4837)
As ICalendar is not a real UI class and is never added to any layout, it
overlays the menubar, preventing opening the first two entries. Using
QObject instead of QWidget as superclass fixes this issue
2026-03-07 09:46:46 -03:00
Alejandro Martinez
1d61643a0b Activity Chart - TCore can be derived from HR
Use of TCore from XDate was introduce by #4207, but when it is not
available it is still derived from HR, so we need to enable Show TCore
in both cases.
Fixes #4832
2026-03-04 19:44:38 -03:00
Paul Johnson
b716c547cd Revert to previous startup view configuration values (#4830)
Fixes issues caused by #4795
[publish binaries]
2026-02-26 16:39:59 -03:00
Paul Johnson
2834b29167 Startup tiled view display fix (#4829) 2026-02-26 16:38:34 -03:00
Alejandro Martinez
58c5f75c7a AppVeyor - remove dmg upload to temp.sh
It may timeout and we don’t need that in master, it can be added to PRs when necessary.
2026-02-16 09:02:00 -05:00
Magnus Gille
3d54fb799c Clean up the AppVeyor Mac build and package OpenSSL (#4825)
So it's easier to install new packages without system Python
[publish binaries]
2026-02-11 22:51:31 -03:00
Alejandro Martinez
f502c1ab80 AppVeyor - move embedded Python to after_build.sh
Like for the Linux case it is not necessary for building,
only to create the Windows installer
2026-02-10 14:20:41 -03:00
Paul Johnson
6acfbabdd3 Fix the WebEgine data path warning (#4824) 2026-02-10 13:36:26 -03:00
Alejandro Martinez
950fe84922 Update snapshot builds
Changes from v3.8-DEV2601
3b5ec90 Fix bug in RideMetadata
9087c0d Combine view indexes and view relevance definitions into single enumerated type (#4795)
a0fe8af Planned activities: Keeping track of original date (#4822)
31d8708 Fix default Plan layout
a124799 AppVeyor - Refactor Windows build scripts (#4820)
d8b10fe Cloud Service creates unnecessary GlobalContext instances (#4823)
40db2bc Standardize how the config is created for releases. (#4784)
6ab9950 AppVeyor - run lupdate on Windows
a36f527 Copy & Paste for planned activities on calendar (#4819)
dfd932d Fit file import - don't crash on malformed files
2eaf1bc Upgrade Python, Pandas, and SIP versions (#4747)
b00d3b7 Update German translation
4db88fa Update translation files
663526c Choose cyclist default to no avatar (#4814)
f6d4f6a Using "actual activity" instead of "completed activity" (#4813)
253b220 Add Zoomed Elevation Widget to Graphical Meters For simulation workouts without GPS data
b0d16d1 Add reconnect attempt timer after BT40Device unexpected disconnect (#4812)
c85da47 Fix typo in Nonzero Average Power description
07e673d Selectable show/hide planned activities (#4811)
1a4dd1d Updated Time Range context menu (#4808)
a00e276 Dialog to build filter queries for similar activities (#4805)
749a21d Train mode: Improved readability for ErgFilePlot (#4806)
3e8c6fe Updating power values of planned activities with linked workouts (#4799)
1c69798 Fix Edit menu disappearing when changing languages on macOS (#4797)
[publish binaries]
2026-02-07 17:24:52 -03:00
Alejandro Martinez
3b5ec9043d Fix bug in RideMetadata
Detected in #4769 and introduced by 43b8ed7
2026-02-07 09:49:52 -03:00
Paul Johnson
9087c0df99 Combine view indexes and view relevance definitions into single enumerated type (#4795) 2026-02-06 20:57:56 -03:00
Joachim Kohlhammer
a0fe8afa32 Planned activities: Keeping track of original date (#4822)
* Planned activities: Keeping track of original date

* Adding original date to planned activities
* Resetting the original date when copying planned activities
* Showing original planned date in calendar tooltips
* Ensuring metrics get recalculated when moving, shifting, copying
  activities
* Ensuring all tags are written when moving or shifting activities
2026-02-06 11:46:02 -03:00
Alejandro Martinez
31d8708376 Fix default Plan layout
[skip ci]
Expected PMC (TriScore) was duplicated
replacing Expected PMC (Coggan)
2026-02-05 17:48:01 -03:00
Alejandro Martinez
5b71f4ff00 AppVeyor - Fix errors in Windows installer Python
The errors were introduced by #4820
2026-02-05 10:39:30 -03:00
Alejandro Martinez
ab5df0c9d8 AppVeyor - Add missing dlls to Windows installer
Necessary for SSL support
Continuation of 2eaf1bccc1
2026-02-05 02:28:18 -03:00
Alejandro Martinez
a1247996d4 AppVeyor - Refactor Windows build scripts (#4820)
To cleanup appveyor.yml and to match macOS/Linux scripts:
- Move install code to appveyor/windows/install.ps1
- Move after_build code to appveyor/windows/after_build.ps1
Continuation of 40db2bc8ec
2026-02-04 21:05:37 -03:00
Alejandro Martinez
b01f144476 AppVeyor - Add missing dll to Windows installer
Required to use pandas
2026-02-04 15:58:39 -03:00
Paul Johnson
d8b10fe9f4 Cloud Service creates unnecessary GlobalContext instances (#4823)
Changes GlobalContext to hide the constructor so this doesn't occur again since it is a singleton.
2026-02-03 17:02:19 -03:00
Magnus Gille
40db2bc8ec Standardize how the config is created for releases. (#4784)
Build configuration for Windows was moved from appveyor.yml to appveyor/windows/before_build.ps1
and based on gcconfig.pri.in to match the other platforms, Python config is taken from PATH too.
We could do the same with install and after_build too.
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
2026-02-01 17:16:44 -03:00
Alejandro Martinez
6ab99506ad AppVeyor - run lupdate on Windows
For Linux and macOS this was part of before_build.sh
Also remove now unused site-packages from cache section
2026-01-30 21:19:20 -03:00
Joachim Kohlhammer
a36f52760b Copy & Paste for planned activities on calendar (#4819)
* Planned activities can be copied
* Pasting:
  * Month view: Target time is the same time as the source activity
  * Day + week view: Time at mouse pointer is used as target time
  * If the slot at target time is not long enough to take the full
    activity, the closest free slot is used
  * If no free slot could be found, the activity is pasted at a free
    start time (h:00, h:15, h:30, h:45)
  * Night hours (midnight until start hour + end hour until midnight)
    are considered blocked
2026-01-30 18:21:47 -03:00
Alejandro Martinez
dfd932d921 Fit file import - don't crash on malformed files
Fixes #4818
2026-01-30 11:16:07 -03:00
Alejandro Martinez
f8bd9a936d Update Snapshot builds
Embedded Python (3.11) and SIP (6.15.1) upgrade
with updated modules: numpy, pandas, plotly, etc.
[publish binaries]
2026-01-29 15:59:10 -03:00