using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
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.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SPC.Kiosk.Common
{
///
/// MediaPlayer.xaml에 대한 상호 작용 논리
///
public partial class MediaPlayer : UserControl
{
#region [ Members ]
private bool MoseDown = false;
private Point MoseDownPosition;
///
/// Noraml Bakcground
///
public static readonly DependencyProperty MediaFileProperty =
DependencyProperty.Register(nameof(MediaFile), typeof(string), typeof(MediaPlayer), new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnMediaFilePropertyChanged)));
///
/// OD Repeat Flag
///
public static readonly DependencyProperty RepeatMediaProperty =
DependencyProperty.Register(nameof(RepeatMedia), typeof(bool), typeof(MediaPlayer), new PropertyMetadata(false));
///
/// Play Media File (Path)
///
public string MediaFile
{
get { return (string)GetValue(MediaFileProperty); }
set { SetValue(MediaFileProperty, value); }
}
///
/// VOD Repeat Flag
///
public bool RepeatMedia
{
get { return (bool)GetValue(RepeatMediaProperty); }
set { SetValue(RepeatMediaProperty, value); }
}
#endregion Members
#region [ Ctor / Method ]
///
/// Ctor
///
public MediaPlayer()
{
InitializeComponent();
this.VideoMediaPlayer.LoadedBehavior = MediaState.Manual;
this.VideoMediaPlayer.Loaded += VideoMediaPlayer_Loaded;
this.VideoMediaPlayer.MediaEnded += VideoMediaPlayer_MediaEnded;
this.VideoMediaPlayer.MouseUp += VideoMediaPlayer_MouseUp;
this.VideoMediaPlayer.MouseDown += VideoMediaPlayer_MouseDown;
this.VideoMediaPlayer.MouseLeave += VideoMediaPlayer_MouseLeave;
}
~MediaPlayer()
{
this.VideoMediaPlayer.Loaded -= VideoMediaPlayer_Loaded;
this.VideoMediaPlayer.MediaEnded -= VideoMediaPlayer_MediaEnded;
this.VideoMediaPlayer.MouseUp -= VideoMediaPlayer_MouseUp;
this.VideoMediaPlayer.MouseDown -= VideoMediaPlayer_MouseDown;
this.VideoMediaPlayer.MouseLeave -= VideoMediaPlayer_MouseLeave;
}
///
/// VOD Restart
///
public void Restart()
{
try
{
this.VideoMediaPlayer.Stop();
this.VideoMediaPlayer.Position = TimeSpan.Zero;
this.VideoMediaPlayer.Play();
}
catch
{
}
}
///
/// VOD Stop
///
public void Stop()
{
try
{
this.VideoMediaPlayer.Stop();
}
catch
{
}
}
///
/// VOD Play
///
public void Play()
{
try
{
this.VideoMediaPlayer.Play();
}
catch (Exception ex)
{
CommonLog.ErrorLogWrite(this, "Play()", "Fail !!", string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
}
}
///
/// VOD Pause
///
public void Pause()
{
this.VideoMediaPlayer.Pause();
}
#endregion Ctor
#region [ Events Create ]
#region [ Make RoutedEvent 'MouseClicked']
///
/// MouseClicked Event
///
public static readonly RoutedEvent MouseClickedEvent = EventManager.RegisterRoutedEvent(nameof(MouseClicked), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MediaPlayer));
///
/// MouseClicked Routed Event Handler
///
public event RoutedEventHandler MouseClicked
{
add { AddHandler(MouseClickedEvent, value); }
remove { RemoveHandler(MouseClickedEvent, value); }
}
///
/// Raise MouseClicked Event
///
private void RaiseMouseClickedEvent(object source)
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(MediaPlayer.MouseClickedEvent, source);
RaiseEvent(newEventArgs);
}
#endregion Make RoutedEvent 'MouseClicked'
#region [ Make RoutedEvent 'MediaLoaded']
///
/// MouseClicked Event
///
public static readonly RoutedEvent MediaLoadedEvent = EventManager.RegisterRoutedEvent(nameof(MediaLoaded), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MediaPlayer));
///
/// MouseClicked Routed Event Handler
///
public event RoutedEventHandler MediaLoaded
{
add { AddHandler(MediaLoadedEvent, value); }
remove { RemoveHandler(MediaLoadedEvent, value); }
}
///
/// Raise MouseClicked Event
///
private void RaiseMediaOpend(object source)
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(MediaPlayer.MediaLoadedEvent,source);
RaiseEvent(newEventArgs);
}
#endregion Make RoutedEvent 'MediaLoaded'
#endregion Events Create
#region [ Evnets Handler ]
private static void OnMediaFilePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var target = d as MediaPlayer;
target.VideoMediaPlayer.Source = string.IsNullOrEmpty((string)e.NewValue)
? null
: new Uri((string)e.NewValue);
}
#region Mouse Events Handler
private void VideoMediaPlayer_MouseUp(object sender, MouseButtonEventArgs e)
{
if (MoseDown)
{
if (Math.Abs(e.GetPosition(this).X - MoseDownPosition.X) > 50) MoseDown = false;
if (Math.Abs(e.GetPosition(this).Y - MoseDownPosition.Y) > 50) MoseDown = false;
if (MoseDown) RaiseMouseClickedEvent(this);
MoseDown = false;
}
}
private void VideoMediaPlayer_MouseDown(object sender, MouseButtonEventArgs e)
{
MoseDown = true;
MoseDownPosition = e.GetPosition(this);
}
private void VideoMediaPlayer_MouseLeave(object sender, MouseEventArgs e)
{
MoseDown = false;
}
#endregion
#region Player Events Handler
private void VideoMediaPlayer_Loaded(object sender, RoutedEventArgs e)
{
if (VideoMediaPlayer.Source is Uri)
{
if (RepeatMedia)
{
if (VideoMediaPlayer.Source.AbsolutePath.ToLower().EndsWith(".gif"))
{
VideoMediaPlayer.Position = TimeSpan.FromMilliseconds(1);
}
VideoMediaPlayer.Play();
}
RaiseMediaOpend(e.OriginalSource);
}
}
private void VideoMediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
if (RepeatMedia)
{
if (VideoMediaPlayer.Source is Uri)
{
if (VideoMediaPlayer.Source.AbsolutePath.ToLower().EndsWith(".gif"))
{
VideoMediaPlayer.Position = TimeSpan.FromMilliseconds(1);
}
else
{
VideoMediaPlayer.Position = TimeSpan.Zero;
}
VideoMediaPlayer.Play();
}
}
}
#endregion Player Events Handler
#endregion Evnets Handler
}
}