using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Dominion.NET_WPF.Controls { /// /// Interaction logic for ucCardConstraint.xaml /// public partial class ucCardConstraint : UserControl, IDisposable { DominionBase.Cards.Constraint _Constraint = null; public DominionBase.Cards.Constraint Constraint { get { return _Constraint; } set { _Constraint = value; cbMinimum.ItemsSource = this.Counts; cbMinimum.SelectedItem = _Constraint.Minimum; cbMaximum.ItemsSource = this.Counts; cbMaximum.SelectedItem = _Constraint.Maximum; cbCriteria.SelectedItem = _Constraint.ConstraintType; cbValue.SelectedItem = _Constraint.ConstraintValue; } } public static readonly RoutedEvent RemoveClickEvent = EventManager.RegisterRoutedEvent( "RemoveClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ucCardConstraint)); public event RoutedEventHandler RemoveClick { add { AddHandler(RemoveClickEvent, value); } remove { RemoveHandler(RemoveClickEvent, value); } } private List counts = new List(); public ObservableCollection Counts { get { if (counts.Count == 0) { for (int i = 0; i <= this.Constraint.RangeMax; i++) counts.Add(i); } return new ObservableCollection(counts); } } public ucCardConstraint() { InitializeComponent(); if (wMain.Settings != null) { wMain.Settings.SettingsChanged += new NET_WPF.Settings.SettingsChangedEventHandler(Settings_SettingsChanged); Settings_SettingsChanged(wMain.Settings, null); } } public void Dispose() { if (wMain.Settings != null) { wMain.Settings.SettingsChanged -= new NET_WPF.Settings.SettingsChangedEventHandler(Settings_SettingsChanged); } } void Settings_SettingsChanged(object sender, SettingsChangedEventArgs e) { Settings settings = sender as Settings; if (settings != null) { if (settings.ToolTipShowDuration == ToolTipShowDuration.Off) ToolTipService.SetIsEnabled(cbValue, false); else { ToolTipService.SetIsEnabled(cbValue, true); ToolTipService.SetShowDuration(cbValue, (int)settings.ToolTipShowDuration); } } } private void cbMinimum_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbMinimum == null || cbMinimum.SelectedItem == null) return; this.Constraint.Minimum = (int)cbMinimum.SelectedItem; cbMaximum.SelectedItem = this.Constraint.Maximum; } private void cbMaximum_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbMaximum == null || cbMaximum.SelectedItem == null) return; this.Constraint.Maximum = (int)cbMaximum.SelectedItem; cbMinimum.SelectedItem = this.Constraint.Minimum; } private void cbCriteria_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbValue == null) return; if (e.AddedItems.Count > 0) { this.Constraint.ConstraintType = (DominionBase.Cards.ConstraintType)e.AddedItems[0]; switch (this.Constraint.ConstraintType) { case DominionBase.Cards.ConstraintType.Unknown: break; case DominionBase.Cards.ConstraintType.SetIs: IEnumerable sets = Enum.GetValues(typeof(DominionBase.Cards.Source)).Cast(); cbValue.ItemsSource = sets.Where(s => s != DominionBase.Cards.Source.All); break; case DominionBase.Cards.ConstraintType.CategoryIs: case DominionBase.Cards.ConstraintType.CategoryContains: IEnumerable categories = Enum.GetValues(typeof(DominionBase.Cards.Category)).Cast(); cbValue.ItemsSource = categories.Where(c => c != DominionBase.Cards.Category.Unknown && c != DominionBase.Cards.Category.Prize); break; case DominionBase.Cards.ConstraintType.CardCosts: cbValue.ItemsSource = DisplayObjects.Costs; break; case DominionBase.Cards.ConstraintType.CardDontUse: cbValue.ItemsSource = DisplayObjects.Cards; if (this.Constraint.ConstraintValue is String) { foreach (DominionBase.Cards.Card card in cbValue.Items.OfType()) { if (card.Name == (String)this.Constraint.ConstraintValue) { cbValue.SelectedItem = card; break; } } } break; case DominionBase.Cards.ConstraintType.CardMustUse: cbValue.ItemsSource = DisplayObjects.Cards; if (this.Constraint.ConstraintValue is String) { foreach (DominionBase.Cards.Card card in cbValue.Items.OfType()) { if (card.Name == (String)this.Constraint.ConstraintValue) { cbValue.SelectedItem = card; break; } } } break; case DominionBase.Cards.ConstraintType.MemberOfGroup: cbValue.ItemsSource = DisplayObjects.Groups; break; default: break; } cbMinimum.ItemsSource = this.Counts; cbMinimum.SelectedItem = _Constraint.Minimum; cbMaximum.ItemsSource = this.Counts; cbMaximum.SelectedItem = _Constraint.Maximum; } } private void cbValue_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.AddedItems.Count > 0) { if (this.Constraint.ConstraintType == DominionBase.Cards.ConstraintType.CardDontUse || this.Constraint.ConstraintType == DominionBase.Cards.ConstraintType.CardMustUse) { ttCard.Visibility = System.Windows.Visibility.Visible; ttcCard.ICard = (DominionBase.Cards.Card)e.AddedItems[0]; this.Constraint.ConstraintValue = ((DominionBase.Cards.Card)e.AddedItems[0]).Name; } else { ttCard.Visibility = System.Windows.Visibility.Collapsed; ttcCard.ICard = null; this.Constraint.ConstraintValue = e.AddedItems[0]; } } } private void cbValue_MouseDown(object sender, MouseButtonEventArgs e) { FrameworkElement fe = sender as FrameworkElement; if (wMain.Settings == null || fe.ToolTip == null || !(fe.ToolTip is ToolTip) || (fe.ToolTip as ToolTip).Content == null || !((fe.ToolTip as ToolTip).Content is ToolTipCard) || ((fe.ToolTip as ToolTip).Content as ToolTipCard).ICard == null || ((fe.ToolTip as ToolTip).Content as ToolTipCard).ICard.CardType == DominionBase.Cards.Universal.TypeClass.Dummy) return; if (wMain.Settings.ShowToolTipOnRightClick && e.ChangedButton == MouseButton.Right && e.ButtonState == MouseButtonState.Pressed) { fe.CaptureMouse(); (fe.ToolTip as ToolTip).IsOpen = true; } } private void cbValue_MouseUp(object sender, MouseButtonEventArgs e) { FrameworkElement fe = sender as FrameworkElement; if (wMain.Settings == null || fe.ToolTip == null) return; if (wMain.Settings.ShowToolTipOnRightClick && e.ChangedButton == MouseButton.Right && e.ButtonState == MouseButtonState.Released) { fe.ReleaseMouseCapture(); (fe.ToolTip as ToolTip).IsOpen = false; } } private void bRemove_Click(object sender, RoutedEventArgs e) { (sender as Button).IsEnabled = false; RaiseEvent(new RoutedEventArgs(RemoveClickEvent)); (sender as Button).IsEnabled = true; } private void This_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { if ((cbValue.ToolTip as ToolTip).IsOpen) (cbValue.ToolTip as ToolTip).IsOpen = false; } } }