mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-25 04:33:04 +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