* 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
Trying to create a custom virtual power curve
with less than 2 points leads to a crash when
saving device config on terminate.
Reported at the users forum.
For completeness as requested in the users forum:
GC.deleteXDataSeries(xdata, series) to remove existing XData series
GC.deleteXData(xdata) to remove existing XData
They invoke the corresponding RideFileCommand methods.
* Options > Data Fields > Processors & Automation (renamed from
"Processing")
* Modernized the UI
* Added UI to set Automation (None, On Import, On Save) for all
processors
* Added UI to set Automated execution only for all processors
* Showing the processors description
* Showing the processors setting (if available) in a more userfriendly
way
* Added option to add / delete / edit custom Python processors
* Enabled editing of Python processors via double click
* Added option to hide code processors
* Removed the submenu to manage Python Fixes from the Edit-menu
* Renamed the Edit-menu to "Process"
* Hiding "automated only"-processors from Process-menu and
Batchprocessing-dialog
* DataProcessors
* Turned configuration of all core processors into forms
* Changed the technical name of all core processors to match their
classname
* Added legacy technical name to all core processors to support existing
scripts
* Moved description from config-class to DataProcessor
* Implemented a migration path for existing persisted processor
configurations
* GSettings
* Added method to remove settings by key
It can take the following values:
0 - rest, 1 - free, 2 - back, 3 - breast, 4 - fly, 5 - drill, 6 - mixed
When stroke type is not available it evaluates to -1 - na
Type is Peak, which is not exactly right, but we need to refactor
aggregation to fix this (#4575) and this is mostly intended to be
used for intervals, so it is not that relevant anyway.
The text value of this metric is used as the second colum for the Overview chart
in default Swim perspective.
Fixes#4570
Shorter than minRest lengths were removed,
but next length duration was not updated.
- Move the update block inside the transaction scope
- Account for removed rows on row index
- Consider column offset due to time and distance
This adds a minimum rest parameter to Fix Lap Swims DP to
ignore lengths shorter than a configured minimum value,
the corresponding time is added to the next length where it
is assumed to belong.
Minimum rest length default value is 3 secs, but it can be
changed in DP config.
Test files contributed by Jean Div at the users forum.
Fixes#4571
Some devices generate consecutive rest lengths and they
should be included in the same interval, to achive this
we use the change of length distance to mark intervals
instead of just the presence of a rest length as we did
before assuming only one will be generated.
Related to #4571
Summary of changes from v3.7-dev2410:
9a269677d Settings: Inline-editing for Measures (#4567)
928891634 Update Spanish translation (#4566, #4563)
e3fb6c4e3 AutoCP: Proposing new ranges only for younger estimates (#4565)
6576b12a7 Infowidget: Made more strings translatable (#4564)
c86b5a6be Harmonize the layout of athlete settings (#4562)
[publish binaries]
* Only proposing a new range if the current estimate starts after the
current range (otherwise deviations should be handled by review)
* Review-dialog: Replaced the relation-signs (<>) by arrows (↗↘) for
better readability
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
* Changed the UI of CPPage to inline-editing of all values in all tables
* Added a sports-specific selector for the model (cp2, cp3, ext, manual)
* Allowed to create new ranges either manually or based on the estimated
values of the model
* Added option to reset each ranges values to those of the selected
model
* Added message to create a new range if todays estimate differs from
those of the currently active one
* Refined semi automatic power zones
* Added a dialog to inspect and accept only some values while adoption
* Added info messages
* when the model does not provide FTP or PMAX
* that AeTP is only a very rough estimate
* Added a tolerance in comparison before proposing new values
* Using the following order for defaults when adding a new manual range
* selected row
* last row
* predefined defaults
* Zones-Tab: To prevent crashes, a message is shown instead of the real
interface if a metric refresh is ongoing
* Changed Pace- and HR-Tabs to use inline editing
* Moved the unittests into the same structure as the sourcecode
* Added a simple (incomplete) unittest for kphToPace
* Improved setting the column width
* En-/Disabling the action buttons (add, delete, ...) based on the
contents state
* Changed the layout to prevent jumping widgets when showing / hiding
buttons
* Fixed compiler warnings from Visual-C++
* Adopt dialog: Refined layout
* Fixed the unit of "From BPM" on HR-Page
* Set the default mode to manual
Fixes#1381
Relevant changes from v3.7-DEV2408
a30b96cc8 Refactored the placement of items in the ChartSpace (#4549)
62ef8abe4 Make the Workout Editor's Settings Persistent (#4553)
217bd3b88 Scale Line Width default values (#4556)
f4d6c2ae4 avoid regression caused by #4337 due to changed order of data series enum
61fa77b2c respect linewidth setting inside the workout editor realtime plot (#4550)
51b0c9099 Fix intervals in Compare Pane are 1 sample short
b62a2d319 Ride Cache - Don't remove 1 sec intervals
c51941231 CP chart - show tooltip for model curve
5f1598c43 FIT - map fields to standard only for record msg (#4521)
9242f724d Implemented user defined relative date ranges (#4534)
60f903361 Cycling dynamics in train mode (#4337)
1230dc7c6 FIT parser - Lap messages can be first (#4535)
79b523781 Removed wildcard from translatable part (#4545)
ee992ad13 Enable Performance Tests for CV charts
7e7ffd3cb Aerolab - fix imperial units labels (#4542)
[publish binaries]
Fixes#4467:
* Tiles are dragged to a column, inserted into the columns tile order
* Placing tiles left or right of the existing columns creates a new
column (up to a fixed limit)
* As there is no concept of lines, the placement must
* always respect the users choice of a column
* never move a tile horizontally without user interaction
* Shift-resizing a tile allows spanning multiple columns
* Improved change detection
* Preventing superfluous layouting requests and order increments
* Added a visual indicator where the item will be placed when dropped
* Fixed a glitch when creating new columns on the right, when dragging
beyond a newly created column on the right, the visual indicator was
hidden and pseudo changes where detected.
This is a follow up of a discussion in #4550: since configurable
GC_LINEWIDTH is not scaled on use, it is convenient to scale fixed
default values so they adapt to display configuration on first use,
to make easier the initial setup for new users without affecting existing ones.
The fake rides created for intervals in Compare Pane don't include
the last sample, so they are 1 sample short and 1 sec intervals
don't appear. WPrime calculations are avoided when the ride has
only 1 sample to avoid crashes, besides it doesn't make any sense.
Fixes#4552
Previous behaviour was weird: 1 sec intervals could be created and displayed,
but they were discarded on activity save.
Also 1 sec intervals are useful for 3 param model fitting.
Relevant changes from v3.7-DEV2408
5f1598c43 FIT - map fields to standard only for record msg (#4521)
9242f724d Implemented user defined relative date ranges (#4534)
60f903361 Cycling dynamics in train mode (#4337)
1230dc7c6 FIT parser - Lap messages can be first (#4535)
79b523781 Removed wildcard from translatable part (#4545)
ee992ad13 Enable Performance Tests for CV charts
7e7ffd3cb Aerolab - fix imperial units labels (#4542)
[publish binaries]
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
* TRAIN - add cycling dynamics
Power sensors which deliver cycling dynamics such as power start angle,
rider position, etc. are supported during hometrainer session.
Goldencheetah requests power sensor capabilities and, when available,
request the sensor to enable them (power phase, pedal position, etc.
and 8Hz transmission mode which is mandatory when accessing those
additional data pages)
* COSMETIC - FIX comment related to gc csv header
The comment was not reflecting the up-to-date file
content as per latest CSV header
* FIX load/slope in CSV
Only target power was recorded in CSV records during hometrainer
session.
When not using ERG mode but slope mode then the data was lost.
This patch take care of training mode to determine which data
is to be recorded.
* TRAIN - flexible gc CSV
Allows to add fields in CSV file recorded during hometrainer session
without impacting a lot of files in the code
Historical first fields are still used to determine taht this file
has been created by GoldenCheetah.
During CSV parsing GoldenCheetah will use CSV header to determine which
fields are part of the file and to locate the column which contain it
* TRAIN - add cycling dynamics to CSV records
during hometrainer session
* CsvRideFile fixes
Free gcSeries and Qt6 compatibility
---------
Co-authored-by: Alejandro Martinez <amtriathlon@gmail.com>
Some translations (de, sv) for filters used in QFileDialgos contained
commas to separate wildcards. As this is in violation with Qts syntax,
the dialogs didn't show any files.
This commit separates the wildcards from the name of the filter so that
only the name can be manipulated by translation. All affected
translations are updated.