11272 Commits

Author SHA1 Message Date
Alejandro Martinez
dbd7de01b8 Remove vertical lines in Overview Zones Tiles
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.
2026-01-04 20:09:16 -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
7421371a2d Update translation files
After removing all lupdate warnings
2026-01-04 16:34:18 -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
Magnus Gille
ab1b9633d0 Fixes so that lupdate doesn't throw warnings (#4788)
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.
2026-01-04 10:07:50 -03:00
Alejandro Martinez
1b21c6a4fc AppVeyor - Revert QWT build to -j1 on Windows
To avoid ocassional errors due to race conditions,
since QWT is rebuilt only when appveyor.yml changes
the impact on performance is limited in normal cases.
2026-01-02 17:32:47 -03:00
Paul Johnson
a6c2114e0a Fixes Qt6 standard buttons warnings (#4783) 2026-01-02 10:17:11 -03:00
Paul Johnson
9bae3a7658 Update Calendar on Batch Import (#4734)
When more than 20 activities are imported at once.
2026-01-01 22:10:49 -03:00
Paul Johnson
4ff62b4893 Fixes for QT6 deprecation warnings (#4779) 2026-01-01 13:09:26 -03:00
Magnus Gille
addf1b55d3 Fix signalSafety unittest (#4773) [skip ci] 2025-12-28 12:18:26 -03:00
Magnus Gille
c4e880622b QZip improvements (#4768)
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!
2025-12-27 16:06:45 -03:00
Poncho
2d463c8bc2 Upgrade FIT SDK to 21.188 (#4776) [skip ci]
The presence of a \ in a string will produce an error in python 3.13
Using raw strings in all regexes avoids this.
2025-12-27 16:05:48 -03:00
Poncho
a45bb2503c linux/51-garmin-usb.rules: use mode 0660 and tag uaccess (#4775) [skip ci]
Use a more modern approach for device access.

The uaccess tag makes udev apply a dynamic user ACL to the device node, which
makes the device usable to logged-in users.

See https://wiki.archlinux.org/title/Udev#Allowing_regular_users_to_use_devices
2025-12-26 20:19:01 -03:00
Paul Johnson
8a19c38b3a QSqlQuery copy constructor deprecated in Qt6.2 (#4771)
The QSqlQuery assignment and copy constructor are deprecated since Qt6.2, and will be removed in Qt7, see https://doc.qt.io/qt-6/qsqlquery-obsolete.html
2025-12-24 08:28:05 -03:00
Paul Johnson
4eaec533aa Remove type truncation warnings (#4770)
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'
2025-12-23 10:21:11 -03:00
Paul Johnson
1a0cd74c19 Remove Qt6 stateChanged deprecation warning (#4766)
From QT6.7.0 QCheckBox::stateChanged() is being replaced with QCheckBox::checkStateChanged(), and stateChanged() is deprecated in Qt6.9.0
2025-12-22 16:32:57 -03:00
Paul Johnson
7caa7582dd Remove Windows crash handler compile warning (#4765)
Warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead.
2025-12-22 13:37:36 -03:00
Paul Johnson
9cff593c68 Remove unused variables and parameter warnings (#4767)
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.
2025-12-22 09:59:31 -03:00
Alejandro Martinez
b0b65e4e1f Update minimum Qt version 6.6.1 recommended 6.8.3 2025-12-21 21:35:44 -03:00
Magnus Gille
03ca4fdbc3 Parallelize builds and upgrade build environments (#4749)
* Parallelize QWT builds
* Upgrade macOS Builds to Sonoma with Xcode 15.2 and Qt 6.6
* Upgrade Windows builds to Visual Studio 2022
2025-12-21 18:24:27 -03:00
Alejandro Martinez
be01a861b8 Fix crash when importing compressed zip files
The bug was introduced by #4751 when QScopedPointer was replaced
by std::unique_ptr but release() was not called to replace take().
2025-12-19 14:05:52 -03:00
Paul Johnson
78fb79cfe1 Correct initial view change for navigation model (#4735)
Change startupView flag from static to member variable in AthleteTab class
2025-12-18 18:34:40 -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
Magnus Gille
9bb90e3737 Fix crash safety issues: Unsafe signal connections and tree child access (#4761)
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.
2025-12-17 13:52:38 -03:00
Magnus Gille
2dc2d02e80 QFileDialog::getOpenFileName returns an empty string on cancel (#4762)
There's no need to throw a message box up
2025-12-17 08:33:44 -03:00
Joachim Kohlhammer
396a3535c0 Workout Infowidget: Showing real zone name (#4763)
Display the zone names instead of a fixed Z# in the Workout Infowidget.
Since configChanged is emitted only when zones are added or modified -
but not when their names or descriptions are edited - changes to a
zone’s name or description requires selecting a different workout to
reflect the change
Fixes #4760
2025-12-16 21:23:33 -03:00
Alejandro Martinez
e63f6ff6fc IconManager - Use normalized values for Sport
To match getFilepath using RideItem::sport,
which is the normalized Sport value.
2025-12-16 20:04:12 -03:00
Joachim Kohlhammer
a31a2795ac Add missing receiver parameter to lambda signal connections (#4759)
PR #4690 reveals a bug in the calendar:
* Go to plan view
* Add a calendar
* Reset the layout
* Switch date range -> crash

Root cause: Lambda-connections without a dedicated receiver don't get
automatically disconnected on destruction if the sender lives longer.
When resetting the layout, the old is destroyed but the connection is
still triggered -> crash

This PR adds receivers and additionally narrows down the captures
([=] -> [this, whatever I really need]
2025-12-14 17:17:33 -03:00
Alejandro Martinez
4177327a8b Update snapshot builds
To test Plan view and Calendar/Agenda refinements.
[publish binaries]
2025-12-14 11:01:25 -03:00
Paul Johnson
bd3b0dfb0e Fix to prevent view pages being collapsed by the splitter (#4758) 2025-12-14 11:00:36 -03:00
Paul Johnson
3a75464182 Fix the LTM sidebar initial width for new athletes (#4757) 2025-12-14 10:59:42 -03:00
Joachim Kohlhammer
7117389fb2 Planning workout: Adding description to Notes (#4755)
When planning a workout based on a ErgFile, the description is appended
to the Notes (never overwriting what was entered before, only
appending). This makes the description available e.g. in the agenda,
giving a quick insight of what is ahead
2025-12-14 09:39:20 -03:00
Joachim Kohlhammer
2d0e2a9b7d Adapting visual refinements from agenda in calendar (#4754)
* Adapting visual refinements from agenda in calendar

* Removed colored background for seasons and events (instead coloring
  the icons)
* Metric name shown in lighter font, removed brackets
* Added option (agenda and calendar) to remove the metric name
* Put settings of agenda in scrollarea to avoid squeezing

* Fixed clipping
2025-12-14 09:37:37 -03:00
Joachim Kohlhammer
f17257885b Modify phases and events in calendar (#4753)
* Phases and events can be created, edited, deleted in the calendar (all
  views)
* LTMSidebar reacts to modified events
* Phase and Event dialogs show the associated season
* Menu entries are only active within the current season
2025-12-14 09:36:52 -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
Alejandro Martinez
5060d09f15 Switch to gcc-11 for Linux builds on AppVeyor
Using gcc-13 makes the generated AppImage to require a newer libstdc++ version
than some currently supported distributions include by default.
This way we don't need Travis-ci generated Qt5 AppImages anymore
and we can deprecate Qt5 support.
[publish binaries]
2025-12-13 12:28:35 -03:00
Alejandro Martinez
84b26c5977 Disable Travi-ci integration
[skip ci]
Currently we use it only to generate Qt5 AppImages for Linux
and we are about to deprecate Qt5 support.
2025-12-13 12:20:49 -03:00
Alejandro Martinez
ed79319105 Remove unused DLL from Windows Qt6 installer 2025-12-10 19:28:59 -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
Magnus Gille
06ed87db09 #else constexpr doesn't do anything it's just a compiler warning (#4743) 2025-12-09 10:11:56 -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
Paul Johnson
79ce8735fe Fix for isolate axis hides labels when using bars #4705 (#4741)
The pen wasn't set for bar charts, and the hack relies upon the pen's color value to set the visibility of the labels.
Fixes #4705
2025-12-07 17:50:41 -03:00
Paul Johnson
6b7e7555df Fix calendar chart color issue (#4739) 2025-12-06 07:03:48 -03:00
Alejandro Martinez
7cdb14ca7a Enable debug for Segment matching at runtime
Using the command line paramter: --debug-rules gc.routes.debug=true
2025-12-02 12:33:21 -03:00
Alejandro Martinez
9e8ed1717a Fix invisible label on Interval Metadata selector
Reported at the users forum when using Dark themes.
Continuation of 1dd7faa
2025-11-30 09:54:43 -03:00
Alejandro Martinez
49c337d365 Update snapshot builds
Main changes from v3.7-sp1 release:
  Enable Add Planned Activity from Activities menu
  Enable Plan Activity from Calendar conxtext menu
  Enable Agenda view of Calendar chart
[publish binaries]
2025-11-28 20:46:22 -03:00
Alejandro Martinez
69093d5ff7 Revert "Made planned activities functionality optional"
This reverts commit da3743a66b.
It was a temporary fix to release v3.7.1
2025-11-27 19:56:03 -03:00
Alejandro Martinez
bd06fa96b1 Revert "Made the agenda view of Calendar optional"
This reverts commit 5d58b75fe1.
It was a temporary fix to release v3.7.1
2025-11-27 19:55:24 -03:00