<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:Tango.Touch.Converters"
xmlns:local="clr-namespace:Tango.Touch.Controls">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<converters:ArcEndPointConverter x:Key="ArcEndPointConverter" />
<converters:ArcSizeConverter x:Key="ArcSizeConverter" />
<converters:RotateTransformCentreConverter x:Key="RotateTransformCentreConverter" />
<converters:NotZeroConverter x:Key="NotZeroConverter" />
<converters:RotateTransformConverter x:Key="RotateTransformConverter" />
<converters:StartPointConverter x:Key="StartPointConverter" />
<converters:LargeArcConverter x:Key="LargeArcConverter" />
</ResourceDictionary>
<ResourceDictionary Source="../Resources/Colors.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type local:TouchBusyIndicator}">
<Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Width" Value="20" />
<Setter Property="Height" Value="20" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:TouchBusyIndicator}">
<ControlTemplate.Resources>
<Storyboard x:Key="IsIndeterminateStoryboard" TargetName="RotateTransform" TargetProperty="Angle" RepeatBehavior="Forever">
<DoubleAnimation From="0" To="359" Duration="0:0:2" />
</Storyboard>
<Storyboard x:Key="IsFullyIndeterminateScaleStoryboard">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="FullyIndeterminateGridScaleTransform"
Storyboard.TargetProperty="ScaleX"
RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="0" Value="0.0" />
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="1.0" />
<SplineDoubleKeyFrame KeyTime="0:0:4" Value="0.0" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimation Storyboard.TargetName="RotateTransform"
Storyboard.TargetProperty="Angle"
RepeatBehavior="Forever"
From="00" To="359" Duration="0:0:1.25" />
</Storyboard>
</ControlTemplate.Resources>
<Grid x:Name="TemplateRoot" ClipToBounds="False">
<Grid x:Name="FullyIndeterminateGrid">
<Grid.RenderTransform>
<ScaleTransform x:Name="FullyIndeterminateGridScaleTransform" ScaleX="0" />
</Grid.RenderTransform>
</Grid>
<Grid x:Name="PathGrid" Margin="2" />
<Canvas>
<Ellipse Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" />
<Path x:Name="Path" Stroke="{TemplateBinding Foreground}" StrokeThickness="{Binding RelativeSource={RelativeSource TemplatedParent},Path=StrokeThickness}"
Canvas.Top="2" Canvas.Left="2"
RenderTransformOrigin="0, 0">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource StartPointConverter}, Mode=OneWay}">
<ArcSegment Size="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource ArcSizeConverter}, Mode=OneWay}"
SweepDirection="Clockwise">
<ArcSegment.IsLargeArc>
<MultiBinding Converter="{StaticResource LargeArcConverter}">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Minimum" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum" />
<Binding ElementName="FullyIndeterminateGridScaleTransform" Path="ScaleX" />
</MultiBinding>
</ArcSegment.IsLargeArc>
<ArcSegment.Point>
<MultiBinding Converter="{StaticResource ArcEndPointConverter}">
<Binding ElementName="PathGrid" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Minimum" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum" />
<Binding ElementName="FullyIndeterminateGridScaleTransform" Path="ScaleX" />
</MultiBinding>
</ArcSegment.Point>
</ArcSegment>
</PathFigure>
</PathGeometry>
</Path.Data>
<Path.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="RotateTransform"
CenterX="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}"
CenterY="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={StaticResource RotateTransformCentreConverter}, Mode=OneWay}">
<RotateTransform.Angle>
<MultiBinding Converter="{StaticResource RotateTransformConverter}">
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Minimum" />
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum" />
</MultiBinding>
</RotateTransform.Angle>
</RotateTransform>
</TransformGroup>
</Path.RenderTransform>
</Path>
</Canvas>
</Grid>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsIndeterminate, RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding IsVisible, RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding Value, RelativeSource={RelativeSource Self}, Converter={StaticResource NotZeroConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="IsFullyIndeterminateStoryboard" />
<BeginStoryboard Storyboard="{StaticResource IsIndeterminateStoryboard}"
Name="IsIndeterminateStoryboard"/>
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="IsIndeterminateStoryboard" />
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsIndeterminate" Value="True" />
<Condition Property="Value" Value="0" />
<Condition Property="IsVisible" Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="IsIndeterminateStoryboard" />
<BeginStoryboard Storyboard="{StaticResource IsFullyIndeterminateScaleStoryboard}"
Name="IsFullyIndeterminateStoryboard"/>
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="IsFullyIndeterminateStoryboard" />
</MultiTrigger.ExitActions>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsIndeterminate" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="IsIndeterminateStoryboard" />
<RemoveStoryboard BeginStoryboardName="IsFullyIndeterminateStoryboard" />
</MultiTrigger.EnterActions>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>