.. applies to all charts in the perspective, so you can create
a perspective called "Running" and set the filter to "isRun"
and all charts in the perspective will only show data from
runs.
.. updated charts on Trends view to honor the perspective
filter, as below:
* Overview
* Trends
* User Chart
* Treemap
* Critical Power
* R Chart
* Python Chart
* Histogram - for metrics
* Summary - no change as deprecating shortly
.. renamed the HomeView to TrendsView in line with some of the
other recent name changes. The class names were set over 10
years ago and no longer reflect the UI concepts.
.. New signal: GcWindow::perspectiveChanged(Perspective *)
When the chart is moved from one perspective to another, likely does
not need to do anything on Analysis view, but on Trends view its
quite likely the filter has changed, so refresh is needed.
.. New signal: GcWindow::perspectiveFilterChanged(QString)
When the perspective filter is updated this signal is called but
only on trends view since it doesn't really matter on Analysis
from the charts point of view.
.. when creating a perspective you can now add an expression
that will be evaluated when a ride is selected in the sidebar.
.. For example you can create a perspective "Running" with an
expression "isRun". When a run is selected on the sidebar
we automatically switch to the running perspective.
If now, whilst on the "Running" perspective you select say
a cycling activity, the expression will evaluate to false,
so we will look for another perspective to switch to.
If no expression is found to switch to, and the current
perspective has an expression that is evaluating to false
then we just switch back to the first perspective in the
list (you can reorder them if needed).
.. the perspective type is added to the xml when exporting and
also when saving state.
.. on import the perspective type is checked to make sure we
don't import trends views into activities and vice versa.
.. New dialog to rename, add and remove perspectives, re-order them
and move charts from one perspective to another.
.. The focus is on managing perspectives and not the general UI
layout (ie. add/remove charts and rename things etc) this is
likely to be something this morphs into, but for now lets
keep it simple (this was complicated enough !)
.. also found a SEGV in CP chart when hover in allplot before the
CP chart has been notified in another perspective-- there are
likely to be a few of these kinds of bugs around.
.. Perspectives can now be added and are saved and restored on
startup and close.
.. A new config file 'xxx-perspectives.xml' replaces the old
'xxx-layout.xml'.
.. HomeWindow has been renamed Perspective across the code.
With TabView now taking responsibility for loading and
saving configuration.
.. This is a fairly big refactor that touches upon a number
of events at startup, including how sidebar events are
propagated across charts and tabs. And will need a reasonable
amount of testing before release.
.. Separately, I also fixed a SEGV in the Python chart when
no ride is selected (an old bug not related to this).
The user will be able to create collections of charts as opposed to
the single long list of charts in each of the four views.
This first update:
.. update toolbar to include a perspective selector
.. also updated aesthetics of toolbar (mostly icons on hidpi)
Further updates pending will:
.. part 2 will introduce code to add, save and restore perspectives
.. part 3 will introduce code to manage and rename perspectives
.. part 4 will introduce new defaults for each perspective
A future enhancement may allow the perspective to be aligned to a
specific sport in activity view, so the perspective can be selected
based upon the sport of the activity being analysed. But that will
not be part of these changes.
Allows to delete a closed athlete without the need to exit the program,
it re-uses the logic in ChooseCyclistDialog and removes the AthleteCard
from AthleteView.
Objective is to allow creation of new athletes, without the need to
exit GoldenCheetah, using Athlete > Open > New Athlete like in v3.5
When a new athlete is created MainWindow emits newAthlete signal
so AthleteView can create the corresponding AthleteCard.
.. MacOS Qt crashes when destroying it, OpenGL is *that*
broken by Apple.
.. applied to Windows too, despite it not being an issue
reported there is no value in doing it so removed.
[publish binaries]
.. Fetch the version of OpenGL available at startup and use it in
ChartSpace to decide if we want to enable openGL rendering.
.. some fixups for X11 builds, which are not needed on the main
OS combinations we use (Linux, Mac, Windows) but may prove
useful when building for X11 vs Wayland in the future
.. Global settings (themes, metadata etc) are now maintained
in the config dialog as in the past, whilst athlete settings
(such as zones, measures etc) are now maintained in a new
config dialog accessible from the athlete view (gear icon).
.. Config changes are communicated via two signals;
* Context::configChanged(qint32)
* GlobalContext::configChanged(qint32)
Crucially, all global context signals are cascaded through
the athlete contexts-- so athlete specific widgets only
need to connect to the athlete context signal (and will get
athlete and global config change notifications).
Whilst global widgets such as the sidebar and mainwindow
need only connect to the globalcontext signal since they
are not interested in athlete specific details.
[publish binaries]
.. the views were not being deleted, so the global context connection
to configChanged signal was still called, but the athlete and
context were long gone - so SEGV (!)
.. the reason this didn't get triggered in earlier releases is due to
the fact the event was disconnected when the athlete context was
deleted.
measures.ini is looked for in Athlete's config folder,
it should have a section for each measures group,
nutrition data with Energy and Macros is provided as example.
Moved default weight to About and removed RiderPhysPage and created
a tab for each measures group under Measures.
MeasuresPage handles conversion between metric and imperial units
Generalized CSV import with configurable headers.
MeasuresDownload enables download from Withings/Todays Plan only for Body
measures.
This is Part 1/2 of #2872
.. GlobalContext::context() provides a global context that is not
tied to an athlete or MainWindow.
.. At present it just offers signals for config changes but will
likely see more context move across as the application preferences
and athlete configuration are separated as we enhance support
for multiple athletes.
configdialog_ptr is already maintained to handle raise event,
cleanup is moved to destructor to ensure it is always called,
and it is used to ensure:
1) only one instance is created from MainWindow
2) it is closed on MainWindow destructor
Fixes#1918
.. since the context of the first athlete is used as a partial
application context across the code we now prohibit closing
the first athlete opened.
.. we will separate out the app and athlete context shortly
but this will at least protect against SEGV.
[publish binaries]
.. Show days since last activity and disable config icon since there
isn't an appropriate action for now
.. Athletes can be opened and closed via the tiles and a reusable
'Button' overview widget is available for re-use elsewhere.
.. Part 3 will enable checking for downloadable data to show an
indicator on the tile for e.g. coaches with multiple athletes.
NOTE:
There are a few issues regarding application context separation
from athlete context that need fixing up (if you close the first
athlete loaded expect crashes). Will look at this as a separate
update since its been there for some time and is not related to
the new view per se.
.. introducing the athlete view
.. at startup the first athlete is loaded as normal, but once the
mainwindow is open the athletes are managed from the athlete view
.. athlete ride cache restore happen in background (via a thread) to
enable the GUI to remain responsive whilst it takes place (since
for most non-trivial cases it can take 30 seconds or more).
.. multiple mainwindows has been deprecated and whilst each open
athlete is selected via a tab, this will change to a combobox
in later commits.
.. the tiles in the athlete view do very little apart from show the
avatar and progress/load status when an athlete is being loaded.
.. future commits will introduce more detail and actions for the
athlete tile and deprecate the athlete tab bar for a combo on
the toolbar (amongst other things).
.. back and forward buttons to navigate between views and selections.
.. currently limited to just rides, date ranges and views.
.. next step is to enable click to select from trends overviews to allow
users to drill down from the season overview into activities and
back again.
.. part of the shift from searching through lists to analyse data to
exploring data visually with drill down and click through.
.. the buttons are very basic and there is no way to explore the
history / recently viewed items etc. these will come later.
Fixes#3529
Michael Dagenais found this change makes the widgets to play nicer with
Windows Managers and avoids them to get on top of other programs windows.
Minimize and Restore is automatically handled now, so this commit partially
reverts b89019264e, removing MainWindow
state changes tracking, but keeping VideoWindow position tracking.
This is a clean up to remove conditional compilation for all Qt versions
older than the last known to work: Qt 5.9 with Qt WebEngine and Qt Charts.
Includes an update note to INSTALL documents.
When the main window is minimized on Linux, the MeterWidgets stay on the desktop.
A signal were added to the main window for state changes.
The VideoWindow connects to that signal and hide/shows the MeterWidgets accordingly.
Currently, when you move the main window, the MeterWidgets do not follow
and become out of place.
On every Telemetry update, check if the real position on screen of the
video window has changed in order to update the position of the meter
widgets. The Video Window can move for several reasons like when
scrolled or when the Main Window is moved. The Meter Widgets are not
clipped like the Video Window by its scroll area parent though.
.. remove the old scope bar in favour of a more modern sidebar as we
transition the UI to a new design.
.. the newmainwindow approach is not practical, as making 2 UX coexist
at the same time was impossible and would lead to major issues.
.. note a number of views are on the sidebar but disabled, they will
be added over time.
Upload/Download are similar to Export/Import in User Metrics config dialog.
Admin interfaces are similar to CloudDB charts for both user (edit/delete)
and curator (set curated/edit/delete).
Name and Description are initialized to the corresponding items for the metric
but both can be edited to provide different/more complete information for the
CloudDB interfase.
Fixes#3361
Fixes a copy/pase problem preventing workout import via Drag and Drop
and allows to import GPX files as workouts or activities according to
active view.
Fixes#3337
.. when a new athlete is created and opened the blankstate page
currently provides options to get data by importing files or
downloading from a device.
.. this update adds the ability to configure a cloud service and
start a sync straight away
.. this UX is introduced since cloud services are now much
more ubiquitous and v3.5 introduced broad support for a wide
range of services.
* Initial implementation of Python data processors
* Add RideEditor to PyFIx script editor
* Enable write-access to activity data for python fixes
* Add GC.deleteActivitySample method
* Add GC.deleteSeries method
* Check for python fix for changes before close
* Build python fixes menu dynamically
* Make python fixes first class data processors
* Add GC.postProcess method
* Check GC_WANT_PYTHON and "Enable Python" setting for python fixes
* Add GC.createXDataSeries method
* Clean up ScriptContext ctor mess
* Support editing xdata series
* PDP: Implement xdata append/remove methods
.. at startup we ask the user for permission to share
.. once permission is granted the upload is performed and
re-done every year, so long as > 100 workouts have been
collected since the last time.
.. custom uploader, using CSV.
.. requires updating to support custom fields like RPE/ROF
but committing whilst trying to resolve a bug related
to the FOLDER_ID configuration setting.