private void SetupClassButton_Click([CanBeNull] object sender, [NotNull] EventArgs e)
        {
            using (var form = new ClassSetupForm())
            {
                if (form.ShowDialog() == DialogResult.OK)
                {
                    Requirements =
                        Requirements.ChangeIntermediateTimerCount(
                            CacheManager.DefaultInstance.ActiveModel.IntermediateTimerCount)
                            .ChangeStartFinishMinDelayForSingleSensor(
                                CacheManager.DefaultInstance.ActiveModel.StartFinishMinDelayForSingleSensor);
                    healthMonitor.ForceChanged();

                    ApplyModelChangesToDisplayForms();
                }
            }
        }
        public void StartClass([NotNull] CompetitionClassRequirements requirements)
        {
            Guard.NotNull(requirements, nameof(requirements));

            Log.Debug("Entering StartClass.");

            ExecuteExclusiveIfStateIn(CompetitionClassState.Offline, () =>
            {
                modelSnapshot = CacheManager.DefaultInstance.ActiveModel;
                currentCompetitorNumber = modelSnapshot.GetBestStartingCompetitorNumber();

                nextCompetitorNumberTyped = null;
                nextCompetitorNumberGenerated = modelSnapshot.GetBestNextCompetitorNumberOrNull(currentCompetitorNumber);

                classRequirements = requirements;
                runData.Reset(false);

                SetState(CompetitionClassState.SetupCompleted);

                using (var collector = new VisualizationUpdateCollector(visualizer))
                {
                    collector.Include(VisualizationChangeFactory.ClearAll());
                    collector.Include(new ClassInfoUpdate(modelSnapshot.ClassInfo));

                    UpdateCurrentCompetitorVisualization(collector);
                    UpdateNextCompetitorVisualization(collector);

                    CompetitionRunResult previousCompetitorOrNull = modelSnapshot.GetLastCompletedOrNull();
                    collector.Include(new PreviousCompetitorRunUpdate(previousCompetitorOrNull));

                    IReadOnlyCollection<CompetitionRunResult> rankings =
                        modelSnapshot.FilterCompletedAndSortedAscendingByPlacement().Results;
                    collector.Include(new RankingsUpdate(rankings));
                }
            });
        }
        private void MainForm_Load([CanBeNull] object sender, [NotNull] EventArgs e)
        {
            LoadSettings();

            Requirements =
                Requirements.ChangeIntermediateTimerCount(
                    CacheManager.DefaultInstance.ActiveModel.IntermediateTimerCount)
                    .ChangeStartFinishMinDelayForSingleSensor(
                        CacheManager.DefaultInstance.ActiveModel.StartFinishMinDelayForSingleSensor);

            ApplyModelChangesToDisplayForms();

            sessionManager.Component.Start();
        }