using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236
namespace DrumKit
{
public sealed partial class DrumPlayUI : UserControl
{
#region Public events
public event PointerEventHandler Hit;
#endregion
#region Properties
///
/// Gets or sets the rotation of the drum
///
public double Angle
{
get
{
// Get rotated grid
var transform = grid.RenderTransform as RotateTransform;
// Get angle
if (transform != null)
return transform.Angle;
// No rotation
return 0;
}
set
{
// Set rotation transformation
RotateTransform rot = new RotateTransform();
rot.CenterX = this.Width / 2;
rot.CenterY = this.Height / 2;
rot.Angle = value;
grid.RenderTransform = rot;
}
}
///
/// Gets the drum id.
///
public string DrumID { get; private set; }
///
/// Enables or disables the hit animation.
///
private bool IsAnimationEnabled
{
get
{
return DataController.Settings.Animations;
}
}
///
/// Sets the key string for display
///
public string KeyString
{
set
{
if (!String.IsNullOrEmpty(value))
this.textKey.Text = String.Format("{0} [{1}]", DrumName, value);
else this.textKey.Text = DrumName;
}
}
///
/// Gets or sets a value indicating if the key is visible
///
public bool IsKeyVisible
{
get
{
return this.textKey.Visibility == Windows.UI.Xaml.Visibility.Visible;
}
set
{
this.textKey.Visibility = (value) ? Visibility.Visible : Visibility.Collapsed;
this.textKeyShadow.Visibility = (value) ? Visibility.Visible : Visibility.Collapsed;
}
}
///
/// Gets or sets the drum name
///
private string DrumName { get; set; }
#endregion
#region Constructor
///
/// Creates a new instance of DrumPlayUI
///
///
public DrumPlayUI(Drum drum)
{
// Initialize
this.InitializeComponent();
// Set drum properties
this.DrumID = drum.Id;
this.DrumName = drum.Name;
this.KeyString = null;
this.image.Source = drum.LoadedImageSource;
this.imagePressed.Source = drum.LoadedImagePressedSource;
}
#endregion
#region UI handlers
///
/// Handles the drum pressed event.
///
private void Grid_PointerPressed(object sender, PointerRoutedEventArgs e)
{
// Call hit event immediately
if (this.Hit != null)
this.Hit(this, e);
// Play animation
this.PerformHit();
}
#endregion
#region Misc
public void PerformHit()
{
// Play animation
if (this.IsAnimationEnabled)
{
VisualStateManager.GoToState(this, "DrumHit", true);
VisualStateManager.GoToState(this, "DrumNormal", true);
}
}
#endregion
}
}