using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using LehrerApp.Desktop.ViewModels.Groups; namespace LehrerApp.Desktop.Views.Groups; public partial class ParticipationQuickInputDialog : Window { public ParticipationQuickInputDialog() => InitializeComponent(); protected override void OnOpened(EventArgs e) { base.OnOpened(e); Focus(); } protected override void OnKeyDown(KeyEventArgs e) { if (DataContext is not QuickInputViewModel vm) { base.OnKeyDown(e); return; } switch (e.Key) { case Key.D0 or Key.NumPad0: vm.SetRatingByNumber(0); e.Handled = true; break; case Key.D1 or Key.NumPad1: vm.SetRatingByNumber(1); e.Handled = true; break; case Key.D2 or Key.NumPad2: vm.SetRatingByNumber(2); e.Handled = true; break; case Key.D3 or Key.NumPad3: vm.SetRatingByNumber(3); e.Handled = true; break; case Key.D4 or Key.NumPad4: vm.SetRatingByNumber(4); e.Handled = true; break; case Key.D5 or Key.NumPad5: vm.SetRatingByNumber(5); e.Handled = true; break; // 6-9 sind nur für Punkte-Aspekte (3.1.3) sinnvoll, siehe QuickInputViewModel.SetRatingByNumber. case Key.D6 or Key.NumPad6: vm.SetRatingByNumber(6); e.Handled = true; break; case Key.D7 or Key.NumPad7: vm.SetRatingByNumber(7); e.Handled = true; break; case Key.D8 or Key.NumPad8: vm.SetRatingByNumber(8); e.Handled = true; break; case Key.D9 or Key.NumPad9: vm.SetRatingByNumber(9); e.Handled = true; break; case Key.Q: vm.SelectAspect(0); e.Handled = true; break; case Key.W: vm.SelectAspect(1); e.Handled = true; break; case Key.E: vm.SelectAspect(2); e.Handled = true; break; case Key.R: vm.SelectAspect(3); e.Handled = true; break; case Key.T: vm.SelectAspect(4); e.Handled = true; break; case Key.Space: vm.NextAspect(); e.Handled = true; break; case Key.Enter: if (vm.IsLastStudent) Close(); else vm.NextStudent(); e.Handled = true; break; case Key.Back: vm.PreviousStudent(); e.Handled = true; break; // Rechtsseitiges Pendant zu Q/W/E/R/T (links)/Enter/Backspace/Leertaste: ohne diese // Fälle fallen Pfeiltasten auf Avalonias Standard-Fokusnavigation durch und der Fokus // springt auf den Schließen-Button — ein Enter danach schließt dann den Dialog statt // zum nächsten Schüler zu springen. case Key.Up: vm.PreviousAspect(); e.Handled = true; break; case Key.Down: vm.NextAspect(); e.Handled = true; break; case Key.Right: vm.NextStudent(); e.Handled = true; break; case Key.Left: vm.PreviousStudent(); e.Handled = true; break; case Key.OemPlus or Key.Add: vm.IncrementRating(); e.Handled = true; break; case Key.OemMinus or Key.Subtract: vm.DecrementRating(); e.Handled = true; break; case Key.Escape: Close(); e.Handled = true; break; default: base.OnKeyDown(e); break; } } private void OnClose(object? s, RoutedEventArgs e) => Close(); }