mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-21 18:52:36 +01:00
Initial version
git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@5 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
parent
2f1a0b6137
commit
0e5c9436a2
77
src/Controls/TimeUpDown.Designer.cs
generated
Normal file
77
src/Controls/TimeUpDown.Designer.cs
generated
Normal file
@ -0,0 +1,77 @@
|
||||
namespace Nikse.SubtitleEdit.Controls
|
||||
{
|
||||
partial class TimeUpDown
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.maskedTextBox1 = new System.Windows.Forms.MaskedTextBox();
|
||||
this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// maskedTextBox1
|
||||
//
|
||||
this.maskedTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.maskedTextBox1.InsertKeyMode = System.Windows.Forms.InsertKeyMode.Overwrite;
|
||||
this.maskedTextBox1.Location = new System.Drawing.Point(4, 4);
|
||||
this.maskedTextBox1.Mask = "00:00:00.000";
|
||||
this.maskedTextBox1.Name = "maskedTextBox1";
|
||||
this.maskedTextBox1.Size = new System.Drawing.Size(63, 13);
|
||||
this.maskedTextBox1.TabIndex = 21;
|
||||
this.maskedTextBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MaskedTextBox1KeyDown);
|
||||
//
|
||||
// numericUpDown1
|
||||
//
|
||||
this.numericUpDown1.Location = new System.Drawing.Point(2, 1);
|
||||
this.numericUpDown1.Name = "numericUpDown1";
|
||||
this.numericUpDown1.Size = new System.Drawing.Size(84, 20);
|
||||
this.numericUpDown1.TabIndex = 20;
|
||||
this.numericUpDown1.TabStop = false;
|
||||
//
|
||||
// TimeUpDown
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSize = true;
|
||||
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.Controls.Add(this.maskedTextBox1);
|
||||
this.Controls.Add(this.numericUpDown1);
|
||||
this.Name = "TimeUpDown";
|
||||
this.Size = new System.Drawing.Size(89, 24);
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.MaskedTextBox maskedTextBox1;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDown1;
|
||||
|
||||
}
|
||||
}
|
121
src/Controls/TimeUpDown.cs
Normal file
121
src/Controls/TimeUpDown.cs
Normal file
@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using Nikse.SubtitleEdit.Logic;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Controls
|
||||
{
|
||||
public partial class TimeUpDown : UserControl
|
||||
{
|
||||
const int NumericUpDownValue = 50;
|
||||
|
||||
public EventHandler TimeCodeChanged;
|
||||
|
||||
public TimeUpDown()
|
||||
{
|
||||
InitializeComponent();
|
||||
numericUpDown1.ValueChanged += NumericUpDownValueChanged;
|
||||
numericUpDown1.Value = NumericUpDownValue;
|
||||
}
|
||||
|
||||
void NumericUpDownValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
double? millisecs = GetTotalMilliseconds();
|
||||
if (millisecs.HasValue)
|
||||
{
|
||||
if (numericUpDown1.Value > NumericUpDownValue)
|
||||
{
|
||||
SetTotalMilliseconds(millisecs.Value + 100);
|
||||
}
|
||||
else if (numericUpDown1.Value < NumericUpDownValue)
|
||||
{
|
||||
if (millisecs.Value - 100 > 0)
|
||||
SetTotalMilliseconds(millisecs.Value - 100);
|
||||
else if (millisecs.Value > 0)
|
||||
SetTotalMilliseconds(0);
|
||||
}
|
||||
if (TimeCodeChanged != null)
|
||||
TimeCodeChanged.Invoke(this, e);
|
||||
}
|
||||
numericUpDown1.Value = NumericUpDownValue;
|
||||
}
|
||||
|
||||
public MaskedTextBox MaskedTextBox
|
||||
{
|
||||
get
|
||||
{
|
||||
return maskedTextBox1;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTotalMilliseconds(double milliseconds)
|
||||
{
|
||||
TimeSpan ts = TimeSpan.FromMilliseconds(milliseconds);
|
||||
maskedTextBox1.Text = new TimeCode(ts).ToString();
|
||||
}
|
||||
|
||||
public double? GetTotalMilliseconds()
|
||||
{
|
||||
TimeCode tc = TimeCode;
|
||||
if (tc != null)
|
||||
return tc.TotalMilliseconds;
|
||||
return null;
|
||||
}
|
||||
|
||||
public TimeCode TimeCode
|
||||
{
|
||||
get
|
||||
{
|
||||
string startTime = maskedTextBox1.Text;
|
||||
startTime.Replace(' ', '0');
|
||||
if (startTime.EndsWith("."))
|
||||
startTime += "000";
|
||||
|
||||
string[] times = startTime.Split(":,.".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
if (times.Length == 4)
|
||||
{
|
||||
int hours = 0;
|
||||
if (Utilities.IsInteger(times[0]))
|
||||
hours = int.Parse(times[0]);
|
||||
|
||||
int minutes = 0;
|
||||
if (Utilities.IsInteger(times[1]))
|
||||
minutes = int.Parse(times[1]);
|
||||
|
||||
int seconds = 0;
|
||||
if (Utilities.IsInteger(times[2]))
|
||||
seconds = int.Parse(times[2]);
|
||||
|
||||
int milliSeconds = 0;
|
||||
if (Utilities.IsInteger(times[3]))
|
||||
milliSeconds = int.Parse(times[3]);
|
||||
|
||||
return new TimeCode(hours, minutes, seconds, milliSeconds);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value != null)
|
||||
maskedTextBox1.Text = value.ToString();
|
||||
else
|
||||
maskedTextBox1.Text = new TimeCode(TimeSpan.FromMilliseconds(0)).ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void MaskedTextBox1KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Up)
|
||||
{
|
||||
numericUpDown1.UpButton();
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
else if (e.KeyCode == Keys.Down)
|
||||
{
|
||||
numericUpDown1.DownButton();
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
120
src/Controls/TimeUpDown.resx
Normal file
120
src/Controls/TimeUpDown.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
800
src/Controls/VideoPlayerContainer.cs
Normal file
800
src/Controls/VideoPlayerContainer.cs
Normal file
@ -0,0 +1,800 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using Nikse.SubtitleEdit.Logic.VideoPlayers;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Controls
|
||||
{
|
||||
public sealed class VideoPlayerContainer : Panel
|
||||
{
|
||||
public event EventHandler OnButtonClicked;
|
||||
public Panel PanelPlayer { get; private set; }
|
||||
private VideoPlayer _videoPlayer;
|
||||
public VideoPlayer VideoPlayer
|
||||
{
|
||||
get { return _videoPlayer; }
|
||||
set { _videoPlayer = value; }
|
||||
}
|
||||
|
||||
private bool _isMuted;
|
||||
private double? _muteOldVolume;
|
||||
private readonly System.ComponentModel.ComponentResourceManager _resources;
|
||||
private const int ControlsHeight = 47;
|
||||
private readonly Color _backgroundColor = Color.FromArgb(18, 18, 18);
|
||||
private Panel _panelcontrols;
|
||||
private string _totalPositionString;
|
||||
|
||||
private PictureBox _pictureBoxBackground;
|
||||
private PictureBox _pictureBoxReverse;
|
||||
private PictureBox _pictureBoxFastForward;
|
||||
private PictureBox _pictureBoxPlay;
|
||||
private PictureBox _pictureBoxPlayOver;
|
||||
private PictureBox _pictureBoxPlayDown;
|
||||
private PictureBox _pictureBoxPause = new PictureBox();
|
||||
private PictureBox _pictureBoxPauseOver = new PictureBox();
|
||||
private PictureBox _pictureBoxPauseDown = new PictureBox();
|
||||
private PictureBox _pictureBoxStop = new PictureBox();
|
||||
private PictureBox _pictureBoxStopOver = new PictureBox();
|
||||
private PictureBox _pictureBoxStopDown = new PictureBox();
|
||||
private PictureBox _pictureBoxMute = new PictureBox();
|
||||
private PictureBox _pictureBoxMuteOver = new PictureBox();
|
||||
private PictureBox _pictureBoxMuteDown = new PictureBox();
|
||||
private PictureBox _pictureBoxProgressbarBackground = new PictureBox();
|
||||
private PictureBox _pictureBoxProgressBar = new PictureBox();
|
||||
private PictureBox _pictureBoxVolumeBarBackground = new PictureBox();
|
||||
private PictureBox _pictureBoxVolumeBar = new PictureBox();
|
||||
private Label _labelTimeCode = new Label();
|
||||
|
||||
public bool ShowStopButton
|
||||
{
|
||||
get
|
||||
{
|
||||
return _pictureBoxStop.Visible || _pictureBoxStopOver.Visible || _pictureBoxStopDown.Visible;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
_pictureBoxStop.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
HideAllStopImages();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public VideoPlayerContainer()
|
||||
{
|
||||
_resources = new System.ComponentModel.ComponentResourceManager(typeof(VideoPlayerContainer));
|
||||
BackColor = _backgroundColor;
|
||||
Controls.Add(MakePlayerPanel());
|
||||
Controls.Add(MakeControlsPanel());
|
||||
|
||||
HideAllPlayImages();
|
||||
HideAllPauseImages();
|
||||
_pictureBoxPlay.Visible = true;
|
||||
|
||||
HideAllStopImages();
|
||||
_pictureBoxStop.Visible = true;
|
||||
|
||||
HideAllMuteImages();
|
||||
_pictureBoxMute.Visible = true;
|
||||
|
||||
VideoPlayerContainerResize(this, null);
|
||||
Resize += VideoPlayerContainerResize;
|
||||
|
||||
_pictureBoxProgressBar.Width = 0;
|
||||
|
||||
PanelPlayer.MouseDown += PanelPlayer_MouseDown;
|
||||
}
|
||||
|
||||
|
||||
void PanelPlayer_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
TooglePlayPause();
|
||||
}
|
||||
|
||||
public void InitializeVolume(double defaultVolume)
|
||||
{
|
||||
int maxVolume = _pictureBoxVolumeBarBackground.Width - 18;
|
||||
_pictureBoxVolumeBar.Width = (int)(maxVolume * defaultVolume / 100.0);
|
||||
}
|
||||
|
||||
private Control MakePlayerPanel()
|
||||
{
|
||||
PanelPlayer = new Panel { BackColor = _backgroundColor, Left = 0, Top = 0 };
|
||||
return PanelPlayer;
|
||||
}
|
||||
|
||||
private Control MakeControlsPanel()
|
||||
{
|
||||
_panelcontrols = new Panel {Left = 0, Height = ControlsHeight};
|
||||
|
||||
_pictureBoxBackground = new PictureBox
|
||||
{
|
||||
Image = ((Image) (_resources.GetObject("pictureBoxBar.Image"))),
|
||||
Location = new Point(0, 0),
|
||||
Name = "_pictureBoxBackground",
|
||||
Size = new Size(200, 45),
|
||||
SizeMode = PictureBoxSizeMode.StretchImage,
|
||||
TabStop = false
|
||||
};
|
||||
_panelcontrols.Controls.Add(_pictureBoxBackground);
|
||||
|
||||
_pictureBoxPlay = new PictureBox
|
||||
{
|
||||
Image = ((Image) (_resources.GetObject("pictureBoxPlay.Image"))),
|
||||
Location = new Point(22, 126 - 113),
|
||||
Name = "_pictureBoxPlay",
|
||||
Size = new Size(29, 29),
|
||||
SizeMode = PictureBoxSizeMode.AutoSize,
|
||||
TabStop = false
|
||||
};
|
||||
_pictureBoxPlay.MouseEnter += PictureBoxPlayMouseEnter;
|
||||
_panelcontrols.Controls.Add(_pictureBoxPlay);
|
||||
|
||||
_pictureBoxPlayDown = new PictureBox
|
||||
{
|
||||
Image = ((Image) (_resources.GetObject("pictureBoxPlayDown.Image"))),
|
||||
Location = new Point(22, 127 - 113),
|
||||
Name = "_pictureBoxPlayDown",
|
||||
Size = new Size(29, 29),
|
||||
SizeMode = PictureBoxSizeMode.AutoSize,
|
||||
TabStop = false
|
||||
};
|
||||
_panelcontrols.Controls.Add(_pictureBoxPlayDown);
|
||||
|
||||
_pictureBoxPlayOver = new PictureBox
|
||||
{
|
||||
Image = ((Image) (_resources.GetObject("pictureBoxPlayOver.Image"))),
|
||||
Location = new Point(23, 126 - 113),
|
||||
Name = "_pictureBoxPlayOver",
|
||||
Size = new Size(29, 29),
|
||||
SizeMode = PictureBoxSizeMode.AutoSize,
|
||||
TabStop = false
|
||||
};
|
||||
_pictureBoxPlayOver.MouseLeave += PictureBoxPlayOverMouseLeave;
|
||||
_pictureBoxPlayOver.MouseDown += PictureBoxPlayOverMouseDown;
|
||||
_pictureBoxPlayOver.MouseUp += PictureBoxPlayOverMouseUp;
|
||||
_panelcontrols.Controls.Add(_pictureBoxPlayOver);
|
||||
|
||||
_pictureBoxPause.Image = ((Image)(_resources.GetObject("pictureBoxPause.Image")));
|
||||
_pictureBoxPause.Location = new Point(23, 126 - 113);
|
||||
_pictureBoxPause.Name = "_pictureBoxPause";
|
||||
_pictureBoxPause.Size = new Size(29, 29);
|
||||
_pictureBoxPause.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxPause.TabStop = false;
|
||||
_pictureBoxPause.MouseEnter += PictureBoxPauseMouseEnter;
|
||||
_panelcontrols.Controls.Add(_pictureBoxPause);
|
||||
|
||||
_pictureBoxPauseDown.Image = ((Image)(_resources.GetObject("pictureBoxPauseDown.Image")));
|
||||
_pictureBoxPauseDown.Location = new Point(22, 127 - 113);
|
||||
_pictureBoxPauseDown.Name = "_pictureBoxPauseDown";
|
||||
_pictureBoxPauseDown.Size = new Size(29, 29);
|
||||
_pictureBoxPauseDown.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxPauseDown.TabStop = false;
|
||||
_panelcontrols.Controls.Add(_pictureBoxPauseDown);
|
||||
|
||||
_pictureBoxPauseOver.Image = ((Image)(_resources.GetObject("pictureBoxPauseOver.Image")));
|
||||
_pictureBoxPauseOver.Location = new Point(22, 127 - 113);
|
||||
_pictureBoxPauseOver.Name = "_pictureBoxPauseOver";
|
||||
_pictureBoxPauseOver.Size = new Size(29, 29);
|
||||
_pictureBoxPauseOver.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxPauseOver.TabStop = false;
|
||||
_pictureBoxPauseOver.MouseLeave += PictureBoxPauseOverMouseLeave;
|
||||
_pictureBoxPauseOver.MouseDown += PictureBoxPauseOverMouseDown;
|
||||
_pictureBoxPauseOver.MouseUp += PictureBoxPauseOverMouseUp;
|
||||
_panelcontrols.Controls.Add(_pictureBoxPauseOver);
|
||||
|
||||
_pictureBoxStop.Image = ((Image)(_resources.GetObject("pictureBoxStop.Image")));
|
||||
_pictureBoxStop.Location = new Point(60, 130 - 113);
|
||||
_pictureBoxStop.Name = "_pictureBoxStop";
|
||||
_pictureBoxStop.Size = new Size(20, 20);
|
||||
_pictureBoxStop.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxStop.TabStop = false;
|
||||
_pictureBoxStop.MouseEnter += PictureBoxStopMouseEnter;
|
||||
_panelcontrols.Controls.Add(_pictureBoxStop);
|
||||
|
||||
_pictureBoxStopDown.Image = ((Image)(_resources.GetObject("pictureBoxStopDown.Image")));
|
||||
_pictureBoxStopDown.Location = new Point(60, 130 - 113);
|
||||
_pictureBoxStopDown.Name = "_pictureBoxStopDown";
|
||||
_pictureBoxStopDown.Size = new Size(20, 20);
|
||||
_pictureBoxStopDown.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxStopDown.TabStop = false;
|
||||
_panelcontrols.Controls.Add(_pictureBoxStopDown);
|
||||
|
||||
_pictureBoxStopOver.Image = ((Image)(_resources.GetObject("pictureBoxStopOver.Image")));
|
||||
_pictureBoxStopOver.Location = new Point(60, 130 - 113);
|
||||
_pictureBoxStopOver.Name = "_pictureBoxStopOver";
|
||||
_pictureBoxStopOver.Size = new Size(20, 20);
|
||||
_pictureBoxStopOver.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxStopOver.TabStop = false;
|
||||
_pictureBoxStopOver.MouseLeave += PictureBoxStopOverMouseLeave;
|
||||
_pictureBoxStopOver.MouseDown += PictureBoxStopOverMouseDown;
|
||||
_pictureBoxStopOver.MouseUp += PictureBoxStopOverMouseUp;
|
||||
_panelcontrols.Controls.Add(_pictureBoxStopOver);
|
||||
|
||||
_pictureBoxProgressbarBackground.Anchor = AnchorStyles.Top | AnchorStyles.Left;
|
||||
_pictureBoxProgressbarBackground.BackColor = Color.Transparent;
|
||||
_pictureBoxProgressbarBackground.Image = (Image)_resources.GetObject("pictureBoxProgressbarBackground.Image");
|
||||
_pictureBoxProgressbarBackground.Location = new Point(43, 114 - 113);
|
||||
_pictureBoxProgressbarBackground.Margin = new Padding(0);
|
||||
_pictureBoxProgressbarBackground.Name = "_pictureBoxProgressbarBackground";
|
||||
_pictureBoxProgressbarBackground.Size = new Size(531, 12);
|
||||
_pictureBoxProgressbarBackground.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
_pictureBoxProgressbarBackground.TabStop = false;
|
||||
_pictureBoxProgressbarBackground.MouseDown += PictureBoxProgressbarBackgroundMouseDown;
|
||||
_panelcontrols.Controls.Add(_pictureBoxProgressbarBackground);
|
||||
|
||||
_pictureBoxProgressBar.Image = (Image)(_resources.GetObject("pictureBoxProgressBar.Image"));
|
||||
_pictureBoxProgressBar.Location = new Point(47, 118 - 113);
|
||||
_pictureBoxProgressBar.Name = "_pictureBoxProgressBar";
|
||||
_pictureBoxProgressBar.Size = new Size(318, 4);
|
||||
_pictureBoxProgressBar.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
_pictureBoxProgressBar.TabStop = false;
|
||||
_pictureBoxProgressBar.MouseDown += PictureBoxProgressBarMouseDown;
|
||||
_panelcontrols.Controls.Add(_pictureBoxProgressBar);
|
||||
_pictureBoxProgressBar.BringToFront();
|
||||
|
||||
_pictureBoxMute.Image = ((Image)(_resources.GetObject("pictureBoxMute.Image")));
|
||||
_pictureBoxMute.Location = new Point(91, 131 - 113);
|
||||
_pictureBoxMute.Name = "_pictureBoxMute";
|
||||
_pictureBoxMute.Size = new Size(19, 19);
|
||||
_pictureBoxMute.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxMute.TabStop = false;
|
||||
_pictureBoxMute.MouseEnter += PictureBoxMuteMouseEnter;
|
||||
_panelcontrols.Controls.Add(_pictureBoxMute);
|
||||
|
||||
_pictureBoxMuteDown.Image = ((Image)(_resources.GetObject("pictureBoxMuteDown.Image")));
|
||||
_pictureBoxMuteDown.Location = new Point(91, 131 - 113);
|
||||
_pictureBoxMuteDown.Name = "_pictureBoxMuteDown";
|
||||
_pictureBoxMuteDown.Size = new Size(19, 19);
|
||||
_pictureBoxMuteDown.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxMuteDown.TabStop = false;
|
||||
_pictureBoxMuteDown.Click += PictureBoxMuteDownClick;
|
||||
_panelcontrols.Controls.Add(_pictureBoxMuteDown);
|
||||
|
||||
_pictureBoxMuteOver.Image = ((Image)(_resources.GetObject("pictureBoxMuteOver.Image")));
|
||||
_pictureBoxMuteOver.Location = new Point(91, 131 - 113);
|
||||
_pictureBoxMuteOver.Name = "_pictureBoxMuteOver";
|
||||
_pictureBoxMuteOver.Size = new Size(19, 19);
|
||||
_pictureBoxMuteOver.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxMuteOver.TabStop = false;
|
||||
_pictureBoxMuteOver.MouseLeave += PictureBoxMuteOverMouseLeave;
|
||||
_pictureBoxMuteOver.MouseDown += PictureBoxMuteOverMouseDown;
|
||||
_pictureBoxMuteOver.MouseUp += PictureBoxMuteOverMouseUp;
|
||||
_panelcontrols.Controls.Add(_pictureBoxMuteOver);
|
||||
|
||||
_pictureBoxVolumeBarBackground.Image = ((Image)(_resources.GetObject("pictureBoxVolumeBarBackground.Image")));
|
||||
_pictureBoxVolumeBarBackground.Location = new Point(111, 135 - 113);
|
||||
_pictureBoxVolumeBarBackground.Name = "_pictureBoxVolumeBarBackground";
|
||||
_pictureBoxVolumeBarBackground.Size = new Size(82, 13);
|
||||
_pictureBoxVolumeBarBackground.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxVolumeBarBackground.TabStop = false;
|
||||
_pictureBoxVolumeBarBackground.MouseDown += PictureBoxVolumeBarBackgroundMouseDown;
|
||||
_panelcontrols.Controls.Add(_pictureBoxVolumeBarBackground);
|
||||
|
||||
_pictureBoxVolumeBar.Image = ((Image)(_resources.GetObject("pictureBoxVolumeBar.Image")));
|
||||
_pictureBoxVolumeBar.Location = new Point(120, 139 - 113);
|
||||
_pictureBoxVolumeBar.Name = "_pictureBoxVolumeBar";
|
||||
_pictureBoxVolumeBar.Size = new Size(48, 4);
|
||||
_pictureBoxVolumeBar.SizeMode = PictureBoxSizeMode.StretchImage;
|
||||
_pictureBoxVolumeBar.TabStop = false;
|
||||
_pictureBoxVolumeBar.MouseDown += PictureBoxVolumeBarMouseDown;
|
||||
_panelcontrols.Controls.Add(_pictureBoxVolumeBar);
|
||||
_pictureBoxVolumeBar.BringToFront();
|
||||
|
||||
_pictureBoxReverse = new PictureBox();
|
||||
_pictureBoxReverse.Image = ((Image)(_resources.GetObject("pictureBoxReverse.Image")));
|
||||
_pictureBoxReverse.Location = new Point(28, 3);
|
||||
_pictureBoxReverse.Name = "_pictureBoxReverse";
|
||||
_pictureBoxReverse.Size = new Size(16, 8);
|
||||
_pictureBoxReverse.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxReverse.TabStop = false;
|
||||
_panelcontrols.Controls.Add(_pictureBoxReverse);
|
||||
|
||||
_pictureBoxFastForward = new PictureBox();
|
||||
_pictureBoxFastForward.Image = ((Image)(_resources.GetObject("pictureBoxFastForward.Image")));
|
||||
_pictureBoxFastForward.Location = new Point(570, 1);
|
||||
_pictureBoxFastForward.Name = "_pictureBoxFastForward";
|
||||
_pictureBoxFastForward.Size = new Size(18, 13);
|
||||
_pictureBoxFastForward.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
_pictureBoxFastForward.TabStop = false;
|
||||
_panelcontrols.Controls.Add(_pictureBoxFastForward);
|
||||
|
||||
_labelTimeCode.Location = new Point(280, 29);
|
||||
_labelTimeCode.ForeColor = Color.FromArgb(100, 200, 200);
|
||||
_labelTimeCode.Font = new System.Drawing.Font(_labelTimeCode.Font.FontFamily, 7);
|
||||
_labelTimeCode.AutoSize = true;
|
||||
_panelcontrols.Controls.Add(_labelTimeCode);
|
||||
|
||||
_pictureBoxBackground.SendToBack();
|
||||
_pictureBoxFastForward.BringToFront();
|
||||
_pictureBoxPlay.BringToFront();
|
||||
|
||||
_panelcontrols.BackColor = _backgroundColor;
|
||||
|
||||
_labelTimeCode.BringToFront();
|
||||
return _panelcontrols;
|
||||
}
|
||||
|
||||
public void VideoPlayerContainerResize(object sender, EventArgs e)
|
||||
{
|
||||
//_pictureBoxPlay.Left = 22;
|
||||
//_pictureBoxPlay.Top = 126 - 113;
|
||||
//_pictureBoxPlayDown.Location = new Point(22, 127 - 113);
|
||||
//_pictureBoxPlayOver.Location = new Point(23, 126 - 113);
|
||||
|
||||
//_pictureBoxPause.Location = new Point(23, 126 - 113);
|
||||
//_pictureBoxPauseDown.Location = new Point(22, 127 - 113);
|
||||
//_pictureBoxPauseOver.Location = new Point(22, 127 - 113);
|
||||
|
||||
//_pictureBoxStop.Location = new Point(60, 130 - 113);
|
||||
//_pictureBoxStopDown.Location = new Point(60, 130 - 113);
|
||||
//_pictureBoxStopOver.Location = new Point(60, 130 - 113);
|
||||
|
||||
//_pictureBoxMute.Location = new Point(91, 131 - 113);
|
||||
//_pictureBoxMuteDown.Location = new Point(91, 131 - 113);
|
||||
//_pictureBoxMuteOver.Location = new Point(91, 131 - 113);
|
||||
|
||||
//_pictureBoxProgressBar.Location = new Point(47, 118 - 113);
|
||||
//_pictureBoxVolumeBarBackground.Location = new Point(111, 135 - 113);
|
||||
//_pictureBoxVolumeBar.Location = new Point(120, 139 - 113);
|
||||
//_pictureBoxProgressbarBackground.Location = new Point(43, 114 - 113);
|
||||
|
||||
|
||||
PanelPlayer.Height = Height - ControlsHeight;
|
||||
PanelPlayer.Width = Width;
|
||||
|
||||
_panelcontrols.Top = Height - ControlsHeight;
|
||||
_panelcontrols.Width = Width;
|
||||
_pictureBoxBackground.Width = Width;
|
||||
_pictureBoxProgressbarBackground.Width = Width - (_pictureBoxProgressbarBackground.Left * 2);
|
||||
_pictureBoxFastForward.Left = Width - 49;
|
||||
|
||||
_labelTimeCode.Left = Width - 170;
|
||||
|
||||
}
|
||||
|
||||
#region PlayPauseButtons
|
||||
private void HideAllPlayImages()
|
||||
{
|
||||
_pictureBoxPlayOver.Visible = false;
|
||||
_pictureBoxPlayDown.Visible = false;
|
||||
_pictureBoxPlay.Visible = false;
|
||||
}
|
||||
|
||||
private void PictureBoxPlayMouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
if (_pictureBoxPlay.Visible)
|
||||
{
|
||||
HideAllPlayImages();
|
||||
_pictureBoxPlayOver.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBoxPlayOverMouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
if (_pictureBoxPlayOver.Visible)
|
||||
{
|
||||
HideAllPlayImages();
|
||||
_pictureBoxPlay.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBoxPlayOverMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
HideAllPlayImages();
|
||||
_pictureBoxPlayDown.Visible = true;
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void PictureBoxPlayOverMouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
HideAllPlayImages();
|
||||
_pictureBoxPause.Visible = true;
|
||||
Play();
|
||||
}
|
||||
|
||||
|
||||
private void HideAllPauseImages()
|
||||
{
|
||||
_pictureBoxPauseOver.Visible = false;
|
||||
_pictureBoxPauseDown.Visible = false;
|
||||
_pictureBoxPause.Visible = false;
|
||||
}
|
||||
|
||||
private void PictureBoxPauseMouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
if (_pictureBoxPause.Visible)
|
||||
{
|
||||
HideAllPauseImages();
|
||||
_pictureBoxPauseOver.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBoxPauseOverMouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
if (_pictureBoxPauseOver.Visible)
|
||||
{
|
||||
HideAllPauseImages();
|
||||
_pictureBoxPause.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBoxPauseOverMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (_pictureBoxPauseOver.Visible)
|
||||
{
|
||||
HideAllPauseImages();
|
||||
_pictureBoxPauseDown.Visible = true;
|
||||
|
||||
}
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void PictureBoxPauseOverMouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
HideAllPauseImages();
|
||||
_pictureBoxPlay.Visible = true;
|
||||
Pause();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region StopButtons
|
||||
private void HideAllStopImages()
|
||||
{
|
||||
_pictureBoxStopOver.Visible = false;
|
||||
_pictureBoxStopDown.Visible = false;
|
||||
_pictureBoxStop.Visible = false;
|
||||
}
|
||||
|
||||
private void PictureBoxStopMouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
HideAllStopImages();
|
||||
_pictureBoxStopOver.Visible = true;
|
||||
}
|
||||
|
||||
private void PictureBoxStopOverMouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
if (_pictureBoxStopOver.Visible)
|
||||
{
|
||||
HideAllStopImages();
|
||||
_pictureBoxStop.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBoxStopOverMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (_pictureBoxStopOver.Visible)
|
||||
{
|
||||
HideAllStopImages();
|
||||
_pictureBoxStopDown.Visible = true;
|
||||
}
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void PictureBoxStopOverMouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
HideAllStopImages();
|
||||
_pictureBoxStop.Visible = true;
|
||||
Stop();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Mute buttons
|
||||
private void HideAllMuteImages()
|
||||
{
|
||||
_pictureBoxMuteOver.Visible = false;
|
||||
_pictureBoxMuteDown.Visible = false;
|
||||
_pictureBoxMute.Visible = false;
|
||||
}
|
||||
|
||||
private void PictureBoxMuteMouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
HideAllMuteImages();
|
||||
if (Mute)
|
||||
_pictureBoxMuteDown.Visible = true;
|
||||
else
|
||||
_pictureBoxMuteOver.Visible = true;
|
||||
}
|
||||
|
||||
private void PictureBoxMuteOverMouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
if (_pictureBoxMuteOver.Visible)
|
||||
{
|
||||
HideAllMuteImages();
|
||||
_pictureBoxMute.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void PictureBoxMuteOverMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (_pictureBoxMuteOver.Visible)
|
||||
{
|
||||
HideAllMuteImages();
|
||||
_pictureBoxMuteDown.Visible = true;
|
||||
}
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void PictureBoxMuteOverMouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
HideAllMuteImages();
|
||||
Mute = true;
|
||||
_pictureBoxMuteDown.Visible = true;
|
||||
}
|
||||
|
||||
private void PictureBoxMuteDownClick(object sender, EventArgs e)
|
||||
{
|
||||
Mute = false;
|
||||
HideAllMuteImages();
|
||||
_pictureBoxMute.Visible = true;
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Progress bars
|
||||
private void SetProgressBarPosition(int mouseX)
|
||||
{
|
||||
int max = _pictureBoxProgressbarBackground.Width - 9;
|
||||
if (mouseX > max)
|
||||
mouseX = max;
|
||||
|
||||
double percent = (mouseX * 100.0) / max;
|
||||
_pictureBoxProgressBar.Width = (int)(max * percent / 100.0);
|
||||
|
||||
double pos = percent * Duration / 100;
|
||||
CurrentPosition = pos;
|
||||
}
|
||||
|
||||
private void PictureBoxProgressbarBackgroundMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
SetProgressBarPosition(e.X - 4);
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void PictureBoxProgressBarMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
SetProgressBarPosition(e.X + 2);
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
public void RefreshProgressBar()
|
||||
{
|
||||
if (VideoPlayer == null)
|
||||
{
|
||||
_pictureBoxProgressBar.Width = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
int max = _pictureBoxProgressbarBackground.Width - 9;
|
||||
double percent = (VideoPlayer.CurrentPosition * 100.0) / VideoPlayer.Duration;
|
||||
_pictureBoxProgressBar.Width = (int)(max * percent / 100.0);
|
||||
|
||||
if (VideoPlayer.Duration == 0)
|
||||
return;
|
||||
|
||||
if (_totalPositionString == null)
|
||||
{
|
||||
var sp = TimeSpan.FromSeconds(Duration);
|
||||
_totalPositionString = string.Format(" / {0:00}:{1:00}:{2:00},{3:000}", sp.Hours, sp.Minutes, sp.Seconds, sp.Milliseconds);
|
||||
}
|
||||
|
||||
var pos = CurrentPosition;
|
||||
if (pos > 1000000)
|
||||
{
|
||||
pos = 0;
|
||||
}
|
||||
TimeSpan span = TimeSpan.FromSeconds(pos);
|
||||
string displayTime = string.Format("{0:00}:{1:00}:{2:00},{3:000}", span.Hours, span.Minutes, span.Seconds, span.Milliseconds);
|
||||
_labelTimeCode.Text = displayTime + _totalPositionString;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void SetVolumeBarPosition(int mouseX)
|
||||
{
|
||||
int max = _pictureBoxVolumeBarBackground.Width - 18;
|
||||
if (mouseX > max)
|
||||
mouseX = max;
|
||||
|
||||
double percent = (mouseX * 100.0) / max;
|
||||
_pictureBoxVolumeBar.Width = (int)(max * percent / 100.0);
|
||||
if (_videoPlayer != null)
|
||||
_videoPlayer.Volume = (int)percent;
|
||||
|
||||
}
|
||||
|
||||
private void PictureBoxVolumeBarBackgroundMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
SetVolumeBarPosition(e.X - 6);
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void PictureBoxVolumeBarMouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
SetVolumeBarPosition(e.X + 2);
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void RefreshVolumeBar()
|
||||
{
|
||||
if (VideoPlayer == null)
|
||||
{
|
||||
_pictureBoxVolumeBar.Width = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
int max = _pictureBoxVolumeBarBackground.Width - 18;
|
||||
_pictureBoxVolumeBar.Width = (int)(max * Volume / 100.0);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region VideoPlayer functions
|
||||
public void Play()
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
VideoPlayer.Play();
|
||||
HideAllPlayImages();
|
||||
_pictureBoxPause.Visible = true;
|
||||
RefreshProgressBar();
|
||||
}
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(null, null);
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
VideoPlayer.Pause();
|
||||
CurrentPosition = 0;
|
||||
HideAllPauseImages();
|
||||
_pictureBoxPlay.Visible = true;
|
||||
RefreshProgressBar();
|
||||
}
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked.Invoke(null, null);
|
||||
}
|
||||
|
||||
public void Pause()
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
VideoPlayer.Pause();
|
||||
HideAllPauseImages();
|
||||
_pictureBoxPlay.Visible = true;
|
||||
RefreshProgressBar();
|
||||
}
|
||||
}
|
||||
|
||||
public void TooglePlayPause()
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
if (VideoPlayer.IsPaused)
|
||||
Play();
|
||||
else
|
||||
Pause();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsPaused
|
||||
{
|
||||
get
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
return VideoPlayer.IsPaused;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public double Volume
|
||||
{
|
||||
get
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
return VideoPlayer.Volume;
|
||||
return 0;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
if (value > 0)
|
||||
_muteOldVolume = null;
|
||||
|
||||
if (value > 100)
|
||||
VideoPlayer.Volume = 100;
|
||||
else if (value < 0)
|
||||
VideoPlayer.Volume = 0;
|
||||
else
|
||||
VideoPlayer.Volume = (int)value;
|
||||
|
||||
RefreshVolumeBar();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Current position in seconds
|
||||
/// </summary>
|
||||
public double CurrentPosition
|
||||
{
|
||||
get
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
return VideoPlayer.CurrentPosition;
|
||||
return 0;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
VideoPlayer.CurrentPosition = value;
|
||||
RefreshProgressBar();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Total duration in seconds
|
||||
/// </summary>
|
||||
public double Duration
|
||||
{
|
||||
get
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
return VideoPlayer.Duration;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private bool Mute
|
||||
{
|
||||
get
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
return _isMuted;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (VideoPlayer != null)
|
||||
{
|
||||
if (value == false && _muteOldVolume != null)
|
||||
{
|
||||
Volume = _muteOldVolume.Value;
|
||||
}
|
||||
else if (value)
|
||||
{
|
||||
_muteOldVolume = Volume;
|
||||
Volume = 0;
|
||||
}
|
||||
_isMuted = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
620
src/Controls/VideoPlayerContainer.resx
Normal file
620
src/Controls/VideoPlayerContainer.resx
Normal file
@ -0,0 +1,620 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="pictureBoxBar.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAABXgAAAAtCAMAAAAjrvPmAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDw8OERER
|
||||
EhISEhITEhIWEhIXERIcERIdFBorFRssJioxJzBMKDFNPENSPURTPUVUPkZVNUBmNkFnQEdXQUlZQkpb
|
||||
Q0tdRU1eRk5gR09iSFFkSlNmS1RnTVVpTldrT1htUVpvUltwU1xzVl93WmN8XWaAX2mDXmmFYGqFYWuG
|
||||
dXyadn2bi5KnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6HRMPQAAAalJREFUeF7t1jVu
|
||||
RVEQRME2MzMze//rczL+S+ioTvLCkUpXrZdfESBAgEBVIB8iQIAAgapAvqZPESBAgEBFIO8iQIAAgapA
|
||||
3kSAAAECVYG8igABAgSqAnkRAQIECFQF8iwCBAgQqArkSQQIECBQFcijCBAgQKAqkAcRIECAQFUg9yJA
|
||||
gACBqkDuRIAAAQJVgdyKAAECBKoCuREBAgQIVAVyLQIECBCoCuRKBAgQIFAVyKUIECBAoCqQCxEgQIBA
|
||||
VSDnIkCAAIGqQM5EgAABAlWBnIoAAQIEqgI5EQECBAhUBXIoAgQIEKgK5EAECBAgUBXInggQIECgKrD4
|
||||
490XAQIECFQEsi0CBAgQqApEBAgQIFAWWJ6WRIAAAQIVgfwPry8BAgQIdAQMb8fZFQIECCwEDK/HQIAA
|
||||
gbKA4S2DO0eAAAHD6w0QIECgLGB4y+DOESBAwPB6AwQIECgLGN4yuHMECBDIyoSCAAECBDoCWZtWRYAA
|
||||
AQIVgWxM6yJAgACBikC2pk0RIECAQEUgu9OOCBAgQKAikOPpSAQIECBQEcjP9C0CBAgQqAj8AYNKjD+4
|
||||
WHt6AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxFastForward.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABIAAAANCAMAAACTkM4rAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFMDQ+Rk5g
|
||||
SVFnSlJnS1RnSlJoS1NrS1RpTVVpTFRqTVVrTVZqTVZrTVVtTlZsT1htT1hvUFluUVpuUVpvUFhwUFlx
|
||||
UltwUVpxU1xzVF11Vl93Vl94WF90WWB0XGN3WGF6WGJ5WWJ7WmN8W2R+XGR/XWZ/XWaAX2iBXmiCX2mD
|
||||
XmmFYGiCYWuGb3aMcHeMdXyPc3qQdn2QgIeagYiYgomZgIibhYych46fkpqrl52tnKGwAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk2TBkgAAAIRJREFUGFdlxtsW
|
||||
gUAYhuHPEGIYGZJQqVD222a4/wvzM2t1Ms/Bu17sLThaUBpFnRLFZkuy6yGn7HJ6yCwli8/7HFNO8ToF
|
||||
kpBMtdavCeU+D9GYBWSglLq1KZdRAM//catnxJzqETHhwx9L0ls22dBdUTwJ8cedDjcRAtzo1+HoWtCy
|
||||
fAFcIBizNgYeHAAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxMute.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAMAAABFjsb+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDw8OCwsW
|
||||
DAwRDw8TDQ0UDQ0VDg4UDg4VERESEBATEhISFhcgGxskGxwhHBwjHyAlICAoIyMtICMuICQuJicxJygy
|
||||
JioxKis2Kyw1LzA6MTI8NDU+NjpGNDtMNjxNNz5OODlBOTpDOT9POj9ROUBPOEBQOEBRO0JSPENSPENT
|
||||
PERTPURUPURVPkZVPkZWP0ZXREZPQEZXQEhYQUlZQUlaQUlbQkpbQ0tdRExaRUxcRU1eR09dSktUSkxV
|
||||
SExdSU1eSU1fTlJeU1VdTFBhUFdnUlhmV1lkU1loWWBuX2RxY2ZvYGRzZGd2Yml2ZmhwZ2pycHN7c3V+
|
||||
bHGAcnWBcnaDcneGgoWOgISPg4aPgYaUi46Yio+Zio+ajJCZlpmilZmkmJylm56nmZ6onqGqoKOsoKSs
|
||||
oaWyp6qyqa23sbW9srW+tbnBuLzDvb/Hv8HGvsPLwcPJwMPLw8XKwcbNw8fPw8jPx8zTy9DXz9HVzNHY
|
||||
zdLZz9Pd0NXd0tfe09jf1Nng19zj3d7i3OHo3eLp4ODk4uPm5ebp6urt6+zu5uvz7/T78PHy8/P09fX2
|
||||
8vX48PX8+vz//f39/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgqUuWQAAARJJREFUKFNjsMIE
|
||||
DOaYgMEMDExBhIkJhMNgDAL6LvrGxpa+HnpGIB6DIRBoh08M0dFxTuwpctcBchl0dXW1XXsn5alZd0fZ
|
||||
V3R4aurqMmhrqasWTJrULmvo3dpo19Jmoa3NoKGUkTUBCJRjcp37Cn0mxKtoMGjLdfWDQGhQf2Rav0Nn
|
||||
tbw2g5hQUzMIRMs0JwU3O+bXCIsxMDDV1oGAk02dV1idRFkmEwMDF3NEbD0QcPslS1WlGtQHMnMxcHGy
|
||||
MCbU15ey8ynmZItnF/NwAsW4ONlEK+vimPnL/EXTS6TZuEBiXBxsbg22nMwCAeUpImycEDGgSkE2Dg5e
|
||||
BUlWkBBEjIuTE8jmAJIcIB5EDBVgEwMAxe1P5C1jRZkAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxMuteDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAMAAABFjsb+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFExMVDBIt
|
||||
DhQuDxk3DRs9FhouHB8mEBs1FxszEBo4ERw6Fx8/GB45DyA8GiIlFCI7GSA3HSI3GiA7HSI5JiwvIic7
|
||||
Ji48Dh9CCSBGDyBDDyFEDyJFDyRGCyRMDiZIDCZODyhJDChPDytNBi1dCilRDCpSDy5RDC9YDDNfEiVB
|
||||
EiZCFyBAFSJHEyZQFjFfBzRmBzhsBzltCzhnDDtqCDxwKDBKLzZLLjVMLzVOITZXLzVQLzVTLjZXLjdc
|
||||
LzphLztiLztjLzxjMDphMD1kCUB0CUB2DUBxCkh/FUF4OEJYPUdfPkhdPUtiNEd1QkpaRU1dQ09mSU1g
|
||||
TFlxTFtwV1xsV11vUmB0VmV2WGJzW2R7Wmh6XGp5XGp6YnB/DEyBDVGHEEiGE1mOE1qPEFCQEVmaF2GT
|
||||
FmGfFmKgG2ymG2ynInatKH2yZXeIZ3mFbnaIa3yJbniKcHeHdXmDeXyGb4CEcYGMcIKOd4iWeYiUeouV
|
||||
eIqXe4yWmz0ashwMpDAUvDwuvEE0vEM2s1A4slU/q2NIwQUCxwcHwgsIzgAF2QAIwDwy1CEl1Cov3ycu
|
||||
1y0x2Cow4AYR4TM54zY/3XVz3Xd26GZryoV1gI2XhIiWhYqXgY+YiI+eg5GahJGfh5adhJafiJaejZGb
|
||||
jZGfkZSdjpWhiZiljZqgk5qlmJ2qmZ+tkqCmlaCmk6GpmaaumaavnqaunaywroaCq4qGqIyHqI2Ip6+2
|
||||
prC0p7G1rrm/sbrFtr7KtMDEtcHFucTHu8TJzZGY0YuT0Zedw8jQyc7VzNDV0NXd0tfe09jf1Nng19zj
|
||||
3OHo3eLp7crG8MTD9MbH4+jv6ezw8PX89vf4+vz//vz8/f3+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc6SIIgAAAV5JREFUKFNj8GPj
|
||||
E0EGfGx+DGIlu/cig90lYgzRe7Zv2w5CELBt+55ohtgNq1atWrZ6GZCEgA2xDDGr5i2YtfXq+jkLIGDe
|
||||
qhiG8PmVFdMvXTtSWl29Zse+HWsq54czhJXn5x6+fPlCbNm6g5MmTDq4tiqMIThn566LQBA1d39n79SJ
|
||||
nQeWBjMEeJ86DQKFS3q6O85d6etfHsDgKXrsOAjMXNg++Wzr2Sltiz0ZzFiPnwCBkKKGxitnauu7is0Y
|
||||
zDlmLAKJCfhvqmue1lS3MdCcwYKHiXHF8eOH2PkjtrTUtGwOFbJgsOLmZDY9enIlr5amT8HsPC8ubSsG
|
||||
ax1xSZbI80FyakoKcjLSUuI61gw2urLyshKWKkZuxhrqqorysro2DDZ6yvoGJi5xialJ8e6uhvrKejYM
|
||||
gr4eCckpaRlZ2VmZ6SnJCR6+ggwMwrZOdvYOjs7Ozo4O9nZOtsIMAJnRonErDmY9AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxMuteOver.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAMAAABFjsb+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFERIUCAop
|
||||
CQ03DR9HDxpZDiJNDyxeEylPGytKHStLHS1MGy1VHS9XFjVfHjBYEi5gHytmETFmEjNqEzVqHTRlHTVm
|
||||
Ezl2Fj1wFDx6Fj55HT14JzRRITZZKDZTLzlULTteNT9YICpmICtoKj5kLD9lF0F1F0R9HUhzH0p0H016
|
||||
NUFdJkNqKkNtKkpwLE53NUdtPU1sO1F+RU1eR1FtTVRsT1huSVlzS1t1TlhwV2B1Fy+BFy+CE0SNE0WO
|
||||
HkSKGEmJGUyJGU2PIUCJIEGMJEOJJkSIJESPK0qPLl6DOVqCN1abJ1ekKWSNLGeOLGufLWyYMHCdM3ab
|
||||
KmynLW+jKGmpKGmqKm6pN3ykM3KzRWeMT2WFWmuKRmenS2yoQGi5UG+qVXKsW3mxX32xZm6CaXSJbHeI
|
||||
aXiLaXiScXiLcXuJcXyQc3yRPIWmPoqrQpGtd4GUdISSdIWffIaTfoeXfIuYfY+bbom3Vo/Ie5TAfZbB
|
||||
g4uehIubhY2fgZCcgJOfgJSfiZOfgZWgiZGhjZSkiJijjp6omZ+ukqKrk6Wulaeul6GymaGwn6a0m6mx
|
||||
mquznKy0na61oKi2oK21oqu8obK5orO6p7C+prS6p7W7qLe9rbS9qri+rbi/rLXBr7rBr73DsbfCsL/E
|
||||
tL7Etb/FtrzIuL/Kiszfjc/djdDektHdlNLbltXenNXdntjfg8LhiMvgotnescDFvsTOvcbQwsnPxMnO
|
||||
wcfRw8rTxMrTx83Vyc7XyNHVyNHWy9DXydLWytPXy9LbzdLa0tbb0dbe09jfyN700NXg1Nng19zj29/i
|
||||
3N7h3N/j3OHo3eLp5Obq5ujr6Ort5+z07O3w7+/x7u/y7/T78PHy8fP09fb38PX89Pb69/j5+Pj5+vz/
|
||||
/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYxRxBgAAAW1JREFUKFNjMDIs
|
||||
q6xAgMoyQyMGw6PXLiODa0cNGZJO7du/f/8eIN63ezeIPJXEkLh14caNs+fM3jh/xqJ5M+dvXLg1kSFh
|
||||
0ZSpfYvvzZnQ37vl9slJ/VMWJTDET+9ob79z71BL641ZRaev97ZOj2eI7awrPXTv3pWCkoYL5zLPX6rt
|
||||
jGWIqd+8/S4QpE3blXprb/HduY0xDF5mV2+CQH7WzZrJNy0uHjP3YnCXPnMWBJoUzrZlnDXZdFjWncGV
|
||||
8/ARELA0PZJcfURu5wIuVwYXnqrm40DAkdKjdXCi8fFsPhcGJxFW5u7jx3ewyxgsXSK/ZBu3qBODk5Qg
|
||||
v/LBI1282rvSVaZt12eTcmJwtpOQFI4+EaWuoVt4YLKOkJidM4Obt62jg6qepo+vR6SnuJq9jbcbg3V5
|
||||
RGhYcEB4bl5OoL9fUEhEuRUDU9y69ctWrFy9dsOaVSuXL1u/Lo6JgYGRRUlAQBECBASUWBgZAFBhr6gt
|
||||
gaHsAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxPause.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAIAAADZ8fBYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABeRJREFUSEt9lgtQ
|
||||
VFUcxg/i4nsXFpZlWXnJW54SD+PhsoiAIA/BIJ+hBhkzko5TjpUzxuBMJlqOUgoNKjIEFI06AVr4oEKz
|
||||
8JFIKUqZzfjI8lFOziiy/S7HWRXHdv5z5pzv/32/ezh7711sMma9Ip7xGaZ8bC0W8aD/3v3796RLpbKz
|
||||
HW5nYyMGBh4MDAw8KyvS84qfqNyi9NyijFlLMvNLpmbMmxRt9vYNMrp5GlzHuxrdGZmjoNPFgxO/Uk9y
|
||||
RNrMl4cU1qT0ud5+wTqds5d3QHhUYpw5x5S6YEpKISNzFHS6eHDifxoiUrMXWSstZzFXDo8yOel0Pv4h
|
||||
U6blRya+HpG4Ia2gvnj5lytWdzAyjzBtQKeLByd+UmQfR4mUzEJZqPR8/EPZyGRTJkkQdZ9d6Dl3s/eX
|
||||
2xQTOWfc3nCeLh6c+ElJ7kNaVqGYlrlAVmrOIq7vYjCaUuZMjH2vclcviK7Tf+1pudj4eV9tfa8sroTS
|
||||
2XUd+qYdP+PET4osBCtNJGfM5xtIyV4YEhHPlSW0tfOaJH6869zmbT0bK7vXfXBKFnMUdC6Gp6H9cnDc
|
||||
h6TIQoADbWrGfMHBg05IzuOkouPT/OPXY2U7/KXkyypOvFH27bLVRx8vFHQuAJ0d4CdFFgIcaDCFefps
|
||||
Zny/VJhpRdmWMwdO3OAQmKwo7wLReuh8XXNPQcn+2aUdjMxR0Oni4ShAv7m5h6yEQIOpcOPM2VwqJiEz
|
||||
akZdy4lblQ19EjrvtfbOrouWwU9F9bG0hV8wyiU61yh55zgbr6i90Nz5J1kIcKCZ015UuEFhk908JoQl
|
||||
lnJZ/iigBArf+gHQye7fJai68bvogqb11d/IJTrduSuP4SS1dd9VZcuJpXCgKftNTC2QC7/Yd2mX1fQu
|
||||
39ANNHf5kYQ5n3b9+JuVGzBjl5WLThcPTmXXNb3v770CQW7RlFog4pJm6l0MPJd8rfKyWNlI+tIjbNDK
|
||||
5QSGcOnikWi2AhcCHGgwBcfBLCoua0JoTXnz1SXrTuOOmXvAL6vNOWab9XzZqW1k9aqN7dbzpYsHJ35S
|
||||
ZCHAgRZrzhLyAfPyjbQb+e6kGYeMkc0q153CsFO41wqPTYeP9t3rt1DllR0icAtcuUSnq3jca+3G15Ii
|
||||
CwGO8vgFhAqNRu3o5KRWO6OOcm4SY6uEY40SCKgHxC31x81/KYjst3TdfubXb91Fp6t4cOIfWzXSpQkC
|
||||
HGj2GrVwcHDgOeFBHD5ymd67xcZph7LZwEYR3Qioqe1U36VrFFyUovJWuUSni6I4DTtJkYUABxpMYa/R
|
||||
hEWZeKXajcmhNyZgr2KN3yOS9wlzE7fXyTPnKXbKEq5corNUPDgDG0mRhQAHGkzlHHwDw3iljnYIVjtv
|
||||
98o9rVgz2sULR0Vmy5b6Qx1HjlMQRcHhvLIWuUSnq3hwxu8hRRYCHGgwlXNw1huU153eaKsqCik8q118
|
||||
koDq1V7b4u9Xf9TS+tXXFESWjHKJzhIPTvykyEKAA005B61Wq1GPY/OhzyVwQY13lanyHwLDVl1Rr+nz
|
||||
WbZ7aUXDgrWfuK486LrxV0bmKOh08eDET4osBDjQYCpc8HoXo3zw7EaZuSvz2+4at/5N+Vae9V570G99
|
||||
Z0jdpfDdtxmZo6BLA078KlUiWQhwoD3kyi1zLqaUfEedAVPQnLbFP1nSj/fHHrgzed9NRuayHlfw4MTv
|
||||
pHMhq5zs4GYfcSU6IiaJVwYmuxFRPE7s5e07Fqr4uuWlyw+LuRTp4sGJnxRZK/QJLsdhb6+hzVvZ3dNn
|
||||
1FgP2xHT3ZNrZ1ddXNPdv+mGRRZzFHS6eHDiJ0UWgtys5DpaC51bxD8ogl/AyOeTOazRo/WqEaG247LG
|
||||
uBU5eJUwMkdB53vHgxM/qUHmIxRc/ZBSq7V6Fw/uGH4E483ZvPo8vQKd9eNlMUdBp4sHJ/6nIcJB6zak
|
||||
tFo3e3sjT7re4B0UPiUuKU/5YR38R4CROQo6XTw48T8NETpj8DPLdaJW70/pXCe6ekbIYm4V/yf7Hwfx
|
||||
peH+1vvyAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxPauseDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAMAAABhTZc9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDw8ODxAP
|
||||
DxEWEBERERIREhISERITEhIXEhQUERQVExcXEBEcERIdAAA0AAA9CBEkCxY1EhgoFBkqFRssFx8wGyIm
|
||||
GyMtHSc6Jy00BABGAABPAgRLAgVMBABIBQBOBwdNCQhPAgBRBQBRBQJSAQJbAAhWAA5XChZeGB9dAwdj
|
||||
Ag5lABViABZuAB9oABpzFhxjFixYHSZfHzRFACVvACN3ACtxADV6GTF0Jy9MIjpJJj9KKDBNKDdLKzlD
|
||||
KzlEKDlGKjtFKDtGLTtHLD1JMT9MIy1pJS1zMjx3KUNPLUBMJENWJkVYKkZSLUpXLU9dO0BOMkFRNURS
|
||||
NkZUN05dPkRSPEZVP0ZWOEpZPkhYPk1dK05kKVdsK1d9O0J2NVVmPlJlO2d4QUhYQUpaQ0tdQ0xeRElY
|
||||
R0xaRU1eRU5gR09iREt5R1FjRVJkQVRqQ1luSFFkSlJlSlNmSVRoS1RpTFdrTVhtTlN9WF5tR2V8V2Bv
|
||||
XmZzAC2AADWFAT6NAESIAkqUAFGeA1uoCWGoBmSxFnKuHHCyGXm1IVmWKGWfKGWgPnymDXnEQ0+IRFaL
|
||||
SVSGTFeITFyOU1yFTW6GQHGERXOJR3qPTHKLTXeRTHSeS3uTVmONXWGGWGqVWnecYWWHYmaIYmuNam+P
|
||||
Y2+SY3OWYXabY3iUbXGQbneVb3qXaHuec3aHcXWSdXqVcH6bcX2gP4CdN4KyFY3VLozIIpnaNJnTJaTm
|
||||
LqvmKa/tM7HoNrnyRoGWSYOdQYOhQoShQ4WnRoWjRYijR4umQ4itSIegTIihSIyoTJGuT5W0UpWxUpe3
|
||||
UZi5VJu8VZ6+aoGbfICafoScaYWmdYWlc46vfIKjfIeofY2jeo2ofpCnR8v6VdT/dub/goefhoqfhYuq
|
||||
io+iiYymiY2rg5eqjpGphpiwkpetmZ20jKC2lKG0m6K3nqe7nam8oKK3qrLGtLbGtrvCtLvPwcbNwcLR
|
||||
xsfVzM3Zz9Tb3eLp6u/26/D3+vz/////AAAAAAAAAAAAAAAAAAAAAAAAzAsMkgAAAylJREFUOE9jKASD
|
||||
goLi0pwgTw8fXx8Pz6Cc0uKCApAwQz4ElOQ4eyQcOXnq1KmTRxI8nHNKwKIMmSCQXxJoNfn03mgvext7
|
||||
r+i9pydbBZbkA8UZMoAgs8jZ78R6y7RV9548eXJvVarl+hN+zkWZGRkM6UBQ5BR3Jjrk3osnd86fP3/7
|
||||
0dM7/tFn4pyK0tMZkpOTswP8znhVvXx0bs3qZcuWrV5z7v6Lcq8zfgHZyQxJSSmRVieiq17eXrNs/mwQ
|
||||
mLdwzfmnldEnrCJTGBITMxwmr498dXvFgoVvX5eVlb1+u3DB8vPPw9dPdshgCEuM8Djp/fD6igUTP/78
|
||||
+SD2/s+fH8sWLL961eukRwRDWJJLwp68Z2sXzcr6/PPnU/dHP39+zpq4YMXj3D0JLgwhEY67Y85eWzyr
|
||||
PxYo+8T1AVA2tm/W4otLY3Y7MoSEWh2LurRyzoQed7DsXaCse0/vnJUXoo5ZMYSF+hw3ujC3191N/xPQ
|
||||
XvXLP39+0ndz7517wei4D4OEhM8xfkMNeTlFqY8/ftxVW/fjx0cpRSUFDVf+Yz4MDFweBwR4+WTlVFTf
|
||||
f/t2RXvdt+/vVVWUZPl4BQ54MLByxR0w4JVUUtHSfvP160XdlV+/vtHWUlGS5DU4EMfAyha8K4ZPWVPH
|
||||
xPjVly/rTJd8+fLK2ERHU5kvZlcwAyuj3ZQuGS296hqz5x8+rDSb++HDc7Oaaj0t6a4pdgyszKIVB811
|
||||
qmvr666/ezejYca7d9fr6murdcwPVogysLKyhk/t0qmtb2xuvzC3qbtp7oX25sb6Wp2uqeGsQFkW0YrD
|
||||
7TXN3Ru7W9o2bt7Y1gJkNda0H64QZQHpZbaddrS9YePWbdt27Ny5c8e2bVs3NrQfnWbLDNLLysoRPv1o
|
||||
Z/P2GzdugsCNG9ubO45OD+dghciycoVPO7yhdfONWyBwY3PrhsPTwrmA4gxsYMDpNGnmgQ0bNm3ZsmXT
|
||||
hg37Z05y4gQJM7BDAJNY/KSZu/fuO7Rv7+7pk+LFmMCiDDxQwM0tFpBXMWnapIq8ADFubogogzAcCAkK
|
||||
iYiLi4sAaZgYgzUKsLCwQOYDADNYgx+MsDCLAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxPauseOver.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAMAAABhTZc9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDw8ODxAP
|
||||
DxEWEBERERIREhISERITEhIXEhQUERQVExcXEBEcERIdEhgoFBkqFRssFx8wGyImGyMtHSc6Jy00Jy9M
|
||||
Jj9KKDBNKzlEKTtFLTtHLD1JMT9MKENOKkNPLUBMKkZSLEdULUpXLU9dMkFRNURSNkZUN05dPUVTPEZV
|
||||
OEpZPkhYPkxdMldmO1NlO2Z4QEdXQUlZQkpbQ0tdQ0xeRU1eRU5gR09iR1FjRVJkQVhuSFFkSlJlSlNm
|
||||
SFRnSlRpS1ZrTFdrTVhtRGR5SWZ+AC7SCiTVDi3TADvNATbXBTbfBjzXADrcDTHXDDPdCD7ZES/OFjXP
|
||||
GT3RAD3gFDvlP3CEAUbSClXUEkTdHlnOHVLVAEDkAEfpAEjqC0voAlr0GkfmFGrYDGr2DHD2FH33Ik3P
|
||||
JU7KJVvbJFntLGbQJH7WNGnPMWHdOnfCK2TvJXT4Mm3oO3DoTW6FTm6HRXOJRnmOTXKLTHqSQXPSR3fQ
|
||||
Rn3jGoT+KIrcNZjcJJP7OKjzRoGWR4KcSoWeSImfRoeiRIetR4qnSIimSI2pS46vQo25T5GvTZK1SpG6
|
||||
TZS5T5e9bJKrZZW8eJarc5i/QITeRYneTY3fRJrHTZXAQ5LTQpHWRZPVWoHWUZrBT4rkWI3mXZHqTanH
|
||||
S7nqUbzgZovZbJLGeJnKdJXTf53UfZnYfZjeYYnlY5XlY5TqbJbobZrpd5Tgd5XldZzofp3jeKXrfKDp
|
||||
fq/vcqX5S8D9Xs3pesD9aeH5cubze+/8hqC5jKTYmazElqzZgKfqh63tjKTmjazpjbLtjbbwkqfnk6jn
|
||||
lK7rma7ombHum73vorTOp7nZtrvCoLPqorXroLbupbbrpLfvpLrtqbrkq7ztnsf1g/T+ivD/l///qMbz
|
||||
ptb8tcXjvMnotMTwtMzzs9b3sv//v/L/wcbNz9TbwMvox9HpztboxNX1wdr3zNT1z9j2ztz20djq19z2
|
||||
2d73yuH4w/r/3eLp2eL46u/26/D3+vz/////AAAAAAAAAAAAAAAAAAAAzS/fsQAAAylJREFUOE9jsAUD
|
||||
Gxt7J0s1eTlFJUU5eTVLJ3sbG5AwgzUEOFpKy+k39cyYPqOnSV9O2tIRLMpgDgLWDqpiof2zp63ZtHXT
|
||||
mmmz+0PFVB2sgeIMZkBgbi+t3D1r/tV3nz4CwdvL82d1K0vbm5uZMZgCgZ2U7twpZ769e3jjypUrNx6+
|
||||
/XhqylxdKTtTUwZjY2MLFeW5Ux59e3jp9MkjR46cOH3xxvuHU+Yqq1gYMxgZmeiIdU959P7a6SOrNmzc
|
||||
uHHDqiOnrr2+O6VbTMeEwdDQTCJ01rHP105tXvng+pzVc64/WLn56OU3h2eFSpoxGBhqy/bN+3z36NYl
|
||||
L3/9Olh18Nevl0s2HT37Zl6frDaDppGM/szjj48dWj/nw69f5yv2//r1Yc66rcceHZ6pL8OgoS3ZOPXx
|
||||
zcOb1la+AurNBsq+qlyw/tDZu1MbJRk0NMU6qx4f27J2AVg2EyRbMX/tlsP3qjrFGAw0FWbk3Nu2tqog
|
||||
Emjv/vAVQHsjC6oWbLuZM0OBQUREode3IMrbJ9rjxc+fK8KW//z5wiM62D+90LdXgYGBS7bV3cvVMzgm
|
||||
7P737yvCl3//cT8sNtjT1cu9VZaBlUuvKTDE0ycmPvz816/Lwpd+/Xo+PD7WxzMksEWPgZVNvSHNLy42
|
||||
Pin83PPnyxKXPn9+LjEpPjYuJK1BnYGVUaIk1y0/Pjkl8cCzZ5OzJj57diAxJTk+3y23RIKBlVnQuSMg
|
||||
vzqlrmbfhQsTaydeuLCvpi6lOj+gw1mQgZWVVas0129HXX1916QJ0xdNnzCpq76+bodfbqkWK1CWRdCl
|
||||
OTVj944dixcu3Ll758KFi3fs2J2R2uwiyALSyyxR1hGUd/vW7t179u7du2f37lu384LayiSYQXpZWTm0
|
||||
yjtSQ3Y9eXIHBJ482RWS2lGuxcEKkWXl0iprzvXL2H7v6Zen97Zn+OU2l2lxAcUZ2MCAU6qovC03KiIh
|
||||
ISEiKretvEiKEyTMwA4BTEJ6ReVN7a2tre1N5UV6QkxgUQYeKODmFlKxcikuK3axUhHi5oaIMvDDAR8v
|
||||
n4CwsLAAkIaJMYijAFFRUWQ+AARqaklCCnVoAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxPlay.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAMAAABhTZc9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDw4NDw8O
|
||||
CgoXDg4SDg4WCQwfEA8PEBAPERERERESEhISEhITEhIXExQUFBUVFRUWEBAbERIdExUZFBUYFhcZFRcb
|
||||
FhccFxgZFxgbFxgfGBkcGRodBQcuBgc1ChEsEhcnFxkjFRoqFRssGx0gHR8jGiAyICEpISMoIyUrIyYs
|
||||
JCctJCcuJSkvISU0JysyKy84KzA+LTI8LjM9LzU/MDU/BQVAAwdJBglBAw1OBgtQAwVlBAhwDR5nDS5+
|
||||
MDVAMTZBMjdCNDlENTtONjxINz1NOD9NLz9zO0FPO0JSPURTPkVWPkZVP0ZWP0ZaP0deL0BuPkZgNEB1
|
||||
QEdXQUlZQkpbQ0tcREtdRU1eRk1gRk5gRk9hR09iR1BiSFBjSFFkSlJlSlNmS1RnS1RoTVZpTVZqTlds
|
||||
T1hsBgiIAAyaABOdABySDhafARSgABmgAB6iBRqhBhygCRaqCBiqACmQDiOYADWYFTWXACimCyiyADup
|
||||
ADywFyO1GzStIi6eJjqIJzyLKjqKLDuWAEWdAECvAE+2AEm7ClSgHkSiB2O8GWutIkmNMkCNKk26K1q3
|
||||
NUykO1qrOVu4NmCaNnevAFTGAFjHAGHIBWnaCnnYEmPPA3flIVLSLWDYSFemRmS2RWO8RWi+SmKxV2mm
|
||||
V267VHmiZHK6RWbAS2vEUW3EWW/DU3LHVXbJYHfIYX7MbXzJcX3GGYjWD4vvHJjsGpj0JpPQP5XzLqvq
|
||||
Kqz2MbX3N7v0O8L7XoSme4yxWZrgVrf3bYLNaInScYbDc4HJcoTOeIPHeoXMcY3TepPVRcv9TND+X+b/
|
||||
Y9b/Zuv/fPT/kaO8g43Ph5LJgpTUgp7aiZDQjpXTk5nVmqnLkaDXlaPalajdnKPZn6jbhK3oj7LnmLjo
|
||||
oqbapKzcqa7dqbLAqLPUtrvCtL/YqLzmsbXggNP8ke7/v8bdtsjrwcbNz9Tbxc3hx87rztPj0dfv2Nrw
|
||||
2uDn2+Lt3OHo3+Pv2+Dy6u/27PH38/X5+vv9+vz/////AAAAAAAAAAAA6kUEYQAAAxhJREFUOE9jSISD
|
||||
5LTUhMjIyITUtGSYGEMCGMTHJ6WE2msoS0tLK2vYh6YkxceDhBniICApRJNf3c7dL8DP3U6dXzMkCSzK
|
||||
EA0CsfEmfFpegd1zlqxbMqc70EuLzyQ+FijOEAEE0bHa/K6Bc+5/+PYRCD7cmhPoyq8dGx0RwRAOBDFa
|
||||
Ur4N17+9e/bg3r1795+9+3CtwVdKKyY8nCEsLDTKkN+34dWHZzevXL506dLlKzcfvHva6MtvGBXKEBIS
|
||||
5snnXP/03a0r5w4fXLd27cEj5y7ffPW03pnPM4whODhMXd3twqvrFw6ef7Rk0YoVK1avPXTh2qtjburq
|
||||
YQxBwe58Ln2vblw4tOj9n59X585btnzF6n3Hrr3qc+FzZ/AO1lfxP/b0wqHVC97/+fPn64EJ85YuB0rf
|
||||
Peqvos/gGaSiX3f34tE1K/tBsn/+vF00ASR98U6dvgqDp4e4fePdY2tWLYPK/vn1aO78lWuO3mm0F2fw
|
||||
cRd3qr29f9mEnrK3YL1A8OPAhGX7b9c6iTPoafPrpvfU5OfmZb38DQO/SgpqetJ1+RkYGXlZ0gszMvPK
|
||||
i598B4MfPz4vzMrMKEpn4WXg4jCUsq7OyS2vLH30BQw+7bYtLs/NqbaWMGTgYjPWsKyuKK9qrbz6BgTO
|
||||
dpVWNleWV1RbahgzcDHq2Mllz6pqndxy9vXr1w8nNrVMmTK5tWpWtpydDtBkEVdRq9kzJk+bevbxw8Vt
|
||||
HdNnzpw5bfKM2VairiIMXFwMxkZyJVumzZw+aVdn5/qNGzdu2jBz2pYSOSNjBqAsh0SQinnP3k0bN2/e
|
||||
vHU7EGzbtGlvj6lKkAQHUJaLQcdHyLT31IkdO3YeP3H8+M6dJ071mgr7AG0FyXIxOAQLy5btPXPm9Ekg
|
||||
OHNmb5mscLADyFKQLAe7Q4gKq1n7nucvXrx4vqfdlFUlxIGdAyjLDQKcjHrRjiJMMhY2NjYWMkyijtF6
|
||||
jJxAcQYeCGCWdA1311cTExNV03cPd5VkBosyCEKBAIuCgUdoRHREqIeBAosARJRBCQ4U5eUVVVVVQRRM
|
||||
DACG9nnjnRgGhwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxPlayDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAMAAABhTZc9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDw8ODxAP
|
||||
DxEWEBERERIREhISERITEhIXEhQUERQVExcXEBEcERIdAAA0AAA9CBEkCxY1EhgoFBkqFRssFx8wGyIm
|
||||
GyMtHSc6Jy00BABGAABOAgRLAgVMBQBJBABNBwdNCQhPAgBQAAdWBQFRAQJbAAxWDRtXEQxSGB9dAwtk
|
||||
ABRjABVuABhvABxzFhtiFixYHildACZpACN3ATh5HCNhGTF0Jy9MIDdHJj9KKDBNKDdLKzlDKzlEKDlG
|
||||
KjtFKDtGLTtHLD1JMT9MIy5iJS1zIjprLzt4ND14KUNPLUBMJENWJkVYKkZSLUpXLU9dO0BOMkFRNURS
|
||||
NkZUN05dPkRSPEZVP0ZWOEpZPkhYPk1dK05kKVdsLl14O0J6NVVmP1NnNlN6O2d4QUhYQUpaQ0tdQ0xe
|
||||
RElYR0xaRU1eRU5gR09iQ0l6R1FjRVJkQ1luSFFkSlJlSlNmSVRoS1RpTFdrTVhtSlB+WF5tR2V8V2Bv
|
||||
XmZzAC2AADWFADyDAT6NAEaMAkqUAE+cElOLAFSjB1ygA1uoBWCsB2m3Fnq6HHCyKFGCJVeVLWaaKGWg
|
||||
PnymCHrLQUqCRFSKTFSCTleJTFyOUViBVlyFTW6GQHGERXOJR3qPTHKLTHqSVmONXWGHVmyUWnWdYWWI
|
||||
Y2uNbG+ZbXCPY3GVY3iUZ3mdbneVbXuYc3aHcXWScXWedXqVcH6be3+ZaX6hP4CdN4KyG4bFE5DcHprh
|
||||
LozIIpfYNJnTIZ7jJ6bmKq7tMa/pNLbwN7z0RoGWSYOdQYOhQoShQ4WnRYijRoikR4umQ4itSIagSIig
|
||||
TIihSIyoTJGuT5W0UpWxUpe3UZi5VJu8VZ6+aoGbfYKbfICcfoWeaYWqeYymR8v6VdT/dub/hImfio+i
|
||||
iJCmiZaqhpiwkpetjKC2lKC0mqC2nqa8nKm8qK++tbvIwcbNwcPUycvXz9Pb39/o2uDn2+Dr3OHo6u/2
|
||||
7u/z7PH48/P2+vr7+vr9+vz/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAyX1CIwAAAxFJREFUOE9jKASD
|
||||
goLi0twgTw8fXx8Pz6Dc0uKCApAwQz4ElOQ6eiSeOn/hwoXzpxI9HHNLwKIMWSCQXxJoMePioWgvWytb
|
||||
r+hDF2dYBJbkA8UZMoEgq8jR79xG8/RVdx8+fHh3VZr5xnN+jkVZmZkMGUBQ5BB3KTrk7pOHd65duXbn
|
||||
3pM7/tGX4hyKMjIYUlJScgL8LnlVPb13Ze3qJUuWrF67/t6Tcq9LfgE5KQzJyamRFueiq57eWbtk4cJ5
|
||||
8+YtXLRk7bUnldHnLCJTGZKSMu1mbIx8dm3FoqvPp5VNmjR12rxFK649Dt84wy6TISwpwuO89/17KxdN
|
||||
ffPjy8Ps7OyySdMWrbhxw+usRwRDWLJT4sG8R+uWzs1+/ePHj7eL3WMnAKVXPog/mOjEEBJhfyDm8o2l
|
||||
cyfFgmR//Hg1OXbCxLlLbyyLOWDPEBJqcSbqxob5Uya6Q2R/fH06YcKU+cuvR52xYAgL9Tlrfn3BRHcX
|
||||
Pajsjx+f1rhNXHDd/KwPg4SEzxl+Aw15OUWpV99h4Ju6gokz/xkfBgYujyMCvHySyipKLz6CwefP76fJ
|
||||
yvLxChzxYGDlijuizwuU1NR6/gEM3l1TU1VRluTVPxLHwMoWvL+LT1lT28jw2RsQeOxqaKiro6nM17U/
|
||||
mIGV0WZmn4ymbnWN8eOXL18+TzA0Nq6tqdbRlO6bacPAyixaccxUu7quvv7+i+fzjeubm5sb6+uqtU2P
|
||||
VYgysLKyhs/q06lraG3rWdDU0t4PBO2tDXXafbPCWYGyLKIVJ7pr2vr7Ozo2b9+5c+fWLVv622q6T1aI
|
||||
soD0MlvPPt3dvGXXrj179wHB3t07tzR2n55tzQzSy8rKET7ndG/77ps3b4HAzZu723tPzwnnYIXIsnKF
|
||||
zz7R17n95m0QuLm9s+/E7HAuoDgDGxhwOkyfc3TTpm07duzYtmnTkTnTHThBwgzsEMAkFj99zoFDh48f
|
||||
PnRgzvR4MSawKAMPFHBziwXkVUyfPb0iL0CMmxsiyiAMB0KCQiLi4uIiQBomxmCJAszMzJD5AKC+iMSu
|
||||
Me5pAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxPlayOver.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAIAAADZ8fBYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABcZJREFUSEt9lgtM
|
||||
lWUYxz+8sFYmnONRM2JthnePpYYlKIJwLhw4HEESmDtME1FjqNPyljrLDEixcQmHOXUmiKOkNLGcLi9o
|
||||
G5osFFBAhVKuAqZyUJBz+r297iSSffvv7PV5///f+3zP931Dl5DIRcpzrj7i6utwKN2PO7u6OqWrf3/X
|
||||
vv1cXVwUu73bbrc/L6uYZsf3UMRCE4pcYo5O1EXETdFHav1DxwZaxhsitaYofllToc4uHpzCj3pyFGN4
|
||||
3DMKjUogM356MAjf+DWmLbvN6UdDsoqkWFOhLg6bHowTf2+IYrC87xTbIXMSvIMiRs4w+S/fYtlxUpdR
|
||||
Zk69ueCr2x/tali/t5Ff1lSos4sHJ35SZJ9GKfqweVJUuSla0FqslrSCmWnlMam39h9rK7lqu1rTUVFt
|
||||
c+rilfa9ha3s4sGJnxRZCE6aojPHShkjF2l9DZOi4sN3nvb/7Eb2D63Vfz4Aeuxca/6JlpzCZinWVEBz
|
||||
TOahZpz4SZGF4KQpgSFWZAhfMCkgnJMl9Mfi+/RIfu+RpuxD9Rl59dv235JKP1BPhToHXKq24ZRoshDg
|
||||
SKAy0zQ3MDTWL9TKpLgpCSWQc+IOeUAbdtai1TvqnNq0u446ze47dudc2b288wJNFgIcaDCVgOAYXdi8
|
||||
cVOD/JZtZl6ph1uKax8SIAaOfMGpmsVbK2KTbizYVi+VkCbOgJ76bSODPl3ZkfRdC1kIY3x10GAKrp8x
|
||||
enRgmDnz51kpt4ByPgGePrjSymaHw/HA1kXvszbVoDmfN1q3CiVmiTcE59cn20CThQAHWoAxWsxh4oxQ
|
||||
3sfA9MuphXePlHfQ8qYDTYk7Gy1rL0quvGrq21dl1+jW/+GkP0EfbmF0tAwBDjTRL3iaN3y6S5dyA+ju
|
||||
X9txiPc0swnuhSsNTq5cMFBmAn12cpM1TRxPE7TMXUKAA22GIUqZpn+PeYdsL8Aqm12T0wyUzH9yQXd2
|
||||
2Xmqsmuc+Gklt/wxBDjQfGeGC+5YfYQ54+TE+dfZ21jQhhXH5MQGz+hLvft1tt9675EcCx2Q4kYhwIHm
|
||||
ExCmjNK+zcqUdvzliRWCFVHmOq1C8alS/Gv7+VzgFe587PgPddnpGuF5wa9ixNwq3+UNEOBA8xo9QRk0
|
||||
dCgPUZ+cN1B7uf+Um8qEUsW7XECDG12CSnnJmtpsvUWz1bUNDAqu8E8oJQsBDjR3t4GC6zt7oT5p3xDv
|
||||
Eo3vbWHyqQLaZ+5914hyuOSfUWVNw4bMX9zNh/oEnqUDcXPe5WQhwIGmUqkUlXrQO2FW/SdZI8KKB0y+
|
||||
DlFCByyxDf6gPDu/qORK1dOiorXmAGX3pbgmnDICFwIcaO5uboqbuxsfm25lis/qMy96lY348KGALrdp
|
||||
NnRI7unzv0nlFxYZVuZ4xH1P3WOzDeHBiZ8UWQhwoLkxB3eVymP4yKC4tcbUg6o3L+GQAa+MrnEppWm5
|
||||
x8GhxdvyxqzIpzL1mzo0OecRwoMTPymyEOBAE3NQ/3O9a4rRr93OgYxC/5OdADHys74shOizMXda1hnL
|
||||
0WvmonZLcTcKOevAJtEsSJGFAEcCBVelFi0Hx280puwZbi7ximlZXGMnKShHr0nNL/uLolOxlQ5Jp4Kf
|
||||
FFkIoll4ksvFNJiLecVW7mXY9N/HxbV9cdex+YE9oa4DrWrp+vi+w6llrQ7ELh6c+EmRhQDn337lSq3R
|
||||
cBeh69IxcT7Pd92p7sMOB9rRU7LILh7RaepBUmICGs0TlLNf+W/eZbZF1yl75Ky5xxU5j/i+T7U7pFhT
|
||||
oS5nihM/KbJOqJzDIKd4l1WawfylMi/dQgt8PCT5stVB11811EmxpiKeUnIeHpz4SZF9GgWXc3rITTXE
|
||||
4w0tn42k878FY3KuLqlAijUVScSDE39vCN+b5zNSqz3dVa8hMvwpDIheyoMOW5rE/fLLmgp1dqUNf2+I
|
||||
Mthj/POkGTZW/cpofoe+/pbnKB8p1s76/2T/BmTsnV5cYwy9AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxProgressBar.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAT4AAAAECAMAAAAgcKN9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFHB4hHR4i
|
||||
D0HNGEXCWHiYYnm0a4/ubpb/frjthMX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbZ1u+QAAACZJREFUOE9jYGQY
|
||||
BRSEAAsH5yggOwQYmJlGAfkhwMDKxj4KyA4BANhiFlbMlRkDAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxProgressbarBackground.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
R0lGODlhdgEMAPcAABweIR0eIigsNDA0PjY7SEZOYE1VaU5Wa09YbVBYbVBZblFZb1FablFab1JbcFFa
|
||||
cVNcc1Rdc1RddFRddVVedVZfdlZfd1dgd1hieVhielpjfFtlfVtlfl1mf11mgF5ogl9pg15phWBqhWFq
|
||||
hgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
ACwAAAAAdgEMAAAI/wBDCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzarw4oqPHjyBDihxJsqTJkyhT
|
||||
qlzJsqXLlzBjypxJs6ZMEDhBiNjJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp2KNCcIDx0+gLhQoavX
|
||||
r2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lty7aCyA+dPCggUMDAQEACB5MuLDhw4gTK17MuLHjx5AjS55M
|
||||
ubLly5gza24cQEADDhosYBhAYEGC06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv37IXEBiAwQKEBwUo
|
||||
TJDAvLnz59CjS59Ovbr169iza9/Ovbv37+DDi7wfT/76BAoFHkBw4EBBBgkR4sufT7++/fv48+vfz7+/
|
||||
//8ABijggAQWaOCBCCbInwQZKMBeAww4sMEIVFVo4YUYZqjhhhx26GFRI2zgAAMNIGAiAg2kqOKKLLbo
|
||||
4oswxijjjDTWaOONOOao44489ujjj0AGaeOJCBxg5JFIJqnkkkw26eSTUEYp5ZRUVmnllVhmqeWWXHbp
|
||||
5ZYGhCnmmGSWaeaZaKap5ppstunmm3DGKeecdNZp55145mlnQAA7
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxReverse.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAICAMAAADHqI+lAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFHB4hSVFn
|
||||
SlJnSlJoS1NrS1RpTFRqTVVrTVZrTVVtTlZsT1htT1hvUFluUVpvUFhwUFlxUltwU1xzVF11Vl93Vl94
|
||||
WWB0XGN3WGF6WWJ7WmN8W2R+XGR/XWaAX2iBXmiCX2mDYGiCb3aMcHeMdXyPc3qQdn2QgIeagYiYgomZ
|
||||
gIibhYych46fkpqrl52tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/pneQAAAGtJREFUGFc9xO0W
|
||||
wTAMANDUmE3JJDKbWDHfrPX+jyc4x/1x4fC1/wfBdLvLNnS9FQKobtrjC+r2ZKkqiKxuKaXqaS1FBJjn
|
||||
5xjj+GqVzAxE3jX3IXPNY8iJCBAXMzda55+miAjeFJOs+OX9G6tUC5z+5pPbAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxStop.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDw8OCgoW
|
||||
DAwRDw8TDQ0VDw8UEBATEhISHyMtJioxMjdJMzhKNDxNOkFRPENSPENTPURTPURUPkZVP0ZWQEdXQUlZ
|
||||
QkpbQ0tdRU1eRk5gm56nyszQ09jf1Nng3eLp8PX8+vz//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHzqB+wAAAHxJREFUKFONzdkO
|
||||
gjAQheHDVpBFqVVQcOv7v6SclgmJmRi+u386bXFX4KbAqMCgwFWBCzl7iqxj4kzd7KO5Y6K3i3aded8y
|
||||
0R8X9UfUTDgeNW/RhM0DVS9RMRGkD5GGLql4ioL5Z5hN6/Up2zZNnkS52YalEeGL+OaP/cMvDc4aWeQk
|
||||
0FYAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxStopDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFEBESEhIS
|
||||
ExMVExMWCBc2CRY3Dxo3CBk5CRo7EhYpEhcuFRoqFhssHB8mEBczExs0FRswFhwxFBw2ERw6Eh48GiIl
|
||||
GyA3HCAyHSM2HSI3GiA7HSI5JiwvJioyIyk7JCo8Ji48Dh5BDh9CDyFECyRMCydODCZOBi1dCylRCi1X
|
||||
FyBAFSJHEyZQFjFfBzRmBzltCjRgCzhmKS9BLzZLLjVMLzVOLzVQLzVTLjZXLjdcLzphLztiLztjLzxj
|
||||
MDphMD1kCUB2Ckh/FUF4N0BVO0JRPENUPERTPkVVP0dXOEJYNEd1QUhZQUlaQkpaQ0tdRU1eQk1hQ05h
|
||||
Q09mRk5gR1NmTFtwUmB0VmV2XGp5XGp6YXB+Y3F/DVGHEEiGE1qPEFCQEVmaF2GTFmKgG2ynInatKH2y
|
||||
ZHWFZHWGa36Ob4CEb4GNcoONcIKOeouVeIqXe4yWf42Wgo+YhZObh5adhJafiJaekqCmnaOwnaywprG0
|
||||
p7G1tMDEtcHFucTH09jf1tre1Nng19zj3eLp8PX8+vz//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARsHXsgAAATlJREFUKFNVy+dX
|
||||
QQEYgPG3SyGyJTTsvZJxqcwWUbj2Di2zMiqU5v/dB+eWfh+fcx7AMCx8Oi+MYXAeWeGtz+OtROBMfDt+
|
||||
mTe+FUM4Mxk9j/48jyYZOMk/Df97ysNxdtgbPNzfzdw/DHrDLByl++1uc/o9M2122/00HKQ6jVbuC5dr
|
||||
NTopOEjeXF2nPnGp66ubJBzGE9FY4AMXiEUTcdgIWja31l5xa1ubliDADp9Ko7zhKDQqfwcQ6yqTtfwb
|
||||
l1nMVSsQbEIGm/6709kMoQ0Idi2Hu/T4PvO4xOVo7UBw6KQyCXmRSCKTiItkiUyqcwAB1cuVSoVaY942
|
||||
a9QKpVKuRwFBDSqjyesrlC5KBZ/XZFQZUFgQhPzFcqVaq1/Wa9VKuegPCWABETndrt29fY/Hs7+363I7
|
||||
RcgPYGp9sy9YtQ4AAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxStopOver.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDhAWEhIS
|
||||
EREWERIUERIaCAopCQ03EiA/JCg2DxpZFSVDFidGEiRIHSlFEihSECtXEixVFClQFixSFC9VEy1cFTFW
|
||||
FTBeHytmEjBgEjFiEjRrFTdsHzlsFjxzFDx6Hj56ITBMIzJOIzVVLz9cICpmICtoIjdhF0B8OUFVOEBW
|
||||
OkJXOkJYO0NZPUVbP0hdO0liOlB+Q0tdRU1eRE1fQ01iQ0xjRE1hRk5gR1dxSFlyFy+BFy+CE0WOHkSK
|
||||
HU6HGU2PGk+NHlCCIUCIIECJIEGMJEOJJkSIJESPK0qPIlWDJluDKF6EN1abJ1ekKGmqK2+rMHasNX2s
|
||||
M3KzVGaARmenS2yoQGi5UG+qVXKsW3mxX32xZHSHOoSsP4ytQ5KudIWSeIuceY2dbom3Vo/Ie5TAfZbB
|
||||
hZmkh5qlipqliJ2nk6WulKavl6mwm6S1mKiwmquzn6+3obK5orO6prS6sL/EtL7EiszfjtHfk9Pfl9bf
|
||||
ntjfg8LhiMvgo9rfscDFxMnOytLWytPX09jfyN701Nng3N7h3ODk3eLp7+/x8PHy8PX8+vz//v7/AAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAasY1UQAAATxJREFUKFNjMDc3
|
||||
NzM1QQBTM3NzBiNjg6TUFARITTIwZjA0aO7sQAadzQYMelGtDY3IoKE1ikE3sr6kDhmU1Ecy6ESUFhYV
|
||||
5OdBQH5BUWFpBINWeHFWdkZbDwS0ZWRnFYczaITmpKXHQ8V6euLT03JCGTRDMhMSo7thIDoxITOEQdsn
|
||||
2MJSvwsG9C0tgn0YODyUFRR522GAV1FB2YOBwU2Ji5u9CQbYubmU3BhYXNUEhXhaYIBHSFDNlYHFSUZE
|
||||
jA8uyCcmIuPEwOIsLyUtkQvVnishLSXvzMDiYiunLivJLyAsKizALymrLmfrwsDi7mtj72Dn6Onl7eXp
|
||||
aOdgb+PrzsBknRzk5x8QGBMbFxsTGODvF5RsxcDIFlZdU1ZeUVlVW1VZUV5WUx3GxsDIzMqpKi6uAgHi
|
||||
4qqcrMwAl/uGWf27czcAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxVolumeBar.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAT4AAAAECAMAAAAgcKN9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFHB4hHR4i
|
||||
D0HNGEXCWHiYYnm0a4/ubpb/frjthMX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbZ1u+QAAACZJREFUOE9jYGQY
|
||||
BRSEAAsH5yggOwQYmJlGAfkhwMDKxj4KyA4BANhiFlbMlRkDAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureBoxVolumeBarBackground.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAFIAAAANCAMAAAANKsmLAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFDg0MDw8O
|
||||
EBAPEREQEREREhISFBQVFRYXFRYYFhcZGBkcGRocIiQpIiQqJSkvJioxKCszLDA5NDpFOUBNO0FPPENS
|
||||
PUVUPkZVQEdXR09hS1NmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIb5gPgAAAHBJREFUOE/VzjsS
|
||||
gDAIRdFnFMVPNH6j7n+hFgELW9J4GobmzsOZHWJ2OJQ1/YawJ3FbjbYoKV05N9yacDPLTkyJA/edQc9w
|
||||
kkKRhMUP3mDwS5AUKBkvuk3oGiWlSVezUe0+SapKo0qKpCv1z3D/kXwApPU2QwRJJE0AAAAASUVORK5C
|
||||
YII=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
56
src/Controls/WaveForm.Designer.cs
generated
Normal file
56
src/Controls/WaveForm.Designer.cs
generated
Normal file
@ -0,0 +1,56 @@
|
||||
namespace Nikse.SubtitleEdit.Controls
|
||||
{
|
||||
partial class WaveForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// WaveForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.Black;
|
||||
this.Name = "WaveForm";
|
||||
this.Size = new System.Drawing.Size(682, 355);
|
||||
this.Paint += new System.Windows.Forms.PaintEventHandler(this.WaveForm_Paint);
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.WaveForm_KeyDown);
|
||||
this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.WaveForm_MouseClick);
|
||||
this.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.WaveForm_MouseDoubleClick);
|
||||
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.WaveForm_MouseDown);
|
||||
this.MouseEnter += new System.EventHandler(this.WaveForm_MouseEnter);
|
||||
this.MouseLeave += new System.EventHandler(this.WaveForm_MouseLeave);
|
||||
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.WaveForm_MouseMove);
|
||||
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.WaveForm_MouseUp);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
983
src/Controls/WaveForm.cs
Normal file
983
src/Controls/WaveForm.cs
Normal file
@ -0,0 +1,983 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using Nikse.SubtitleEdit.Logic;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Controls
|
||||
{
|
||||
public partial class WaveForm : UserControl
|
||||
{
|
||||
private enum MouseDownParagraphType
|
||||
{
|
||||
None,
|
||||
Start,
|
||||
Whole,
|
||||
End
|
||||
}
|
||||
|
||||
private const int ClosenessForBorderSelection = 14;
|
||||
private const int MininumSelectionMilliseconds = 100;
|
||||
|
||||
private long _buttonDownTimeTicks = 0;
|
||||
private int _mouseMoveLastX = -1;
|
||||
private int _mouseMoveStartX = -1;
|
||||
private double _moveWholeStartDifferenceMilliseconds = -1;
|
||||
private int _mouseMoveEndX = -1;
|
||||
private bool _mouseDown = false;
|
||||
private Paragraph _mouseDownParagraph = null;
|
||||
private MouseDownParagraphType _mouseDownParagraphType = MouseDownParagraphType.Start;
|
||||
private Paragraph _selectedParagraph = null;
|
||||
private Paragraph _currentParagraph = null;
|
||||
private List<Paragraph> _previousAndNextParagraphs = new List<Paragraph>();
|
||||
private double _currentVideoPositionSeconds = -1;
|
||||
private WavePeakGenerator _wavePeaks = null;
|
||||
private Subtitle _subtitle = null;
|
||||
private bool _noClear = false;
|
||||
|
||||
public delegate void ParagraphChangedHandler(Paragraph paragraph);
|
||||
public event ParagraphChangedHandler OnNewSelectionRightClicked;
|
||||
public event PositionChangedEventHandler OnParagraphRightClicked;
|
||||
|
||||
public delegate void PositionChangedEventHandler(double seconds, Paragraph paragraph);
|
||||
public event PositionChangedEventHandler OnPositionSelected;
|
||||
|
||||
public delegate void TimeChangedEventHandler(double seconds, Paragraph paragraph);
|
||||
public event TimeChangedEventHandler OnTimeChanged;
|
||||
public event TimeChangedEventHandler OnTimeChangedAndOffsetRest;
|
||||
|
||||
public event EventHandler OnTooglePlay;
|
||||
public event EventHandler OnPause;
|
||||
public event EventHandler OnZoomedChanged;
|
||||
|
||||
public const double ZoomMininum = 0.1;
|
||||
public const double ZoomMaxinum = 2.5;
|
||||
private double _zoomFactor = 1.0; // 1.0=no zoom
|
||||
public double ZoomFactor
|
||||
{
|
||||
get
|
||||
{
|
||||
return _zoomFactor;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value < ZoomMininum)
|
||||
_zoomFactor = ZoomMininum;
|
||||
else if (value > ZoomMaxinum)
|
||||
_zoomFactor = ZoomMaxinum;
|
||||
else
|
||||
_zoomFactor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
private double _startPositionSeconds = 0;
|
||||
public double StartPositionSeconds
|
||||
{
|
||||
get
|
||||
{
|
||||
return _startPositionSeconds;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value < 0)
|
||||
_startPositionSeconds = 0;
|
||||
else
|
||||
_startPositionSeconds = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Paragraph NewSelectionParagraph { get; set; }
|
||||
public Paragraph RightClickedParagraph { get; private set; }
|
||||
public double RightClickedSeconds { get; private set; }
|
||||
|
||||
public string WaveFormNotLoadedText { get; set; }
|
||||
public Color BackgroundColor { get; set; }
|
||||
public Color Color { get; set; }
|
||||
public Color SelectedColor { get; set; }
|
||||
public Color TextColor { get; set; }
|
||||
public Color GridColor { get; set; }
|
||||
public bool DrawGridLines { get; set; }
|
||||
public bool AllowNewSelection { get; set; }
|
||||
|
||||
public double EndPositionSeconds
|
||||
{
|
||||
get
|
||||
{
|
||||
return XPositionToSeconds(Width);
|
||||
}
|
||||
}
|
||||
|
||||
public WavePeakGenerator WavePeaks
|
||||
{
|
||||
get
|
||||
{
|
||||
return _wavePeaks;
|
||||
}
|
||||
set
|
||||
{
|
||||
_zoomFactor = 1.0;
|
||||
_wavePeaks = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearSelection()
|
||||
{
|
||||
_mouseDown = false;
|
||||
_mouseDownParagraph = null;
|
||||
_mouseMoveStartX = -1;
|
||||
_mouseMoveEndX = -1;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
public WaveForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
SetStyle(System.Windows.Forms.ControlStyles.UserPaint | System.Windows.Forms.ControlStyles.AllPaintingInWmPaint | System.Windows.Forms.ControlStyles.DoubleBuffer, true);
|
||||
WaveFormNotLoadedText = "Click to add wave form";
|
||||
this.MouseWheel += new MouseEventHandler(WaveForm_MouseWheel);
|
||||
|
||||
BackgroundColor = Color.Black;
|
||||
Color = Color.GreenYellow;
|
||||
SelectedColor = Color.Red;
|
||||
TextColor = Color.Gray;
|
||||
GridColor = Color.FromArgb(255, 20, 20, 18);
|
||||
DrawGridLines = true;
|
||||
AllowNewSelection = true;
|
||||
}
|
||||
|
||||
private void NearestSubtitles(Subtitle subtitle, double currentVideoPositionSeconds, int subtitleIndex)
|
||||
{
|
||||
int positionMilliseconds = (int)Math.Round(currentVideoPositionSeconds * 1000.0);
|
||||
if (_selectedParagraph != null && _selectedParagraph.StartTime.TotalMilliseconds < positionMilliseconds && _selectedParagraph.EndTime.TotalMilliseconds > positionMilliseconds)
|
||||
{
|
||||
_currentParagraph = _selectedParagraph;
|
||||
_previousAndNextParagraphs.Clear();
|
||||
for (int j = 1; j < 12; j++)
|
||||
{
|
||||
Paragraph nextParagraph = subtitle.GetParagraphOrDefault(subtitleIndex - j);
|
||||
_previousAndNextParagraphs.Add(nextParagraph);
|
||||
}
|
||||
for (int j=1; j < 10; j++)
|
||||
{
|
||||
Paragraph nextParagraph = subtitle.GetParagraphOrDefault(subtitleIndex + j);
|
||||
_previousAndNextParagraphs.Add(nextParagraph);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < subtitle.Paragraphs.Count; i++)
|
||||
{
|
||||
Paragraph p = subtitle.Paragraphs[i];
|
||||
if (p.EndTime.TotalMilliseconds > positionMilliseconds)
|
||||
{
|
||||
_currentParagraph = p;
|
||||
_previousAndNextParagraphs.Clear();
|
||||
for (int j = 1; j < 10; j++)
|
||||
{
|
||||
Paragraph nextParagraph = subtitle.GetParagraphOrDefault(i - j);
|
||||
_previousAndNextParagraphs.Add(nextParagraph);
|
||||
}
|
||||
for (int j = 1; j < 10; j++)
|
||||
{
|
||||
Paragraph nextParagraph = subtitle.GetParagraphOrDefault(i + j);
|
||||
_previousAndNextParagraphs.Add(nextParagraph);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetPosition(double startPositionSeconds, Subtitle subtitle, double currentVideoPositionSeconds, int subtitleIndex)
|
||||
{
|
||||
StartPositionSeconds = startPositionSeconds;
|
||||
_subtitle = subtitle;
|
||||
_currentVideoPositionSeconds = currentVideoPositionSeconds;
|
||||
_selectedParagraph = _subtitle.GetParagraphOrDefault(subtitleIndex);
|
||||
NearestSubtitles(subtitle, currentVideoPositionSeconds, subtitleIndex);
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
private int CalculateHeight(double value, int imageHeight, int maxHeight)
|
||||
{
|
||||
double percentage = value / maxHeight;
|
||||
int result = (int)Math.Round((percentage * imageHeight) + (imageHeight / 2));
|
||||
return imageHeight - result;
|
||||
}
|
||||
|
||||
private void WaveForm_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
if (_wavePeaks != null && _wavePeaks.AllSamples != null)
|
||||
{
|
||||
if (StartPositionSeconds < 0)
|
||||
StartPositionSeconds = 0;
|
||||
|
||||
if (XPositionToSeconds(Width) > _wavePeaks.Header.LengthInSeconds)
|
||||
StartPositionSeconds = _wavePeaks.Header.LengthInSeconds - ((((double)Width) / (double)_wavePeaks.Header.SampleRate) / _zoomFactor);
|
||||
|
||||
Graphics graphics = e.Graphics;
|
||||
int begin = SecondsToXPosition(StartPositionSeconds);
|
||||
int beginNoZoomFactor = (int)Math.Round(StartPositionSeconds * _wavePeaks.Header.SampleRate); // do not use zoom factor here!
|
||||
|
||||
|
||||
int start = -1;
|
||||
int end = -1;
|
||||
if (_selectedParagraph != null)
|
||||
{
|
||||
start = SecondsToXPosition(_selectedParagraph.StartTime.TotalSeconds);
|
||||
end = SecondsToXPosition(_selectedParagraph.EndTime.TotalSeconds);
|
||||
}
|
||||
int imageHeight = Height;
|
||||
int maxHeight = (int)(Math.Max(Math.Abs(_wavePeaks.DataMinValue), Math.Abs(_wavePeaks.DataMaxValue)) + 0.5);
|
||||
Pen pen = new System.Drawing.Pen(System.Drawing.Color.GreenYellow);
|
||||
|
||||
DrawBackground(graphics);
|
||||
int x = 0;
|
||||
int y = Height / 2;
|
||||
|
||||
if (_zoomFactor == 1.0)
|
||||
{
|
||||
for (int i = 0; i < _wavePeaks.AllSamples.Count && i < Width; i++)
|
||||
{
|
||||
if (begin + i < _wavePeaks.AllSamples.Count)
|
||||
{
|
||||
int newY = CalculateHeight(_wavePeaks.AllSamples[begin + i], imageHeight, maxHeight);
|
||||
graphics.DrawLine(pen, x, y, i, newY);
|
||||
x = i;
|
||||
y = newY;
|
||||
if (begin + i > end || begin + i < start)
|
||||
pen = new System.Drawing.Pen(Color);
|
||||
else
|
||||
pen = new System.Drawing.Pen(SelectedColor); // selected paragraph
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// calculate lines with zoom factor
|
||||
float x2 = 0;
|
||||
float x3 = 0;
|
||||
for (int i = 0; i < _wavePeaks.AllSamples.Count && ((int)Math.Round(x3)) < Width; i++)
|
||||
{
|
||||
if (beginNoZoomFactor + i < _wavePeaks.AllSamples.Count)
|
||||
{
|
||||
int newY = CalculateHeight(_wavePeaks.AllSamples[beginNoZoomFactor + i], imageHeight, maxHeight);
|
||||
x3 = (float)(_zoomFactor * i);
|
||||
graphics.DrawLine(pen, x2, y, x3, newY);
|
||||
x2 = x3;
|
||||
y = newY;
|
||||
if (begin + x2 > end || begin + x2 < start)
|
||||
pen = new System.Drawing.Pen(Color);
|
||||
else
|
||||
pen = new System.Drawing.Pen(SelectedColor); // selected paragraph
|
||||
}
|
||||
}
|
||||
}
|
||||
DrawTimeLine(StartPositionSeconds, e);
|
||||
|
||||
// current video position
|
||||
if (_currentVideoPositionSeconds > 0)
|
||||
{
|
||||
int videoPosition = SecondsToXPosition(_currentVideoPositionSeconds);
|
||||
videoPosition -= begin;
|
||||
if (videoPosition > 0 && videoPosition < Width)
|
||||
{
|
||||
pen = new Pen(Color.Turquoise);
|
||||
e.Graphics.DrawLine(pen, videoPosition, 0, videoPosition, Height);
|
||||
}
|
||||
}
|
||||
|
||||
// mark paragraphs
|
||||
DrawParagraph(_currentParagraph, e, begin);
|
||||
foreach (Paragraph p in _previousAndNextParagraphs)
|
||||
DrawParagraph(p, e, begin);
|
||||
|
||||
// current selection
|
||||
if (NewSelectionParagraph != null)
|
||||
{
|
||||
int currentRegionLeft = SecondsToXPosition(NewSelectionParagraph.StartTime.TotalSeconds - StartPositionSeconds);
|
||||
int currentRegionRight = SecondsToXPosition(NewSelectionParagraph.EndTime.TotalSeconds - StartPositionSeconds);
|
||||
|
||||
int currentRegionWidth = currentRegionRight - currentRegionLeft;
|
||||
SolidBrush brush = new SolidBrush(Color.FromArgb(128, 255, 255, 255));
|
||||
if (currentRegionLeft >= 0 && currentRegionLeft <= Width)
|
||||
{
|
||||
e.Graphics.FillRectangle(brush, currentRegionLeft, 0, currentRegionWidth, e.Graphics.VisibleClipBounds.Height);
|
||||
|
||||
if (currentRegionWidth > 40)
|
||||
{
|
||||
SolidBrush textBrush = new SolidBrush(Color.Turquoise);
|
||||
Font textFont = new Font(Font.FontFamily, 7);
|
||||
e.Graphics.DrawString(string.Format("{0:0.###} {1}", (double)((double)currentRegionWidth / _wavePeaks.Header.SampleRate / _zoomFactor),
|
||||
Configuration.Settings.Language.WaveForm.Seconds),
|
||||
Font, textBrush, new PointF(currentRegionLeft + 3, Height - 32));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawBackground(e.Graphics);
|
||||
|
||||
SolidBrush textBrush = new SolidBrush(TextColor);
|
||||
Font textFont = new Font(Font.FontFamily, 8);
|
||||
|
||||
if (Width > 90)
|
||||
{
|
||||
e.Graphics.DrawString(WaveFormNotLoadedText, textFont, textBrush, new PointF(Width / 2 - 65, Height / 2 - 10));
|
||||
}
|
||||
else
|
||||
{
|
||||
StringFormat stringFormat = new StringFormat();
|
||||
stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
|
||||
|
||||
e.Graphics.DrawString(WaveFormNotLoadedText, textFont, textBrush, new PointF(1, 10), stringFormat);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawBackground(Graphics graphics)
|
||||
{
|
||||
graphics.Clear(BackgroundColor);
|
||||
if (DrawGridLines)
|
||||
{
|
||||
Pen pen = new Pen(new SolidBrush(GridColor));
|
||||
for (int i = 0; i < Width; i += 10)
|
||||
{
|
||||
graphics.DrawLine(pen, i, 0, i, Height);
|
||||
graphics.DrawLine(pen, 0, i, Width, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawTimeLine(double StartPositionSeconds, PaintEventArgs e)
|
||||
{
|
||||
int start = (int)Math.Round(StartPositionSeconds + 0.5);
|
||||
double seconds = start - StartPositionSeconds;
|
||||
float position = SecondsToXPosition(seconds);
|
||||
Pen pen = new Pen(TextColor);
|
||||
SolidBrush textBrush = new SolidBrush(TextColor);
|
||||
Font textFont = new Font(Font.FontFamily, 7);
|
||||
while (position < Width)
|
||||
{
|
||||
if (_zoomFactor > 0.3 || (int)Math.Round(StartPositionSeconds + seconds) % 5 == 0)
|
||||
{
|
||||
e.Graphics.DrawLine(pen, position, Height, position, Height-10);
|
||||
e.Graphics.DrawString(GetDisplayTime(StartPositionSeconds + seconds), textFont, textBrush, new PointF(position + 2, Height - 13));
|
||||
}
|
||||
|
||||
seconds += 0.5;
|
||||
position = SecondsToXPosition(seconds);
|
||||
|
||||
if (_zoomFactor > 0.5)
|
||||
e.Graphics.DrawLine(pen, position, Height, position, Height - 5);
|
||||
|
||||
seconds += 0.5;
|
||||
position = SecondsToXPosition(seconds);
|
||||
}
|
||||
}
|
||||
|
||||
private string GetDisplayTime(double seconds)
|
||||
{
|
||||
TimeSpan ts = TimeSpan.FromSeconds(seconds);
|
||||
if (ts.Minutes == 0 && ts.Hours == 0)
|
||||
return ts.Seconds.ToString();
|
||||
else if (ts.Hours == 0)
|
||||
return string.Format("{0:00}:{1:00}", ts.Minutes, ts.Seconds);
|
||||
else
|
||||
return string.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds);
|
||||
}
|
||||
|
||||
private void DrawParagraph(Paragraph paragraph, PaintEventArgs e, int begin)
|
||||
{
|
||||
if (paragraph != null)
|
||||
{
|
||||
int currentRegionLeft = SecondsToXPosition(paragraph.StartTime.TotalSeconds) - begin;
|
||||
int currentRegionRight = SecondsToXPosition(paragraph.EndTime.TotalSeconds) - begin;
|
||||
int currentRegionWidth = currentRegionRight - currentRegionLeft;
|
||||
SolidBrush brush = new SolidBrush(Color.FromArgb(32, 255, 255, 255));
|
||||
e.Graphics.FillRectangle(brush, currentRegionLeft, 0, currentRegionWidth, e.Graphics.VisibleClipBounds.Height);
|
||||
|
||||
Pen pen = new Pen(new SolidBrush(Color.FromArgb(128, 150, 150, 150)));
|
||||
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||
e.Graphics.DrawLine(pen, currentRegionLeft, 0, currentRegionLeft, e.Graphics.VisibleClipBounds.Height);
|
||||
pen = new Pen(new SolidBrush(Color.FromArgb(135, 0, 100, 0)));
|
||||
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||
e.Graphics.DrawLine(pen, currentRegionRight, 0, currentRegionRight, e.Graphics.VisibleClipBounds.Height);
|
||||
|
||||
SolidBrush textBrush = new SolidBrush(TextColor);
|
||||
if (_zoomFactor > 0.6)
|
||||
e.Graphics.DrawString(paragraph.Text.Replace(Environment.NewLine, " "), Font, textBrush, new PointF(currentRegionLeft + 3, 10));
|
||||
|
||||
if (_zoomFactor > 0.6)
|
||||
e.Graphics.DrawString("#" + paragraph.Number + " " + paragraph.StartTime.ToShortString() + " --> " + paragraph.EndTime.ToShortString(), Font, textBrush, new PointF(currentRegionLeft + 3, Height - 32));
|
||||
else if (_zoomFactor > 0.4)
|
||||
e.Graphics.DrawString("#" + paragraph.Number + " " + paragraph.StartTime.ToShortString(), Font, textBrush, new PointF(currentRegionLeft + 3, Height - 32));
|
||||
else if (_zoomFactor > 0.2)
|
||||
e.Graphics.DrawString("#" + paragraph.Number, Font, textBrush, new PointF(currentRegionLeft + 3, Height - 32));
|
||||
}
|
||||
}
|
||||
|
||||
private double XPositionToSeconds(double x)
|
||||
{
|
||||
return StartPositionSeconds + (x / (double)_wavePeaks.Header.SampleRate) / _zoomFactor;
|
||||
}
|
||||
|
||||
private int SecondsToXPosition(double seconds)
|
||||
{
|
||||
return (int)Math.Round(seconds * _wavePeaks.Header.SampleRate * _zoomFactor);
|
||||
}
|
||||
|
||||
|
||||
private void WaveForm_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (_wavePeaks == null)
|
||||
return;
|
||||
|
||||
_mouseDownParagraphType = MouseDownParagraphType.None;
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
_buttonDownTimeTicks = DateTime.Now.Ticks;
|
||||
|
||||
Cursor = Cursors.VSplit;
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
|
||||
if (SetParagrapBorderHit(milliseconds, NewSelectionParagraph))
|
||||
{
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.Start)
|
||||
{
|
||||
_mouseDownParagraph.StartTime.TotalMilliseconds = milliseconds;
|
||||
NewSelectionParagraph.StartTime.TotalMilliseconds = milliseconds;
|
||||
_mouseMoveStartX = e.X;
|
||||
_mouseMoveEndX = SecondsToXPosition(NewSelectionParagraph.EndTime.TotalSeconds);
|
||||
}
|
||||
else
|
||||
{
|
||||
_mouseDownParagraph.EndTime.TotalMilliseconds = milliseconds;
|
||||
NewSelectionParagraph.EndTime.TotalMilliseconds = milliseconds;
|
||||
_mouseMoveStartX = SecondsToXPosition(NewSelectionParagraph.StartTime.TotalSeconds);
|
||||
_mouseMoveEndX = e.X;
|
||||
|
||||
}
|
||||
}
|
||||
else if (SetParagrapBorderHit(milliseconds, _selectedParagraph) ||
|
||||
SetParagrapBorderHit(milliseconds, _currentParagraph) ||
|
||||
SetParagrapBorderHit(milliseconds, _previousAndNextParagraphs))
|
||||
{
|
||||
NewSelectionParagraph = null;
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.Start)
|
||||
_mouseDownParagraph.StartTime.TotalMilliseconds = milliseconds;
|
||||
else
|
||||
_mouseDownParagraph.EndTime.TotalMilliseconds = milliseconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
Paragraph p = GetParagraphAtMilliseconds(milliseconds);
|
||||
if (p != null)
|
||||
{
|
||||
_mouseDownParagraph = p;
|
||||
_mouseDownParagraphType = MouseDownParagraphType.Whole;
|
||||
_moveWholeStartDifferenceMilliseconds = (XPositionToSeconds(e.X) * 1000.0) - p.StartTime.TotalMilliseconds;
|
||||
Cursor = Cursors.Hand;
|
||||
}
|
||||
else if (!AllowNewSelection)
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
NewSelectionParagraph = null;
|
||||
_mouseMoveStartX = e.X;
|
||||
_mouseMoveEndX = e.X;
|
||||
}
|
||||
|
||||
_mouseDown = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
|
||||
double currentRegionLeft = Math.Min(_mouseMoveStartX, _mouseMoveEndX);
|
||||
double currentRegionRight = Math.Max(_mouseMoveStartX, _mouseMoveEndX);
|
||||
currentRegionLeft = XPositionToSeconds(currentRegionLeft);
|
||||
currentRegionRight = XPositionToSeconds(currentRegionRight);
|
||||
|
||||
if (OnNewSelectionRightClicked != null && seconds > currentRegionLeft && seconds < currentRegionRight)
|
||||
{
|
||||
if (_mouseMoveStartX >= 0 && _mouseMoveEndX >= 0)
|
||||
{
|
||||
if (currentRegionRight - currentRegionLeft > 0.1) // not too small subtitles
|
||||
{
|
||||
Paragraph paragraph = new Paragraph();
|
||||
paragraph.StartTime = new TimeCode(TimeSpan.FromSeconds(currentRegionLeft));
|
||||
paragraph.EndTime = new TimeCode(TimeSpan.FromSeconds(currentRegionRight));
|
||||
OnNewSelectionRightClicked.Invoke(paragraph);
|
||||
NewSelectionParagraph = paragraph;
|
||||
RightClickedParagraph = null;
|
||||
_noClear = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (OnParagraphRightClicked != null)
|
||||
{
|
||||
NewSelectionParagraph = null;
|
||||
Paragraph p = GetParagraphAtMilliseconds(milliseconds);
|
||||
RightClickedParagraph = p;
|
||||
RightClickedSeconds = seconds;
|
||||
if (p != null)
|
||||
OnParagraphRightClicked.Invoke(seconds, p);
|
||||
}
|
||||
}
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private bool SetParagrapBorderHit(int milliseconds, List<Paragraph> paragraphs)
|
||||
{
|
||||
foreach (Paragraph p in paragraphs)
|
||||
{
|
||||
bool hit = SetParagrapBorderHit(milliseconds, p);
|
||||
if (hit)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private Paragraph GetParagraphAtMilliseconds(int milliseconds)
|
||||
{
|
||||
Paragraph p = null;
|
||||
if (IsParagrapHit(milliseconds, _selectedParagraph))
|
||||
p = _selectedParagraph;
|
||||
else if (IsParagrapHit(milliseconds, _currentParagraph))
|
||||
p = _currentParagraph;
|
||||
|
||||
if (p == null)
|
||||
{
|
||||
foreach (Paragraph pNext in _previousAndNextParagraphs)
|
||||
{
|
||||
if (IsParagrapHit(milliseconds, pNext))
|
||||
{
|
||||
p = pNext;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
private bool SetParagrapBorderHit(int milliseconds, Paragraph paragraph)
|
||||
{
|
||||
if (paragraph == null)
|
||||
return false;
|
||||
|
||||
if (Math.Abs(milliseconds - paragraph.StartTime.TotalMilliseconds) <= ClosenessForBorderSelection)
|
||||
{
|
||||
_mouseDownParagraph = paragraph;
|
||||
_mouseDownParagraphType = MouseDownParagraphType.Start;
|
||||
return true;
|
||||
}
|
||||
else if (Math.Abs(milliseconds - paragraph.EndTime.TotalMilliseconds) <= ClosenessForBorderSelection)
|
||||
{
|
||||
_mouseDownParagraph = paragraph;
|
||||
_mouseDownParagraphType = MouseDownParagraphType.End;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void WaveForm_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (_wavePeaks == null)
|
||||
return;
|
||||
|
||||
if (e.X < 0 && StartPositionSeconds > 0.1 && _mouseDown)
|
||||
{
|
||||
if (e.X < _mouseMoveLastX)
|
||||
{
|
||||
StartPositionSeconds -= 0.1;
|
||||
if (_mouseDownParagraph == null)
|
||||
{
|
||||
_mouseMoveEndX = 0;
|
||||
_mouseMoveStartX += (int)(_wavePeaks.Header.SampleRate * 0.1);
|
||||
OnPositionSelected.Invoke(StartPositionSeconds, null);
|
||||
}
|
||||
}
|
||||
_mouseMoveLastX = e.X;
|
||||
Invalidate();
|
||||
return;
|
||||
}
|
||||
else if (e.X > Width && StartPositionSeconds + 0.1 < _wavePeaks.Header.LengthInSeconds && _mouseDown)
|
||||
{
|
||||
//if (e.X > _mouseMoveLastX) // not much room for moving mouse cursor, so just scroll right
|
||||
{
|
||||
StartPositionSeconds += 0.1;
|
||||
if (_mouseDownParagraph == null)
|
||||
{
|
||||
_mouseMoveEndX = Width;
|
||||
_mouseMoveStartX -= (int)(_wavePeaks.Header.SampleRate * 0.1);
|
||||
OnPositionSelected.Invoke(StartPositionSeconds, null);
|
||||
}
|
||||
}
|
||||
_mouseMoveLastX = e.X;
|
||||
Invalidate();
|
||||
return;
|
||||
}
|
||||
_mouseMoveLastX = e.X;
|
||||
|
||||
if (e.X < 0 || e.X > Width)
|
||||
return;
|
||||
|
||||
if (e.Button == MouseButtons.None)
|
||||
{
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
|
||||
if (IsParagrapBorderHit(milliseconds, NewSelectionParagraph))
|
||||
Cursor = Cursors.VSplit;
|
||||
else if (IsParagrapBorderHit(milliseconds, _selectedParagraph) ||
|
||||
IsParagrapBorderHit(milliseconds, _currentParagraph) ||
|
||||
IsParagrapBorderHit(milliseconds, _previousAndNextParagraphs))
|
||||
{
|
||||
Cursor = Cursors.VSplit;
|
||||
}
|
||||
else
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
else if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
if (_mouseDown)
|
||||
{
|
||||
if (_mouseDownParagraph != null)
|
||||
{
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.Start)
|
||||
{
|
||||
if (_mouseDownParagraph.EndTime.TotalMilliseconds - milliseconds > MininumSelectionMilliseconds)
|
||||
{
|
||||
_mouseDownParagraph.StartTime.TotalMilliseconds = milliseconds;
|
||||
if (NewSelectionParagraph != null)
|
||||
{
|
||||
NewSelectionParagraph.StartTime.TotalMilliseconds = milliseconds;
|
||||
_mouseMoveStartX = e.X;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (OnTimeChanged != null)
|
||||
OnTimeChanged.Invoke(seconds, _mouseDownParagraph);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (_mouseDownParagraphType == MouseDownParagraphType.End)
|
||||
{
|
||||
if (milliseconds - _mouseDownParagraph.StartTime.TotalMilliseconds > MininumSelectionMilliseconds)
|
||||
{
|
||||
_mouseDownParagraph.EndTime.TotalMilliseconds = milliseconds;
|
||||
if (NewSelectionParagraph != null)
|
||||
{
|
||||
NewSelectionParagraph.EndTime.TotalMilliseconds = milliseconds;
|
||||
_mouseMoveEndX = e.X;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (OnTimeChanged != null)
|
||||
OnTimeChanged.Invoke(seconds, _mouseDownParagraph);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (_mouseDownParagraphType == MouseDownParagraphType.Whole)
|
||||
{
|
||||
double durationMilliseconds = _mouseDownParagraph.Duration.TotalMilliseconds;
|
||||
_mouseDownParagraph.StartTime.TotalMilliseconds = milliseconds - _moveWholeStartDifferenceMilliseconds;
|
||||
_mouseDownParagraph.EndTime.TotalMilliseconds = _mouseDownParagraph.StartTime.TotalMilliseconds + durationMilliseconds;
|
||||
if (OnTimeChanged != null)
|
||||
OnTimeChanged.Invoke(seconds, _mouseDownParagraph);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_mouseMoveEndX = e.X;
|
||||
if (NewSelectionParagraph == null && Math.Abs(_mouseMoveEndX - _mouseMoveStartX) > 2)
|
||||
{
|
||||
if (AllowNewSelection)
|
||||
NewSelectionParagraph = new Paragraph();
|
||||
}
|
||||
|
||||
if (NewSelectionParagraph != null)
|
||||
{
|
||||
int start = Math.Min(_mouseMoveStartX, _mouseMoveEndX);
|
||||
int end = Math.Max(_mouseMoveStartX, _mouseMoveEndX);
|
||||
NewSelectionParagraph.StartTime.TotalSeconds = XPositionToSeconds(start);
|
||||
NewSelectionParagraph.EndTime.TotalSeconds = XPositionToSeconds(end);
|
||||
}
|
||||
}
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsParagrapBorderHit(int milliseconds, List<Paragraph> paragraphs)
|
||||
{
|
||||
foreach (Paragraph p in paragraphs)
|
||||
{
|
||||
bool hit = IsParagrapBorderHit(milliseconds, p);
|
||||
if (hit)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool IsParagrapBorderHit(int milliseconds, Paragraph paragraph)
|
||||
{
|
||||
if (paragraph == null)
|
||||
return false;
|
||||
|
||||
return Math.Abs(milliseconds - paragraph.StartTime.TotalMilliseconds) <= ClosenessForBorderSelection ||
|
||||
Math.Abs(milliseconds - paragraph.EndTime.TotalMilliseconds) <= ClosenessForBorderSelection;
|
||||
}
|
||||
|
||||
private void WaveForm_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
if (_mouseDown)
|
||||
{
|
||||
if (_mouseDownParagraph != null)
|
||||
{
|
||||
_mouseDownParagraph = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
_mouseMoveEndX = e.X;
|
||||
}
|
||||
_mouseDown = false;
|
||||
}
|
||||
}
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
private void WaveForm_MouseLeave(object sender, EventArgs e)
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
_mouseDown = false;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
private void WaveForm_MouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
if (_noClear)
|
||||
{
|
||||
_noClear = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
_mouseDown = false;
|
||||
_mouseDownParagraph = null;
|
||||
_mouseMoveStartX = -1;
|
||||
_mouseMoveEndX = -1;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
if (NewSelectionParagraph != null)
|
||||
{
|
||||
_mouseMoveStartX = SecondsToXPosition(NewSelectionParagraph.StartTime.TotalSeconds);
|
||||
_mouseMoveEndX = SecondsToXPosition(NewSelectionParagraph.EndTime.TotalSeconds);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void WaveForm_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (_wavePeaks == null || OnPositionSelected == null)
|
||||
return;
|
||||
|
||||
_mouseDown = false;
|
||||
_mouseDownParagraph = null;
|
||||
_mouseMoveStartX = -1;
|
||||
_mouseMoveEndX = -1;
|
||||
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
if (OnPause != null)
|
||||
OnPause.Invoke(sender, null);
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
|
||||
Paragraph p = null;
|
||||
if (IsParagrapHit(milliseconds, _selectedParagraph))
|
||||
p = _selectedParagraph;
|
||||
else if (IsParagrapHit(milliseconds, _currentParagraph))
|
||||
p = _currentParagraph;
|
||||
|
||||
if (p == null)
|
||||
{
|
||||
foreach (Paragraph p2 in _previousAndNextParagraphs)
|
||||
{
|
||||
if (IsParagrapHit(milliseconds, p2))
|
||||
{
|
||||
p = p2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (p != null)
|
||||
{
|
||||
seconds = p.StartTime.TotalSeconds;
|
||||
double endSeconds = p.EndTime.TotalSeconds;
|
||||
if (seconds < StartPositionSeconds)
|
||||
{
|
||||
StartPositionSeconds = (p.StartTime.TotalSeconds) + 0.1; // move earlier - show whole selected paragraph
|
||||
}
|
||||
else if (endSeconds > EndPositionSeconds)
|
||||
{
|
||||
double newStartPos = StartPositionSeconds + (endSeconds - EndPositionSeconds); // move later, so whole selected paragraph is visible
|
||||
if (newStartPos < seconds) // but only if visibile screen is wide enough
|
||||
StartPositionSeconds = newStartPos;
|
||||
}
|
||||
}
|
||||
|
||||
OnPositionSelected.Invoke(seconds, p);
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsParagrapHit(int milliseconds, Paragraph paragraph)
|
||||
{
|
||||
if (paragraph == null)
|
||||
return false;
|
||||
|
||||
return milliseconds >= paragraph.StartTime.TotalMilliseconds && milliseconds <= paragraph.EndTime.TotalMilliseconds;
|
||||
}
|
||||
|
||||
private void WaveForm_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left && OnTooglePlay != null)
|
||||
{
|
||||
int diff = Math.Abs(_mouseMoveStartX - e.X);
|
||||
if (_mouseMoveStartX == -1 || _mouseMoveEndX == -1 || diff < 10 && TimeSpan.FromTicks(DateTime.Now.Ticks - _buttonDownTimeTicks).TotalSeconds < 0.25)
|
||||
{
|
||||
|
||||
if (ModifierKeys == Keys.Shift && _selectedParagraph != null)
|
||||
{
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.None || _mouseDownParagraphType == MouseDownParagraphType.Whole)
|
||||
{
|
||||
if (seconds < _selectedParagraph.EndTime.TotalSeconds)
|
||||
{
|
||||
_mouseDownParagraph = _selectedParagraph;
|
||||
_mouseDownParagraph.StartTime.TotalMilliseconds = milliseconds;
|
||||
if (OnTimeChanged != null)
|
||||
OnTimeChanged.Invoke(seconds, _mouseDownParagraph);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (ModifierKeys == Keys.Control && _selectedParagraph != null)
|
||||
{
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.None || _mouseDownParagraphType == MouseDownParagraphType.Whole)
|
||||
{
|
||||
if (seconds > _selectedParagraph.StartTime.TotalSeconds)
|
||||
{
|
||||
_mouseDownParagraph = _selectedParagraph;
|
||||
_mouseDownParagraph.EndTime.TotalMilliseconds = milliseconds;
|
||||
if (OnTimeChanged != null)
|
||||
OnTimeChanged.Invoke(seconds, _mouseDownParagraph);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (ModifierKeys == (Keys.Control | Keys.Shift) && _selectedParagraph != null)
|
||||
{
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.None || _mouseDownParagraphType == MouseDownParagraphType.Whole)
|
||||
{
|
||||
_mouseDownParagraph = _selectedParagraph;
|
||||
if (OnTimeChangedAndOffsetRest != null)
|
||||
OnTimeChangedAndOffsetRest.Invoke(seconds, _mouseDownParagraph);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (ModifierKeys == Keys.Alt && _selectedParagraph != null)
|
||||
{
|
||||
double seconds = XPositionToSeconds(e.X);
|
||||
int milliseconds = (int)(seconds * 1000.0);
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.None || _mouseDownParagraphType == MouseDownParagraphType.Whole)
|
||||
{
|
||||
_mouseDownParagraph = _selectedParagraph;
|
||||
double durationMilliseconds = _mouseDownParagraph.Duration.TotalMilliseconds;
|
||||
_mouseDownParagraph.StartTime.TotalMilliseconds = milliseconds;
|
||||
_mouseDownParagraph.EndTime.TotalMilliseconds = _mouseDownParagraph.StartTime.TotalMilliseconds + durationMilliseconds;
|
||||
if (OnTimeChanged != null)
|
||||
OnTimeChanged.Invoke(seconds, _mouseDownParagraph);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (_mouseDownParagraphType == MouseDownParagraphType.None || _mouseDownParagraphType == MouseDownParagraphType.Whole)
|
||||
OnTooglePlay.Invoke(sender, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WaveForm_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Add)
|
||||
{
|
||||
ZoomFactor = ZoomFactor + 0.1;
|
||||
if (OnZoomedChanged != null)
|
||||
OnZoomedChanged.Invoke(null, null);
|
||||
}
|
||||
else if (e.KeyCode == Keys.Subtract)
|
||||
{
|
||||
ZoomFactor = ZoomFactor - 0.1;
|
||||
if (OnZoomedChanged != null)
|
||||
OnZoomedChanged.Invoke(null, null);
|
||||
}
|
||||
else if (e.Control == false && e.KeyCode == Keys.Z)
|
||||
{
|
||||
if (StartPositionSeconds > 0.1)
|
||||
{
|
||||
StartPositionSeconds -= 0.1;
|
||||
OnPositionSelected.Invoke(StartPositionSeconds, null);
|
||||
Invalidate();
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
}
|
||||
else if (e.Control == false && e.KeyCode == Keys.X)
|
||||
{
|
||||
if (StartPositionSeconds + 0.1 < _wavePeaks.Header.LengthInSeconds)
|
||||
{
|
||||
StartPositionSeconds += 0.1;
|
||||
OnPositionSelected.Invoke(StartPositionSeconds, null);
|
||||
Invalidate();
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WaveForm_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
int delta = e.Delta;
|
||||
{
|
||||
StartPositionSeconds -= delta / 256.0;
|
||||
if (_currentVideoPositionSeconds < StartPositionSeconds || _currentVideoPositionSeconds >= EndPositionSeconds)
|
||||
OnPositionSelected.Invoke(StartPositionSeconds, null);
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
120
src/Controls/WaveForm.resx
Normal file
120
src/Controls/WaveForm.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
Loading…
Reference in New Issue
Block a user