Skip to content

Commit 7dfd12c

Browse files
committed
Add TraitCollectionView
1 parent 763909e commit 7dfd12c

File tree

7 files changed

+199
-20
lines changed

7 files changed

+199
-20
lines changed

PalCalc.UI/Model/GraphSharp/BreedingTreeNodeViewModel.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Linq;
99
using System.Text;
1010
using System.Threading.Tasks;
11+
using System.Windows;
1112

1213
namespace PalCalc.UI.Model
1314
{
@@ -19,6 +20,7 @@ public BreedingTreeNodeViewModel(IBreedingTreeNode node)
1920
Value = node;
2021
Pal = new PalViewModel(node.PalRef.Pal);
2122
Traits = node.PalRef.Traits.Select(t => new TraitViewModel(t)).ToList();
23+
TraitCollection = new TraitCollectionViewModel(Traits);
2224
Location = new PalLocationViewModel(node.PalRef.Location);
2325
Gender = node.PalRef.Gender.ToString();
2426
}
@@ -29,6 +31,10 @@ public BreedingTreeNodeViewModel(IBreedingTreeNode node)
2931

3032
public List<TraitViewModel> Traits { get; }
3133

34+
public TraitCollectionViewModel TraitCollection { get; }
35+
36+
public Visibility TraitsVisibility => Traits.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
37+
3238
public PalLocationViewModel Location { get; }
3339

3440
public string Gender { get; }

PalCalc.UI/PalCalc.UI.csproj.user

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
<Compile Update="View\SolverControlsView.xaml.cs">
2929
<SubType>Code</SubType>
3030
</Compile>
31+
<Compile Update="View\TraitCollectionView.xaml.cs">
32+
<SubType>Code</SubType>
33+
</Compile>
3134
<Compile Update="View\TraitView.xaml.cs">
3235
<SubType>Code</SubType>
3336
</Compile>
@@ -57,6 +60,9 @@
5760
<Page Update="View\SolverControlsView.xaml">
5861
<SubType>Designer</SubType>
5962
</Page>
63+
<Page Update="View\TraitCollectionView.xaml">
64+
<SubType>Designer</SubType>
65+
</Page>
6066
<Page Update="View\TraitView.xaml">
6167
<SubType>Designer</SubType>
6268
</Page>

PalCalc.UI/View/BreedingResultView.xaml

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,21 @@
1515
>
1616
<UserControl.Resources>
1717
<DataTemplate x:Key="DemoTemplate" DataType="{x:Type m:BreedingTreeNodeViewModel}">
18-
<StackPanel Orientation="Horizontal" Margin="5">
19-
<Border Width="50" Height="50" CornerRadius="25" BorderThickness="1" BorderBrush="White" Margin="0,0,5,0">
20-
<Border.Background>
21-
<ImageBrush Stretch="Fill" ImageSource="{Binding Pal.Icon}" />
22-
</Border.Background>
23-
</Border>
24-
<StackPanel Orientation="Vertical">
25-
<TextBlock Text="{Binding Gender}" Foreground="White" />
26-
<TextBlock Text="{Binding Location.Description}" Foreground="White" />
27-
<ItemsControl ItemsSource="{Binding Traits}" Background="Black" Foreground="Black" BorderThickness="0" Margin="0,0,0,0">
28-
<ItemsControl.ItemTemplate>
29-
<DataTemplate DataType="vm:TraitViewModel">
30-
<local:TraitView DataContext="{Binding}" MinWidth="100" Margin="0,2,0,0" />
31-
</DataTemplate>
32-
</ItemsControl.ItemTemplate>
33-
</ItemsControl>
18+
<StackPanel Orientation="Vertical" Margin="5" MinWidth="150">
19+
<StackPanel Orientation="Horizontal">
20+
<Border Width="50" Height="50" CornerRadius="25" BorderThickness="1" BorderBrush="White" Margin="0,0,5,0">
21+
<Border.Background>
22+
<ImageBrush Stretch="Fill" ImageSource="{Binding Pal.Icon}" />
23+
</Border.Background>
24+
</Border>
25+
<StackPanel Orientation="Vertical">
26+
<TextBlock Text="{Binding Gender}" Foreground="White" />
27+
<TextBlock Text="{Binding Location.Description}" Foreground="White" />
28+
</StackPanel>
3429
</StackPanel>
30+
<Grid Visibility="{Binding TraitsVisibility}">
31+
<local:TraitCollectionView Margin="0,5,0,0" DataContext="{Binding TraitCollection}" Width="Auto" Background="Black" />
32+
</Grid>
3533
</StackPanel>
3634
</DataTemplate>
3735

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<Grid x:Class="PalCalc.UI.View.TraitCollectionView"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6+
xmlns:local="clr-namespace:PalCalc.UI.View"
7+
xmlns:vm="clr-namespace:PalCalc.UI.ViewModel"
8+
mc:Ignorable="d"
9+
d:DataContext="{d:DesignInstance vm:TraitCollectionViewModel, IsDesignTimeCreatable=True}"
10+
d:DesignHeight="450" d:DesignWidth="800">
11+
</Grid>
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using PalCalc.UI.ViewModel;
2+
using QuickGraph;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using System.Windows;
9+
using System.Windows.Controls;
10+
using System.Windows.Data;
11+
using System.Windows.Documents;
12+
using System.Windows.Input;
13+
using System.Windows.Media;
14+
using System.Windows.Media.Imaging;
15+
using System.Windows.Navigation;
16+
using System.Windows.Shapes;
17+
18+
namespace PalCalc.UI.View
19+
{
20+
/// <summary>
21+
/// Interaction logic for TraitCollectionView.xaml
22+
/// </summary>
23+
public partial class TraitCollectionView : Grid
24+
{
25+
public TraitCollectionView()
26+
{
27+
InitializeComponent();
28+
29+
DataContextChanged += TraitCollectionView_DataContextChanged;
30+
}
31+
32+
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
33+
{
34+
base.OnRenderSizeChanged(sizeInfo);
35+
36+
var vm = DataContext as TraitCollectionViewModel;
37+
if (vm == null) return;
38+
39+
foreach (var child in Children)
40+
{
41+
var traitView = child as TraitView;
42+
if (traitView == null) continue;
43+
44+
// force child sizing (otherwise the '*' column sizing doesn't stay proportional)
45+
traitView.Width = (ActualWidth - vm.Spacing) / 2;
46+
}
47+
}
48+
49+
private void TraitCollectionView_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
50+
{
51+
var newModel = e.NewValue as TraitCollectionViewModel;
52+
if (newModel == null) return;
53+
54+
Children.Clear();
55+
56+
ColumnDefinitions.Clear();
57+
foreach (var cdef in newModel.ColumnDefinitions)
58+
ColumnDefinitions.Add(cdef);
59+
60+
RowDefinitions.Clear();
61+
foreach (var rdef in newModel.RowDefinitions)
62+
RowDefinitions.Add(rdef);
63+
64+
65+
66+
foreach (var vm in newModel.Traits)
67+
{
68+
var traitView = new TraitView();
69+
traitView.DataContext = vm;
70+
71+
Grid.SetRow(traitView, newModel.RowIndexOf(vm));
72+
Grid.SetColumn(traitView, newModel.ColumnIndexOf(vm));
73+
74+
Children.Add(traitView);
75+
}
76+
}
77+
}
78+
}

PalCalc.UI/View/TraitView.xaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
66
xmlns:local="clr-namespace:PalCalc.UI.View"
77
xmlns:vm="clr-namespace:PalCalc.UI.ViewModel"
8+
d:Width="40"
89
mc:Ignorable="d"
910
d:DataContext="{d:DesignInstance vm:TraitViewModel, IsDesignTimeCreatable=True}">
1011
<Grid>
@@ -24,15 +25,15 @@
2425
</Border>
2526
<Grid Grid.Column="1" Margin="5,2,2,2">
2627
<Grid.ColumnDefinitions>
27-
<ColumnDefinition Width="Auto" />
2828
<ColumnDefinition Width="*" />
29+
<ColumnDefinition Width="5" />
2930
<ColumnDefinition Width="Auto" />
3031
</Grid.ColumnDefinitions>
3132

32-
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
33-
<TextBlock Grid.Column="0" Text="{Binding Name}" Height="14" FontSize="10" VerticalAlignment="Center" Foreground="White" />
33+
<Viewbox Grid.Column="0" StretchDirection="DownOnly" Stretch="Uniform" HorizontalAlignment="Left">
34+
<TextBlock Text="{Binding Name}" Height="14" FontSize="10" VerticalAlignment="Center" Foreground="White" />
3435
</Viewbox>
35-
<Grid Grid.Column="2" Margin="10,0,0,0">
36+
<Grid Grid.Column="2">
3637
<Rectangle Width="12" Height="12">
3738
<Rectangle.Fill>
3839
<SolidColorBrush Color="{Binding RankColor}" />
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics.Eventing.Reader;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using System.Windows;
8+
using System.Windows.Controls;
9+
10+
namespace PalCalc.UI.ViewModel
11+
{
12+
public class TraitCollectionViewModel
13+
{
14+
// for XAML designer view
15+
public TraitCollectionViewModel() : this(
16+
new List<TraitViewModel>()
17+
{
18+
new TraitViewModel(),
19+
new TraitViewModel(),
20+
new TraitViewModel(),
21+
})
22+
{
23+
}
24+
25+
public TraitCollectionViewModel(List<TraitViewModel> traits)
26+
{
27+
Traits = traits;
28+
29+
RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
30+
for (int i = 1; i < NumRows; i++)
31+
{
32+
if (i % 2 == 1)
33+
{
34+
RowDefinitions.Add(new RowDefinition() { Height = new GridLength(Spacing) });
35+
}
36+
else
37+
{
38+
RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
39+
}
40+
}
41+
42+
ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
43+
ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(Spacing) });
44+
ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
45+
}
46+
47+
public List<TraitViewModel> Traits { get; }
48+
49+
public int Spacing => 3;
50+
51+
public int EntriesPerRow => 2;
52+
53+
public int NumRows
54+
{
55+
get
56+
{
57+
if (Traits.Count <= 2) return 1;
58+
else return 3;
59+
}
60+
}
61+
62+
public List<RowDefinition> RowDefinitions { get; } = new List<RowDefinition>();
63+
public List<ColumnDefinition> ColumnDefinitions { get; } = new List<ColumnDefinition>();
64+
65+
public int RowIndexOf(TraitViewModel trait)
66+
{
67+
var mainRow = Traits.IndexOf(trait) / EntriesPerRow;
68+
if (mainRow == 0) return mainRow;
69+
else return mainRow + 1;
70+
}
71+
72+
public int ColumnIndexOf(TraitViewModel trait)
73+
{
74+
var mainColumn = Traits.IndexOf(trait) % EntriesPerRow;
75+
if (mainColumn == 0) return mainColumn;
76+
else return mainColumn + 1;
77+
}
78+
}
79+
}

0 commit comments

Comments
 (0)