using DominionBase.Enums; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace Dominion.NET_WPF.Controls { /// /// Interaction logic for ucTokenIcon.xaml /// public partial class ucTokenIcon : UserControl { public static readonly DependencyProperty TokenProperty = DependencyProperty.Register("Token", typeof(DominionBase.Token), typeof(ucTokenIcon), new PropertyMetadata(null)); public DominionBase.Token Token { get { return (DominionBase.Token)GetValue(TokenProperty); } set { SetValue(TokenProperty, value); if (value == null) { lToken.ToolTip = null; tbToken.Text = string.Empty; lToken.Background = lToken.Foreground = Brushes.Transparent; return; } lToken.ToolTip = Utilities.RenderText(value.Title); var text = Utilities.RenderText(value.DisplayString); tbToken.Text = text; var tokenType = value.GetType(); if (value is DominionBase.Cards.Seaside.EmbargoToken) { bToken.Background = Caching.BrushRepository.GetBackgroundBrush(Categories.Curse); lToken.Foreground = Brushes.Snow; } else if (value is DominionBase.Cards.Prosperity.VictoryToken) { bToken.Background = Caching.BrushRepository.GetBackgroundBrush(Categories.Victory); } else if (value is DominionBase.Cards.Prosperity.ContrabandMarker) { bToken.Background = Brushes.Black; lToken.Foreground = Brushes.Red; } else if (value is DominionBase.Cards.Prosperity.TradeRouteToken) { bToken.Background = Caching.BrushRepository.GetBackgroundBrush(Categories.Treasure); } else if (value is DominionBase.Cards.Cornucopia.BaneMarker) { bToken.Background = Caching.BrushRepository.GetBackgroundBrush(Categories.Reaction); tbToken.Effect = Caching.DropShadowRepository.GetDSE(8, Colors.White, 1d); } else if (value is DominionBase.Cards.Empires.DebtToken) { bToken.Background = new SolidColorBrush(Color.FromRgb(201, 81, 8)); lToken.Foreground = Brushes.White; } else if (value is DominionBase.Cards.Empires.ObeliskMarker) { bToken.Background = Caching.BrushRepository.GetBackgroundBrush(Categories.Landmark); } else if (value is DominionBase.Cards.PlayerToken) { var player = ((DominionBase.Cards.PlayerToken)Token).Owner; if (player != null) { var playerSettings = WMain.Settings.PlayerSettings.FirstOrDefault(ps => ps.Name == player.Name); bToken.Background = new SolidColorBrush(playerSettings.UIColor); bToken.CornerRadius = new CornerRadius(4); } } } } public static readonly DependencyProperty SizeProperty = DependencyProperty.Register("Size", typeof(CardSize), typeof(ucTokenIcon), new PropertyMetadata(CardSize.Text)); public CardSize Size { get { return (CardSize)GetValue(SizeProperty); } set { SetValue(SizeProperty, value); switch (value) { case CardSize.SmallText: dpName.Height = 16; lToken.Margin = new Thickness(0, 0, 2, 0); break; case CardSize.Text: dpName.Height = double.NaN; lToken.Margin = new Thickness(0); break; } } } public ucTokenIcon() { InitializeComponent(); if (WMain.Settings != null) { WMain.Settings.SettingsChanged += Settings_SettingsChanged; Settings_SettingsChanged(WMain.Settings, null); } } public void Dispose() { if (WMain.Settings != null) { WMain.Settings.SettingsChanged -= Settings_SettingsChanged; } } private void Settings_SettingsChanged(object sender, SettingsChangedEventArgs e) { var settings = sender as Settings; if (Token != null && Token.GetType().IsSubclassOf(typeof(DominionBase.Cards.PlayerToken))) { var player = ((DominionBase.Cards.PlayerToken)Token).Owner; if (player != null) { var playerSettings = settings?.PlayerSettings.FirstOrDefault(ps => ps.Name == player.Name); if (playerSettings != null) lToken.Background = new SolidColorBrush(playerSettings.UIColor); } } } } }