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;
}
}
}