Files
LehrerApp/LehrerApp.Desktop/Views/Groups/StudentGroupGeneratorWindow.axaml
T
admin d4b1419f9a
CI / build-and-test (push) Canceled after 0s
Add configurable student group generator
2026-09-29 14:22:59 +02:00

218 lines
12 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:LehrerApp.Desktop.ViewModels.Groups"
x:Class="LehrerApp.Desktop.Views.Groups.StudentGroupGeneratorWindow"
x:DataType="vm:StudentGroupGeneratorViewModel"
Title="Gruppen zusammenstellen"
Width="780" Height="650" MinWidth="620" MinHeight="480"
WindowStartupLocation="CenterScreen">
<Grid RowDefinitions="Auto,*,Auto,Auto" Margin="24">
<StackPanel Grid.Row="0" Spacing="3" Margin="0,0,0,16">
<TextBlock Text="Gruppen zusammenstellen" Classes="dialogtitle"/>
<TextBlock Text="Eigenständiges Fenster für die Bildschirmfreigabe"
FontSize="12" Opacity="0.55"/>
</StackPanel>
<ScrollViewer Grid.Row="1">
<Grid x:Name="GroupResults">
<Grid.Transitions>
<Transitions>
<DoubleTransition Property="Opacity" Duration="0:0:0.18"/>
</Transitions>
</Grid.Transitions>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Spacing="12"
IsVisible="{Binding !HasGeneratedGroups}">
<TextBlock Text="◇ ◇ ◇" FontSize="26" Opacity="0.35" HorizontalAlignment="Center"/>
<TextBlock Text="Noch keine Gruppen erstellt" FontSize="20" FontWeight="SemiBold"
HorizontalAlignment="Center"/>
<TextBlock Text="{Binding StatusText}" Opacity="0.6" TextAlignment="Center"
TextWrapping="Wrap" MaxWidth="460"/>
</StackPanel>
<ItemsControl ItemsSource="{Binding GeneratedGroups}"
IsVisible="{Binding HasGeneratedGroups}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:GeneratedStudentGroup">
<Border Width="220" Margin="7" Padding="16"
Background="{DynamicResource AppCardBackgroundBrush}"
BorderBrush="{DynamicResource AppCardBorderBrush}"
BorderThickness="1" CornerRadius="12">
<StackPanel Spacing="9">
<TextBlock Text="{Binding Title}" FontSize="16" FontWeight="SemiBold"
Foreground="{DynamicResource AppAccentTextBrush}"/>
<ItemsControl ItemsSource="{Binding Members}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:StudentGroupMember">
<TextBlock Text="{Binding Name}" Margin="0,3" TextWrapping="Wrap"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</ScrollViewer>
<StackPanel Grid.Row="2" Spacing="8" Margin="0,12,0,10">
<Button Content="Gruppen zusammenstellen" Click="OnGenerate"
IsEnabled="{Binding CanGenerate}" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center" Height="48" FontSize="16" FontWeight="SemiBold"/>
<TextBlock Text="{Binding StatusText}" HorizontalAlignment="Center" Opacity="0.65"
IsVisible="{Binding HasGeneratedGroups}"/>
<Border Background="{DynamicResource AppChipBackgroundBrush}" CornerRadius="8" Padding="10,7"
IsVisible="{Binding WarningText, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
<TextBlock Text="{Binding WarningText}" TextWrapping="Wrap" FontSize="12"
Foreground="{DynamicResource AppStatusWarningBrush}"/>
</Border>
</StackPanel>
<Expander Grid.Row="3" Header="Optionen" IsExpanded="False">
<ScrollViewer MaxHeight="340">
<StackPanel Spacing="11" Margin="0,10,6,4">
<Grid ColumnDefinitions="*,16,*">
<StackPanel Grid.Column="0" Spacing="5">
<TextBlock Text="Lerngruppe" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding Groups}" SelectedItem="{Binding SelectedGroup}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="vm:StudentDrawGroup">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="5">
<TextBlock Text="Teilnehmende" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding ParticipantModeOptions}"
SelectedItem="{Binding ParticipantModeName}"/>
</StackPanel>
</Grid>
<Grid ColumnDefinitions="*,16,*" Margin="0,5,0,0">
<StackPanel Grid.Column="0" Spacing="5">
<TextBlock Text="Zielgröße je Gruppe" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding TargetGroupSize}" Minimum="2" Maximum="20"
Increment="1" FormatString="0"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="5">
<TextBlock Text="Zielanzahl Gruppen" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding TargetGroupCount}" Minimum="1" Maximum="20"
Increment="1" FormatString="0"/>
</StackPanel>
</Grid>
<Grid ColumnDefinitions="160,*,110" RowDefinitions="Auto,Auto,Auto" Margin="0,6,0,0">
<TextBlock Grid.Row="0" Text="Priorität Zielgröße" VerticalAlignment="Center"/>
<Slider Grid.Row="0" Grid.Column="1" Minimum="0" Maximum="100"
Value="{Binding SizePriority}" Margin="10,0"/>
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding SizePriorityLabel}"
HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="12" Opacity="0.7"/>
<TextBlock Grid.Row="1" Text="Priorität Gruppenanzahl" VerticalAlignment="Center"/>
<Slider Grid.Row="1" Grid.Column="1" Minimum="0" Maximum="100"
Value="{Binding CountPriority}" Margin="10,0"/>
<TextBlock Grid.Row="1" Grid.Column="2" Text="{Binding CountPriorityLabel}"
HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="12" Opacity="0.7"/>
<TextBlock Grid.Row="2" Text="Leistungsverteilung" VerticalAlignment="Center"/>
<Slider Grid.Row="2" Grid.Column="1" Minimum="-100" Maximum="100"
Value="{Binding PerformanceDistribution}" Margin="10,0"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="{Binding PerformanceDistributionLabel}"
HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="12" Opacity="0.7"/>
</Grid>
<Grid ColumnDefinitions="*,*" Margin="170,-7,110,0">
<TextBlock Text="homogen" FontSize="10" Opacity="0.5"/>
<TextBlock Grid.Column="1" Text="heterogen" HorizontalAlignment="Right" FontSize="10" Opacity="0.5"/>
</Grid>
<CheckBox Content="Förderschüler möglichst gleichmäßig verteilen"
IsChecked="{Binding DistributeSupportStudents}" Margin="0,5,0,0"/>
<Border Height="1" Background="{DynamicResource AppCardBorderBrush}" Margin="0,5"/>
<TextBlock Text="Paarregeln" FontWeight="SemiBold"/>
<TextBlock Text="Zwei Schüler auswählen und anschließend festlegen, ob sie zusammen oder getrennt arbeiten sollen."
FontSize="11" Opacity="0.55" TextWrapping="Wrap"/>
<Grid ColumnDefinitions="*,12,*" Margin="0,2,0,0">
<ComboBox Grid.Column="0" ItemsSource="{Binding PairCandidates}"
SelectedItem="{Binding SelectedPairStudentA}" PlaceholderText="Erster Schüler">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="vm:StudentPairCandidate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ComboBox Grid.Column="2" ItemsSource="{Binding PairCandidates}"
SelectedItem="{Binding SelectedPairStudentB}" PlaceholderText="Zweiter Schüler">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="vm:StudentPairCandidate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
<Grid ColumnDefinitions="*,12,*">
<Button Grid.Column="0" Content="Zusammen einteilen" Command="{Binding AddForcedPairCommand}"
HorizontalAlignment="Stretch"/>
<Button Grid.Column="2" Content="Voneinander trennen" Command="{Binding AddExcludedPairCommand}"
HorizontalAlignment="Stretch"/>
</Grid>
<TextBlock Text="{Binding PairingMessage}" Foreground="{DynamicResource AppStatusWarningBrush}"
FontSize="11" IsVisible="{Binding PairingMessage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
<Grid ColumnDefinitions="160,*,110" RowDefinitions="Auto,Auto">
<TextBlock Grid.Row="0" Text="Priorität zusammen" VerticalAlignment="Center"/>
<Slider Grid.Row="0" Grid.Column="1" Minimum="0" Maximum="100"
Value="{Binding ForcedPairPriority}" Margin="10,0"/>
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding ForcedPairPriorityLabel}"
HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="12" Opacity="0.7"/>
<TextBlock Grid.Row="1" Text="Priorität trennen" VerticalAlignment="Center"/>
<Slider Grid.Row="1" Grid.Column="1" Minimum="0" Maximum="100"
Value="{Binding ExcludedPairPriority}" Margin="10,0"/>
<TextBlock Grid.Row="1" Grid.Column="2" Text="{Binding ExcludedPairPriorityLabel}"
HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="12" Opacity="0.7"/>
</Grid>
<Grid ColumnDefinitions="*,12,*">
<StackPanel Grid.Column="0" Spacing="5">
<TextBlock Text="Zusammen" FontSize="12" Opacity="0.7"/>
<ItemsControl ItemsSource="{Binding ForcedPairs}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:StudentPairRule">
<Grid ColumnDefinitions="*,Auto" Margin="0,2">
<TextBlock Text="{Binding Display}" TextWrapping="Wrap" VerticalAlignment="Center"/>
<Button Grid.Column="1" Content="×" Command="{Binding RemoveCommand}"
ToolTip.Tip="Regel entfernen" Padding="8,2"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="5">
<TextBlock Text="Getrennt" FontSize="12" Opacity="0.7"/>
<ItemsControl ItemsSource="{Binding ExcludedPairs}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:StudentPairRule">
<Grid ColumnDefinitions="*,Auto" Margin="0,2">
<TextBlock Text="{Binding Display}" TextWrapping="Wrap" VerticalAlignment="Center"/>
<Button Grid.Column="1" Content="×" Command="{Binding RemoveCommand}"
ToolTip.Tip="Regel entfernen" Padding="8,2"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
</StackPanel>
</ScrollViewer>
</Expander>
</Grid>
</Window>