74 lines
2.1 KiB
C#
74 lines
2.1 KiB
C#
using ReactiveUI;
|
|
using System;
|
|
using System.Reactive.Linq;
|
|
|
|
namespace EinmaleinsTrainer.ViewModels;
|
|
|
|
public class MainWindowViewModel : ViewModelBase
|
|
{
|
|
private ViewModelBase _current;
|
|
public ViewModelBase Current
|
|
{
|
|
get => _current;
|
|
set => SetProperty(ref _current, value);
|
|
}
|
|
|
|
public readonly MainViewModel MainModel = new();
|
|
public readonly QuizViewModel QuizModel = new();
|
|
public readonly ResultViewModel ResultModel = new();
|
|
private readonly ViewModelBase _dummy = new();
|
|
|
|
public MainWindowViewModel()
|
|
{
|
|
MainModel.Init();
|
|
_current = MainModel;
|
|
|
|
ResultModel.RestartCommand
|
|
.ObserveOn(RxApp.MainThreadScheduler)
|
|
.Subscribe(result =>
|
|
{
|
|
// In order to keep the last value if required
|
|
int secondsPerQuestion = MainModel.SecondsPerQuestion;
|
|
MainModel.Init();
|
|
if (result.TimeRequired != null)
|
|
{
|
|
MainModel.SecondsPerQuestion = (result.Score >= 10) ?
|
|
(int)Math.Round(0.15 * result.TimeRequired.Value.TotalSeconds, 0, MidpointRounding.AwayFromZero) :
|
|
secondsPerQuestion;
|
|
MainModel.UseTimer = true;
|
|
}
|
|
Current = MainModel;
|
|
});
|
|
|
|
QuizModel.Finished
|
|
.ObserveOn(RxApp.MainThreadScheduler)
|
|
.Subscribe(result =>
|
|
{
|
|
ResultModel.Init(result);
|
|
Current = ResultModel;
|
|
});
|
|
|
|
QuizModel.RedrawRequired += (s, a) =>
|
|
{
|
|
Current = _dummy;
|
|
Current = QuizModel;
|
|
};
|
|
|
|
MainModel.StartCommand
|
|
.ObserveOn(RxApp.MainThreadScheduler)
|
|
.Subscribe(quiz =>
|
|
{
|
|
if (quiz.Questions.Count == 0) return;
|
|
QuizModel.Init(quiz);
|
|
Current = QuizModel;
|
|
});
|
|
|
|
MainModel.RedrawRequired += (s, a) =>
|
|
{
|
|
Current = _dummy;
|
|
Current = MainModel;
|
|
};
|
|
|
|
}
|
|
}
|