From 5ba0266953c65c0eab85f4e906c86aa7b97e77fc Mon Sep 17 00:00:00 2001 From: elgekko Date: Fri, 3 Jun 2022 15:12:25 +0200 Subject: [PATCH] Player control layout update --- .../Controls/BindableToolStripMenuItem .cs | 35 + .../Controls/PlayerControls.Designer.cs | 493 ++++++++++++++ .../DxPlay/Controls/PlayerControls.cs | 37 + .../DxPlay/Controls/PlayerControls.resx | 132 ++++ .../DxPlay/Controls/VideoSpeedTrackbar.cs | 29 + client - Copy/DxPlay/PlayerForm.Designer.cs | 587 ++++++++++++++++ client - Copy/DxPlay/PlayerForm.cs | 633 ++++++++++++++++++ client - Copy/DxPlay/PlayerForm.resx | 312 +++++++++ 8 files changed, 2258 insertions(+) create mode 100644 client - Copy/DxPlay/Controls/BindableToolStripMenuItem .cs create mode 100644 client - Copy/DxPlay/Controls/PlayerControls.Designer.cs create mode 100644 client - Copy/DxPlay/Controls/PlayerControls.cs create mode 100644 client - Copy/DxPlay/Controls/PlayerControls.resx create mode 100644 client - Copy/DxPlay/Controls/VideoSpeedTrackbar.cs create mode 100644 client - Copy/DxPlay/PlayerForm.Designer.cs create mode 100644 client - Copy/DxPlay/PlayerForm.cs create mode 100644 client - Copy/DxPlay/PlayerForm.resx diff --git a/client - Copy/DxPlay/Controls/BindableToolStripMenuItem .cs b/client - Copy/DxPlay/Controls/BindableToolStripMenuItem .cs new file mode 100644 index 00000000..34e42533 --- /dev/null +++ b/client - Copy/DxPlay/Controls/BindableToolStripMenuItem .cs @@ -0,0 +1,35 @@ +using System.ComponentModel; +using System.Windows.Forms; + +namespace DxPlay.Controls { + class BindableToolStripMenuItem : ToolStripMenuItem, IBindableComponent { + private BindingContext bindingContext; + private ControlBindingsCollection dataBindings; + + [Browsable(false)] + public BindingContext BindingContext { + get { + if (bindingContext == null) { + bindingContext = new BindingContext(); + } + return bindingContext; + } + + set { + bindingContext = value; + } + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public ControlBindingsCollection DataBindings { + get { + if (dataBindings == null) { + dataBindings = new ControlBindingsCollection(this); + } + return dataBindings; + + } + + } + } +} diff --git a/client - Copy/DxPlay/Controls/PlayerControls.Designer.cs b/client - Copy/DxPlay/Controls/PlayerControls.Designer.cs new file mode 100644 index 00000000..e806d78d --- /dev/null +++ b/client - Copy/DxPlay/Controls/PlayerControls.Designer.cs @@ -0,0 +1,493 @@ +using System; +using System.Windows.Forms; + +namespace DxPlay.Controls +{ + partial class PlayerControls + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayerControls)); + this.mainPanel = new System.Windows.Forms.TableLayoutPanel(); + this.trackBar = new MaestroShared.Controls.ColorSlider(); + this.timecodePanel = new System.Windows.Forms.TableLayoutPanel(); + this.lbCurrentTC = new System.Windows.Forms.Label(); + this.lbStartTC = new System.Windows.Forms.Label(); + this.lbStart = new System.Windows.Forms.Label(); + this.lbStatus = new System.Windows.Forms.Label(); + this.lbDuration = new System.Windows.Forms.Label(); + this.lbEndTC = new System.Windows.Forms.Label(); + this.controlsPanel = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.playSpeed = new DxPlay.Controls.VideoSpeedTrackbar(); + this.lblPlaySpeed = new System.Windows.Forms.Label(); + this.logoPanel = new System.Windows.Forms.Panel(); + this.buttonsPanel = new System.Windows.Forms.FlowLayoutPanel(); + this.btnPlay = new MaestroShared.Controls.NoFocusCueButton(); + this.btnRewind = new MaestroShared.Controls.NoFocusCueButton(); + this.btnStepBack = new MaestroShared.Controls.NoFocusCueButton(); + this.btnStop = new MaestroShared.Controls.NoFocusCueButton(); + this.btnStepForward = new MaestroShared.Controls.NoFocusCueButton(); + this.btnForward = new MaestroShared.Controls.NoFocusCueButton(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.audioLabel = new System.Windows.Forms.Label(); + this.audioTracks = new System.Windows.Forms.ComboBox(); + this.mainPanel.SuspendLayout(); + this.timecodePanel.SuspendLayout(); + this.controlsPanel.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.playSpeed)).BeginInit(); + this.buttonsPanel.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // mainPanel + // + this.mainPanel.ColumnCount = 1; + this.mainPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.mainPanel.Controls.Add(this.trackBar, 0, 1); + this.mainPanel.Controls.Add(this.timecodePanel, 0, 0); + this.mainPanel.Controls.Add(this.controlsPanel, 0, 2); + this.mainPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.mainPanel.Location = new System.Drawing.Point(0, 0); + this.mainPanel.Margin = new System.Windows.Forms.Padding(0); + this.mainPanel.Name = "mainPanel"; + this.mainPanel.RowCount = 3; + this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 65F)); + this.mainPanel.Size = new System.Drawing.Size(835, 165); + this.mainPanel.TabIndex = 0; + // + // trackBar + // + this.trackBar.BackColor = System.Drawing.Color.Transparent; + this.trackBar.BarInnerColor = System.Drawing.Color.Transparent; + this.trackBar.BarOuterColor = System.Drawing.Color.Black; + this.trackBar.BarPenColor = System.Drawing.Color.Black; + this.trackBar.BorderRoundRectSize = new System.Drawing.Size(8, 8); + this.trackBar.Cursor = System.Windows.Forms.Cursors.Hand; + this.trackBar.Dock = System.Windows.Forms.DockStyle.Top; + this.trackBar.ElapsedInnerColor = System.Drawing.Color.Black; + this.trackBar.ElapsedOuterColor = System.Drawing.Color.DarkGray; + this.trackBar.LargeChange = ((uint)(0u)); + this.trackBar.Location = new System.Drawing.Point(3, 43); + this.trackBar.Maximum = 1; + this.trackBar.Name = "trackBar"; + this.trackBar.Size = new System.Drawing.Size(829, 10); + this.trackBar.SmallChange = ((uint)(1u)); + this.trackBar.TabIndex = 19; + this.trackBar.Text = "colorSlider1"; + this.trackBar.ThumbInnerColor = System.Drawing.Color.Black; + this.trackBar.ThumbOuterColor = System.Drawing.Color.Silver; + this.trackBar.ThumbPenColor = System.Drawing.Color.Black; + this.trackBar.ThumbRoundRectSize = new System.Drawing.Size(8, 8); + this.trackBar.ThumbSize = 10; + this.trackBar.Value = 0; + // + // timecodePanel + // + this.timecodePanel.AutoSize = true; + this.timecodePanel.ColumnCount = 3; + this.timecodePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.32525F)); + this.timecodePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 46.63073F)); + this.timecodePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.95418F)); + this.timecodePanel.Controls.Add(this.lbCurrentTC, 0, 1); + this.timecodePanel.Controls.Add(this.lbStartTC, 0, 1); + this.timecodePanel.Controls.Add(this.lbStart, 0, 0); + this.timecodePanel.Controls.Add(this.lbStatus, 1, 0); + this.timecodePanel.Controls.Add(this.lbDuration, 2, 0); + this.timecodePanel.Controls.Add(this.lbEndTC, 2, 1); + this.timecodePanel.Dock = System.Windows.Forms.DockStyle.Top; + this.timecodePanel.Location = new System.Drawing.Point(0, 0); + this.timecodePanel.Margin = new System.Windows.Forms.Padding(0); + this.timecodePanel.Name = "timecodePanel"; + this.timecodePanel.RowCount = 2; + this.timecodePanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.timecodePanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.timecodePanel.Size = new System.Drawing.Size(835, 40); + this.timecodePanel.TabIndex = 0; + // + // lbCurrentTC + // + this.lbCurrentTC.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lbCurrentTC.BackColor = System.Drawing.Color.Transparent; + this.lbCurrentTC.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.lbCurrentTC.Location = new System.Drawing.Point(223, 13); + this.lbCurrentTC.Name = "lbCurrentTC"; + this.lbCurrentTC.Size = new System.Drawing.Size(383, 27); + this.lbCurrentTC.TabIndex = 25; + this.lbCurrentTC.Text = "00:00:00.00"; + this.lbCurrentTC.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbStartTC + // + this.lbStartTC.BackColor = System.Drawing.Color.Transparent; + this.lbStartTC.Dock = System.Windows.Forms.DockStyle.Top; + this.lbStartTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.lbStartTC.ForeColor = System.Drawing.SystemColors.WindowText; + this.lbStartTC.Location = new System.Drawing.Point(3, 13); + this.lbStartTC.Name = "lbStartTC"; + this.lbStartTC.Size = new System.Drawing.Size(214, 17); + this.lbStartTC.TabIndex = 23; + this.lbStartTC.Text = "00:00:00.00"; + // + // lbStart + // + this.lbStart.BackColor = System.Drawing.Color.Transparent; + this.lbStart.Dock = System.Windows.Forms.DockStyle.Top; + this.lbStart.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.lbStart.Location = new System.Drawing.Point(3, 0); + this.lbStart.Name = "lbStart"; + this.lbStart.Size = new System.Drawing.Size(214, 13); + this.lbStart.TabIndex = 19; + this.lbStart.Text = "START"; + this.lbStart.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lbStatus + // + this.lbStatus.BackColor = System.Drawing.Color.Transparent; + this.lbStatus.Dock = System.Windows.Forms.DockStyle.Top; + this.lbStatus.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.lbStatus.Location = new System.Drawing.Point(223, 0); + this.lbStatus.Name = "lbStatus"; + this.lbStatus.Size = new System.Drawing.Size(383, 13); + this.lbStatus.TabIndex = 21; + this.lbStatus.Text = "NO INPUT"; + this.lbStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbDuration + // + this.lbDuration.BackColor = System.Drawing.Color.Transparent; + this.lbDuration.Dock = System.Windows.Forms.DockStyle.Top; + this.lbDuration.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.lbDuration.Location = new System.Drawing.Point(612, 0); + this.lbDuration.Name = "lbDuration"; + this.lbDuration.Size = new System.Drawing.Size(220, 13); + this.lbDuration.TabIndex = 22; + this.lbDuration.Text = "DURATION"; + this.lbDuration.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lbEndTC + // + this.lbEndTC.BackColor = System.Drawing.Color.Transparent; + this.lbEndTC.Dock = System.Windows.Forms.DockStyle.Top; + this.lbEndTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.lbEndTC.ForeColor = System.Drawing.SystemColors.WindowText; + this.lbEndTC.Location = new System.Drawing.Point(612, 13); + this.lbEndTC.Name = "lbEndTC"; + this.lbEndTC.Size = new System.Drawing.Size(220, 17); + this.lbEndTC.TabIndex = 24; + this.lbEndTC.Text = "00:00:00.00"; + this.lbEndTC.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // controlsPanel + // + this.controlsPanel.AutoSize = true; + this.controlsPanel.ColumnCount = 3; + this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 200F)); + this.controlsPanel.Controls.Add(this.tableLayoutPanel2, 0, 0); + this.controlsPanel.Controls.Add(this.logoPanel, 2, 0); + this.controlsPanel.Controls.Add(this.buttonsPanel, 0, 0); + this.controlsPanel.Controls.Add(this.tableLayoutPanel1, 0, 1); + this.controlsPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.controlsPanel.Location = new System.Drawing.Point(3, 59); + this.controlsPanel.Name = "controlsPanel"; + this.controlsPanel.RowCount = 2; + this.controlsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.controlsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + this.controlsPanel.Size = new System.Drawing.Size(829, 103); + this.controlsPanel.TabIndex = 21; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 104F)); + this.tableLayoutPanel2.Controls.Add(this.playSpeed, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.lblPlaySpeed, 0, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Left; + this.tableLayoutPanel2.Location = new System.Drawing.Point(363, 3); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(126, 54); + this.tableLayoutPanel2.TabIndex = 23; + // + // playSpeed + // + this.playSpeed.AutoSize = false; + this.playSpeed.CurrentSpeed = 0F; + this.playSpeed.Dock = System.Windows.Forms.DockStyle.Bottom; + this.playSpeed.LargeChange = 1; + this.playSpeed.Location = new System.Drawing.Point(24, 21); + this.playSpeed.Margin = new System.Windows.Forms.Padding(2); + this.playSpeed.Maximum = 5; + this.playSpeed.Name = "playSpeed"; + this.playSpeed.Size = new System.Drawing.Size(100, 31); + this.playSpeed.TabIndex = 26; + this.playSpeed.Tag = "PlaySpeed"; + this.playSpeed.TickStyle = System.Windows.Forms.TickStyle.None; + this.playSpeed.Value = 2; + // + // lblPlaySpeed + // + this.lblPlaySpeed.AutoSize = true; + this.lblPlaySpeed.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblPlaySpeed.Location = new System.Drawing.Point(2, 5); + this.lblPlaySpeed.Margin = new System.Windows.Forms.Padding(2, 5, 2, 0); + this.lblPlaySpeed.Name = "lblPlaySpeed"; + this.lblPlaySpeed.Size = new System.Drawing.Size(18, 49); + this.lblPlaySpeed.TabIndex = 27; + this.lblPlaySpeed.Text = "x1"; + this.lblPlaySpeed.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // logoPanel + // + this.logoPanel.AutoSize = true; + this.logoPanel.BackgroundImage = global::DxPlay.Properties.Resources.bs_user_logo; + this.logoPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.logoPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.logoPanel.Location = new System.Drawing.Point(629, 0); + this.logoPanel.Margin = new System.Windows.Forms.Padding(0); + this.logoPanel.Name = "logoPanel"; + this.controlsPanel.SetRowSpan(this.logoPanel, 2); + this.logoPanel.Size = new System.Drawing.Size(200, 110); + this.logoPanel.TabIndex = 21; + // + // buttonsPanel + // + this.buttonsPanel.AutoSize = true; + this.buttonsPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.buttonsPanel.Controls.Add(this.btnPlay); + this.buttonsPanel.Controls.Add(this.btnRewind); + this.buttonsPanel.Controls.Add(this.btnStepBack); + this.buttonsPanel.Controls.Add(this.btnStop); + this.buttonsPanel.Controls.Add(this.btnStepForward); + this.buttonsPanel.Controls.Add(this.btnForward); + this.buttonsPanel.Location = new System.Drawing.Point(0, 0); + this.buttonsPanel.Margin = new System.Windows.Forms.Padding(0); + this.buttonsPanel.Name = "buttonsPanel"; + this.buttonsPanel.Size = new System.Drawing.Size(360, 60); + this.buttonsPanel.TabIndex = 20; + // + // btnPlay + // + this.btnPlay.AutoSize = true; + this.btnPlay.BackColor = System.Drawing.Color.Transparent; + this.btnPlay.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnPlay.FlatAppearance.BorderSize = 0; + this.btnPlay.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnPlay.Image = global::DxPlay.Properties.Resources.ic_play_arrow_black_24dp_2x; + this.btnPlay.Location = new System.Drawing.Point(3, 3); + this.btnPlay.Name = "btnPlay"; + this.btnPlay.Size = new System.Drawing.Size(54, 54); + this.btnPlay.TabIndex = 23; + this.btnPlay.TabStop = false; + this.btnPlay.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnPlay.UseVisualStyleBackColor = false; + // + // btnRewind + // + this.btnRewind.AutoSize = true; + this.btnRewind.BackColor = System.Drawing.Color.Transparent; + this.btnRewind.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRewind.FlatAppearance.BorderSize = 0; + this.btnRewind.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRewind.Image = ((System.Drawing.Image)(resources.GetObject("btnRewind.Image"))); + this.btnRewind.Location = new System.Drawing.Point(63, 3); + this.btnRewind.Name = "btnRewind"; + this.btnRewind.Size = new System.Drawing.Size(54, 54); + this.btnRewind.TabIndex = 18; + this.btnRewind.TabStop = false; + this.btnRewind.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnRewind.UseVisualStyleBackColor = false; + // + // btnStepBack + // + this.btnStepBack.AutoSize = true; + this.btnStepBack.BackColor = System.Drawing.Color.Transparent; + this.btnStepBack.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStepBack.FlatAppearance.BorderSize = 0; + this.btnStepBack.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStepBack.Image = global::DxPlay.Properties.Resources.baseline_skip_previous_black_24dp; + this.btnStepBack.Location = new System.Drawing.Point(123, 3); + this.btnStepBack.Name = "btnStepBack"; + this.btnStepBack.Size = new System.Drawing.Size(54, 54); + this.btnStepBack.TabIndex = 21; + this.btnStepBack.TabStop = false; + this.btnStepBack.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnStepBack.UseVisualStyleBackColor = false; + // + // btnStop + // + this.btnStop.AutoSize = true; + this.btnStop.BackColor = System.Drawing.Color.Transparent; + this.btnStop.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStop.FlatAppearance.BorderSize = 0; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Image = global::DxPlay.Properties.Resources.ic_stop_black_24dp_2x; + this.btnStop.Location = new System.Drawing.Point(183, 3); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(54, 54); + this.btnStop.TabIndex = 19; + this.btnStop.TabStop = false; + this.btnStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnStop.UseVisualStyleBackColor = false; + // + // btnStepForward + // + this.btnStepForward.AutoSize = true; + this.btnStepForward.BackColor = System.Drawing.Color.Transparent; + this.btnStepForward.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStepForward.FlatAppearance.BorderSize = 0; + this.btnStepForward.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStepForward.Image = global::DxPlay.Properties.Resources.baseline_skip_next_black_24dp; + this.btnStepForward.Location = new System.Drawing.Point(243, 3); + this.btnStepForward.Name = "btnStepForward"; + this.btnStepForward.Size = new System.Drawing.Size(54, 54); + this.btnStepForward.TabIndex = 22; + this.btnStepForward.TabStop = false; + this.btnStepForward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnStepForward.UseVisualStyleBackColor = false; + // + // btnForward + // + this.btnForward.AutoSize = true; + this.btnForward.BackColor = System.Drawing.Color.Transparent; + this.btnForward.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnForward.FlatAppearance.BorderSize = 0; + this.btnForward.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnForward.Image = global::DxPlay.Properties.Resources.baseline_fast_forward_black_24dp; + this.btnForward.Location = new System.Drawing.Point(303, 3); + this.btnForward.Name = "btnForward"; + this.btnForward.Size = new System.Drawing.Size(54, 54); + this.btnForward.TabIndex = 20; + this.btnForward.TabStop = false; + this.btnForward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnForward.UseVisualStyleBackColor = false; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Controls.Add(this.audioLabel, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.audioTracks, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 63); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(354, 44); + this.tableLayoutPanel1.TabIndex = 22; + // + // audioLabel + // + this.audioLabel.AutoSize = true; + this.audioLabel.Location = new System.Drawing.Point(2, 5); + this.audioLabel.Margin = new System.Windows.Forms.Padding(2, 5, 2, 0); + this.audioLabel.Name = "audioLabel"; + this.audioLabel.Size = new System.Drawing.Size(34, 13); + this.audioLabel.TabIndex = 28; + this.audioLabel.Tag = ""; + this.audioLabel.Text = "Audio"; + this.audioLabel.Visible = false; + // + // audioTracks + // + this.audioTracks.AllowDrop = true; + this.audioTracks.Dock = System.Windows.Forms.DockStyle.Top; + this.audioTracks.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.audioTracks.FormattingEnabled = true; + this.audioTracks.IntegralHeight = false; + this.audioTracks.ItemHeight = 13; + this.audioTracks.Location = new System.Drawing.Point(40, 2); + this.audioTracks.Margin = new System.Windows.Forms.Padding(2); + this.audioTracks.Name = "audioTracks"; + this.audioTracks.Size = new System.Drawing.Size(312, 21); + this.audioTracks.TabIndex = 29; + this.audioTracks.Visible = false; + // + // PlayerControls + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.Controls.Add(this.mainPanel); + this.Margin = new System.Windows.Forms.Padding(0); + this.Name = "PlayerControls"; + this.Size = new System.Drawing.Size(835, 165); + this.mainPanel.ResumeLayout(false); + this.mainPanel.PerformLayout(); + this.timecodePanel.ResumeLayout(false); + this.controlsPanel.ResumeLayout(false); + this.controlsPanel.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.playSpeed)).EndInit(); + this.buttonsPanel.ResumeLayout(false); + this.buttonsPanel.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel mainPanel; + private System.Windows.Forms.TableLayoutPanel timecodePanel; + private System.Windows.Forms.Label lbStart; + private System.Windows.Forms.Label lbStatus; + private System.Windows.Forms.Label lbDuration; + private System.Windows.Forms.Label lbStartTC; + private System.Windows.Forms.Label lbEndTC; + private System.Windows.Forms.Label lbCurrentTC; + private MaestroShared.Controls.ColorSlider trackBar; + private System.Windows.Forms.FlowLayoutPanel buttonsPanel; + private MaestroShared.Controls.NoFocusCueButton btnPlay; + private MaestroShared.Controls.NoFocusCueButton btnStop; + private MaestroShared.Controls.NoFocusCueButton btnRewind; + private MaestroShared.Controls.NoFocusCueButton btnForward; + private System.Windows.Forms.TableLayoutPanel controlsPanel; + private System.Windows.Forms.Panel logoPanel; + private MaestroShared.Controls.NoFocusCueButton btnStepBack; + private MaestroShared.Controls.NoFocusCueButton btnStepForward; + private VideoSpeedTrackbar playSpeed; + private System.Windows.Forms.Label lblPlaySpeed; + private TableLayoutPanel tableLayoutPanel2; + private TableLayoutPanel tableLayoutPanel1; + private Label audioLabel; + private ComboBox audioTracks; + } +} \ No newline at end of file diff --git a/client - Copy/DxPlay/Controls/PlayerControls.cs b/client - Copy/DxPlay/Controls/PlayerControls.cs new file mode 100644 index 00000000..1ff0bcbc --- /dev/null +++ b/client - Copy/DxPlay/Controls/PlayerControls.cs @@ -0,0 +1,37 @@ +using MaestroShared.Controls; +using System; +using System.Windows.Forms; +using NLog; +using NLog.Fluent; + +namespace DxPlay.Controls +{ + public partial class PlayerControls : UserControl + { + + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + public PlayerControls() + { + InitializeComponent(); + } + + public Label Start { get => lbStart; } + public Label Status { get => lbStatus; } + public Label Duration { get => lbDuration; } + public Label StartTC { get => lbStartTC; } + public Label EndTC { get => lbEndTC; } + public Label CurrentTC { get => lbCurrentTC; } + public ColorSlider TrackBar { get => trackBar; } + public NoFocusCueButton Play { get => btnPlay; } + public NoFocusCueButton Stop { get => btnStop; } + public NoFocusCueButton Rewind { get => btnRewind; } + public NoFocusCueButton Forward { get => btnForward; } + public NoFocusCueButton StepBack { get => btnStepBack; } + public NoFocusCueButton StepForward { get => btnStepForward; } + public Label PlaySpeedLabel { get => lblPlaySpeed; } + public VideoSpeedTrackbar PlaySpeed { get => playSpeed; } + public Label AudioLabel { get => audioLabel; } + public ComboBox AudioTracks { get => audioTracks; } + + } +} \ No newline at end of file diff --git a/client - Copy/DxPlay/Controls/PlayerControls.resx b/client - Copy/DxPlay/Controls/PlayerControls.resx new file mode 100644 index 00000000..9b86b793 --- /dev/null +++ b/client - Copy/DxPlay/Controls/PlayerControls.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAASpJREFUaEPt + 2C1OA1EUxfEJSUUNpkkNuhKBZQVoVLfACthBuwPWgKlmBVgEEl1FaqqaQAicx+QlL82d6bt3jpnm/JJ/ + Usy5ho8ZGhERERGhukTP7cdBWDsut2iLfv+/imPtVJugFfpB6Wj0MGvHZYHeUD4YPczacXlAB3R81HuY + tVNthl6QdTBXg7Xjcoc+kXWs7BTWTrUpekLWEasurB2Xa/SBrANdWVg71S7QI/pC1nhfJdaOyxV6RdZo + TRlrx+Ue7ZE1WFvC2nFbIsZh1k7IqL+FsvzD942s8b5KrJ2wG8T49cfaCRn1H7JSegTYIetY2SmsnZA5 + YjyEsXbCRvs4XUovIu9o6GHWTkh6FVwjxislYydstC/1pfTvkE37cRDWjoiIiMiZapo/0nGWfKOvkooA + AAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/client - Copy/DxPlay/Controls/VideoSpeedTrackbar.cs b/client - Copy/DxPlay/Controls/VideoSpeedTrackbar.cs new file mode 100644 index 00000000..66b41440 --- /dev/null +++ b/client - Copy/DxPlay/Controls/VideoSpeedTrackbar.cs @@ -0,0 +1,29 @@ +using MaestroShared.Controls; +using System.Windows.Forms; + +namespace DxPlay.Controls +{ + public class VideoSpeedTrackbar: TrackBar + { + private float[] mAvailableSpeeds= { + 0.25f, 0.5f, 1f, 2f, 3f, 5f + }; + + private float currentSpeed; + public float[] AvailableSpeeds { get => mAvailableSpeeds; } + + public float CurrentSpeed { + get => currentSpeed; + set { currentSpeed = value; } + } + public VideoSpeedTrackbar() { + this.Minimum = 0; + this.Maximum = 5; + this.Value = 2; + this.LargeChange = 1; + this.SmallChange = 1; + this.Tag = "PlaySpeed"; + this.TickStyle = TickStyle.None; + } + } +} diff --git a/client - Copy/DxPlay/PlayerForm.Designer.cs b/client - Copy/DxPlay/PlayerForm.Designer.cs new file mode 100644 index 00000000..d1d6a38b --- /dev/null +++ b/client - Copy/DxPlay/PlayerForm.Designer.cs @@ -0,0 +1,587 @@ + +using MaestroShared.Controls; +using System.Windows.Forms; + +namespace DxPlay { + partial class PlayerForm : Form { + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) { + // Make sure to release the DxPlay object to avoid hanging + if (m_play != null) { + m_play.Dispose(); + } + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayerForm)); + this.pVideo = new System.Windows.Forms.Panel(); + this.mainSplit = new System.Windows.Forms.SplitContainer(); + this.panelPlayer = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tabEditor = new System.Windows.Forms.TabControl(); + this.tpMetadata = new System.Windows.Forms.TabPage(); + this.trafficBrowser = new TrafficClient.TrafficIDSelector(); + this.tpSegments = new System.Windows.Forms.TabPage(); + this.dgSegments = new System.Windows.Forms.DataGridView(); + this.bsSegments = new System.Windows.Forms.BindingSource(this.components); + this.segmentActions = new System.Windows.Forms.ToolStrip(); + this.tbDefineSegment = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.tbPositionAsTCIn = new System.Windows.Forms.ToolStripButton(); + this.tbSplitSegment = new System.Windows.Forms.ToolStripButton(); + this.tbPositionAsTCOut = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.tbDeleteSegment = new System.Windows.Forms.ToolStripButton(); + this.imagesTabEdit = new System.Windows.Forms.ImageList(this.components); + this.btnToggleSegmentEditor = new MaestroShared.Controls.NoFocusCueButton(); + this.pMetadataDisplay = new System.Windows.Forms.TableLayoutPanel(); + this.btnApprove = new MaestroShared.Controls.NoFocusCueButton(); + this.labelSelectedMetadata = new System.Windows.Forms.Label(); + this.txtSelectedID = new System.Windows.Forms.TextBox(); + this.mainMenu = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuOpenFile = new DxPlay.Controls.BindableToolStripMenuItem(); + this.menuApprove = new DxPlay.Controls.BindableToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.menuRedefineSegments = new DxPlay.Controls.BindableToolStripMenuItem(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.btnSave = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.playerControls = new DxPlay.Controls.PlayerControls(); + ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).BeginInit(); + this.mainSplit.Panel1.SuspendLayout(); + this.mainSplit.Panel2.SuspendLayout(); + this.mainSplit.SuspendLayout(); + this.panelPlayer.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.tabEditor.SuspendLayout(); + this.tpMetadata.SuspendLayout(); + this.tpSegments.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgSegments)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).BeginInit(); + this.segmentActions.SuspendLayout(); + this.pMetadataDisplay.SuspendLayout(); + this.mainMenu.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // pVideo + // + this.pVideo.BackColor = System.Drawing.Color.Transparent; + this.pVideo.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pVideo.Dock = System.Windows.Forms.DockStyle.Fill; + this.pVideo.Location = new System.Drawing.Point(0, 0); + this.pVideo.Name = "pVideo"; + this.pVideo.Size = new System.Drawing.Size(472, 363); + this.pVideo.TabIndex = 0; + this.pVideo.TabStop = true; + this.pVideo.SizeChanged += new System.EventHandler(this.Panel1_SizeChanged); + this.pVideo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Panel1_MouseDown); + // + // mainSplit + // + this.mainSplit.BackColor = System.Drawing.Color.Black; + this.mainSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.mainSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.mainSplit.Location = new System.Drawing.Point(0, 24); + this.mainSplit.Name = "mainSplit"; + // + // mainSplit.Panel1 + // + this.mainSplit.Panel1.Controls.Add(this.panelPlayer); + // + // mainSplit.Panel2 + // + this.mainSplit.Panel2.Controls.Add(this.tableLayoutPanel1); + this.mainSplit.Panel2.Controls.Add(this.pMetadataDisplay); + this.mainSplit.Panel2MinSize = 300; + this.mainSplit.Size = new System.Drawing.Size(931, 365); + this.mainSplit.SplitterDistance = 474; + this.mainSplit.TabIndex = 20; + // + // panelPlayer + // + this.panelPlayer.Controls.Add(this.pVideo); + this.panelPlayer.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelPlayer.Location = new System.Drawing.Point(0, 0); + this.panelPlayer.Name = "panelPlayer"; + this.panelPlayer.Size = new System.Drawing.Size(472, 363); + this.panelPlayer.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.tabEditor, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.btnToggleSegmentEditor, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(451, 300); + this.tableLayoutPanel1.TabIndex = 4; + // + // tabEditor + // + this.tabEditor.Alignment = System.Windows.Forms.TabAlignment.Bottom; + this.tabEditor.Controls.Add(this.tpMetadata); + this.tabEditor.Controls.Add(this.tpSegments); + this.tabEditor.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabEditor.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.tabEditor.ImageList = this.imagesTabEdit; + this.tabEditor.Location = new System.Drawing.Point(23, 4); + this.tabEditor.Margin = new System.Windows.Forms.Padding(0, 4, 4, 4); + this.tabEditor.Multiline = true; + this.tabEditor.Name = "tabEditor"; + this.tabEditor.Padding = new System.Drawing.Point(10, 5); + this.tabEditor.SelectedIndex = 0; + this.tabEditor.Size = new System.Drawing.Size(424, 292); + this.tabEditor.TabIndex = 2; + // + // tpMetadata + // + this.tpMetadata.BackColor = System.Drawing.Color.Transparent; + this.tpMetadata.Controls.Add(this.trafficBrowser); + this.tpMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.tpMetadata.ImageIndex = 0; + this.tpMetadata.Location = new System.Drawing.Point(4, 4); + this.tpMetadata.Name = "tpMetadata"; + this.tpMetadata.Padding = new System.Windows.Forms.Padding(3); + this.tpMetadata.Size = new System.Drawing.Size(416, 253); + this.tpMetadata.TabIndex = 0; + this.tpMetadata.Text = "Metadata"; + // + // trafficBrowser + // + this.trafficBrowser.BackColor = System.Drawing.Color.White; + this.trafficBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.trafficBrowser.IDChangedEvent = null; + this.trafficBrowser.Location = new System.Drawing.Point(3, 3); + this.trafficBrowser.Margin = new System.Windows.Forms.Padding(0); + this.trafficBrowser.Name = "trafficBrowser"; + this.trafficBrowser.Parameters = null; + this.trafficBrowser.Size = new System.Drawing.Size(410, 247); + this.trafficBrowser.TabIndex = 0; + // + // tpSegments + // + this.tpSegments.Controls.Add(this.dgSegments); + this.tpSegments.Controls.Add(this.segmentActions); + this.tpSegments.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.tpSegments.ImageIndex = 1; + this.tpSegments.Location = new System.Drawing.Point(4, 4); + this.tpSegments.Name = "tpSegments"; + this.tpSegments.Padding = new System.Windows.Forms.Padding(3); + this.tpSegments.Size = new System.Drawing.Size(341, 192); + this.tpSegments.TabIndex = 1; + this.tpSegments.Text = "Segments"; + this.tpSegments.UseVisualStyleBackColor = true; + // + // dgSegments + // + this.dgSegments.AllowUserToAddRows = false; + this.dgSegments.AllowUserToOrderColumns = true; + this.dgSegments.AllowUserToResizeRows = false; + this.dgSegments.AutoGenerateColumns = false; + this.dgSegments.BackgroundColor = System.Drawing.Color.White; + this.dgSegments.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgSegments.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgSegments.DataSource = this.bsSegments; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgSegments.DefaultCellStyle = dataGridViewCellStyle1; + this.dgSegments.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgSegments.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnF2; + this.dgSegments.Location = new System.Drawing.Point(3, 28); + this.dgSegments.MultiSelect = false; + this.dgSegments.Name = "dgSegments"; + this.dgSegments.RowHeadersVisible = false; + this.dgSegments.RowHeadersWidth = 51; + this.dgSegments.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgSegments.Size = new System.Drawing.Size(335, 161); + this.dgSegments.TabIndex = 1; + this.dgSegments.CellBeginEdit += new System.Windows.Forms.DataGridViewCellCancelEventHandler(this.OnSegmentsCellBeginEdit); + this.dgSegments.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OnSegmentsCellContentClick); + this.dgSegments.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.OnSegmentsCellMouseDoubleClick); + this.dgSegments.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.OnSegmentsCellMouseEnter); + this.dgSegments.CellMouseLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.OnSegmentsCellMouseLeave); + this.dgSegments.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(this.OnSegmentsCellPainting); + this.dgSegments.ColumnAdded += new System.Windows.Forms.DataGridViewColumnEventHandler(this.OnSegmentsColumnAdded); + this.dgSegments.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnSegmentsMouseClick); + // + // segmentActions + // + this.segmentActions.AutoSize = false; + this.segmentActions.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.segmentActions.ImageScalingSize = new System.Drawing.Size(20, 20); + this.segmentActions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tbDefineSegment, + this.toolStripSeparator2, + this.tbPositionAsTCIn, + this.tbSplitSegment, + this.tbPositionAsTCOut, + this.toolStripSeparator1, + this.tbDeleteSegment}); + this.segmentActions.Location = new System.Drawing.Point(3, 3); + this.segmentActions.Name = "segmentActions"; + this.segmentActions.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; + this.segmentActions.Size = new System.Drawing.Size(335, 25); + this.segmentActions.TabIndex = 0; + this.segmentActions.Text = "toolStrip1"; + // + // tbDefineSegment + // + this.tbDefineSegment.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tbDefineSegment.Image = ((System.Drawing.Image)(resources.GetObject("tbDefineSegment.Image"))); + this.tbDefineSegment.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.tbDefineSegment.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tbDefineSegment.Name = "tbDefineSegment"; + this.tbDefineSegment.Size = new System.Drawing.Size(23, 22); + this.tbDefineSegment.Text = "toolStripButton5"; + this.tbDefineSegment.Click += new System.EventHandler(this.OnDefineOneSegmentClick); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // tbPositionAsTCIn + // + this.tbPositionAsTCIn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tbPositionAsTCIn.Image = ((System.Drawing.Image)(resources.GetObject("tbPositionAsTCIn.Image"))); + this.tbPositionAsTCIn.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.tbPositionAsTCIn.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tbPositionAsTCIn.Name = "tbPositionAsTCIn"; + this.tbPositionAsTCIn.Size = new System.Drawing.Size(23, 22); + this.tbPositionAsTCIn.Text = "toolStripButton1"; + this.tbPositionAsTCIn.Click += new System.EventHandler(this.OnActualPositionToTCInToolStripMenuItem1Click); + // + // tbSplitSegment + // + this.tbSplitSegment.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tbSplitSegment.Image = ((System.Drawing.Image)(resources.GetObject("tbSplitSegment.Image"))); + this.tbSplitSegment.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.tbSplitSegment.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tbSplitSegment.Name = "tbSplitSegment"; + this.tbSplitSegment.Size = new System.Drawing.Size(23, 22); + this.tbSplitSegment.Text = "toolStripButton4"; + this.tbSplitSegment.Click += new System.EventHandler(this.OnSplitSegmentAtCurrentPositionClick); + // + // tbPositionAsTCOut + // + this.tbPositionAsTCOut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tbPositionAsTCOut.Image = ((System.Drawing.Image)(resources.GetObject("tbPositionAsTCOut.Image"))); + this.tbPositionAsTCOut.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.tbPositionAsTCOut.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tbPositionAsTCOut.Name = "tbPositionAsTCOut"; + this.tbPositionAsTCOut.Size = new System.Drawing.Size(23, 22); + this.tbPositionAsTCOut.Text = "toolStripButton2"; + this.tbPositionAsTCOut.Click += new System.EventHandler(this.OnActualPositionToTCOutToolStripMenuItem1Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // tbDeleteSegment + // + this.tbDeleteSegment.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tbDeleteSegment.Image = ((System.Drawing.Image)(resources.GetObject("tbDeleteSegment.Image"))); + this.tbDeleteSegment.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.tbDeleteSegment.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tbDeleteSegment.Name = "tbDeleteSegment"; + this.tbDeleteSegment.Size = new System.Drawing.Size(23, 22); + this.tbDeleteSegment.Text = "toolStripButton3"; + this.tbDeleteSegment.Click += new System.EventHandler(this.OnDeleteSegmentClick); + // + // imagesTabEdit + // + this.imagesTabEdit.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imagesTabEdit.ImageStream"))); + this.imagesTabEdit.TransparentColor = System.Drawing.Color.Transparent; + this.imagesTabEdit.Images.SetKeyName(0, "round_publish_black_24dp.png"); + this.imagesTabEdit.Images.SetKeyName(1, "ic_playlist_add_check_black_24dp_1x.png"); + // + // btnToggleSegmentEditor + // + this.btnToggleSegmentEditor.BackColor = System.Drawing.Color.White; + this.btnToggleSegmentEditor.FlatAppearance.BorderSize = 0; + this.btnToggleSegmentEditor.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnToggleSegmentEditor.Image = ((System.Drawing.Image)(resources.GetObject("btnToggleSegmentEditor.Image"))); + this.btnToggleSegmentEditor.Location = new System.Drawing.Point(0, 4); + this.btnToggleSegmentEditor.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0); + this.btnToggleSegmentEditor.Name = "btnToggleSegmentEditor"; + this.btnToggleSegmentEditor.Size = new System.Drawing.Size(23, 63); + this.btnToggleSegmentEditor.TabIndex = 0; + this.btnToggleSegmentEditor.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnToggleSegmentEditor.UseVisualStyleBackColor = false; + this.btnToggleSegmentEditor.Visible = false; + // + // pMetadataDisplay + // + this.pMetadataDisplay.AutoSize = true; + this.pMetadataDisplay.ColumnCount = 2; + this.pMetadataDisplay.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.pMetadataDisplay.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.pMetadataDisplay.Controls.Add(this.btnApprove, 1, 1); + this.pMetadataDisplay.Controls.Add(this.labelSelectedMetadata, 0, 0); + this.pMetadataDisplay.Controls.Add(this.txtSelectedID, 0, 1); + this.pMetadataDisplay.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pMetadataDisplay.Location = new System.Drawing.Point(0, 300); + this.pMetadataDisplay.Margin = new System.Windows.Forms.Padding(0); + this.pMetadataDisplay.Name = "pMetadataDisplay"; + this.pMetadataDisplay.RowCount = 2; + this.pMetadataDisplay.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.pMetadataDisplay.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.pMetadataDisplay.Size = new System.Drawing.Size(451, 63); + this.pMetadataDisplay.TabIndex = 5; + // + // btnApprove + // + this.btnApprove.AutoSize = true; + this.btnApprove.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.btnApprove.BackColor = System.Drawing.Color.White; + this.btnApprove.FlatAppearance.BorderSize = 0; + this.btnApprove.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnApprove.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.btnApprove.Image = ((System.Drawing.Image)(resources.GetObject("btnApprove.Image"))); + this.btnApprove.Location = new System.Drawing.Point(349, 29); + this.btnApprove.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0); + this.btnApprove.Name = "btnApprove"; + this.btnApprove.Size = new System.Drawing.Size(102, 30); + this.btnApprove.TabIndex = 17; + this.btnApprove.Text = "Approve"; + this.btnApprove.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.btnApprove.UseVisualStyleBackColor = false; + this.btnApprove.Click += new System.EventHandler(this.OnApprove); + // + // labelSelectedMetadata + // + this.labelSelectedMetadata.AutoSize = true; + this.labelSelectedMetadata.BackColor = System.Drawing.Color.Transparent; + this.labelSelectedMetadata.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelSelectedMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.labelSelectedMetadata.ForeColor = System.Drawing.SystemColors.ActiveCaption; + this.labelSelectedMetadata.Location = new System.Drawing.Point(3, 0); + this.labelSelectedMetadata.Name = "labelSelectedMetadata"; + this.labelSelectedMetadata.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); + this.labelSelectedMetadata.Size = new System.Drawing.Size(343, 25); + this.labelSelectedMetadata.TabIndex = 13; + this.labelSelectedMetadata.Text = "Selected metadata"; + // + // txtSelectedID + // + this.txtSelectedID.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.txtSelectedID.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtSelectedID.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtSelectedID.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.txtSelectedID.Location = new System.Drawing.Point(3, 28); + this.txtSelectedID.Name = "txtSelectedID"; + this.txtSelectedID.Size = new System.Drawing.Size(343, 32); + this.txtSelectedID.TabIndex = 12; + // + // mainMenu + // + this.mainMenu.ImageScalingSize = new System.Drawing.Size(20, 20); + this.mainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem}); + this.mainMenu.Location = new System.Drawing.Point(0, 0); + this.mainMenu.Name = "mainMenu"; + this.mainMenu.Size = new System.Drawing.Size(931, 24); + this.mainMenu.TabIndex = 21; + this.mainMenu.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuOpenFile, + this.menuApprove, + this.toolStripSeparator3, + this.menuRedefineSegments}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // menuOpenFile + // + this.menuOpenFile.Name = "menuOpenFile"; + this.menuOpenFile.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.menuOpenFile.Size = new System.Drawing.Size(215, 22); + this.menuOpenFile.Text = "Open file"; + this.menuOpenFile.Click += new System.EventHandler(this.MenuOpenFile_Click); + // + // menuApprove + // + this.menuApprove.Name = "menuApprove"; + this.menuApprove.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); + this.menuApprove.Size = new System.Drawing.Size(215, 22); + this.menuApprove.Text = "Approve"; + this.menuApprove.Click += new System.EventHandler(this.OnApprove); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(212, 6); + // + // menuRedefineSegments + // + this.menuRedefineSegments.Name = "menuRedefineSegments"; + this.menuRedefineSegments.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R))); + this.menuRedefineSegments.Size = new System.Drawing.Size(215, 22); + this.menuRedefineSegments.Text = "Redefine segments"; + this.menuRedefineSegments.Click += new System.EventHandler(this.OnRedefineSegments); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoSize = true; + this.flowLayoutPanel1.Controls.Add(this.btnSave); + this.flowLayoutPanel1.Controls.Add(this.btnCancel); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 532); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.flowLayoutPanel1.Size = new System.Drawing.Size(931, 29); + this.flowLayoutPanel1.TabIndex = 23; + // + // btnSave + // + this.btnSave.Location = new System.Drawing.Point(853, 3); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(75, 23); + this.btnSave.TabIndex = 0; + this.btnSave.Text = "Save"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.BtnSave_Click); + // + // btnCancel + // + this.btnCancel.Location = new System.Drawing.Point(772, 3); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(75, 23); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.BtnCancel_Click); + // + // playerControls + // + this.playerControls.AutoSize = true; + this.playerControls.BackColor = System.Drawing.Color.Transparent; + this.playerControls.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.playerControls.Dock = System.Windows.Forms.DockStyle.Bottom; + this.playerControls.Location = new System.Drawing.Point(0, 389); + this.playerControls.Margin = new System.Windows.Forms.Padding(0); + this.playerControls.Name = "playerControls"; + this.playerControls.Size = new System.Drawing.Size(931, 143); + this.playerControls.TabIndex = 22; + // + // PlayerForm + // + this.AllowDrop = true; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(931, 561); + this.Controls.Add(this.mainSplit); + this.Controls.Add(this.mainMenu); + this.Controls.Add(this.playerControls); + this.Controls.Add(this.flowLayoutPanel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MinimumSize = new System.Drawing.Size(640, 480); + this.Name = "PlayerForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "MediaCube Player"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PlayerForm_FormClosing); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.PlayerForm_FormClosed); + this.Load += new System.EventHandler(this.PlayerForm_Load); + this.Shown += new System.EventHandler(this.PlayerForm_Shown); + this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); + this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PlayerForm_KeyDown); + this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.PlayerForm_PreviewKeyDown); + this.mainSplit.Panel1.ResumeLayout(false); + this.mainSplit.Panel2.ResumeLayout(false); + this.mainSplit.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.mainSplit)).EndInit(); + this.mainSplit.ResumeLayout(false); + this.panelPlayer.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tabEditor.ResumeLayout(false); + this.tpMetadata.ResumeLayout(false); + this.tpSegments.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgSegments)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).EndInit(); + this.segmentActions.ResumeLayout(false); + this.segmentActions.PerformLayout(); + this.pMetadataDisplay.ResumeLayout(false); + this.pMetadataDisplay.PerformLayout(); + this.mainMenu.ResumeLayout(false); + this.mainMenu.PerformLayout(); + this.flowLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.ComponentModel.IContainer components; + private DxPlay.Controls.BindableToolStripMenuItem menuOpenFile; + private DxPlay.Controls.BindableToolStripMenuItem menuApprove; + private TrafficClient.TrafficIDSelector trafficBrowser; + private DxPlay.Controls.BindableToolStripMenuItem menuRedefineSegments; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.TextBox txtSelectedID; + private System.Windows.Forms.Label labelSelectedMetadata; + private MaestroShared.Controls.NoFocusCueButton btnApprove; + private System.Windows.Forms.TableLayoutPanel pMetadataDisplay; + private MaestroShared.Controls.NoFocusCueButton btnToggleSegmentEditor; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ImageList imagesTabEdit; + private System.Windows.Forms.ToolStripButton tbDefineSegment; + private System.Windows.Forms.ToolStripButton tbSplitSegment; + private System.Windows.Forms.ToolStripButton tbDeleteSegment; + private System.Windows.Forms.ToolStripButton tbPositionAsTCOut; + private System.Windows.Forms.ToolStripButton tbPositionAsTCIn; + private System.Windows.Forms.ToolStrip segmentActions; + private System.Windows.Forms.TabPage tpSegments; + private System.Windows.Forms.TabPage tpMetadata; + private System.Windows.Forms.TabControl tabEditor; + private DxPlay.Controls.PlayerControls playerControls; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.MenuStrip mainMenu; + private System.Windows.Forms.BindingSource bsSegments; + private System.Windows.Forms.DataGridView dgSegments; + private System.Windows.Forms.Panel panelPlayer; + private System.Windows.Forms.SplitContainer mainSplit; + private System.Windows.Forms.Panel pVideo; + } +} \ No newline at end of file diff --git a/client - Copy/DxPlay/PlayerForm.cs b/client - Copy/DxPlay/PlayerForm.cs new file mode 100644 index 00000000..93938c05 --- /dev/null +++ b/client - Copy/DxPlay/PlayerForm.cs @@ -0,0 +1,633 @@ +using DirectShowLib; +using DxPlay.Controls; +using DxPlay.Model; +using DxPlay.Properties; +using MaestroShared.Commons; +using MaestroShared.Controls; +using MaestroShared.Metadata; +using NLog; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Logger = NLog.Logger; + +namespace DxPlay { + + public partial class PlayerForm : Form { + private const string TITLE = "MediaCube Player"; + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private const string DEFAULT_FILE_FILTER = "MXF files (*.MXF)|*.MXF"; + private DateTime lastClick = DateTime.Now; + private volatile bool trackBarAtUser; + private DxPlayer m_play = null; + private MediaDescription m_mediaDescription = null; + + private OpenFileDialog openFileDialog = new OpenFileDialog(); + private ToolTip tooltips; + + private DxPlaySettings settings; + public DxPlaySettings Settings { + get { + return settings; + } + set { + settings = value ?? throw new NullReferenceException("DxPlaySettings"); + Model = new DxPlayModel(value); + //default 1 kell legyen: HTV uj szegmens = elozo szegmens vege + 1 + //0: MV uj szegmens = elozo szegmens vege + segmentOffset = 1 - settings.Player.SegmentOffset; + } + } + + private DxPlayModel model; + public DxPlayModel Model { + get { return model; } + set { + model = value ?? throw new NullReferenceException("DxPlayModel"); + ApplyModel(); + } + } + + /// + /// User control cimkejenek rendszeres frissitese villogast eredmenyez e nelkul + /// + //protected override CreateParams CreateParams { + // get { + // CreateParams cp = base.CreateParams; + // cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED + // return cp; + // } + //} + + public bool openFileDialogOpened; + + private void ApplyModel() { + bsSegments.DataSource = model.Segments; + dgSegments.AutoGenerateColumns = true; + mainMenu.DataBindings.Add(new Binding("Visible", model, "IsMenuVisible", false, DataSourceUpdateMode.Never)); + menuOpenFile.DataBindings.Add(new Binding("Enabled", model, "IsMenuVisible", false, DataSourceUpdateMode.Never)); + menuApprove.DataBindings.Add(new Binding("Enabled", model, "IsApproveEnabled", false, DataSourceUpdateMode.Never)); + //menuRedefineSegments.DataBindings.Add(new Binding("Enabled", model, "IsRedefineSegmentsEnabled", false, DataSourceUpdateMode.Never)); + + if (model.IsMenuVisible) { + btnApprove.DataBindings.Add(new Binding("Enabled", model, "IsApproveEnabled", false, DataSourceUpdateMode.Never)); + tpSegments.DataBindings.Add(new Binding("Enabled", model, "IsSegmentEditorVisible", false, DataSourceUpdateMode.Never)); + txtSelectedID.DataBindings.Add(new Binding("Text", model, "ID", false, DataSourceUpdateMode.Never)); + } else { + pMetadataDisplay.Visible = false; + tabEditor.TabPages.Remove(tpMetadata); + } + Binding segmentEditorPanelBinding = new Binding("Panel2Collapsed", model, "IsSegmentEditorVisible", true, DataSourceUpdateMode.Never); + segmentEditorPanelBinding.Format += (s, e) => { + bool enabled = (bool)e.Value; + e.Value = !enabled; + if (enabled) + mainSplit.Panel2.Show(); + else + mainSplit.Panel2.Hide(); + }; + mainSplit.DataBindings.Add(segmentEditorPanelBinding); + + } + + private void OnSelectedIDChanged(string ID, int variantID, string serialID, string text, List selected) { + //logger.Info("Selected ID: " + ID); + try { + model.SelectedSegments = selected; + model.VariantID = variantID; + model.ID = ID; + } catch (Exception e) { + MsgBox.Error(e.Message); + logger.Error(e.StackTrace); + } + } + + public PlayerForm() { + InitializeComponent(); + + playerControls.Play.Click += OnPlayClick; + playerControls.Stop.Click += OnStopClick; + playerControls.Rewind.MouseDown += OnRewindMouseDown; + playerControls.Rewind.MouseUp += OnRewindMouseUp; + playerControls.Forward.MouseUp += OnForwardMouseUp; + playerControls.Forward.MouseDown += OnForwardMouseDown; + playerControls.StepBack.MouseDown += OnStepBackMouseDown; + playerControls.StepBack.MouseUp += OnStepBackMouseUp; + playerControls.StepForward.MouseUp += OnStepForwardMouseUp; + playerControls.StepForward.MouseDown += OnStepForwardMouseDown; + playerControls.PlaySpeed.ValueChanged += OnPlaySpeedChanged; + playerControls.AudioTracks.SelectedIndexChanged += OnAudioTrackSelected; + + playerControls.TrackBar.MouseDown += OnTrackBarMouseDown; + playerControls.TrackBar.MouseUp += OnTrackBarMouseUp; + playerControls.TrackBar.Scroll += OnTrackBarScroll; + } + + private void InitializeTexts() { + tpMetadata.Text = Settings.Resource("METADATA", Resources.METADATA); + tpSegments.Text = Settings.Resource("SEGMENTS", Resources.SEGMENTS); + tbPositionAsTCIn.Text = Settings.Resource("POSITIONASTCIN", Resources.POSITIONASTCIN); + tbPositionAsTCOut.Text = Settings.Resource("POSITIONASTCOUT", Resources.POSITIONASTCOUT); + tbDefineSegment.Text = Settings.Resource("DEFINESEGMENT", Resources.DEFINESEGMENT); + tbDeleteSegment.Text = Settings.Resource("DELETESEGMENT", Resources.DELETESEGMENT); + tbSplitSegment.Text = Settings.Resource("SPLITSEGMENT", Resources.SPLITSEGMENT); + menuOpenFile.Text = Settings.Resource("OPEN", Resources.OPEN); + menuApprove.Text = Settings.Resource("APPROVE", Resources.APPROVE); + btnApprove.Text = Settings.Resource("APPROVE", Resources.APPROVE); + + tooltips = new ToolTip(); + tooltips.SetToolTip(playerControls.Rewind, Settings.Resource("REWIND", Resources.REWIND)); + tooltips.SetToolTip(playerControls.Forward, Settings.Resource("FORWARD", Resources.FORWARD)); + tooltips.SetToolTip(playerControls.StepBack, Settings.Resource("STEPBACK", Resources.STEPBACK)); + tooltips.SetToolTip(playerControls.StepForward, Settings.Resource("STEPFORWARD", Resources.STEPFORWARD)); + tooltips.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY)); + tooltips.SetToolTip(playerControls.Stop, Settings.Resource("STOP", Resources.STOP)); + playerControls.Status.Text = Settings.Resource("NOINPUT", Resources.NOINPUT); + playerControls.Start.Text = Settings.Resource("START", Resources.START); + playerControls.Duration.Text = Settings.Resource("LENGTH", Resources.LENGTH); + } + + private void CloseForm() { + m_play?.Dispose(); + Close(); + } + + private void Queue() { + m_play = null; + try { + //m_mediaDescription = MediaDetector.GetDescription(selectedFile); + m_mediaDescription = new MediaDescription() { fileName = model.CurrentFile.FullName }; + + playerControls.TrackBar.Value = 0; + playerControls.TrackBar.Minimum = 0; + m_play = new DxPlayer(pVideo, ref m_mediaDescription, Settings); + if (m_play.IsError) + throw new Exception(model.CurrentFile.FullName); + + m_play.PlayEvent += new DxPlayEvent(OnPlayEvent); + if (m_mediaDescription != null) { + playerControls.TrackBar.Maximum = m_mediaDescription.Duration.Frames; + playerControls.StartTC.Text = m_mediaDescription.FirstFrame.ToString(); + playerControls.EndTC.Text = m_mediaDescription.Duration.ToString(); + } + } catch (Exception ce) { + MessageBox.Show("Az állomány nem tölthetõ be. A rendszer üzenete: " + ce.Message, "Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + CloseForm(); + } + } + + private void Form1_DragEnter(object sender, DragEventArgs e) { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + if (files.Length == 1) + e.Effect = DragDropEffects.Copy; + } + } + + public void OpenFile(FileInfo fileInfo, bool redefine) { + logger.Debug("Open {0}", fileInfo.FullName); + + if (m_play != null) + m_play.Dispose(); + this.Text = fileInfo.Name; + + model.CurrentFile = fileInfo; + Queue(); + + if (model.IsMenuVisible) { + tabEditor.SelectedTab = tpMetadata; + trafficBrowser.ClearLookup(); + openFileDialog.InitialDirectory = fileInfo.Directory.FullName; + openFileDialog.Filter = DEFAULT_FILE_FILTER; + string id = fileInfo.Name.Replace(fileInfo.Extension, ""); + try { + model.Lookup(id); + } catch (Exception e) { + MsgBox.Error(e.Message); + logger.Error(e.StackTrace); + } + } + model.IsRedefineSegments = redefine; + + if (m_play != null) + { + m_play.Graph.SearchAudioTracks(m_play.Graph.Splitter); + if (m_play.Graph.AudioCount > 1) { + playerControls.AudioLabel.Visible = true; + m_play.Graph.AvailableAudioTracks = new List(m_play.Graph.AudioCount); + m_play.Graph.SearchAudioTracks(m_play.Graph.Splitter); + playerControls.AudioTracks.DataSource = m_play.Graph.AvailableAudioTracks; + playerControls.AudioTracks.Visible = true; + } + } + + //for (int i = 0; i < 100; i++) { + // m_play.Seek(i); + // Application.DoEvents(); + // Thread.Sleep(100); + //} + } + + + private void Form1_DragDrop(object sender, DragEventArgs e) { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + FileInfo fileInfo = new FileInfo(files[0]); + OpenFile(fileInfo, false); + } + + private void Panel1_MouseDown(object sender, MouseEventArgs e) { + if (m_play != null && e.Button == MouseButtons.Left) { + DateTime currentClick = DateTime.Now; + if ((currentClick - lastClick).TotalMilliseconds < 300) { + m_play.ToggleFullscreen(); + logger.Debug("Fullscreen"); + } else + lastClick = currentClick; + } + } + + private void Panel1_SizeChanged(object sender, EventArgs e) { + if (m_play != null) + m_play.UpdateVideoWindow(); + } + + private void OnTrackBarMouseDown(object sender, MouseEventArgs e) { + trackBarAtUser = true; + lastClick = DateTime.Now; + } + + private void OnTrackBarMouseUp(object sender, MouseEventArgs e) { + trackBarAtUser = false; + } + + private void OnTrackBarScroll(object sender, ScrollEventArgs e) { + if (m_play != null) + m_play.Seek(playerControls.TrackBar.Value); + } + + + private void PlayOrPause() { + if (m_play == null) + return; + if (m_play.State == GraphState.Playing) { + Pause(); + return; + } + if (m_play.State == GraphState.Completed) { + m_play.Stop(); + } + SetVideoSpeed(playerControls.PlaySpeed.CurrentSpeed); + m_play.Play(); + UpdatePlayPauseButton(); + } + + private void UpdatePlayPauseButton() { + if (m_play.State == GraphState.Playing) { + playerControls.Play.Image = Resources.ic_pause_black_24dp_2x; + tooltips.SetToolTip(playerControls.Play, Settings.Resource("PAUSE", Resources.PAUSE)); + } else { + playerControls.Play.Image = Resources.ic_play_arrow_black_24dp_2x; + tooltips.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY)); + } + } + + private void Pause() { + m_play.Pause(); + UpdatePlayPauseButton(); + } + + private void OnPlayClick(object sender, EventArgs e) { + PlayOrPause(); + } + + private void OnStopClick(object sender, EventArgs e) { + if (m_play != null && m_play.State != GraphState.Stopped) { + m_play.Stop(); + UpdatePlayPauseButton(); + } + } + + private bool buttonDown; + + private void OnRewindMouseUp(object sender, MouseEventArgs e) { + buttonDown = false; + } + + private void OnRewindMouseDown(object sender, MouseEventArgs e) { + buttonDown = true; + if (m_play != null && m_play.State == GraphState.Playing) { + do { + m_play.Rewind(10); + Application.DoEvents(); + } while (buttonDown); + } + } + + private void OnForwardMouseUp(object sender, MouseEventArgs e) { + buttonDown = false; + } + + private void OnForwardMouseDown(object sender, EventArgs e) { + buttonDown = true; + if (m_play != null && m_play.State == GraphState.Playing) { + do { + m_play.Forward(10); + Application.DoEvents(); + } while (buttonDown); + } + } + + private void OnStepBackMouseUp(object sender, MouseEventArgs e) { + buttonDown = false; + } + + private void OnStepBackMouseDown(object sender, MouseEventArgs e) { + buttonDown = true; + if (m_play != null) { + do { + m_play.Rewind(1); + Application.DoEvents(); + } while (buttonDown); + } + } + + private void OnStepForwardMouseUp(object sender, MouseEventArgs e) { + buttonDown = false; + } + + private void OnStepForwardMouseDown(object sender, EventArgs e) { + buttonDown = true; + if (m_play != null) { + do { + m_play.Forward(1); + Application.DoEvents(); + } while (buttonDown); + } + } + + private void Rewind() { + if (m_play == null) + return; + int step = ModifierKeys.HasFlag(Keys.Control) ? 10 : 1; + m_play.Rewind(step); + } + + private void Forward() { + if (m_play == null) + return; + int step = ModifierKeys.HasFlag(Keys.Control) ? 10 : 1; + m_play.Forward(step); + } + + private void PlayerForm_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { + if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Space || e.KeyCode == Keys.Escape) { + e.IsInputKey = false; + } + } + + //private void DisableHotKeysDefaults(Control.ControlCollection controls) { + // foreach (Control control in controls) { + // if (control.Equals(dgSegments)) + // continue; + // control.PreviewKeyDown += new PreviewKeyDownEventHandler(PlayerForm_PreviewKeyDown); + // if (control.HasChildren) + // DisableHotKeysDefaults(control.Controls); + // } + //} + + private void PlayerForm_Load(object sender, EventArgs e) { + //DisableHotKeysDefaults(this.Controls); + + InterceptKeys.Start(); + InterceptKeys.GlobalKeyEvent += HandleHotKey; + + playerControls.BackColor = BackColor; + playerControls.StartTC.BackColor = BackColor; + playerControls.Duration.BackColor = BackColor; + playerControls.EndTC.BackColor = BackColor; + playerControls.CurrentTC.BackColor = BackColor; + playerControls.Start.BackColor = BackColor; + playerControls.Status.BackColor = BackColor; + dgSegments.BackgroundColor = BackColor; + trafficBrowser.BackColor = BackColor; + + //Csak standalone modban + if (Model.IsMenuVisible) { + trafficBrowser.IDChangedEvent += OnSelectedIDChanged; + model.InitializeTrafficIntegration(trafficBrowser); + } + } + + private void PlayerForm_KeyDown(object sender, KeyEventArgs e) { + if (dgSegments.IsCurrentCellInEditMode) + return; + if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Space || e.KeyCode == Keys.Escape) { + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + public static bool ApplicationIsActivated() { + var activatedHandle = GetForegroundWindow(); + if (activatedHandle == IntPtr.Zero) { + return false; // No window is currently activated + } + + var procId = Process.GetCurrentProcess().Id; + GetWindowThreadProcessId(activatedHandle, out int activeProcId); + + return activeProcId == procId; + } + + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] + private static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int GetWindowThreadProcessId(IntPtr handle, out int processId); + + private bool HandleHotKey(Keys keyCode) { + logger.Debug("Key pressed " + keyCode); + if (!ApplicationIsActivated() || trafficBrowser.ContainsFocus || openFileDialogOpened || dgSegments.IsCurrentCellInEditMode || (m_play != null && !m_play.IsFullscreen() && !ContainsFocus)) + return false; + logger.Debug("Handling " + keyCode); + bool result = false; + switch (keyCode) { + case Keys.Return: + if (m_play != null && ModifierKeys.HasFlag(Keys.Shift)) { + m_play.ToggleFullscreen(); + result = true; + } + break; + case Keys.Escape: + if (m_play != null && m_play.IsFullscreen()) + m_play.ToggleFullscreen(); + else + CloseForm(); + result = true; + break; + case Keys.Left: + Rewind(); + result = true; + break; + case Keys.Right: + Forward(); + result = true; + break; + case Keys.Space: + PlayOrPause(); + result = true; + break; + //case Keys.I: + // if (m_play != null && true.Equals(Settings?.Player?.SegmentEditor)) + // SetActualPositionAsIn(); + // break; + //case Keys.O: + // if (m_play != null && true.Equals(Settings?.Player?.SegmentEditor)) + // SetActualPositionAsOut(); + // break; + } + + return result; + } + + private void OnPlayEvent() { + if (!IsHandleCreated || Disposing || IsDisposed || m_play == null) + return; + + BeginInvoke((Action)(() => { + if (Disposing || IsDisposed || m_play == null) + return; + if (m_play.State == GraphState.Completed || m_play.State == GraphState.Paused) + UpdatePlayPauseButton(); + if (!trackBarAtUser) + playerControls.TrackBar.Value = m_play.CurrentTC.ZeroBasedFrames; + playerControls.CurrentTC.Text = m_play.CurrentTC.ToString(); + string labelStatusText = playerControls.Status.Text; + m_play.stringValues.TryGetValue(m_play.State, out labelStatusText); + playerControls.Status.Text = labelStatusText; + })); + + //if (!trackBarAtUser) + // playerControls.TrackBar.Value = m_play.CurrentTC.ZeroBasedFrames; + //playerControls.CurrentTC.Text = m_play.CurrentTC.ToString(); + //string labelStatusText = playerControls.Status.Text; + //m_play.stringValues.TryGetValue(m_play.State, out labelStatusText); + //playerControls.Status.Text = labelStatusText; + + } + + private void PlayerForm_FormClosing(object sender, FormClosingEventArgs e) { + //if (m_play != null) + // m_play.Dispose(); + } + + private void ProcessCommandLine() { + String[] arguments = Environment.GetCommandLineArgs(); + if (arguments.Length > 1) { + FileInfo fi = new FileInfo(arguments[1]); + if (fi.Exists) + OpenFile(fi, false); + } + } + + private void PlayerForm_Shown(object sender, EventArgs e) { + logger.Debug("PlayerForm_Shown"); + InitializeTexts(); + if (true.Equals(Settings?.Player?.SegmentEditor) && true.Equals(Settings?.IsStandalone)) { + mainMenu.Visible = true; + } + + ProcessCommandLine(); + + if (m_play != null && true.Equals(Settings?.Player?.AutoStart)) + m_play.Play(); + } + + private void PlayerForm_FormClosed(object sender, FormClosedEventArgs e) { + InterceptKeys.Stop(); + if (m_play != null) + m_play.Dispose(); + } + private void MenuOpenFile_Click(object sender, EventArgs e) { + openFileDialogOpened = true; + if (openFileDialog.ShowDialog() == DialogResult.OK) + OpenFile(new FileInfo(openFileDialog.FileName), false); + openFileDialogOpened = false; + } + + private void OnApprove(object sender, EventArgs e) { + if (m_play == null) + return; + + try { + + m_play.Seek(0); + m_play.Dispose(); + this.Text = TITLE; + playerControls.Status.Text = Settings.Resource("NOINPUT", Resources.NOINPUT); + playerControls.StartTC.Text = new Timecode().ToString(); + playerControls.CurrentTC.Text = new Timecode().ToString(); + playerControls.EndTC.Text = new Timecode().ToString(); + playerControls.TrackBar.Value = 0; + tabEditor.SelectedIndex = 0; + model.Approve(); + trafficBrowser.ClearLookup(); + btnApprove.Text = Settings.Resource("APPROVE", Resources.APPROVE); + model.IsRedefineSegments = false; + + } catch (Exception ex) { + logger.Error(ex); + MsgBox.Error(ex.Message); + } + + } + + private void OnRedefineSegments(object sender, EventArgs e) { + openFileDialogOpened = true; + if (openFileDialog.ShowDialog() == DialogResult.OK) { + model.RedefineSegmentMediaID = Path.GetFileNameWithoutExtension(openFileDialog.FileName); + model.IsRedefineSegments = true; + OpenFile(new FileInfo(openFileDialog.FileName), true); + } + openFileDialogOpened = false; + model.IsRedefineSegments = true; + btnApprove.Text = Settings.Resource("REDEFINE", Resources.REDEFINE); + } + + private void BtnSave_Click(object sender, EventArgs e) { + settings.Segments = model.Segments; + CloseForm(); + } + + private void BtnCancel_Click(object sender, EventArgs e) { + CloseForm(); + } + public void SetVideoSpeed(float value) + { + if (m_play != null) + { + m_play.SetPlaySpeed(value); + } + } + private void OnPlaySpeedChanged(object sender, System.EventArgs e) + { + VideoSpeedTrackbar trackBar = sender as VideoSpeedTrackbar; + int currentValue = trackBar.Value; + trackBar.CurrentSpeed = trackBar.AvailableSpeeds[currentValue]; + SetVideoSpeed(trackBar.CurrentSpeed); + playerControls.PlaySpeedLabel.Text = "x" + trackBar.CurrentSpeed.ToString(); + } + private void OnAudioTrackSelected(object sender, EventArgs e) + { + int selectedTrackIndex = (sender as ComboBox).SelectedIndex; + if (m_play != null) + { + m_play.SetAudioTrack(selectedTrackIndex); + } + } + } +} diff --git a/client - Copy/DxPlay/PlayerForm.resx b/client - Copy/DxPlay/PlayerForm.resx new file mode 100644 index 00000000..8bb52e91 --- /dev/null +++ b/client - Copy/DxPlay/PlayerForm.resx @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 184, 17 + + + 412, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC8SURBVDhP1ZO9DcIwFISfqKGjpaENG4S/GZiEOiWMkR2Y + gREo2IEVaBDcOXnS48m24lRw0qf4nHeXxFLkZ3UC15GcQVAF3uAGYoM5mGF2BWTfG15LpdmdNb6Ib3ro + lkkNKtJ9fgJLY9KZrTWpIvICLZgDq+Ii8gQNsNKZjTW5ogtYAq/BRXcQDjIhza6t8UVTMOmWSX0V8aBo + joA3SmCG2RrIDDz6jTEwy46gBfBPi4WIn2M2K/9fKX8hkQ9xw2LrlhXH8QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhPYxgFVAWOUJoiUALE/4HYB8wjE8AMmQbmkQmo + asg8MI8C0ADEMIMYQQKUgG4gpoqrQABmGEXhBAMww3zBPAqBG5QeBWQBBgYAaigQp+qpuEkAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhPYxjZ4AAUUwxGDUIFFUDcD2HCATaDQGoKIEzs + oIGRkfE/kEY2DN2gfqiaBggXN+hGMwzZIJgh3RAuYQAzrB2IYQa1k2oIDMAM+wHC5BoCA2DDKDUEBkAG + UGzIkAUMDABv+SVD4UMwTwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhPYxgFFAMnKE0R8APi/0BcAuZRCKYBMdUMmwfE + VDGMEYiXADHFhoEMgrmqASRADkA2pBskQC6giiH+QEyxITDgBqVHAcWAgQEAtZ4QxOLkcD0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABvSURBVDhPYxhZwBVK4wOOUBoncAPi/0DcDuZhByA5kBon + MA8P6AdiXIbBDAGpIQpgM4xkQ2AAZlg9EDdA2SQbAgPTgBhkAEWGgADMVRQZBDME5C2yvQYzhKLAxmYI + DBBtGFUTJDFZhBg1wwMwMAAAvx8nVwi8b+UAAAAASUVORK5CYII= + + + + 517, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo + CAAAAk1TRnQBSQFMAgEBAgEAAUABAwFAAQMBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8AiwABEwQAARMYAALv + XQAB7wIAAe9bAAHvBAAB71kAAe8CAALvAgAB71cAAfICAAHvAgAB7wIAAe9XAALvBAAB7wIAAe84AAHx + AQ4IAAEOAfAZAAHvAgAB7zcAAbwKAAG8GgAB7wEAAe84AAHvCAAB7xwAAfI6AAHvBgAB71kAAQcEAAEH + WwABBwIAAQddAAHyAfG4AAETDAABE1IAARMMAAEU/wDOAAFCAU0BPgcAAT4DAAEoAwABYAMAARgDAAEB + AQABAQUAASABARYAA/8BAAb/BgAG/wYABv8GAAb/BgAB/wGBAv8B/gF/BgAB/wGBAv8B/AE/BgAB/wGB + Av8B+AEfBgAB/wGBAv8B8AEPBgAB/wGBAf8BwAEhAYcGAAH/AYEB/wHAATMBwwYAAfwBAAE/Av8B4QYA + AfwBAAE/Av8B8QYAAf4BAAF/AcABAwH7BgAB/wEAAf8BwAEDAf8GAAH/AYEE/wYAAf8BwwT/BgAB/wHn + Af8BwAEDAf8GAAP/AcABAwH/BgAB+AEAAR8D/wYAAfgBAAEfA/8GAAb/BgAG/wYABv8GAAb/BgAL + + + + + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAJpJREFUaEPt + 1zEKwzAAQ1Efp0uWnq17UujWm3YIgR6gkWi92VtDLPgPBCGTBAE7BQAAAH/zUObvY56n8vnl5hdJ7kot + HzniorwURpzNI1YlesSkMGIEHrEp0SOuCiNG4BFvJXZEb8CiDK/3CfnuNDzKn6V3BsSUb53ClD9a7yYa + U771LxBR3nwgxZavXDi2fOXiseUBAACylLIDyDZ2w7cTLqQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAVJJREFUSEvt + 008rBVEYx/FJ6i5QFG7CG7AnL0A2bNS9W0VWLCiXhSwUindgK/begJWNmw0pWd0FKzellJX/3980z22c + Zg5z3QV1f/VZPOecec7MnJmgmX+RIezhEk/4wD12MIhfZQlqmOYZJdSVFajJOw4xjm50YhgHsI32kSlj + UOMXFDSQkiJskzkN+NKCaZzhFbpoHd9lG1pbCauU9OICdjdyg1bEsxGJpw12+CMacKMF19CCW8ygHW7U + 2DZ3N7HzeMQRdF61rEKTesQODSQk3tzEN5mHO7+LMOfQQNphJjU37pN0QZ/2GzQ/ivBbVpFX4Ym+d2u8 + rAFPFqF1el21AxpQ4UmWDXSzWldVUY4KHa4vWTbog9bp5oPZqHiAJhqRNajniQr9YKfRwB0m0YN60o9N + qJdMIIwmrmATjbCFL8lhAfofki74qWNMoZk/kSD4BI3xj2R8oQqYAAAAAElFTkSuQmCC + + + + 302, 17 + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARFBeAERQXgBEUF4dRFBehEJO + XNtBTVv6QU1b+kJOXNpEUF6DRFBeHURQXgBEUF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARFBeAERQXgBEUF4MRFBeWkJO + XMlFUV/8X2t4/3uGk/97hpP/X2t4/0VRX/xCTlzJRFBeWkRQXgxEUF4ARFBeAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERQXgBEUF4ERFBeP0NP + XbBCTlz3WmVz/56ntf/Gztn/t73H/7i+x//Gztr/nae0/1plc/9CTlz3Q09dsERQXj5EUF4ERFBeAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERQXgBEUF4BRFBeJ0NP + XZJCTlzsT1to/4qUof/Fzdn/qa+2/11fYf89PT7/QEBB/2BiZP+qr7f/xM3Z/4mTof9PWmj/Qk5c7ENP + XZFEUF4mRFBeAURQXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERQXgBEUF4ARFBeFURQ + XnJCTlzbSFRh/3aBjv+7xND/ucDJ/21vc/82Njf/Ly8v/zU1Nf81NTX/MTAw/zg3N/9ucHT/usDJ/7vE + 0P91gI7/SFRh/0JOXNtEUF5xRFBeFURQXgBEUF4AAAAAAAAAAAAAAAAAAAAAAAAAAABEUF4ARFBeCERQ + XlNCTlzERFBe/GRwff+rtcL/xczW/4SIjf8/QED/LS0t/zAwMP81NTX/OTo6/zc3N/8zMzP/MTEx/y8u + Lv9CQkP/h4qP/8XM1/+rtMH/ZG99/0RQXvtCTlzERFBeUkRQXghEUF4AAAAAAAAAAAAAAAAARFBeAERQ + Xg9EUF6RQk5c9VZicP+Yoq//x8/b/5ufpv9PUFH/MTEx/y8vL/8yMjL/Nzc3/zo6Ov86Ozv/Ojo6/zg4 + OP80NDT/MjIy/zQ0M/81NTT/UlNU/52hqP/Iz9v/mKKv/1Zib/9CTlz0RFBekERQXg9EUF4AAAAAAERQ + XgBEUF4CRFBegURQXvx5hJH/w8vY/7O4wf9naWz/Ozs7/zc2Nv83Nzf/OTk5/zk5Of85OTr/Ojo6/zo6 + Ov85OTn/Ojo6/zo6Ov83Nzf/Nzc2/zY2Nf80NDP/ODg4/2NlZ/+vtb3/wsvX/3iDkP9EUF78RFBegERQ + XgJEUF4ARFBeAERQXjBCTlzmbnmG/8nR3P+Dhov/SUlJ/z8+Pv8/Pz//Pj4+/0BAQP9HRkb/QkJC/zo6 + Ov85OTr/Ojo6/zg4OP85OTn/Pj0+/0dGRv9EQ0P/QD8//zw8O/85OTj/NDQ0/zs8PP99gYX/ydHc/255 + hv9CTlzlRFBeL0RQXgBFUV8AQ09ddEhTYf+wucb/lZmf/z8/P/9CQkL/QkJC/z8/P/8/Pz//R0ZH/0lI + Sf9IR0f/QkJC/zo6O/84ODj/NjY2/zk5Of9GRUX/S0pK/0hHR/9HRkb/RERE/0JCQv9BQED/Pj4+/z8+ + P/+WmqD/r7nF/0dTYf9DT11yRVFfAB8tPwBDT12XU19t/8PM2P9oaWz/QD8//0RERP9DQkL/SUlK/0pK + S/9CQkL/SEhI/0hHR/9ISEj/QkJC/0NERf87PDz/Ojo6/0pJSf9KSkr/SEhI/0dGR/9PT1D/REVF/z8/ + P/9JSEn/SEdI/25vc//DzNj/U15s/0JPXZY3QlMA////AENPXZxWYW//xMzX/2NkZ/9CQUH/RURF/0pK + S/+prrb/uL7H/01OT/9GRkb/SEdH/0dGRv9TU1T/s7jB/6yxuv9FRkf/R0dH/0pKSv9HR0f/WFla/7zC + y/+iqK//Q0ND/0pJSf9JSEn/amtt/8TM1/9VYW7/Q09dmgAAAAD///8AQ09dnFZhb//EzNj/ZWZp/0NC + Qv9GRUX/VlZY/8zT3v/b4+//XV5h/0ZFRf9IR0j/RUVE/11eX//V3ej/0tnl/1FSVP9FRUX/SklK/0dG + R/9naGr/3eTw/8jP2v9MTU7/SUlJ/0lISf9qam3/xMzX/1Vhbv9DT12aAAAAAP///wBDT12cVmFv/8TM + 2P9oaWz/RURE/0pJSv9ZWlv/y9Ld/9nh7f9dX2H/RkVG/0lISf9FRET/Xl5g/9bd6P/T2ub/VVZY/0ZF + Rf9KSUn/SEdH/2doa//b4+//x87Z/01NTv9KSUn/SklJ/2prbv/EzNf/VWFu/0NPXZoAAAAA////AENP + XZxWYW//xMzY/2prbv9JSUn/TU1N/1paXP/L0t3/2eHt/11fYf9HRkf/SklK/0hHR/9WVlb/r7O7/62y + uf9SUlP/SUlJ/0lJSf9IR0j/aGlr/9vj7//Hztn/TU5O/0pJSf9KSkr/amtu/8TM1/9VYW7/Q09dmgAA + AAD///8AQ09dnFZhb//EzNj/bG1v/0xLS/9NTU3/Wltc/8vS3f/Z4e3/XmBi/0hISP9KSUr/SEdH/0lJ + Sv9SU1T/UVFS/0ZGRv9CQkL/Q0JC/0ZFRf9pamz/2+Pv/8fO2f9NTk//SklJ/0pKSv9rbG7/xMzX/1Vh + bv9DT12aAAAAAP///wBDT12cVmFv/8TM2P9sbW//TEtL/01NTf9aW1z/y9Ld/9rh7f9cXmD/SEhI/2tt + b/+VmqD/srjB/77Ezv++xM7/sba//5CUmv9fYWP/Pz8//2NkZv/b4+//x87Z/01OT/9LSkv/TEtL/21u + cP/EzNj/VWFu/0NPXZoAAAAA////AENPXZxWYW//xMzY/21tcP9MS0v/TU1N/1pbXP/L0t3/2eHt/3R3 + e/+ip67/2eHt/+fw/f/n7/z/5Oz5/+Ts+f/m7/z/5+/9/9ff6/+doqn/c3Z6/9rh7f/Hztn/Tk9Q/0xL + TP9OTU3/b3By/8TM2P9VYW7/Q09dmgAAAAD///8AQ09dnFZhb//EzNj/bm9x/01MTP9NTUz/Wlpb/8vR + 3P/h6fb/1Nzn/+bu+//a4u7/sba//42Qlv+Bg4j/gYOH/42Qlf+zuMD/2+Pv/+bu+//U2+b/4en2/8fO + 2P9OT1D/TExM/09OTv9vcHL/xMzY/1Vhbv9DT12aAAAAAP///wBDT12cVmFv/8TN2P9vcHL/T05O/09O + Tv9fYGH/zNLd/+Xt+v/k7fr/vsTO/3V3e/9SUVL/TEtM/0xLTP9NTE3/U1JS/11dXf9/gYT/wsjR/+Xt + +v/l7fv/x87Y/09QUf9OTU3/T05O/29wcv/EzNj/VWFu/0NPXZoAAAAA////AENPXZxWYW//xc3Y/29w + c/9SUVH/WVhY/3h4ef/O1d//4+r3/6mutf9cXF3/Tk1O/1BPUP9PTk7/UE9Q/1ZVVv9aWlr/W1pa/1lZ + Wf9naGn/rbG5/+Pr9//Ey9X/U1NU/09OTv9PTk3/b29y/8TM2P9VYW7/Q09dmgAAAAAlMkQAQ09dl1Nf + bP/EzNj/fH6B/1xbXP9mZmb/fn5+/5eZnf+anaL/a2tr/1xbW/9VVFX/UVBR/1BPUP9WVlb/WVlZ/1pZ + Wf9aWlr/XFxc/1paWv9fX1//lJec/46QlP9hYGD/YGBg/15dXf9/gIP/xMzY/1JebP9CT12VOURUAEVR + XwBDT11xR1Nh/663xP+prbP/YWFh/3Fxcf+AgID/eHh4/3Bvb/9ubW3/ampq/2RkZP9gX2D/Xl1d/1lY + WP9ZWFj/WVlZ/1taWv9eXl7/XVxc/2VkZP91dHT/c3Jy/2tra/9tbW3/cG9v/7C0u/+tt8T/R1Nh/0NP + XXBFUV8ARFBeAERQXi5CTlzka3aE/8vT3/+eoqf/gYKC/39/f/99fX3/dHR0/3BwcP9sbGz/aGho/3Jy + cv94eHj/ZmZm/1pZWf9ZWFj/XFxc/2FhYf9ra2v/eXh4/3x7e/93dnb/aWho/3Jyc/+jpqv/zNTg/2t2 + g/9CTlzjRFBeLURQXgBEUF4ARFBeAURQXnxEUF77dYCN/8LK1//Iztf/nZ+i/4GBgf93d3f/c3Jz/29u + b/9ubm7/fX1+/39/f/96env/bGxs/1xbW/9gYGD/cHBw/3l5ef96enr/enl5/3t6e/+OkJP/wsjQ/8HK + 1v90f4z/RFBe+0RQXntEUF4BRFBeAAAAAABEUF4ARFBeDURQXopCTlzyVF9t/5Kdqv/L09//vsPL/46P + kv91dHX/cXBw/3l5ef+EhIX/gYGC/35+f/98fH3/f35//4GBgf97enr/eHh4/3l4ef+NjpH/vMHI/8rS + 3v+SnKr/U19t/0JOXPJEUF6KRFBeDURQXgAAAAAAAAAAAAAAAABEUF4ARFBeB0RQXkxDT12+Q09d+mBs + ef+msL3/ztXh/62xt/+BgoP/hISE/4eHiP+FhYX/ioqL/5mZmf+srKz/rq6u/5mZmf+PkJH/r7K4/87V + 4P+msL3/YGx5/0NPXfpDT129RFBeS0RQXgZEUF4AAAAAAAAAAAAAAAAAAAAAAAAAAABEUF4ARFBeAERQ + XhJEUF5qQk5c1kdSYP5xfIn/t8HN/83T3f+tsLX/lJSV/5ycnP+oqKj/rKur/7W1tf+6urv/wMPH/9Ta + 5f+3wM3/cXuJ/0ZSYP5CTlzWRFBeakRQXhFEUF4ARFBeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAARFBeAERQXgBEUF4iQ09dikJOXOlNWWb/hI6c/8XO2v/R19//vL7B/7Cwsf+xsbL/xsjM/9jd + 5//Gz9v/g46b/01YZv9CTlzoQ09eikRQXiJEUF4ARFBeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAERQXgBEUF4DRFBeOUNPXalCTlz1V2Jw/5iir//N1eH/1Nvl/9Xb + 5v/O1uL/l6Gu/1ZicP9CTlz1Q09dqURQXjhEUF4DRFBeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERQXgBEUF4ARFBeCkRQXlRCTlzERFBe+1tn + df90f43/dH+N/1tndP9EUF77Qk5cw0RQXlNEUF4JRFBeAERQXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEUF4ARFBeAERQ + XhlEUF57Qk5c00FNW/ZBTVv2Qk5c0kRQXntEUF4ZRFBeAERQXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//AP///AA///AAD//AAAP/gAAB/gAAAHwAAAA4AAAAGAAAABgAAAAYAA + AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAA + AAPgAAAH+AAAH/4AAH//AAD//8AD///wD/8= + + + \ No newline at end of file -- 2.54.0