diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-06-05 16:57:10 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-06-05 16:57:10 +0300 |
| commit | aa47e2874ee506b6f0d9b9f70f780fb4fe5d8c73 (patch) | |
| tree | c5ee17f5e74343d87f95f68635851845342bc22f /Software/Visual_Studio/PPC/Tango.PPC.Common/Controls | |
| parent | 44c2abcbc60357ed282cae20c8476de2b50cbe25 (diff) | |
| download | Tango-aa47e2874ee506b6f0d9b9f70f780fb4fe5d8c73.tar.gz Tango-aa47e2874ee506b6f0d9b9f70f780fb4fe5d8c73.zip | |
Implemented Coats Catalog !
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/Controls')
3 files changed, 258 insertions, 43 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/CoatsCatalogControl.xaml b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/CoatsCatalogControl.xaml new file mode 100644 index 000000000..b9218a483 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/CoatsCatalogControl.xaml @@ -0,0 +1,145 @@ +<UserControl x:Class="Tango.PPC.Common.Controls.CoatsCatalogControl" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Tango.PPC.Common.Controls" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" + xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch" + xmlns:catalog="clr-namespace:Tango.BL.Catalogs;assembly=Tango.BL" + mc:Ignorable="d" + d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignInstance Type=catalog:Catalog, IsDesignTimeCreatable=False}"> + <Grid> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="1*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + + <touch:LightTouchScrollViewer x:Name="scrollViewer" ScrollBarVisibility="Collapsed"> + <!--<Border Background="White">--> + <local:TwineCatalogRenderer x:Name="renderer" Groups="{Binding Groups}" SelectedItem="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=SelectedItem,Mode=TwoWay}"></local:TwineCatalogRenderer> + <!--</Border>--> + </touch:LightTouchScrollViewer> + + <!--<touch:TouchListBox ItemsSource="{Binding Groups}" x:Name="list" x:FieldModifier="public" DisableRipple="True" ScrollBarVisibility="Collapsed" SelectionMode="None"> + <touch:TouchListBox.ItemTemplate> + <DataTemplate> + <StackPanel Margin="0 0 10 0"> + <TextBlock HorizontalAlignment="Center" Text="{Binding Name,IsAsync=True}" FontSize="{StaticResource TangoTitleFontSize}"></TextBlock> + <touch:TouchStaticListBox ItemsSource="{Binding Items,IsAsync=True}" SelectedItem="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=SelectedItem,Mode=TwoWay}" Margin="0 20 0 40"> + <touch:TouchStaticListBox.ItemsPanel> + <ItemsPanelTemplate> + <WrapPanel Orientation="Horizontal" /> + </ItemsPanelTemplate> + </touch:TouchStaticListBox.ItemsPanel> + <touch:TouchStaticListBox.ItemContainerStyle> + <Style TargetType="{x:Type touch:TouchStaticListBoxItem}"> + <Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter> + <Setter Property="RenderTransform"> + <Setter.Value> + <ScaleTransform ScaleX="1" ScaleY="1" /> + </Setter.Value> + </Setter> + --> + <!--<Setter Property="Effect"> + <Setter.Value> + <DropShadowEffect Color="{StaticResource TangoDarkForegroundColor}" ShadowDepth="0" BlurRadius="20" Opacity="0" /> + </Setter.Value> + </Setter>--> + <!-- + <Style.Triggers> + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=IsSelected}" Value="True"> + <DataTrigger.EnterActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1.5" Duration="00:00:00" /> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1.5" Duration="00:00:00" /> + --> + <!--<DoubleAnimation Storyboard.TargetProperty="Effect.Opacity" To="1" Duration="00:00:0.2" />--> + <!-- + </Storyboard> + </BeginStoryboard> + </DataTrigger.EnterActions> + <DataTrigger.ExitActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:00" /> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:00" /> + --> + <!--<DoubleAnimation Storyboard.TargetProperty="Effect.Opacity" To="0" Duration="00:00:0.2" />--> + <!-- + </Storyboard> + </BeginStoryboard> + </DataTrigger.ExitActions> + </DataTrigger> + </Style.Triggers> + </Style> + </touch:TouchStaticListBox.ItemContainerStyle> + <touch:TouchStaticListBox.ItemTemplate> + <DataTemplate> + <StackPanel Margin="10" Width="70"> + <Ellipse Width="60" Height="60" Fill="{Binding Brush}" /> + --> + <!--<controls:FastTextBlock Margin="0 5 0 0" HorizontalAlignment="Center" Text="{Binding Name,IsAsync=True}"></controls:FastTextBlock>--> + <!-- + </StackPanel> + </DataTemplate> + </touch:TouchStaticListBox.ItemTemplate> + </touch:TouchStaticListBox> + </StackPanel> + </DataTemplate> + </touch:TouchListBox.ItemTemplate> + </touch:TouchListBox>--> + + <Grid Grid.Column="1"> + <!--<Rectangle Stroke="{StaticResource TangoDividerBrush}" HorizontalAlignment="Left" />--> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition/> + <ColumnDefinition/> + </Grid.ColumnDefinitions> + + <Border Width="25" CornerRadius="10"> + <Border.Clip> + <RectangleGeometry RadiusX="10" RadiusY="10"> + <RectangleGeometry.Rect> + <MultiBinding Converter="{StaticResource WidthHeightToRectConverter}"> + <Binding RelativeSource="{RelativeSource AncestorType=Border}" Path="ActualWidth" /> + <Binding RelativeSource="{RelativeSource AncestorType=Border}" Path="ActualHeight" /> + </MultiBinding> + </RectangleGeometry.Rect> + </RectangleGeometry> + </Border.Clip> + <ItemsControl ItemsSource="{Binding Groups}"> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <UniformGrid Columns="1" /> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + <ItemsControl.ItemTemplate> + <DataTemplate> + <Rectangle> + <Rectangle.Fill> + <SolidColorBrush Color="{Binding Color}" /> + </Rectangle.Fill> + </Rectangle> + </DataTemplate> + </ItemsControl.ItemTemplate> + </ItemsControl> + </Border> + + <Grid Grid.Column="1"> + <touch:TouchSlider x:Name="slider" ValueChanged="TouchSlider_ValueChanged" IsSnapToTickEnabled="True" Minimum="0" Maximum="{Binding Groups.Count,Converter={StaticResource MathOperatorConverter},ConverterParameter='-1'}" Orientation="Vertical" Width="40" Height="Auto" IsSelectionRangeEnabled="False"> + <touch:TouchSlider.ThumbTemplate> + <ControlTemplate> + <touch:TouchIcon Foreground="{Binding RelativeSource={RelativeSource AncestorType=touch:TouchSlider},Path=Foreground}" Width="40" Height="40" Icon="Water" Angle="-90" /> + </ControlTemplate> + </touch:TouchSlider.ThumbTemplate> + </touch:TouchSlider> + </Grid> + </Grid> + </Grid> + </Grid> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/CoatsCatalogControl.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/CoatsCatalogControl.xaml.cs new file mode 100644 index 000000000..f4b764ad0 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/CoatsCatalogControl.xaml.cs @@ -0,0 +1,112 @@ +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.Catalogs; + +namespace Tango.PPC.Common.Controls +{ + /// <summary> + /// Interaction logic for CoatsCatalogControl.xaml + /// </summary> + public partial class CoatsCatalogControl : UserControl + { + private Catalog _catalog; + private bool _preventChange; + private double _lastScrollPosition = 0; + + /// <summary> + /// Gets or sets the selected catalog item. + /// </summary> + public CatalogItem SelectedItem + { + get { return (CatalogItem)GetValue(SelectedItemProperty); } + set { SetValue(SelectedItemProperty, value); } + } + public static readonly DependencyProperty SelectedItemProperty = + DependencyProperty.Register("SelectedItem", typeof(CatalogItem), typeof(CoatsCatalogControl), new PropertyMetadata(null)); + + public CoatsCatalogControl() + { + InitializeComponent(); + + //list.ApplyTemplate(); + //list.Loaded += TwineCatalogControl_Loaded; + DataContextChanged += (x, y) => + { + _catalog = DataContext as Catalog; + + if (scrollViewer != null && _catalog != null) + { + scrollViewer.ScrollToTop(); + _preventChange = true; + slider.Value = _catalog.Groups.Count; + _preventChange = false; + } + }; + + scrollViewer.Scrolling += ScrollViewer_Scrolling; + } + + /// <summary> + /// Handles the Scrolling event of the ScrollViewer control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="Touch.Controls.DoubleValueChangedEventArgs"/> instance containing the event data.</param> + 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.Groups.IndexOf(group); + _preventChange = false; + } + + _lastScrollPosition = e.Value; + } + } + } + + /// <summary> + /// Handles the ValueChanged event of the TouchSlider control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="RoutedPropertyChangedEventArgs{System.Double}"/> instance containing the event data.</param> + private void TouchSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) + { + if (_catalog == null || _catalog.Groups.Count == 0) return; + + if (!_preventChange) + { + if (_catalog != null) + { + _preventChange = true; + var group = _catalog.Groups.ElementAt(_catalog.Groups.Count - 1 - (int)e.NewValue); + scrollViewer.ScrollToPosition(renderer.GetGroupPosition(group)); + _preventChange = false; + } + } + + if (_catalog != null && _catalog.Groups.Count > _catalog.Groups.Count - 1 - (int)e.NewValue && _catalog.Groups.Count - 1 - (int)e.NewValue > -1) + { + slider.Foreground = new SolidColorBrush(_catalog.Groups.ElementAt(_catalog.Groups.Count - 1 - (int)e.NewValue).Color); + } + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/TwineCatalogControl.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/TwineCatalogControl.xaml.cs index af5888f3f..5985fbd49 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/TwineCatalogControl.xaml.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/TwineCatalogControl.xaml.cs @@ -25,7 +25,6 @@ namespace Tango.PPC.Common.Controls public partial class TwineCatalogControl : UserControl { private Catalog _catalog; - private bool _loaded; private bool _preventChange; private double _lastScrollPosition = 0; @@ -38,7 +37,7 @@ namespace Tango.PPC.Common.Controls set { SetValue(SelectedItemProperty, value); } } public static readonly DependencyProperty SelectedItemProperty = - DependencyProperty.Register("SelectedItem", typeof(CatalogItem), typeof(TwineCatalogControl), new PropertyMetadata(null,(d,e) => (d as TwineCatalogControl).OnSelectedItemChanged())); + DependencyProperty.Register("SelectedItem", typeof(CatalogItem), typeof(TwineCatalogControl), new PropertyMetadata(null)); /// <summary> /// Initializes a new instance of the <see cref="TwineCatalogControl"/> class. @@ -91,24 +90,6 @@ namespace Tango.PPC.Common.Controls } /// <summary> - /// Handles the Loaded event of the TwineCatalogControl control. - /// </summary> - /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="RoutedEventArgs"/> instance containing the event data.</param> - private void TwineCatalogControl_Loaded(object sender, RoutedEventArgs e) - { - if (!_loaded) - { - //list.ScrollViewer.Scrolling += ScrollViewer_Scrolling; - - _preventChange = true; - slider.Value = slider.Maximum; - _preventChange = false; - _loaded = true; - } - } - - /// <summary> /// Handles the ValueChanged event of the TouchSlider control. /// </summary> /// <param name="sender">The source of the event.</param> @@ -133,28 +114,5 @@ namespace Tango.PPC.Common.Controls slider.Foreground = new SolidColorBrush(_catalog.Groups.ElementAt(_catalog.Groups.Count - 1 - (int)e.NewValue).Color); } } - - /// <summary> - /// Called when the selected item has been changed - /// </summary> - private void OnSelectedItemChanged() - { - //if (!_preventChange) - //{ - // _preventChange = true; - // var item = SelectedItem; - // SelectedItem = null; - // SelectedItem = item; - // _preventChange = false; - //} - } - - /// <summary> - /// Gets the touch ListBox. - /// </summary> - public TouchListBox TouchListBox - { - get { return null; } - } } } |
