Implement concurrency
This MR implement concurrency (from QtConcurrent
) to shift heavy computations to a different GUI thread and not lock the entire GUI while processing. Note that QtConcurrent requires Qt6, and as such Qt5 support has been removed.
- Replace
ProgressView
withProgressBar
; the progress bar is no longer a dialogue, but is instead a part of the status bar.PeakFinder
will no longer lock up the GUI while the calculation is running. Note that this currently does not work for any algorithm using theparallel_for
loop, e.g. prediction and integration, since these may try to use the main GUI thread. - Use concurrency to populate the peak tables, which tends to be the heaviest GUI computation, and causes the GUI to lock for a second while loading certain subframes, noteable
SubframeIntegrate
andSubframeRefine
. Note that this has not been implemented forSubframeMerge
, for which the relevant computation belongs to the core, orSubframeReject
, which is not feature-complete. - Implemented statemachine for GUI safety using
QStateMachine
Test protocol: run the entire workflow as in the tutorial.
Try using other controls when the GUI is busy processing. Please report any segfaults.
Edited by Zamaan Raza