protected override void UpdateStepStatus() { if (null == Workspace) { _totalResults = _totalChromatograms = 0; _completedResults = _completedChromatograms = 0; } else { _totalChromatograms = Workspace.PeptideAnalyses.Select(peptideAnalysis => peptideAnalysis.FileAnalyses.Count).Sum(); _completedChromatograms = Workspace.PeptideAnalyses .Select(peptideAnalysis => peptideAnalysis.FileAnalyses.Count( fileAnalysis => fileAnalysis.ChromatogramSetId.HasValue)) .Sum(); _totalResults = _totalChromatograms; _completedResults = Workspace.PeptideAnalyses .Select(peptideAnalysis => peptideAnalysis.FileAnalyses.Count( fileAnalysis => fileAnalysis.PeakData.IsCalculated)) .Sum(); } if (null != _completedBackgroundQuery && !_completedBackgroundQuery.IsWorkspace(Workspace)) { _workspaceOpenTime = null; _completedBackgroundQuery.Dispose(); _completedBackgroundQuery = null; } if (null != _runningBackgroundQuery) { if (!_runningBackgroundQuery.IsWorkspace(Workspace)) { _runningBackgroundQuery.Dispose(); _runningBackgroundQuery = null; } else if (!_runningBackgroundQuery.IsRunning) { _completedBackgroundQuery = _runningBackgroundQuery; _runningBackgroundQuery = null; } } if (null == Workspace || !Workspace.IsLoaded) { if (null == Workspace) { lblResultsStatus.Text = lblChromatogramStatus.Text = "No workspace is open"; } else { lblResultsStatus.Text = lblChromatogramStatus.Text = "Waiting for workspace to load"; } SetProgressBarValue(progressBarChromatograms, 0); SetProgressBarValue(progressBarResults, 0); } if (0 == _totalChromatograms) { lblChromatogramStatus.Text = "No chromatograms need to be calculated in this workspace. Choose some peptides to analyze."; SetProgressBarValue(progressBarChromatograms, 0); } else { lblChromatogramStatus.Text = string.Format("{0} of {1} chromatograms generated.", _completedChromatograms, _totalChromatograms); SetProgressBarValue(progressBarChromatograms, 100 * _completedChromatograms / _totalChromatograms); } if (0 == _totalResults || 0 == _totalChromatograms) { lblResultsStatus.Text = "No results need to be calculated in this workspace. Choose some peptides to analyze."; SetProgressBarValue(progressBarResults, 0); } else { lblResultsStatus.Text = string.Format("{0} of {1} results calculated.", _completedResults, _totalResults); SetProgressBarValue(progressBarResults, 100 * _completedResults / _totalResults); } if (null != _completedBackgroundQuery) { if (_workspaceOpenTime == null) { _firstSeenLockTime.Clear(); } foreach (var lockId in _completedBackgroundQuery.ForeignLockIds) { if (!_firstSeenLockTime.ContainsKey(lockId)) { _firstSeenLockTime.Add(lockId, DateTime.Now); } } foreach (var lockId in _firstSeenLockTime.Keys.ToArray().Except(_completedBackgroundQuery.ForeignLockIds)) { _firstSeenLockTime.Remove(lockId); } if (_workspaceOpenTime == null) { _workspaceOpenTime = DateTime.Now; } DateTime staleTime = new DateTime(Math.Min(DateTime.Now.AddMinutes(-ExistingForeignLockStaleTimeMinutes).Ticks, Math.Max(_workspaceOpenTime.Value.Ticks, DateTime.Now.AddMinutes(-NewForeignLockStaleTimeMinutes).Ticks))); int staleForeignLockCount = _firstSeenLockTime.Values.Count(time => staleTime.CompareTo(time) > 0); if (0 == staleForeignLockCount) { panelForeignLocks.Visible = false; } else { lblForeignLocks.Text = string.Format( "The database says that there are {0} tasks being performed by other instances of Topograph", staleForeignLockCount); panelForeignLocks.Visible = true; } } base.UpdateStepStatus(); }