using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; 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; using Tango.BL.Entities; using Tango.Touch.Components; using Tango.Touch.Controls; namespace Tango.PPC.Common.Controls { /// /// Represents the twin color catalog control. /// /// /// public partial class TwineCatalogControl : UserControl { private ColorCatalog _catalog; private bool _preventChange; private double _lastScrollPosition = 0; private bool _findInProcess = false; /// /// Gets or sets the selected catalog item. /// public ColorCatalogsItem SelectedItem { get { return (ColorCatalogsItem)GetValue(SelectedItemProperty); } set { SetValue(SelectedItemProperty, value); } } public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(ColorCatalogsItem), typeof(TwineCatalogControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnSelectedItemPropertyChanged))); private static void OnSelectedItemPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { TwineCatalogControl twineCatalogControl = (TwineCatalogControl)d; if(e.OldValue != e.NewValue) { twineCatalogControl.SelectedItemPropertyChanged(); } } /// /// Gets or sets the collection filter. /// public ICollectionFilter CollectionFilter { get { return (ICollectionFilter)GetValue(CollectionFilterProperty); } set { SetValue(CollectionFilterProperty, value); } } public static readonly DependencyProperty CollectionFilterProperty = DependencyProperty.Register("CollectionFilter", typeof(ICollectionFilter), typeof(TwineCatalogControl), new PropertyMetadata(null, (d, e) => (d as TwineCatalogControl).OnCollectionFilterChanged())); public void SelectedItemPropertyChanged() { // if(renderer.SelectedItem != this.SelectedItem) // renderer.SelectedItem = this.SelectedItem; } /// /// Initializes a new instance of the class. /// public TwineCatalogControl() { InitializeComponent(); //list.ApplyTemplate(); //list.Loaded += TwineCatalogControl_Loaded; DataContextChanged += (x, y) => { _catalog = DataContext as ColorCatalog; if (scrollViewer != null && _catalog != null) { scrollViewer.ScrollToTop(); _preventChange = true; slider.Value = _catalog.ColorCatalogsGroupsOrdered.Count; _preventChange = false; } }; scrollViewer.Scrolling += ScrollViewer_Scrolling; } /// /// Handles the Scrolling event of the ScrollViewer control. /// /// The source of the event. /// The instance containing the event data. private void ScrollViewer_Scrolling(object sender, Touch.Controls.DoubleValueChangedEventArgs e) { if (!_preventChange) { if (e.Value > _lastScrollPosition + 60 || e.Value < _lastScrollPosition - 60) { var group = renderer.GetVisibleGroup(); if (group != null) { _preventChange = true; slider.Value = slider.Maximum - _catalog.ColorCatalogsGroupsOrdered.IndexOf(group); _preventChange = false; } _lastScrollPosition = e.Value; } } } /// /// Handles the ValueChanged event of the TouchSlider control. /// /// The source of the event. /// The instance containing the event data. private void TouchSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (_catalog == null || _catalog.ColorCatalogsGroupsOrdered.Count == 0) return; if (!_preventChange) { if (_catalog != null && scrollViewer != null) { _preventChange = true; var group = _catalog.ColorCatalogsGroupsOrdered.ElementAt(_catalog.ColorCatalogsGroupsOrdered.Count - 1 - (int)e.NewValue); scrollViewer.ScrollToPosition(renderer.GetGroupPosition(group)); _preventChange = false; } } if (_catalog != null && _catalog.ColorCatalogsGroupsOrdered.Count > _catalog.ColorCatalogsGroupsOrdered.Count - 1 - (int)e.NewValue && _catalog.ColorCatalogsGroupsOrdered.Count - 1 - (int)e.NewValue > -1) { slider.Foreground = new SolidColorBrush(_catalog.ColorCatalogsGroupsOrdered.ElementAt(_catalog.ColorCatalogsGroupsOrdered.Count - 1 - (int)e.NewValue).Color); } } private void OnCollectionFilterChanged() { if (_findInProcess) return; if (CollectionFilter != null) { CollectionFilter.FilterChanged -= CollectionFilter_FilterChanged; CollectionFilter.FilterChanged += CollectionFilter_FilterChanged; } } private void CollectionFilter_FilterChanged(object sender, EventArgs e) { _findInProcess = true; if (CollectionFilter != null ) { renderer.ScrollToFirstFindItem(CollectionFilter); } _findInProcess = false; } } }