<?xml version="1.0" encoding="utf-8"?>
<Mcml xmlns ="http://schemas.microsoft.com/2008/mcml" xmlns:cor="assembly://MsCorLib/System" xmlns:me="Me">
	
	<!--general purpose command button in Windows 7 Media Center style-->
	<UI Name="Button">

		<Locals>
			
			<!--handles mouse click, remote select and keyboard enter events-->
			<ClickHandler Name="Clicker"/>
			
		</Locals>

		<Properties>
			
			<!--required properties-->
			<ICommand Name="Model" ICommand="$Required"/>

			<!--options-->
			<cor:Boolean Name="IsNavigatingCommand" Boolean="true"/>
			<Size Name="TileSize" Size="250, 51"/>

			<!--fonts-->
			<Font Name="Font" FontName="Segoe Media Center Semibold" FontSize="20" />

			<!--images-->
			<Image Name="LabelBackground" Source="res://ehres!Button.Label.Background.png" NineGrid="7, 7, 7, 7"/>
			<Image Name="LabelBackgroundFocus" Source="res://ehres!Button.Label.Background.Focus.png" NineGrid="7, 7, 7, 7"/>
			<Image Name="NoFocusImage" Source="res://ehres!Common.Button.NoFocus.Full.png" NineGrid="20,12,20,10"/>
			<Image Name="FocusImage" Source="res://ehres!Common.Button.Left.Focus.png" NineGrid="20,12,20,10"/>
			<Image Name="DisabledImage" Source="res://ehres!Common.Button.Disabled.Full.png" NineGrid="20,12,20,10"/>
			<Image Name="FocusOverlayImage" Source="res://ehres!Common.Button.Left.FocusOverlay.png"/>
			<Image Name="PressedImage" Source="res://ehres!Common.Button.PressedHighlight.png"/>
		
			<!--colors-->
			<Color Name="NoFocusColor" Color="255, 151, 217, 255"/>
			<Color Name="FocusColor" Color="255, 242, 242, 242"/>
			<Color Name="DisabledColor" Color="102, 151, 217, 255"/>

			<!--sounds-->
			<Sound Name="DefaultNavigationSound" Sound="res://ehres!Select_a.wav" />
			<Sound Name="DefaultNonNavigationSound" Sound="res://ehres!MiniSelect_a.wav" />

		</Properties>

		<Rules>

			<!--defaults-->
			<Default Target="[Input.KeyInteractive]" Value="true" />

			<!--play navigation sound if button's command causes navigation-->
			<Rule>
				<Conditions>
					<Modified Source="[Clicker.Invoked]"/>
					<Equality Source="[IsNavigatingCommand]" Value="true"/>
				</Conditions>
				<Actions>
					<PlaySound Sound="[DefaultNavigationSound]" />
				</Actions>
			</Rule>

			<!--play non-navigation sound if button's command doesn't cause navigation-->
			<Rule>
				<Conditions>
					<Modified Source="[Clicker.Invoked]"/>
					<Equality Source="[IsNavigatingCommand]" Value="false"/>
				</Conditions>
				<Actions>
					<PlaySound Sound="[DefaultNonNavigationSound]" />
				</Actions>
			</Rule>
			
			<!--disable button when command unavailable-->
			<Binding Source="[Model.Available]" Target="[Input.Enabled]"/>

			<!--change colors and image on disable-->
			<Condition Source="[Input.Enabled]" SourceValue="false" Target="[Label.Color]" Value="[DisabledColor]"/>
			<Condition Source="[Input.Enabled]" SourceValue="false" Target="[Background.Content]" Value="[DisabledImage]"/>

			<!--change text color and images on focus-->
			<Condition Source="[Input.KeyFocus]" SourceValue="true" Target="[Label.Color]" Value="[FocusColor]" />
			<Condition Source="[Input.KeyFocus]" SourceValue="true" Target="[LabelBackgroundGraphic.Content]" Value="[LabelBackgroundFocus]" />
			<Condition Source="[Input.KeyFocus]" SourceValue="true" Target="[Background.Content]" Value="[FocusImage]" />

			<!--show focus overlay and play focus sound on focus-->
			<Rule>
				<Conditions>
					<Equality Source="[Input.KeyFocus]" ConditionOp="ChangedTo" Value="true"/>
				</Conditions>
				<Actions>
					<Set Target="[FocusOverlay.Visible]" Value="true"/>
					<PlaySound Sound="res://ehres!Focus_a.wav" />
				</Actions>
			</Rule>
			
			<!--highlight appears while clicking button-->
			<Binding Source="[Clicker.Clicking]" Target="[Highlight.Visible]"/>
			
			<!--apply size property-->
			<Binding Source="[TileSize]" Target="[Root.MaximumSize]"/>
			<Binding Source="[TileSize]" Target="[Background.MinimumSize]"/>

			<!--bind button text to command description-->
			<Binding Source="[Model.Description]" Target="[Label.Content]"/>

			<!--invoke the command when the button is clicked-->
			<Rule>
				<Conditions>
					<Modified Source="[Clicker.Invoked]"/>
				</Conditions>
				<Actions>
					<Invoke Target="[Model.Invoke]" InvokePolicy="AsynchronousLowPri"/>
				</Actions>
			</Rule>

		</Rules>
		
		<Content>
			
			<Panel Name="Root" MouseInteractive="true">
				<Children>
					
					<!--contains the button image and text-->
					<Panel Name="LabelScalePanel" Layout="Dock">
						<Children>
							<Panel Name="LabelPanel" Layout="Anchor" Margins="16,0,16,0">
								<LayoutInput>
									<DockLayoutInput Position="Client" Alignment="Center"/>
								</LayoutInput>
								<Children>
									<Text Name="Label" Color="[NoFocusColor]" Font="[Font]">
										<LayoutInput>
											<AnchorLayoutInput Vertical="Center" Horizontal="Near"/>
										</LayoutInput>
									</Text>
									<Graphic Name="LabelBackgroundGraphic" Content="[LabelBackground]">
										<LayoutInput>
											<AnchorLayoutInput Left="Label,0,-8" Top="Label,0,-4" Right="Label,1,8" Bottom="Label,1,4" ContributesToWidth="false" ContributesToHeight="false"/>
										</LayoutInput>
									</Graphic>									
								</Children>
							</Panel>
						</Children>
					</Panel>
					
					<!--contains the (animated) button highlight-->
					<Clip FadeSize="20" Layout="Fill">
						<Children>
							<Graphic Name="Highlight" Content="[PressedImage]">
								<Animations>
									<TransformByAttributeAnimation Filter="Position" Attribute="Width" Magnitude="1.0">
										<Source>
											<Animation Type="Show">
												<Keyframes>
													<PositionKeyframe Time="0.00" Value="-1.0,0,0" RelativeTo="Final"/>
													<PositionKeyframe Time="0.10" Value="0.00,0,0" RelativeTo="Final"/>
													<PositionKeyframe Time="0.18" Value="0.35,0,0" RelativeTo="Final"/>
													<PositionKeyframe Time="0.35" Value="0.55,0,0" RelativeTo="Final"/>
													<PositionKeyframe Time="0.60" Value="1.25,0,0" RelativeTo="Final"/>
													<PositionKeyframe Time="0.70" Value="1.25,0,0" RelativeTo="Final"/>
													<AlphaKeyframe Time="0.00" Value="0.00" RelativeTo="Absolute"/>
													<AlphaKeyframe Time="0.05" Value="0.75" RelativeTo="Absolute"/>
													<AlphaKeyframe Time="0.17" Value="0.75" RelativeTo="Absolute"/>
													<AlphaKeyframe Time="0.40" Value="0.00" RelativeTo="Absolute"/>
												</Keyframes>
											</Animation>
										</Source>
									</TransformByAttributeAnimation>
									<TransformByAttributeAnimation Filter="Position" Attribute="Width" Magnitude="1.0">
										<Source>
											<Animation Type="Hide">
												<Keyframes>
													<PositionKeyframe Time="0.00" Value="0.0,0,0" RelativeTo="Current"/>
													<PositionKeyframe Time="0.10" Value="1.0,0,0" RelativeTo="Final"/>
													<AlphaKeyframe Time="0.00" RelativeTo="Current"/>
													<AlphaKeyframe Time="0.10" Value="0.0" RelativeTo="Absolute"/>
												</Keyframes>
											</Animation>
										</Source>
									</TransformByAttributeAnimation>
								</Animations>
							</Graphic>
						</Children>
					</Clip>
					
					<!--contains the (slowly pulsing) focus overlay-->
					<Graphic Name="FocusOverlay" Layout="Fill" Content="[FocusOverlayImage]" Visible="false">
						<Animations>
							<Animation Loop="-1" Type="Idle">
								<Keyframes>
									<AlphaKeyframe Time="0.0" Value="0.0" Interpolation="SCurve" RelativeTo="Absolute"/>
									<AlphaKeyframe Time="1.5" Value="0.63" Interpolation="SCurve" RelativeTo="Absolute"/>
									<AlphaKeyframe Time="3.0" Value="0.0" RelativeTo="Absolute"/>
								</Keyframes>
							</Animation>						
						</Animations>
					</Graphic>
					
					<!--the button background image-->
					<Graphic Name="Background" Layout="Fill" Content="[NoFocusImage]" />
					
				</Children>
			</Panel>
			
		</Content>
		
	</UI>
	
</Mcml>