* Centralized the menu creation
* Grouping of actions
* Showing that a phase is always directly assigned to a season
* Harmonized case
* Added ellipsis to all actions opening new dialogs
* Keeping ellipsis out of translatable string to keep as many
current translations as possible
Main changes from v3.8-DEV2601:
686f4310f Revert to Qt 6.5.3 for macOS builds
a00e27638 Dialog to build filter queries for similar activities (#4805)
749a21d9b Train mode: Improved readability for ErgFilePlot (#4806)
3e8c6fe04 Updating power values of planned activities with linked workouts (#4799)
1c6979846 Fix Edit menu disappearing when changing languages on macOS (#4797)
[publish binaries]
This reverts commit b25b3e3c61.
While this is useful for development and testing we don't need it
for release versions and it invalidates existing caches causing
additional traffic on CloudDB servers.
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
* Any curve in ErgFilePlot can be hidden (W'bal, Power, Speed, ...)
* Configurable plot width for curves
* When using colored power zones: Zone color can be dimmed to enhance
visibility of the curves
* Updating power values of workout based planned activities when they
fall into a timerange with different CP
* Triggers:
* CP configuration changes (future activities only)
* planned activities are moved (calendar)
* schedules are repeated (calendar)
* rest days are inserted or removed (calendar)
* Additional: Typo in Calendar (show in train _n_ode -> mode)
The edit menu attempted to populate itself with aboutToShow() but this is fragile on Mac when the system menu is empty.
Also fixed a (very minor) memory leak and rewrote some code in more modern C++.
Fixes: #4647
Agenda used to display entries similar to the Calendar: Primary line for
a field, secondary line for one metric, tertiary line for a multi-line
field.
As the agenda has more space available per line, this change adds
support for multiple metrics in the secondary line. Defaults are
Duration and TriScore.
* Bidirectional linking of planned and completed activities via field "Linked Filename"
* Convenience functions in RideCache, taking care of updating all relations
* link activities
* unlink activities
* move activities
* copy planned activities
* batch copy planned activities
* shift planned activities
* Calendar
* Visual hints to show whether an activity is linked (bar on right side)
* Options to link, unlink, jump to linked activity
* Option to save an activity
* Visual hint indicating unsaved changes in an activity (italic font)
* Deleting activities clears the link
* Agenda: Hiding completed / linked activities
* Repeat Schedule: Clearing the link in copied entries
* RideImportWizard: Autolinking new activities if a planned counterpart exists
* Stricter consistency handling of linked activities
Additional:
* highlighting linked activities when clicking in calendar
* linked() datafilter access function (similar to filename())
* New dialog to link planned and completed activities
* Centralized the calendar context menus (only one location to maintain them for all views)
* Restructured the entries of all calendar context menus
They were introduced by #4779, which replaced setAxisX
which removes the previously existing default x-axis
for the new one, with addAxis which doesn't remove anything.
This change just remove the existing (default) x-axis before
to add the new one to minimize the impact in the remaining code.
src/Gui/CalendarItemDelegates.h:
ColumnDelegatingItemDelegate
- uses tr() so should call Q_OBJECT
CalendarDetailedDayDelegate
- uses tr() so should call Q_OBJECT
Moved Q_OBJECT to the top of the class for consistency and this also guarantees it's private (which it has to be).
src/Gui/ColorButton.h:
- Moved the comment from Colors.h here.
src/Gui/Colors.h:
- Removed #if 0 code that confused lupdate since it doesn't understand preprocessor macros.
Removed unused constructors
Replaced raw pointer with a unique_ptr to clearly pass ownership.
Fixed a bug where we compared if a signed integer is negative (it never is).
Fixed a case where we take the pointer to a pointer we de-reference!
warning C4267: '=': conversion from 'size_t' to 'int', possible loss of data
warning C4805: '!=': unsafe mix of type 'int' and type 'bool' in operation
warning C4305: 'argument': truncation from 'double' to 'float'
Remove the following types of build warnings:
warning C4189: local variable is initialized but not referenced
warning C4100: unreferenced parameter
warning C4101: unreferenced local variable
I have only commented out unused variables and used [[maybe_unused]] for unused parameters.
Systematically resolved 30 identified potential crash vectors and established automated regression testing to prevent strict reoccurrence.
Key Changes:
- Fixed 11 instances of unsafe `QObject::connect` calls (missing context object) in srd/Charts/AgendaWindow.cpp, FixSpikes.cpp, src/FileIO/FixSpikes.cpp, src/Gui/Agenda.cpp, src/Gui/BatchProcessingDialog.cpp, and src/Gui/IconManager.cpp. This prevents crashes caused by signals firing after the receiver has been destroyed.
- Fixed 19 instances of unsafe `QTreeWidgetItem` child access in src/Charts/LTMChartParser.cpp, src/Gui/ColorButton.cpp, src/Gui/AthletePages.cpp, and src/Gui/Pages.cpp by adding defensive `nullptr` checks before dereferencing.
- Added Python detection scripts util/check_unsafe_connects.py and util/check_unsafe_tree_child.py to statically analyze the codebase for these specific unsafe patterns.
- Integrated detection scripts into the regression test suite under `unittests/Core/signalSafety`, verifying the fixes and enforcing a strict zero-tolerance policy for future regressions.
- Added `testSplineCrash` to cover edge cases with empty spline lookups.