using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using BSE.Platten.BO;
using BSE.Platten.Common;
using System.Globalization;
using System.Drawing;
namespace BSE.Platten.Audio
{
public partial class AudioPlayerToolStrip : ToolStrip
{
#region Delegates
private delegate void m_delegateViewStatePlayerPlays(PlayMode eMode);
private delegate void m_delegateViewStatePlayerPaused(PlayMode eMode);
private delegate void m_delegateViewStatePlayerStopped(PlayMode eMode);
private delegate void m_delegateViewStatePlayerClosed(PlayMode eMode);
#endregion
#region FieldsPrivate
private BSE.Platten.Audio.CPlayerManager m_playerManager;
private System.Timers.Timer m_tmrPosition;
private PlayMode m_playMode;
#endregion
#region Properties
public CPlayerManager PlayerManager
{
get { return this.m_playerManager; }
set
{
this.m_playerManager = value;
if (this.m_playerManager != null)
{
this.m_playerManager.PlayerManagerTrackChanged += new EventHandler<PlayerManagerStatusChangedEventArgs>(PlayerManagerTrackChanged);
this.m_playerManager.PlayerManagerSongFinished += new EventHandler<PlayerManagerStatusChangedEventArgs>(PlayerManagerSongFinished);
this.m_playerManager.PlayerManagerPlays += new EventHandler<PlayerManagerStatusChangedEventArgs>(PlayerManagerPlays);
this.m_playerManager.PlayerManagerPaused += new EventHandler<PlayerManagerStatusChangedEventArgs>(PlayerManagerPaused);
this.m_playerManager.PlayerManagerStopped += new EventHandler<PlayerManagerStatusChangedEventArgs>(PlayerManagerStopped);
this.m_playerManager.PlayerManagerClosed += new EventHandler<PlayerManagerStatusChangedEventArgs>(PlayerManagerClosed);
}
}
}
internal PlayMode PlayMode
{
get { return this.m_playMode; }
set { this.m_playMode = value; }
}
#endregion
#region MethodsPublic
public AudioPlayerToolStrip()
{
InitializeComponent();
this.m_trackBar.BackColor = Color.Transparent;
this.DoubleBuffered = true;
this.m_tmrPosition = new System.Timers.Timer();
this.m_tmrPosition.AutoReset = true;
this.m_tmrPosition.Enabled = false;
this.m_tmrPosition.Interval = 1000;
this.m_tmrPosition.Elapsed += new System.Timers.ElapsedEventHandler(TimerPositionElapsed);
}
#endregion
#region MethodsProtected
#endregion
#region MethodsPrivate
private void PlayerManagerPlays(object sender, PlayerManagerStatusChangedEventArgs e)
{
try
{
this.PlayMode = e.PlayMode;
this.Invoke(
new m_delegateViewStatePlayerPlays(ViewStatePlayerPlays),
new object[] { e.PlayMode });
}
catch (Exception exception)
{
GlobalizedMessageBox.Show(this,exception.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ViewStatePlayerPlays(PlayMode eMode)
{
int iTrackLength = this.m_playerManager.GetTrackLength();
this.m_trackBar.Enabled = true;
this.m_trackBar.Minimum = 0;
this.m_trackBar.Maximum = iTrackLength;
this.m_tmrPosition.Enabled = true;
this.m_btnPlay.Enabled = false;
this.m_btnPause.Enabled = true;
this.m_btnStop.Enabled = true;
this.m_btnMoveNext.Enabled = false;
this.m_btnMovePrevious.Enabled = false;
this.m_btnPlaylistView.Enabled = false;
int iCount = this.m_playerManager.Count - 1;
int iPlayListPosition = this.m_playerManager.GetPlaylistPosition();
string strDuration = String.Format(CultureInfo.InvariantCulture,"({0}) ", CPlayerManager.GetTrackDurationAsString(iTrackLength));
string strTitle = this.m_playerManager.GetSongTitle();
this.m_trackBar.Start(strDuration + strTitle);
switch (eMode)
{
case PlayMode.Random:
case PlayMode.Playlist:
if (this.m_playerManager.IsNextTrackAvailable == true)
{
this.m_btnMoveNext.Enabled = true;
}
if (this.m_playerManager.IsPreviousTrackAvailable == true)
{
this.m_btnMovePrevious.Enabled = true;
}
break;
case PlayMode.CD:
if (this.m_playerManager.TrackCollection != null)
{
if (this.m_playerManager.TrackCollection.Equals(
this.m_btnPlaylistView.TrackCollection) == false)
{
this.m_btnPlaylistView.TrackCollection = this.m_playerManager.TrackCollection;
}
this.m_btnPlaylistView.SelectTrack(iPlayListPosition);
this.m_btnPlaylistView.Enabled = true;
}
if (iPlayListPosition >= 0 && iPlayListPosition < iCount)
{
this.m_btnMoveNext.Enabled = true;
}
if (iPlayListPosition > 0)
{
this.m_btnMovePrevious.Enabled = true;
}
break;
}
}
private void PlayerManagerPaused(object sender, PlayerManagerStatusChangedEventArgs e)
{
this.PlayMode = e.PlayMode;
this.Invoke(
new m_delegateViewStatePlayerPaused(ViewStatePlayerPaused),
new object[] { e.PlayMode });
}
private void ViewStatePlayerPaused(PlayMode eMode)
{
this.m_btnPlay.Enabled = true;
this.m_btnPause.Enabled = false;
this.m_btnStop.Enabled = true;
this.m_tmrPosition.Enabled = false;
}
private void PlayerManagerStopped(object sender, PlayerManagerStatusChangedEventArgs e)
{
this.PlayMode = e.PlayMode;
this.Invoke(
new m_delegateViewStatePlayerStopped(ViewStatePlayerStopped),
new object[] { e.PlayMode });
}
private void ViewStatePlayerStopped(PlayMode eMode)
{
this.m_trackBar.Enabled = false;
this.m_btnMovePrevious.Enabled = false;
this.m_btnPlay.Enabled = false;
this.m_btnPause.Enabled = false;
this.m_btnStop.Enabled = false;
this.m_btnMoveNext.Enabled = false;
this.m_btnPlaylistView.Enabled = false;
this.m_tmrPosition.Enabled = false;
}
private void PlayerManagerClosed(object sender, PlayerManagerStatusChangedEventArgs e)
{
this.PlayMode = e.PlayMode;
this.Invoke(
new m_delegateViewStatePlayerClosed(ViewStatePlayerClosed),
new object[] { e.PlayMode });
}
private void ViewStatePlayerClosed(PlayMode eMode)
{
this.m_btnMovePrevious.Enabled = false;
this.m_btnPlay.Enabled = false;
this.m_btnPause.Enabled = false;
this.m_btnStop.Enabled = false;
this.m_btnMoveNext.Enabled = false;
this.m_btnPlaylistView.Enabled = false;
this.m_tmrPosition.Enabled = false;
}
private void MovePreviousClick(object sender, EventArgs e)
{
switch (this.PlayMode)
{
case PlayMode.CD:
int iPlayListPosition = this.m_playerManager.GetPlaylistPosition();
this.m_playerManager.SetPlaylistPosition(iPlayListPosition - 1);
break;
case PlayMode.Playlist:
case PlayMode.Random:
if (this.m_playerManager.IsPreviousTrackAvailable == true)
{
this.m_playerManager.PlayPreviousTrack(this.PlayMode);
}
break;
}
}
private void PlayClick(object sender, EventArgs e)
{
this.m_playerManager.Play();
}
private void PauseClick(object sender, EventArgs e)
{
this.m_playerManager.Pause();
}
private void StopClick(object sender, EventArgs e)
{
this.m_playerManager.Stop();
}
private void MoveNextClick(object sender, EventArgs e)
{
switch (this.PlayMode)
{
case PlayMode.CD:
int iPlayListPosition = this.m_playerManager.GetPlaylistPosition();
this.m_playerManager.SetPlaylistPosition(iPlayListPosition + 1);
break;
case PlayMode.Playlist:
case PlayMode.Random:
this.m_playerManager.PlayNextTrack(this.PlayMode);
break;
}
}
private void PlaylistSelectionChanged(object sender, PlaylistSelectionChangeEventArgs e)
{
if (this.PlayMode == PlayMode.CD)
{
this.m_playerManager.SetPlaylistPosition(e.PlaylistPosition);
}
}
private void PlayerManagerTrackChanged(object sender, PlayerManagerStatusChangedEventArgs e)
{
if (e.PlayMode != PlayMode.Song)
{
this.m_tmrPosition.Enabled = true;
}
}
private void PlayerManagerSongFinished(object sender, PlayerManagerStatusChangedEventArgs e)
{
if (e.PlayMode != PlayMode.Song)
{
this.m_tmrPosition.Enabled = false;
}
}
private void TrackBarScroll(object sender, EventArgs e)
{
if (this.m_tmrPosition.Enabled == true)
{
this.m_tmrPosition.Enabled = false;
}
}
private void TrackBarThumbStateChanged(object sender, ThumbStateChangedEventArgs e)
{
if ((e.OldThumbState == ThumbState.Pressed) && (e.NewThumbState == ThumbState.None))
{
int iCurrentPosition = this.m_trackBar.Value;
if ((iCurrentPosition >= this.m_trackBar.Minimum) &&
(iCurrentPosition <= this.m_trackBar.Maximum))
{
this.m_playerManager.SetTrackPosition(iCurrentPosition);
this.m_tmrPosition.Enabled = true;
}
}
}
private void TimerPositionElapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
if ((this.m_trackBar != null) && (this.m_trackBar.IsDisposed == false))
{
this.m_trackBar.Value = this.m_playerManager.GetTrackPosition();
}
}
catch (Exception exception)
{
if (this.m_tmrPosition != null)
{
this.m_tmrPosition.Enabled = false;
}
GlobalizedMessageBox.Show(this,exception.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion
}
}