JD2022-TU1/main/tools/framework/JD.VideoPlayer/Project/AbstractVideoPad.cs

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();
}
}
}