123 lines
3.6 KiB
C#
123 lines
3.6 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using JD.Application.View.Actions;
|
|
using JD.Interfaces.Player;
|
|
using TeaBox.ObjectModel;
|
|
|
|
|
|
namespace JD.VideoPlayer.Project
|
|
{
|
|
public abstract class AbstractVideoPad : AbstractPadContent
|
|
{
|
|
private readonly Control _control;
|
|
private VideoControl _videoControl;
|
|
private IPlayerProvider _playerProvider;
|
|
|
|
protected AbstractVideoPad()
|
|
{
|
|
_control = new Panel { Dock = DockStyle.Fill };
|
|
_control.HandleCreated += _control_HandleCreated;
|
|
|
|
TeaBox.ObjectModel.Application.Main.Views.SelectedItemChanged += Views_SelectedItemChanged;
|
|
}
|
|
|
|
void _control_HandleCreated(object sender, EventArgs e)
|
|
{
|
|
Views_SelectedItemChanged(null, null);
|
|
}
|
|
|
|
public VideoControl VideoControl
|
|
{
|
|
get { return _videoControl; }
|
|
}
|
|
|
|
public override Control Control
|
|
{
|
|
get { return _control; }
|
|
}
|
|
|
|
public virtual IPlayerProvider PlayerProvider
|
|
{
|
|
get { return _playerProvider; }
|
|
set
|
|
{
|
|
if (_playerProvider != null)
|
|
{
|
|
_playerProvider.Player.TimeChanged -= TimeCursor_TimeChanged;
|
|
DeleteVideoControl();
|
|
}
|
|
|
|
_playerProvider = value;
|
|
|
|
if (_playerProvider != null)
|
|
{
|
|
InitializeVideoControl();
|
|
_playerProvider.Player.TimeChanged += TimeCursor_TimeChanged;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initialize after the construction so that the object does not try to access uninitialized variables
|
|
/// during the initialization.
|
|
/// </summary>
|
|
protected void Initialize()
|
|
{
|
|
PlayerProvider = GetPlayerProvider(TeaBox.ObjectModel.Application.Main.Views.SelectedItem);
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
// Detach events
|
|
if (disposing)
|
|
{
|
|
PlayerProvider = null;
|
|
TeaBox.ObjectModel.Application.Main.Views.SelectedItemChanged -= Views_SelectedItemChanged;
|
|
}
|
|
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
protected abstract PleoConductor Conductor { get; }
|
|
|
|
protected virtual IPlayerProvider GetPlayerProvider(IView view)
|
|
{
|
|
return view as IPlayerProvider;
|
|
}
|
|
|
|
protected virtual VideoControl CreateVideoControl()
|
|
{
|
|
return new VideoControl { ForeColor = Color.White, Dock = DockStyle.Fill, VideoConductor = Conductor };
|
|
}
|
|
|
|
protected virtual void InitializeVideoControl()
|
|
{
|
|
_videoControl = CreateVideoControl();
|
|
_videoControl.ForeColor = Color.White;
|
|
_videoControl.VideoConductor = Conductor;
|
|
_videoControl.Dock = DockStyle.Fill;
|
|
_control.Controls.Add(_videoControl);
|
|
Conductor.ReloadClip();
|
|
}
|
|
|
|
protected void DeleteVideoControl()
|
|
{
|
|
_videoControl.Dispose();
|
|
_control.Controls.Clear();
|
|
}
|
|
|
|
protected abstract void UpdateConductors();
|
|
|
|
protected virtual void Views_SelectedItemChanged(object sender, EventArgs e)
|
|
{
|
|
PlayerProvider = GetPlayerProvider(TeaBox.ObjectModel.Application.Main.Views.SelectedItem);
|
|
}
|
|
|
|
protected virtual void TimeCursor_TimeChanged(object sender, EventArgs e)
|
|
{
|
|
UpdateConductors();
|
|
}
|
|
|
|
}
|
|
}
|