From 5f150f0b450cf47c8659a27fad37a2f4c6862449 Mon Sep 17 00:00:00 2001 From: niksedk Date: Tue, 22 Jun 2021 20:19:00 +0200 Subject: [PATCH] Work on ASSA set pos - thx Leon :) --- src/ui/Forms/Assa/SetPosition.Designer.cs | 210 +++++++++++++++++++++- src/ui/Forms/Assa/SetPosition.cs | 194 ++++++++++++++++++-- src/ui/Forms/Main.Designer.cs | 2 +- src/ui/Forms/Main.cs | 9 +- src/ui/Forms/Main.resx | 120 ++++++------- 5 files changed, 458 insertions(+), 77 deletions(-) diff --git a/src/ui/Forms/Assa/SetPosition.Designer.cs b/src/ui/Forms/Assa/SetPosition.Designer.cs index d0ae6166a..74d6bd424 100644 --- a/src/ui/Forms/Assa/SetPosition.Designer.cs +++ b/src/ui/Forms/Assa/SetPosition.Designer.cs @@ -43,9 +43,26 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.labelStyleAlignment = new System.Windows.Forms.Label(); this.labelVideoResolution = new System.Windows.Forms.Label(); this.labelCurrentTextPosition = new System.Windows.Forms.Label(); + this.numericUpDownRotateX = new System.Windows.Forms.NumericUpDown(); + this.labelRotateX = new System.Windows.Forms.Label(); + this.numericUpDownRotateY = new System.Windows.Forms.NumericUpDown(); + this.labelRotateY = new System.Windows.Forms.Label(); + this.numericUpDownRotateZ = new System.Windows.Forms.NumericUpDown(); + this.labelRotateZ = new System.Windows.Forms.Label(); + this.panelAdvanced = new System.Windows.Forms.Panel(); + this.labelDistortX = new System.Windows.Forms.Label(); + this.numericUpDownDistortX = new System.Windows.Forms.NumericUpDown(); + this.labelDistortY = new System.Windows.Forms.Label(); + this.numericUpDownDistortY = new System.Windows.Forms.NumericUpDown(); this.groupBox1.SuspendLayout(); this.groupBoxPreview.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPreview)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRotateX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRotateY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRotateZ)).BeginInit(); + this.panelAdvanced.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDistortX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDistortY)).BeginInit(); this.SuspendLayout(); // // groupBox1 @@ -53,9 +70,9 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.groupBox1.Controls.Add(this.radioButtonClipboard); this.groupBox1.Controls.Add(this.radioButtonSelectedLines); - this.groupBox1.Location = new System.Drawing.Point(715, 12); + this.groupBox1.Location = new System.Drawing.Point(763, 12); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(246, 75); + this.groupBox1.Size = new System.Drawing.Size(195, 75); this.groupBox1.TabIndex = 1; this.groupBox1.TabStop = false; this.groupBox1.Text = "Apply to"; @@ -181,11 +198,180 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.labelCurrentTextPosition.TabIndex = 10; this.labelCurrentTextPosition.Text = "Current text position:"; // + // numericUpDownRotateX + // + this.numericUpDownRotateX.DecimalPlaces = 1; + this.numericUpDownRotateX.Location = new System.Drawing.Point(91, 9); + this.numericUpDownRotateX.Maximum = new decimal(new int[] { + 360, + 0, + 0, + 0}); + this.numericUpDownRotateX.Minimum = new decimal(new int[] { + 360, + 0, + 0, + -2147483648}); + this.numericUpDownRotateX.Name = "numericUpDownRotateX"; + this.numericUpDownRotateX.Size = new System.Drawing.Size(52, 20); + this.numericUpDownRotateX.TabIndex = 18; + this.numericUpDownRotateX.ValueChanged += new System.EventHandler(this.numericUpDownRotateX_ValueChanged); + // + // labelRotateX + // + this.labelRotateX.AutoSize = true; + this.labelRotateX.Location = new System.Drawing.Point(15, 11); + this.labelRotateX.Name = "labelRotateX"; + this.labelRotateX.Size = new System.Drawing.Size(70, 13); + this.labelRotateX.TabIndex = 17; + this.labelRotateX.Text = "Rotate X axis"; + // + // numericUpDownRotateY + // + this.numericUpDownRotateY.DecimalPlaces = 1; + this.numericUpDownRotateY.Location = new System.Drawing.Point(91, 34); + this.numericUpDownRotateY.Maximum = new decimal(new int[] { + 360, + 0, + 0, + 0}); + this.numericUpDownRotateY.Minimum = new decimal(new int[] { + 360, + 0, + 0, + -2147483648}); + this.numericUpDownRotateY.Name = "numericUpDownRotateY"; + this.numericUpDownRotateY.Size = new System.Drawing.Size(52, 20); + this.numericUpDownRotateY.TabIndex = 20; + this.numericUpDownRotateY.ValueChanged += new System.EventHandler(this.numericUpDownRotateX_ValueChanged); + // + // labelRotateY + // + this.labelRotateY.AutoSize = true; + this.labelRotateY.Location = new System.Drawing.Point(15, 36); + this.labelRotateY.Name = "labelRotateY"; + this.labelRotateY.Size = new System.Drawing.Size(70, 13); + this.labelRotateY.TabIndex = 19; + this.labelRotateY.Text = "Rotate Y axis"; + // + // numericUpDownRotateZ + // + this.numericUpDownRotateZ.DecimalPlaces = 1; + this.numericUpDownRotateZ.Location = new System.Drawing.Point(91, 60); + this.numericUpDownRotateZ.Maximum = new decimal(new int[] { + 360, + 0, + 0, + 0}); + this.numericUpDownRotateZ.Minimum = new decimal(new int[] { + 360, + 0, + 0, + -2147483648}); + this.numericUpDownRotateZ.Name = "numericUpDownRotateZ"; + this.numericUpDownRotateZ.Size = new System.Drawing.Size(52, 20); + this.numericUpDownRotateZ.TabIndex = 22; + this.numericUpDownRotateZ.ValueChanged += new System.EventHandler(this.numericUpDownRotateX_ValueChanged); + // + // labelRotateZ + // + this.labelRotateZ.AutoSize = true; + this.labelRotateZ.Location = new System.Drawing.Point(15, 62); + this.labelRotateZ.Name = "labelRotateZ"; + this.labelRotateZ.Size = new System.Drawing.Size(70, 13); + this.labelRotateZ.TabIndex = 21; + this.labelRotateZ.Text = "Rotate Z axis"; + // + // panelAdvanced + // + this.panelAdvanced.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panelAdvanced.Controls.Add(this.labelDistortX); + this.panelAdvanced.Controls.Add(this.numericUpDownDistortX); + this.panelAdvanced.Controls.Add(this.labelDistortY); + this.panelAdvanced.Controls.Add(this.numericUpDownDistortY); + this.panelAdvanced.Controls.Add(this.labelRotateX); + this.panelAdvanced.Controls.Add(this.numericUpDownRotateZ); + this.panelAdvanced.Controls.Add(this.numericUpDownRotateX); + this.panelAdvanced.Controls.Add(this.labelRotateZ); + this.panelAdvanced.Controls.Add(this.labelRotateY); + this.panelAdvanced.Controls.Add(this.numericUpDownRotateY); + this.panelAdvanced.Location = new System.Drawing.Point(458, 11); + this.panelAdvanced.Name = "panelAdvanced"; + this.panelAdvanced.Size = new System.Drawing.Size(299, 88); + this.panelAdvanced.TabIndex = 23; + // + // labelDistortX + // + this.labelDistortX.AutoSize = true; + this.labelDistortX.Location = new System.Drawing.Point(175, 11); + this.labelDistortX.Name = "labelDistortX"; + this.labelDistortX.Size = new System.Drawing.Size(47, 13); + this.labelDistortX.TabIndex = 23; + this.labelDistortX.Text = "Distort X"; + // + // numericUpDownDistortX + // + this.numericUpDownDistortX.DecimalPlaces = 2; + this.numericUpDownDistortX.Increment = new decimal(new int[] { + 5, + 0, + 0, + 131072}); + this.numericUpDownDistortX.Location = new System.Drawing.Point(231, 9); + this.numericUpDownDistortX.Maximum = new decimal(new int[] { + 3, + 0, + 0, + 0}); + this.numericUpDownDistortX.Minimum = new decimal(new int[] { + 3, + 0, + 0, + -2147483648}); + this.numericUpDownDistortX.Name = "numericUpDownDistortX"; + this.numericUpDownDistortX.Size = new System.Drawing.Size(52, 20); + this.numericUpDownDistortX.TabIndex = 24; + this.numericUpDownDistortX.ValueChanged += new System.EventHandler(this.numericUpDownRotateX_ValueChanged); + // + // labelDistortY + // + this.labelDistortY.AutoSize = true; + this.labelDistortY.Location = new System.Drawing.Point(175, 36); + this.labelDistortY.Name = "labelDistortY"; + this.labelDistortY.Size = new System.Drawing.Size(47, 13); + this.labelDistortY.TabIndex = 25; + this.labelDistortY.Text = "Distort Y"; + // + // numericUpDownDistortY + // + this.numericUpDownDistortY.DecimalPlaces = 2; + this.numericUpDownDistortY.Increment = new decimal(new int[] { + 1, + 0, + 0, + 131072}); + this.numericUpDownDistortY.Location = new System.Drawing.Point(231, 34); + this.numericUpDownDistortY.Maximum = new decimal(new int[] { + 2, + 0, + 0, + 0}); + this.numericUpDownDistortY.Minimum = new decimal(new int[] { + 3, + 0, + 0, + -2147483648}); + this.numericUpDownDistortY.Name = "numericUpDownDistortY"; + this.numericUpDownDistortY.Size = new System.Drawing.Size(52, 20); + this.numericUpDownDistortY.TabIndex = 26; + this.numericUpDownDistortY.ValueChanged += new System.EventHandler(this.numericUpDownRotateX_ValueChanged); + // // SetPosition // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(973, 734); + this.Controls.Add(this.panelAdvanced); this.Controls.Add(this.labelCurrentTextPosition); this.Controls.Add(this.labelVideoResolution); this.Controls.Add(this.labelStyleAlignment); @@ -198,7 +384,7 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.KeyPreview = true; this.MaximizeBox = false; this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(720, 545); + this.MinimumSize = new System.Drawing.Size(790, 545); this.Name = "SetPosition"; this.ShowIcon = false; this.ShowInTaskbar = false; @@ -212,6 +398,13 @@ namespace Nikse.SubtitleEdit.Forms.Assa this.groupBox1.PerformLayout(); this.groupBoxPreview.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxPreview)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRotateX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRotateY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRotateZ)).EndInit(); + this.panelAdvanced.ResumeLayout(false); + this.panelAdvanced.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDistortX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDistortY)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -231,5 +424,16 @@ namespace Nikse.SubtitleEdit.Forms.Assa private System.Windows.Forms.Label labelStyleAlignment; private System.Windows.Forms.Label labelVideoResolution; private System.Windows.Forms.Label labelCurrentTextPosition; + private System.Windows.Forms.NumericUpDown numericUpDownRotateX; + private System.Windows.Forms.Label labelRotateX; + private System.Windows.Forms.NumericUpDown numericUpDownRotateY; + private System.Windows.Forms.Label labelRotateY; + private System.Windows.Forms.NumericUpDown numericUpDownRotateZ; + private System.Windows.Forms.Label labelRotateZ; + private System.Windows.Forms.Panel panelAdvanced; + private System.Windows.Forms.Label labelDistortX; + private System.Windows.Forms.NumericUpDown numericUpDownDistortX; + private System.Windows.Forms.Label labelDistortY; + private System.Windows.Forms.NumericUpDown numericUpDownDistortY; } } \ No newline at end of file diff --git a/src/ui/Forms/Assa/SetPosition.cs b/src/ui/Forms/Assa/SetPosition.cs index 345cfa745..e3434f03d 100644 --- a/src/ui/Forms/Assa/SetPosition.cs +++ b/src/ui/Forms/Assa/SetPosition.cs @@ -30,6 +30,7 @@ namespace Nikse.SubtitleEdit.Forms.Assa private readonly string _videoFileName; private readonly VideoInfo _videoInfo; private bool _positionChanged; + private bool _loading = true; public SetPosition(Subtitle subtitle, int[] selectedIndices, string videoFileName, VideoInfo videoInfo) { @@ -50,6 +51,13 @@ namespace Nikse.SubtitleEdit.Forms.Assa groupBoxPreview.Text = LanguageSettings.Current.General.Preview; buttonOK.Text = LanguageSettings.Current.General.Ok; buttonCancel.Text = LanguageSettings.Current.General.Cancel; + + numericUpDownRotateX.Left = labelRotateX.Left + labelRotateX.Width + 3; + numericUpDownRotateY.Left = labelRotateY.Left + labelRotateY.Width + 3; + numericUpDownRotateZ.Left = labelRotateZ.Left + labelRotateZ.Width + 3; + numericUpDownDistortX.Left = labelDistortX.Left + labelDistortX.Width + 3; + numericUpDownDistortY.Left = labelDistortY.Left + labelDistortY.Width + 3; + UiUtil.FixLargeFonts(this, buttonOK); if (_videoInfo == null) @@ -85,8 +93,13 @@ namespace Nikse.SubtitleEdit.Forms.Assa UiUtil.OpenUrl("https://www.nikse.dk/SubtitleEdit/AssaOverrideTags#pos"); e.SuppressKeyPress = true; } + else if (e.KeyData == Keys.F2) + { + panelAdvanced.Visible = !panelAdvanced.Visible; + VideoLoaded(null, null); + } - if (e.Modifiers == Keys.Alt || e.Modifiers == Keys.Control) + if (e.Modifiers == Keys.Alt || e.Modifiers == Keys.Control && !_updatePos) { var v = e.Modifiers == Keys.Alt ? 1 : 10; @@ -95,24 +108,28 @@ namespace Nikse.SubtitleEdit.Forms.Assa _y -= v; e.SuppressKeyPress = true; VideoLoaded(null, null); + labelCurrentTextPosition.Text = string.Format(LanguageSettings.Current.AssaSetPosition.CurrentTextPositionX, $"{_x},{_y}"); } else if (e.KeyCode == Keys.Down && _x != -1 && _y != -1) { _y += v; e.SuppressKeyPress = true; VideoLoaded(null, null); + labelCurrentTextPosition.Text = string.Format(LanguageSettings.Current.AssaSetPosition.CurrentTextPositionX, $"{_x},{_y}"); } else if (e.KeyCode == Keys.Left && _x != -1 && _y != -1) { _x -= v; e.SuppressKeyPress = true; VideoLoaded(null, null); + labelCurrentTextPosition.Text = string.Format(LanguageSettings.Current.AssaSetPosition.CurrentTextPositionX, $"{_x},{_y}"); } else if (e.KeyCode == Keys.Right && _x != -1 && _y != -1) { _x += v; e.SuppressKeyPress = true; VideoLoaded(null, null); + labelCurrentTextPosition.Text = string.Format(LanguageSettings.Current.AssaSetPosition.CurrentTextPositionX, $"{_x},{_y}"); } } } @@ -132,6 +149,13 @@ namespace Nikse.SubtitleEdit.Forms.Assa { var styleToApply = $"{{\\pos({_x},{_y})}}"; + var advancedVisible = panelAdvanced.Visible; + if (advancedVisible) + { + styleToApply = AddAdvancedTags(styleToApply); + } + + if (radioButtonClipboard.Checked) { Clipboard.SetText(styleToApply); @@ -150,9 +174,12 @@ namespace Nikse.SubtitleEdit.Forms.Assa var p = UpdatedSubtitle.Paragraphs[i]; - // remove old position tags - p.Text = Regex.Replace(p.Text, @"{\\pos(.*)}", string.Empty); - p.Text = Regex.Replace(p.Text, @"\\pos(.*)", string.Empty); + RemoveOldPosTags(p); + + if (advancedVisible) + { + RemoveAdvancedTags(p); + } if (p.Text.StartsWith("{\\", StringComparison.Ordinal) && styleToApply.EndsWith('}')) { @@ -165,6 +192,12 @@ namespace Nikse.SubtitleEdit.Forms.Assa } } + private static void RemoveOldPosTags(Paragraph p) + { + p.Text = Regex.Replace(p.Text, @"{\\pos\([\d,\.-]*\)}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\pos\([\d,\.-]*\)", string.Empty); + } + private int[] GetIndices(Subtitle subtitle) { return _selectedIndices; @@ -237,17 +270,24 @@ namespace Nikse.SubtitleEdit.Forms.Assa var subtitle = new Subtitle(); var indices = GetIndices(subtitle); var styleToApply = $"{{\\pos({_x},{_y})}}"; + var p = indices.Length > 0 ? new Paragraph(_subtitleWithNewHeader.Paragraphs[indices[0]]) : new Paragraph(Configuration.Settings.General.PreviewAssaText, 0, 1000); - // remove old position tags - p.Text = Regex.Replace(p.Text, @"{\\pos(.*)}", string.Empty); - p.Text = Regex.Replace(p.Text, @"\\pos(.*)", string.Empty); + RemoveOldPosTags(p); // remove fade tags - p.Text = Regex.Replace(p.Text, @"{\\fad(.*)}", string.Empty); - p.Text = Regex.Replace(p.Text, @"\\fade(.*)", string.Empty); + p.Text = Regex.Replace(p.Text, @"{\\fad\([\d\.,]*\)}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\fad\([\d\.,]*\)", string.Empty); + p.Text = Regex.Replace(p.Text, @"{\\fade\([\d\.,]*\)}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\fade\([\d\.,]*\)", string.Empty); + + if (panelAdvanced.Visible) + { + RemoveAdvancedTags(p); + styleToApply = AddAdvancedTags(styleToApply); + } p.Text = styleToApply + p.Text; subtitle.Paragraphs.Add(p); @@ -269,10 +309,64 @@ namespace Nikse.SubtitleEdit.Forms.Assa } } + private string AddAdvancedTags(string styleToApply) + { + if (numericUpDownRotateX.Value != 0) + { + styleToApply += $"{{\\frx{numericUpDownRotateX.Value.ToString(CultureInfo.InvariantCulture)}}}"; + } + + if (numericUpDownRotateY.Value != 0) + { + styleToApply += $"{{\\fry{numericUpDownRotateY.Value.ToString(CultureInfo.InvariantCulture)}}}"; + } + + if (numericUpDownRotateZ.Value != 0) + { + styleToApply += $"{{\\frz{numericUpDownRotateZ.Value.ToString(CultureInfo.InvariantCulture)}}}"; + } + + if (numericUpDownDistortX.Value != 0) + { + styleToApply += $"{{\\fax{numericUpDownDistortX.Value.ToString(CultureInfo.InvariantCulture)}}}"; + } + + if (numericUpDownDistortY.Value != 0) + { + styleToApply += $"{{\\fay{numericUpDownDistortY.Value.ToString(CultureInfo.InvariantCulture)}}}"; + } + + styleToApply = styleToApply.Replace("}{", string.Empty); + + return styleToApply; + } + + private static void RemoveAdvancedTags(Paragraph p) + { + p.Text = Regex.Replace(p.Text, @"{\\frx[\d+\.-]*}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\frx[\d+\.-]*\\", "\\"); + p.Text = Regex.Replace(p.Text, @"\\frx[\d+\.-]*}", "}"); + + p.Text = Regex.Replace(p.Text, @"{\\fry[\d+\.-]*}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\fry[\d+\.-]*\\", "\\"); + p.Text = Regex.Replace(p.Text, @"\\fry[\d+\.-]*}", "}"); + + p.Text = Regex.Replace(p.Text, @"{\\frz[\d+\.-]*}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\frz[\d+\.-]*\\", "\\"); + p.Text = Regex.Replace(p.Text, @"\\frz[\d+\.-]*}", "}"); + + p.Text = Regex.Replace(p.Text, @"{\\fax[\d+\.-]*}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\fax[\d+\.-]*\\", "\\"); + p.Text = Regex.Replace(p.Text, @"\\fax[\d+\.-]*}", "}"); + + p.Text = Regex.Replace(p.Text, @"{\\fay[\d+\.-]*}", string.Empty); + p.Text = Regex.Replace(p.Text, @"\\fay[\d+\.-]*\\", "\\"); + p.Text = Regex.Replace(p.Text, @"\\fay[\d+\.-]*}", "}"); + } + private void ApplyCustomStyles_FormClosing(object sender, FormClosingEventArgs e) { _closing = true; - Application.DoEvents(); Configuration.Settings.Tools.AssaSetPositionTarget = radioButtonClipboard.Checked ? "Clipboard" : "SelectedLines"; _mpv?.Dispose(); } @@ -284,7 +378,6 @@ namespace Nikse.SubtitleEdit.Forms.Assa return; } - if (_updatePos && (_x != _tempX || _y != _tempY)) { _x = _tempX; @@ -311,6 +404,7 @@ namespace Nikse.SubtitleEdit.Forms.Assa } GeneratePreviewViaMpv(); + _loading = false; } private void ShowCurrentPosition() @@ -322,7 +416,7 @@ namespace Nikse.SubtitleEdit.Forms.Assa } var p = _subtitleWithNewHeader.Paragraphs[indices[0]]; - var match = Regex.Match(p.Text, @"\\pos(.*)"); + var match = Regex.Match(p.Text, @"\\pos\([\d\.,-]*"); if (match.Success) { var arr = match.Value.Split('(', ')', ','); @@ -337,6 +431,71 @@ namespace Nikse.SubtitleEdit.Forms.Assa } } } + + match = Regex.Match(p.Text, @"\\frx[\d\.-]*"); + if (match.Success) + { + var arr = match.Value.Split('x', '\\', '}'); + if (arr.Length > 2) + { + if (decimal.TryParse(arr[2], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var x)) + { + numericUpDownRotateX.Value = x; + } + } + } + + match = Regex.Match(p.Text, @"\\fry[\d\.-]*"); + if (match.Success) + { + var arr = match.Value.Split('y', '\\', '}'); + if (arr.Length > 2) + { + if (decimal.TryParse(arr[2], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var x)) + { + numericUpDownRotateY.Value = x; + } + } + } + + match = Regex.Match(p.Text, @"\\frz[\d\.-]*"); + if (match.Success) + { + var arr = match.Value.Split('z', '\\', '}'); + if (arr.Length > 2) + { + if (decimal.TryParse(arr[2], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var x)) + { + numericUpDownRotateZ.Value = x; + } + } + } + + match = Regex.Match(p.Text, @"\\fax[\d\.-]*"); + if (match.Success) + { + var arr = match.Value.Split('x', '\\', '}'); + if (arr.Length > 2) + { + if (decimal.TryParse(arr[2], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var x)) + { + numericUpDownDistortX.Value = x; + } + } + } + + match = Regex.Match(p.Text, @"\\fay[\d\.-]*"); + if (match.Success) + { + var arr = match.Value.Split('y', '\\', '}'); + if (arr.Length > 2) + { + if (decimal.TryParse(arr[2], NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var x)) + { + numericUpDownDistortY.Value = x; + } + } + } } private void ShowStyleAlignment() @@ -381,5 +540,16 @@ namespace Nikse.SubtitleEdit.Forms.Assa var newWidth = pictureBoxPreview.Height * aspectRatio; Width += (int)(newWidth - pictureBoxPreview.Width); } + + private void numericUpDownRotateX_ValueChanged(object sender, EventArgs e) + { + if (_loading || !panelAdvanced.Visible) + { + return; + } + + _positionChanged = true; + VideoLoaded(null, null); + } } } diff --git a/src/ui/Forms/Main.Designer.cs b/src/ui/Forms/Main.Designer.cs index 2038a681d..0cb7314c8 100644 --- a/src/ui/Forms/Main.Designer.cs +++ b/src/ui/Forms/Main.Designer.cs @@ -2564,7 +2564,7 @@ namespace Nikse.SubtitleEdit.Forms this.toolStripMenuItemSelectedLines, this.toolStripMenuItemGoogleMicrosoftTranslateSelLine}); this.contextMenuStripListView.Name = "contextMenuStripListView"; - this.contextMenuStripListView.Size = new System.Drawing.Size(285, 754); + this.contextMenuStripListView.Size = new System.Drawing.Size(285, 732); this.contextMenuStripListView.Closed += new System.Windows.Forms.ToolStripDropDownClosedEventHandler(this.MenuClosed); this.contextMenuStripListView.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripListViewOpening); this.contextMenuStripListView.Opened += new System.EventHandler(this.MenuOpened); diff --git a/src/ui/Forms/Main.cs b/src/ui/Forms/Main.cs index 8809de949..dfae6f1d9 100644 --- a/src/ui/Forms/Main.cs +++ b/src/ui/Forms/Main.cs @@ -31213,9 +31213,16 @@ namespace Nikse.SubtitleEdit.Forms private void setPositionToolStripMenuItem_Click(object sender, EventArgs e) { + if (string.IsNullOrEmpty(VideoFileName)) + { + MessageBox.Show(LanguageSettings.Current.General.NoVideoLoaded); + return; + } + using (var form = new SetPosition(_subtitle, SubtitleListview1.GetSelectedIndices(), VideoFileName, _videoInfo)) { - if (form.ShowDialog(this) != DialogResult.OK) + var result = form.ShowDialog(this); + if (result != DialogResult.OK) { return; } diff --git a/src/ui/Forms/Main.resx b/src/ui/Forms/Main.resx index 61bc5e51a..f1bec5632 100644 --- a/src/ui/Forms/Main.resx +++ b/src/ui/Forms/Main.resx @@ -464,75 +464,75 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAOhSURBVFhH7VdJaBRBFG2XuIKKIWokmaru1hiDoiKCIBgC - IoYEBC8qAVGEoGQmXd1BCYiMJxEPHgTBBfFklukm0UAQ4iHRmyIRUSSI4tI9IxrEg0YJYtr/9Uc7VVlm - stx88Bi6/6v6j1/Vv2q0/5gMHlZXnfNt0R5l2hbXQ02bRZKZg8dYaXJ9yZBvJcK0I0ZSiN0kmzm4Zuyy - Z/Kwd99exUDgWHdINjNoK12df9PkA2igc9MGxcA1RwxlGhrKSD798Ex2CpMP81nNQcVExhFXST69SJWV - zWsxeSZq4O72bYqBtHP0WyaRKKBh04eUyQ9FkyNbzKIPgW09lU1AFU7TsOmDp/Ne2YBrsjOw8Q7LBgLL - ev8ikZhPQ6cOWPsKOTnwe5Our8REmFAxYdcfoeFTR8pgHaMYuE5hLYCSywagMT2h8NTQrOslkOxnNHnS - 5EOtur6RJBpuOtx8solAiF0kmTxcg1+KJkfC2ndR+C+gClcVA47VSeHJobWoaLln8K+KAYNVkuQvsAFh - I4oauGZb8OyUkiR3eAZrVJPz52MdOtiKowaQUJnLFM4NV7ZuzXN1HsgGgLUkUYCHkWygzxEDQWNdPkmy - R0qP1cjJXcb6YVkWkkQBViawhdKYoDKnSJI9XJM/kg3cYOxHs8k/j8fu8vJB1UBd5lkyOY+mnhge5zvl - 5Nmyba0Zvqk7PsIA0retQzT9xEjpvH20ybPlg6o9ioG0ZfXS9OOjbU2xCeUf0Xhy5e2ydaEv6hUTvp2o - oDRjw9XZRWXSWOwj9IPHufDpwf2BbCBt13dQmtHRztgyuPN9kQ24ul5NkqzxzrY3yo0JNujPwHFKSKIC - nJ+Qk3tmcV9S02aTJCf4QnRFDSB9y7pE4ZEAd3Mh2VvFgM6OkyRnZBqsStnAy2PHvkJ1lpPkH+DIPaAk - N/injsLCRSTJGWEYzvId8Vw2Ae8aSfIPcN1+IBuAvn+WwpNGpkHUygYCJx6EtbV5JMG1j+2Qk3sFBYO3 - 1hWvJkkUeBCNRQVQ7oWv4/F+2cQ7R9SQ5PfmOwl3vm7XiPWkjNi9VoPdb9LZeQgtBi4B4pqtABYCi4Ax - IANy+sVnfI9x1KF+KRDHL3hVH7d9O34PzoQeuCl1I+EyewFiCnC3Y2nwwBlOvBKIk+tA/ITwjwfehjYD - t9AvPuN7jBvAYuAqIJ6COA/uIzwLcvqahsuKg+YA0RhOgsQb74II8RmJMdTNBeI45KhL8wea9gvZg00l - kkBKxwAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAOgSURBVFhH7VddSBRRFJ5+7BcqDCtD996ZKbWlqJAgCAoh + oigIeikRpAikcNe5M1IIEdtTRA89BEEG0VOaO4OWIEE9WL0VYUQiEkU/M7tREj2kRURO59SxxnvVdv15 + 64OPZeZ8956Pc++ce1f7j8ng0b6953xbdESZscXVUNNmkWTm4DFWkVpXNuxbyTDjiNEUYhfJZg6uGbvs + mTzsObBfMRA41m2SzQzaK1Yvv27yITTQtXG9YqDZEcPZxsY4yacfnslOYfIR9tZUKyayjrhC8ulFOh6f + d8Pk2aiBu1u3KAYyztEv2WSyiIZNH9Imr40mR94wS94HtvVMNgFVOE3Dpg+ezntkA67JzsDGOywbCCzr + 3fNkcj4NnTpg7avk5MCvLbq+EhNhQsWE3XCEhk8daYN1jmHgKoW1AEouG4DG9JTCU0OrrpdBsh/R5CmT + D7fp+gaSaLjpcPPJJgIhdpJk8nANfimaHAlrf4fCfwBVuKIYcKwuCk8ObSUlhZ7BBxUDBttDkj/ABoSN + KGqg2bbg2akgSf7wDNakJud94x062IqjBpBQmcsUzg/NlZUFrs4D2QCwjiQK8DCSDfQ7Yihoql9OktyR + 1mM1cnKXsQFYloUkUYCVCWyhNCaozCmS5A7X5I9lA9cY+95q8k8TsXvHjm+qgfpsbyo1j6b+NzzOt8vJ + c2X7WjN8XX98lAGkb1u1NP2/kdZ5x1iT58qHe3crBjKW1UPTT4z2NaUmlH9U48mXt+LloS8aFBO+nayi + NOPD1dlFZdJY7AP0gyf58Fn1wUA2kLEbOinN2OhgbBnc+T7LBlxd30eSnPHWtjfIjQk26I/AccpIogKc + n5CTe2Zpf0rTZpMkL/hC3IkaQPqWdYnCowHu5kKyN4oBnR0nSd7INlp7ZAMvjh0bhOoUkuQv4Mg9pCQ3 + +MfO4uJFJMkbYRjO8h3RJ5uAd00k+Qu4bj+UDUDfP0vhSSPbKOpkA4GTCMK6ugKS4NrHtsnJvaKibzfL + S1eTJAo8iMajAij3wleJxIBs4q0jakjya/OdhDtft2vE7qWN2P02gz1o0dl5CC0GLgHimq0AFgNLgDEg + A3L6xWd8j3HUoX4pEMcveNmQsH07cR/OhHtwU+pGwmX2AsQU4G7H0uCBM5J4JRAn14H4CeEfD7wNbQJu + pl98xvcYN4ClwFVAPAVxHtxHeBbk9TWNlBUHzQGiMZwEiTfeBRHiMxJjqJsLxHHIMZfmNzTtJ5ObTR3V + 76r1AAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQZSURBVFhH1VdbaBNZGI5aVt1lYVHwwlYzSYSiIoioWHel - VXHBBdEnH0SoBUUR4kwj2odqwwpiH7wgupVq3a661trEttiqpbaV1tYq9qIx1jZN0iaTSdrmQR8WfFB7 - /L/JtJQ4uTF58YOPM/9/zvn/79wT3XcJxtgMKRQqfN7X737x+s2wJIX+It8spVobQqEQ5/X5q98Oep7E - pMv7sqK+jV2518yu1rWystoW1j/k7lNtq9AzItaEw+EsJU1siJL0j7W8jhWW2uLywp1GRmIvEE+V2ptV - 20znyas1DCKUNLFBjWrVAkSz5FYDE0WxTgwGK8+TGLU20cRMKGliI1kB4Ol/69mZmw2qdWpMSYDtcRd7 - 1NGTFiJWygJKaGRnbz9MCxErZQHY5VVNz9JCxEpZQI/TNTA2NrY6HUSslAV0v3X1KS7NQKzvVwCd9czR - 0dFyYgUYDAZPTn4nIrX9EzE0CaBAu3Ddwld8rZaRLZewExEiEEOTABrFul6HK9ze5XzfQaSg3ShhJyL1 - PYEYmgSkA5oE4Jmlo/Q7PTq5Crlp37lUt9Fqtc6UO8eAJgHYSI86e9mNB+2ssrGDOZ3Ozyhhg83PXzGI - QNuObZsfSxaBXbMIE/6CglXwAZoE0Ch31LS+YJdsTayspkXehChhg/XtL9n4+PimWoNhlXWZYcJz8ACD - CNEilMsBCZoESJL0IyXdS0L20UjzyN6EEjZIdXtomX6wm7jrRNa5YsVnCJB4/mPo6NEFiKFJQDKoNBgW - UvKPEHB/5fIiEvAeIgIFfDHqnQOeZ0Vl95jL43sod4iHaAE02tWDHm8L1IO0J66jHHCPtFLdb2hjN3LF - SG43Lf5Ql5X1syQI52QBPB9ymc2zqU+OGAj8RzO2Hu3jQmUP7MNawzf9IsIzS99ChV4/x2b6dRQCbEbu - rNyH57nhvLxPkVk4kg9f0lARsP7NgKcHdnf/UB/ZdpSOd+5e+t5SbdTnIzkJ+WTnOL0chEDJq2UBFv4V - 0+lmKO7ESGUPILDdtPQ1BFSZMsdoKS5PsiV7QxMERERYtipdEiMVATbj0q2RtVfnYH6eLMAv8PVKl8RI - SYCJa0AiKoeJd6LZtf2PRgh4kpPzJXCMT/yfAJgS4Bzy0ibbFcWdtO4c2t3luCyriZtQBOyWO0eBWa0Z - PovgiywF/7fijo9JAZdp5+MZjuZTh/MDifiJkpZGpnqJj0aYoXT/BpT8OAS4Dx36n67neYo7NvyBwMXK - xs6puz6anQ5HuPrw4UVVRu5dlV4vlnNLCqnbfCJuvUXExUoJe37R5my9VzjiHjGb/SOCeT/54p8IulYz - aKqzaZRTL94k6ddRbltbGxLMJf5CRCIcPawvHp81xLVKCRt+1C8koj36YbaSP5ZJAgFjMQ50uq8Bjvia - /ugqywAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQcSURBVFhH1VddaFNnGI6zuKkMZII/WM1JMigqBRlTrD+0 + TjaYIHq1iyHUgmNSiOc0or2oNmwg9qJORO2oq+t+tNYmtsVWW/on7Vqr2B+NsbZpkjY5OUnbXNgLwQtd + P9/n5LSUePLHyY0PPHznfb/ve9/n+090HyUYY0ukUKj40fCI+/Gz5xOSFPqFfEuVam0IhUKc1+evezHm + eRCTLu+T6qZu9vudDnatsYtVNnSykXH3sGpbhZ5JsT4cDmcpaWJDlKQ/rVWNrLjCFpcXb7UyEnuR+GuF + vUO1zWKevVbPIEJJExvUqEEtQDTL/m1moig2isFgzW8kRq1NNDETSprYSFYAeO6vJnb+n2bVOjWmJMDW + 3s9aegfTQsRKWUAZjaz85v20ELFSFoBdXtv2MC1ErJQFDDpdo9PT09vSQcRKWcDAC9ew4tIMxPp4BdBZ + z5yamqoiVoPBYPDs/HciUtsDiKFJAAU6jOsWvtI/GhjZcgk7ESECMTQJoFFsH3K4wj39zle9RAo6gBJ2 + IlLfM4ihSUA6oEkAnlk6Snvo0clTyC36zqO6XVar9RO5cwxoEoCN1NI3xP6+18NqWnuZ0+l8hxI22PHo + KYMItO39dl+7ZBFYpUWY8xcVZcMHaBJAozxY3/WYXba1scr6TnkTooQNNvU8YTMzM3sbDIZs65eGOc/P + PzGIEC1ClRyQoEmAJEkrKOkREnKURppP9l6UsEGq+5GWaZndxF0nsr4tW95BgMTzb0InT65BDE0CkkGN + wbCWkr+BgLtbN5eQgFcQESjiS1HvHPU8LKm8w1we3325QzxEC6DRbhvzeDuhHqQ9cR3lqHuyi+p2o43d + yJUiud20frYxK+tzSRAuyAJ4PuQymz+lPrliIHCDZmwH2seFyh44irWGb/FFhGeWvoVqvf4zm2nDFATY + jFy53IfnuYn8/LeRWThRAF/SUBGw4/moZxD2wMj4MNl2lI6X7iH6/qbOqC9AchLy1s5xejkIgZLXyQIs + /FOm0y1R3ImRyh5AYLtp0zMIqDVlTtNSXJlnZ87ONgiIiLDsV7okRioCbMZN+yNrr86xgnxZgF/gm5Qu + iZGSABPXjERUThBvRbP/++9aIeBBbu7/gVN84v8EwIIA57iXNtnhKB6idefQ7jbHZVlN3Jwi4Ae5cxSY + 1Zrhswi+yFLwVxV3fMwLuEI7H89wNP9zOGdJxEpKWhGZ6o0+GmGG0v0DUPLTEOA+fvw1Xc9fKO7Y8AcC + l2pa+xbu+mj2ORzhusLCdbVG7mWtXi9WcRuLqdtqIm69dcT1Sgl7dcm+HL1XOOGeNJv9k4L5GPninwi6 + VjNoqnNolAsv3jzp11Fed3c3EiwnriIiEY4e1hePz1fEr5USNvyoX0tEe/TDbCV/LJMEAsZiHOh07wHz + C/iYmdCxWgAAAABJRU5ErkJggg== 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 @@ -775,7 +775,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2 - CAAAAk1TRnQBSQFMAgEBAgEAAXQBKgF0ASoBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAYQBKgGEASoBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA