EinmaleinsTrainer/ViewModels/MainViewModel.cs
Naoriel Sa' Rocí 4a4fb54143 Added first code.
Signed-off-by: Naoriel Sa' Rocí <naoriel@sa-roci.de>
2026-03-30 02:26:31 +02:00

140 lines
3.2 KiB
C#

using ReactiveUI;
using System.Reactive;
using EinmaleinsTrainer.Services;
using EinmaleinsTrainer.Models;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive.Linq;
using System;
namespace EinmaleinsTrainer.ViewModels;
public class MainViewModel : ViewModelBase
{
public ObservableCollection<int> SelectedRows { get; } = new();
public event EventHandler? RedrawRequired;
private bool _includeSquares;
public bool IncludeSquares
{
get => _includeSquares;
set => this.RaiseAndSetIfChanged(ref _includeSquares, value);
}
private bool _useTimer;
public bool UseTimer
{
get => _useTimer;
set
{
this.RaiseAndSetIfChanged(ref _useTimer, value);
RedrawRequired?.Invoke(this, new());
}
}
private int _secondsPerQuestion = 0;
public int SecondsPerQuestion
{
get => _secondsPerQuestion;
set
{
if (value < 2) value = 2;
if (value > 120) value = 120;
this.RaiseAndSetIfChanged(ref _secondsPerQuestion, value);
}
}
public ReactiveCommand<Unit, QuizModel> StartCommand { get; }
public MainViewModel()
{
StartCommand = ReactiveCommand.Create(
execute: () =>
{
var generator = new QuestionGenerator();
var questions = generator.Generate(SelectedRows.ToList(), IncludeSquares);
return new QuizModel(){ Questions = questions, UseTimer = UseTimer, Seconds = SecondsPerQuestion};
},
canExecute: Observable.Return(true).ObserveOn(RxApp.MainThreadScheduler),
outputScheduler: RxApp.MainThreadScheduler);
}
public void ToggleRow(int row, bool isChecked)
{
if (isChecked)
SelectedRows.Add(row);
else
SelectedRows.Remove(row);
}
public bool IsRow1Checked
{
get => SelectedRows.Contains(1);
set => ToggleRow(1, value);
}
public bool IsRow2Checked
{
get => SelectedRows.Contains(2);
set => ToggleRow(2, value);
}
public bool IsRow3Checked
{
get => SelectedRows.Contains(3);
set => ToggleRow(3, value);
}
public bool IsRow4Checked
{
get => SelectedRows.Contains(4);
set => ToggleRow(4, value);
}
public bool IsRow5Checked
{
get => SelectedRows.Contains(5);
set => ToggleRow(5, value);
}
public bool IsRow6Checked
{
get => SelectedRows.Contains(6);
set => ToggleRow(6, value);
}
public bool IsRow7Checked
{
get => SelectedRows.Contains(7);
set => ToggleRow(7, value);
}
public bool IsRow8Checked
{
get => SelectedRows.Contains(8);
set => ToggleRow(8, value);
}
public bool IsRow9Checked
{
get => SelectedRows.Contains(9);
set => ToggleRow(9, value);
}
public bool IsRow10Checked
{
get => SelectedRows.Contains(10);
set => ToggleRow(10, value);
}
public void Init()
{
SelectedRows.Clear();
IncludeSquares = false;
UseTimer = false;
SecondsPerQuestion = 30;
}
}