From 664f3a837760a1e10394cf5dd2e12602a14285ec Mon Sep 17 00:00:00 2001 From: niksedk Date: Mon, 17 Jan 2011 19:44:42 +0000 Subject: [PATCH] Working on edit of original sub git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@259 99eadd0c-20b8-1223-b5c4-2a2b2df33de2 --- src/Controls/SubtitleListView.cs | 34 +- src/Forms/FixCommonErrors.Designer.cs | 65 ++-- src/Forms/FixCommonErrors.cs | 27 +- src/Forms/Main.Designer.cs | 190 +++++++++-- src/Forms/Main.cs | 439 ++++++++++++++++++++++++-- src/Logic/Language.cs | 4 + src/Logic/LanguageStructure.cs | 4 + src/Logic/Settings.cs | 8 +- src/Logic/Utilities.cs | 105 ++++-- 9 files changed, 718 insertions(+), 158 deletions(-) diff --git a/src/Controls/SubtitleListView.cs b/src/Controls/SubtitleListView.cs index d5bd3a46a..ded1046c0 100644 --- a/src/Controls/SubtitleListView.cs +++ b/src/Controls/SubtitleListView.cs @@ -198,8 +198,9 @@ namespace Nikse.SubtitleEdit.Controls foreach (Paragraph paragraph in paragraphs) { Add(paragraph, i.ToString()); - string alternateText = GetOriginalSubtitle(i, paragraph, paragraphsAlternate); - SetAlternateText(i, alternateText); + Paragraph alternate = Utilities.GetOriginalParagraph(i, paragraph, paragraphsAlternate); + if (alternate != null) + SetAlternateText(i, alternate.Text); i++; } @@ -208,27 +209,7 @@ namespace Nikse.SubtitleEdit.Controls if (FirstVisibleIndex == 0) FirstVisibleIndex = -1; - } - - private static string GetOriginalSubtitle(int index, Paragraph paragraph, List originalParagraphs) - { - if (index < originalParagraphs.Count && Math.Abs(originalParagraphs[index].StartTime.TotalMilliseconds - paragraph.StartTime.TotalMilliseconds) < 50) - return originalParagraphs[index].Text; - - foreach (Paragraph p in originalParagraphs) - { - if (p.StartTime.TotalMilliseconds == paragraph.StartTime.TotalMilliseconds) - return p.Text; - } - - foreach (Paragraph p in originalParagraphs) - { - if (p.StartTime.TotalMilliseconds > paragraph.StartTime.TotalMilliseconds - 200 && - p.StartTime.TotalMilliseconds < paragraph.StartTime.TotalMilliseconds + 1000) - return p.Text; - } - return string.Empty; - } + } private void Add(Paragraph paragraph, string tag) { @@ -311,6 +292,13 @@ namespace Nikse.SubtitleEdit.Controls return null; } + public string GetTextAlternate(int index) + { + if (index >= 0 && index < Items.Count && IsAlternateTextColumnVisible) + return Items[index].SubItems[ColumnIndexTextAlternate].Text.Replace(_lineSeparatorString, Environment.NewLine); + return null; + } + public string GetStartTime(int index) { if (index >= 0 && index < Items.Count) diff --git a/src/Forms/FixCommonErrors.Designer.cs b/src/Forms/FixCommonErrors.Designer.cs index 2c4e57ce5..300797e68 100644 --- a/src/Forms/FixCommonErrors.Designer.cs +++ b/src/Forms/FixCommonErrors.Designer.cs @@ -62,7 +62,7 @@ namespace Nikse.SubtitleEdit.Forms this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.mergeSelectedLinesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.groupBoxEditPanel = new System.Windows.Forms.GroupBox(); - this.panelSingleLine = new System.Windows.Forms.Panel(); + this.labelSingleLine = new System.Windows.Forms.Label(); this.buttonUnBreak = new System.Windows.Forms.Button(); this.buttonAutoBreak = new System.Windows.Forms.Button(); this.labelStartTimeWarning = new System.Windows.Forms.Label(); @@ -121,7 +121,7 @@ namespace Nikse.SubtitleEdit.Forms this.labelStatus.AutoSize = true; this.labelStatus.Location = new System.Drawing.Point(12, 542); this.labelStatus.Name = "labelStatus"; - this.labelStatus.Size = new System.Drawing.Size(92, 21); + this.labelStatus.Size = new System.Drawing.Size(60, 13); this.labelStatus.TabIndex = 5; this.labelStatus.Text = "labelStatus"; // @@ -239,10 +239,10 @@ namespace Nikse.SubtitleEdit.Forms // tabPageFixes // this.tabPageFixes.Controls.Add(this.splitContainerStep2); - this.tabPageFixes.Location = new System.Drawing.Point(4, 30); + this.tabPageFixes.Location = new System.Drawing.Point(4, 22); this.tabPageFixes.Name = "tabPageFixes"; this.tabPageFixes.Padding = new System.Windows.Forms.Padding(3); - this.tabPageFixes.Size = new System.Drawing.Size(802, 463); + this.tabPageFixes.Size = new System.Drawing.Size(802, 471); this.tabPageFixes.TabIndex = 1; this.tabPageFixes.Text = "Fixes"; this.tabPageFixes.UseVisualStyleBackColor = true; @@ -266,8 +266,8 @@ namespace Nikse.SubtitleEdit.Forms // this.splitContainerStep2.Panel2.Controls.Add(this.subtitleListView1); this.splitContainerStep2.Panel2.Controls.Add(this.groupBoxEditPanel); - this.splitContainerStep2.Size = new System.Drawing.Size(796, 457); - this.splitContainerStep2.SplitterDistance = 214; + this.splitContainerStep2.Size = new System.Drawing.Size(796, 465); + this.splitContainerStep2.SplitterDistance = 217; this.splitContainerStep2.TabIndex = 112; // // listViewFixes @@ -286,7 +286,7 @@ namespace Nikse.SubtitleEdit.Forms this.listViewFixes.HideSelection = false; this.listViewFixes.Location = new System.Drawing.Point(3, 3); this.listViewFixes.Name = "listViewFixes"; - this.listViewFixes.Size = new System.Drawing.Size(790, 181); + this.listViewFixes.Size = new System.Drawing.Size(790, 184); this.listViewFixes.TabIndex = 100; this.listViewFixes.UseCompatibleStateImageBehavior = false; this.listViewFixes.View = System.Windows.Forms.View.Details; @@ -323,7 +323,7 @@ namespace Nikse.SubtitleEdit.Forms this.buttonFixesApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonFixesApply.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.buttonFixesApply.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonFixesApply.Location = new System.Drawing.Point(628, 189); + this.buttonFixesApply.Location = new System.Drawing.Point(628, 192); this.buttonFixesApply.Name = "buttonFixesApply"; this.buttonFixesApply.Size = new System.Drawing.Size(165, 21); this.buttonFixesApply.TabIndex = 108; @@ -335,7 +335,7 @@ namespace Nikse.SubtitleEdit.Forms // this.buttonRefreshFixes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonRefreshFixes.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonRefreshFixes.Location = new System.Drawing.Point(457, 189); + this.buttonRefreshFixes.Location = new System.Drawing.Point(457, 192); this.buttonRefreshFixes.Name = "buttonRefreshFixes"; this.buttonRefreshFixes.Size = new System.Drawing.Size(165, 21); this.buttonRefreshFixes.TabIndex = 106; @@ -347,7 +347,7 @@ namespace Nikse.SubtitleEdit.Forms // this.buttonFixesSelectAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.buttonFixesSelectAll.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonFixesSelectAll.Location = new System.Drawing.Point(3, 189); + this.buttonFixesSelectAll.Location = new System.Drawing.Point(3, 192); this.buttonFixesSelectAll.Name = "buttonFixesSelectAll"; this.buttonFixesSelectAll.Size = new System.Drawing.Size(75, 21); this.buttonFixesSelectAll.TabIndex = 102; @@ -359,7 +359,7 @@ namespace Nikse.SubtitleEdit.Forms // this.buttonFixesInverse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.buttonFixesInverse.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonFixesInverse.Location = new System.Drawing.Point(84, 189); + this.buttonFixesInverse.Location = new System.Drawing.Point(84, 192); this.buttonFixesInverse.Name = "buttonFixesInverse"; this.buttonFixesInverse.Size = new System.Drawing.Size(100, 21); this.buttonFixesInverse.TabIndex = 104; @@ -380,7 +380,7 @@ namespace Nikse.SubtitleEdit.Forms this.subtitleListView1.HideSelection = false; this.subtitleListView1.Location = new System.Drawing.Point(3, 5); this.subtitleListView1.Name = "subtitleListView1"; - this.subtitleListView1.Size = new System.Drawing.Size(785, 140); + this.subtitleListView1.Size = new System.Drawing.Size(785, 145); this.subtitleListView1.TabIndex = 110; this.subtitleListView1.UseCompatibleStateImageBehavior = false; this.subtitleListView1.View = System.Windows.Forms.View.Details; @@ -419,7 +419,7 @@ namespace Nikse.SubtitleEdit.Forms // this.groupBoxEditPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.groupBoxEditPanel.Controls.Add(this.panelSingleLine); + this.groupBoxEditPanel.Controls.Add(this.labelSingleLine); this.groupBoxEditPanel.Controls.Add(this.buttonUnBreak); this.groupBoxEditPanel.Controls.Add(this.buttonAutoBreak); this.groupBoxEditPanel.Controls.Add(this.labelStartTimeWarning); @@ -431,19 +431,20 @@ namespace Nikse.SubtitleEdit.Forms this.groupBoxEditPanel.Controls.Add(this.labelTextLineTotal); this.groupBoxEditPanel.Controls.Add(this.labelTextLineLengths); this.groupBoxEditPanel.Controls.Add(this.textBoxListViewText); - this.groupBoxEditPanel.Location = new System.Drawing.Point(8, 144); + this.groupBoxEditPanel.Location = new System.Drawing.Point(8, 149); this.groupBoxEditPanel.Name = "groupBoxEditPanel"; this.groupBoxEditPanel.Size = new System.Drawing.Size(732, 85); this.groupBoxEditPanel.TabIndex = 111; this.groupBoxEditPanel.TabStop = false; // - // panelSingleLine + // labelSingleLine // - this.panelSingleLine.Location = new System.Drawing.Point(302, 66); - this.panelSingleLine.Margin = new System.Windows.Forms.Padding(0); - this.panelSingleLine.Name = "panelSingleLine"; - this.panelSingleLine.Size = new System.Drawing.Size(83, 17); - this.panelSingleLine.TabIndex = 35; + this.labelSingleLine.AutoSize = true; + this.labelSingleLine.Location = new System.Drawing.Point(296, 65); + this.labelSingleLine.Name = "labelSingleLine"; + this.labelSingleLine.Size = new System.Drawing.Size(23, 13); + this.labelSingleLine.TabIndex = 123; + this.labelSingleLine.Text = "1/1"; // // buttonUnBreak // @@ -473,7 +474,7 @@ namespace Nikse.SubtitleEdit.Forms this.labelStartTimeWarning.ForeColor = System.Drawing.Color.Red; this.labelStartTimeWarning.Location = new System.Drawing.Point(6, 51); this.labelStartTimeWarning.Name = "labelStartTimeWarning"; - this.labelStartTimeWarning.Size = new System.Drawing.Size(179, 21); + this.labelStartTimeWarning.Size = new System.Drawing.Size(115, 13); this.labelStartTimeWarning.TabIndex = 32; this.labelStartTimeWarning.Text = "labelStartTimeWarning"; // @@ -483,7 +484,7 @@ namespace Nikse.SubtitleEdit.Forms this.labelDurationWarning.ForeColor = System.Drawing.Color.Red; this.labelDurationWarning.Location = new System.Drawing.Point(57, 64); this.labelDurationWarning.Name = "labelDurationWarning"; - this.labelDurationWarning.Size = new System.Drawing.Size(170, 21); + this.labelDurationWarning.Size = new System.Drawing.Size(110, 13); this.labelDurationWarning.TabIndex = 31; this.labelDurationWarning.Text = "labelDurationWarning"; // @@ -494,7 +495,7 @@ namespace Nikse.SubtitleEdit.Forms this.timeUpDownStartTime.Location = new System.Drawing.Point(8, 27); this.timeUpDownStartTime.Margin = new System.Windows.Forms.Padding(4); this.timeUpDownStartTime.Name = "timeUpDownStartTime"; - this.timeUpDownStartTime.Size = new System.Drawing.Size(137, 34); + this.timeUpDownStartTime.Size = new System.Drawing.Size(92, 25); this.timeUpDownStartTime.TabIndex = 112; // // numericUpDownDuration @@ -517,7 +518,7 @@ namespace Nikse.SubtitleEdit.Forms 0, -2147483648}); this.numericUpDownDuration.Name = "numericUpDownDuration"; - this.numericUpDownDuration.Size = new System.Drawing.Size(54, 27); + this.numericUpDownDuration.Size = new System.Drawing.Size(54, 21); this.numericUpDownDuration.TabIndex = 114; this.numericUpDownDuration.ValueChanged += new System.EventHandler(this.NumericUpDownDurationValueChanged); // @@ -526,7 +527,7 @@ namespace Nikse.SubtitleEdit.Forms this.labelDuration.AutoSize = true; this.labelDuration.Location = new System.Drawing.Point(97, 12); this.labelDuration.Name = "labelDuration"; - this.labelDuration.Size = new System.Drawing.Size(74, 21); + this.labelDuration.Size = new System.Drawing.Size(48, 13); this.labelDuration.TabIndex = 28; this.labelDuration.Text = "Duration"; // @@ -535,7 +536,7 @@ namespace Nikse.SubtitleEdit.Forms this.labelStartTime.AutoSize = true; this.labelStartTime.Location = new System.Drawing.Point(6, 12); this.labelStartTime.Name = "labelStartTime"; - this.labelStartTime.Size = new System.Drawing.Size(84, 21); + this.labelStartTime.Size = new System.Drawing.Size(54, 13); this.labelStartTime.TabIndex = 27; this.labelStartTime.Text = "Start time"; // @@ -554,7 +555,7 @@ namespace Nikse.SubtitleEdit.Forms this.labelTextLineLengths.AutoSize = true; this.labelTextLineLengths.Location = new System.Drawing.Point(191, 65); this.labelTextLineLengths.Name = "labelTextLineLengths"; - this.labelTextLineLengths.Size = new System.Drawing.Size(166, 21); + this.labelTextLineLengths.Size = new System.Drawing.Size(108, 13); this.labelTextLineLengths.TabIndex = 25; this.labelTextLineLengths.Text = "labelTextLineLengths"; // @@ -573,9 +574,9 @@ namespace Nikse.SubtitleEdit.Forms // tabPageLog // this.tabPageLog.Controls.Add(this.textBoxFixedIssues); - this.tabPageLog.Location = new System.Drawing.Point(4, 30); + this.tabPageLog.Location = new System.Drawing.Point(4, 22); this.tabPageLog.Name = "tabPageLog"; - this.tabPageLog.Size = new System.Drawing.Size(802, 463); + this.tabPageLog.Size = new System.Drawing.Size(802, 471); this.tabPageLog.TabIndex = 2; this.tabPageLog.Text = "Log"; this.tabPageLog.UseVisualStyleBackColor = true; @@ -602,13 +603,13 @@ namespace Nikse.SubtitleEdit.Forms this.labelNumberOfImportantLogMessages.ForeColor = System.Drawing.Color.Red; this.labelNumberOfImportantLogMessages.Location = new System.Drawing.Point(12, 558); this.labelNumberOfImportantLogMessages.Name = "labelNumberOfImportantLogMessages"; - this.labelNumberOfImportantLogMessages.Size = new System.Drawing.Size(293, 21); + this.labelNumberOfImportantLogMessages.Size = new System.Drawing.Size(190, 13); this.labelNumberOfImportantLogMessages.TabIndex = 11; this.labelNumberOfImportantLogMessages.Text = "labelNumberOfImportantLogMessages"; // // FixCommonErrors // - this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 21F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.buttonCancel; this.ClientSize = new System.Drawing.Size(846, 573); @@ -693,8 +694,8 @@ namespace Nikse.SubtitleEdit.Forms private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemDelete; private System.Windows.Forms.ToolStripMenuItem mergeSelectedLinesToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.Panel panelSingleLine; private System.Windows.Forms.Label labelNumberOfImportantLogMessages; private System.Windows.Forms.SplitContainer splitContainerStep2; + private System.Windows.Forms.Label labelSingleLine; } } \ No newline at end of file diff --git a/src/Forms/FixCommonErrors.cs b/src/Forms/FixCommonErrors.cs index a0c311ab8..4ef4a96c3 100644 --- a/src/Forms/FixCommonErrors.cs +++ b/src/Forms/FixCommonErrors.cs @@ -669,7 +669,7 @@ namespace Nikse.SubtitleEdit.Forms { Paragraph p = _subtitle.Paragraphs[i]; - if (p.Text.Length < Configuration.Settings.Tools.MergeLinesShorterThan && p.Text.Contains(Environment.NewLine)) + if (Utilities.RemoveHtmlTags(p.Text).Length < Configuration.Settings.Tools.MergeLinesShorterThan && p.Text.Contains(Environment.NewLine)) { string s = p.Text.TrimEnd(".?!:;".ToCharArray()); s = s.TrimStart('-'); @@ -2064,6 +2064,18 @@ namespace Nikse.SubtitleEdit.Forms } } + if (p.Text.StartsWith("...")) + { + if (AllowFix(i + 1, fixAction)) + { + string oldText = p.Text; + p.Text = "" + p.Text.Substring(6, p.Text.Length - 6); + fixCount++; + _totalFixes++; + AddFixToListView(p, i + 1, fixAction, oldText, p.Text); + } + } + if (p.Text.Contains(": ...")) { if (AllowFix(i + 1, fixAction)) @@ -3320,17 +3332,8 @@ namespace Nikse.SubtitleEdit.Forms labelTextLineTotal.Text = string.Empty; labelTextLineLengths.Text = _languageGeneral.SingleLineLengths; - panelSingleLine.Left = labelTextLineLengths.Left + labelTextLineLengths.Width - 6; - Utilities.DisplayLineLengths(panelSingleLine, text); - //labelTextLineMaxLength.Text = string.Empty; - //int maxLineLength = Utilities.GetMaxLineLength(text); - //labelTextLineMaxLength.Text = string.Format(_languageGeneral.SingleLineMaximumLengthX, maxLineLength); - //if (maxLineLength > Configuration.Settings.General.SubtitleLineMaximumLength) - // labelTextLineMaxLength.ForeColor = System.Drawing.Color.Red; - //else if (maxLineLength > Configuration.Settings.General.SubtitleLineMaximumLength - 5) - // labelTextLineMaxLength.ForeColor = System.Drawing.Color.Orange; - //else - // labelTextLineMaxLength.ForeColor = System.Drawing.Color.Black; + labelSingleLine.Left = labelTextLineLengths.Left + labelTextLineLengths.Width - 6; + Utilities.GetLineLengths(labelSingleLine, text); string s = Utilities.RemoveHtmlTags(text).Replace(Environment.NewLine, " "); if (s.Length < Configuration.Settings.General.SubtitleLineMaximumLength * 1.9) diff --git a/src/Forms/Main.Designer.cs b/src/Forms/Main.Designer.cs index 754e58e21..6260364be 100644 --- a/src/Forms/Main.Designer.cs +++ b/src/Forms/Main.Designer.cs @@ -68,6 +68,11 @@ this.reopenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); + this.saveOriginalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveOriginalAstoolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openOriginalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.removeOriginalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItemOpenContainingFolder = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemCompare = new System.Windows.Forms.ToolStripMenuItem(); @@ -294,8 +299,15 @@ this.tabControlSubtitle = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); this.groupBoxEdit = new System.Windows.Forms.GroupBox(); + this.labelAlternateCharactersPerSecond = new System.Windows.Forms.Label(); + this.labelTextAlternateLineTotal = new System.Windows.Forms.Label(); + this.labelAlternateSingleLine = new System.Windows.Forms.Label(); + this.labelTextAlternateLineLengths = new System.Windows.Forms.Label(); + this.labelAlternateText = new System.Windows.Forms.Label(); + this.labelText = new System.Windows.Forms.Label(); + this.textBoxListViewTextAlternate = new System.Windows.Forms.TextBox(); + this.labelSingleLine = new System.Windows.Forms.Label(); this.buttonAutoBreak = new System.Windows.Forms.Button(); - this.panelSingleLine = new System.Windows.Forms.Panel(); this.labelTextLineLengths = new System.Windows.Forms.Label(); this.labelTextLineTotal = new System.Windows.Forms.Label(); this.labelCharactersPerSecond = new System.Windows.Forms.Label(); @@ -307,7 +319,6 @@ this.numericUpDownDuration = new System.Windows.Forms.NumericUpDown(); this.buttonPrevious = new System.Windows.Forms.Button(); this.buttonNext = new System.Windows.Forms.Button(); - this.labelText = new System.Windows.Forms.Label(); this.labelStartTime = new System.Windows.Forms.Label(); this.textBoxListViewText = new System.Windows.Forms.TextBox(); this.labelDuration = new System.Windows.Forms.Label(); @@ -704,6 +715,11 @@ this.reopenToolStripMenuItem, this.saveToolStripMenuItem, this.saveAsToolStripMenuItem, + this.toolStripSeparator20, + this.saveOriginalToolStripMenuItem, + this.saveOriginalAstoolStripMenuItem, + this.openOriginalToolStripMenuItem, + this.removeOriginalToolStripMenuItem, this.toolStripSeparator12, this.toolStripMenuItemOpenContainingFolder, this.toolStripMenuItemCompare, @@ -759,6 +775,39 @@ this.saveAsToolStripMenuItem.Text = "Save as..."; this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.SaveAsToolStripMenuItemClick); // + // toolStripSeparator20 + // + this.toolStripSeparator20.Name = "toolStripSeparator20"; + this.toolStripSeparator20.Size = new System.Drawing.Size(331, 6); + // + // saveOriginalToolStripMenuItem + // + this.saveOriginalToolStripMenuItem.Name = "saveOriginalToolStripMenuItem"; + this.saveOriginalToolStripMenuItem.Size = new System.Drawing.Size(334, 22); + this.saveOriginalToolStripMenuItem.Text = "Save original"; + this.saveOriginalToolStripMenuItem.Click += new System.EventHandler(this.saveOriginalToolStripMenuItem_Click); + // + // saveOriginalAstoolStripMenuItem + // + this.saveOriginalAstoolStripMenuItem.Name = "saveOriginalAstoolStripMenuItem"; + this.saveOriginalAstoolStripMenuItem.Size = new System.Drawing.Size(334, 22); + this.saveOriginalAstoolStripMenuItem.Text = "Save original as..."; + this.saveOriginalAstoolStripMenuItem.Click += new System.EventHandler(this.saveOriginalAstoolStripMenuItem_Click); + // + // openOriginalToolStripMenuItem + // + this.openOriginalToolStripMenuItem.Name = "openOriginalToolStripMenuItem"; + this.openOriginalToolStripMenuItem.Size = new System.Drawing.Size(334, 22); + this.openOriginalToolStripMenuItem.Text = "Open original (translator mode)..."; + this.openOriginalToolStripMenuItem.Click += new System.EventHandler(this.openOriginalToolStripMenuItem_Click); + // + // removeOriginalToolStripMenuItem + // + this.removeOriginalToolStripMenuItem.Name = "removeOriginalToolStripMenuItem"; + this.removeOriginalToolStripMenuItem.Size = new System.Drawing.Size(334, 22); + this.removeOriginalToolStripMenuItem.Text = "Remove original"; + this.removeOriginalToolStripMenuItem.Click += new System.EventHandler(this.removeOriginalToolStripMenuItem_Click); + // // toolStripSeparator12 // this.toolStripSeparator12.Name = "toolStripSeparator12"; @@ -1571,7 +1620,7 @@ this.fixCommonErrorsInSelectedLinesToolStripMenuItem, this.changeCasingForSelectedLinesToolStripMenuItem}); this.contextMenuStripListview.Name = "contextMenuStripListview"; - this.contextMenuStripListview.Size = new System.Drawing.Size(276, 562); + this.contextMenuStripListview.Size = new System.Drawing.Size(276, 584); this.contextMenuStripListview.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripListviewOpening); // // toolStripMenuItemDelete @@ -2828,8 +2877,15 @@ // this.groupBoxEdit.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxEdit.Controls.Add(this.labelAlternateCharactersPerSecond); + this.groupBoxEdit.Controls.Add(this.labelTextAlternateLineTotal); + this.groupBoxEdit.Controls.Add(this.labelAlternateSingleLine); + this.groupBoxEdit.Controls.Add(this.labelTextAlternateLineLengths); + this.groupBoxEdit.Controls.Add(this.labelAlternateText); + this.groupBoxEdit.Controls.Add(this.labelText); + this.groupBoxEdit.Controls.Add(this.textBoxListViewTextAlternate); + this.groupBoxEdit.Controls.Add(this.labelSingleLine); this.groupBoxEdit.Controls.Add(this.buttonAutoBreak); - this.groupBoxEdit.Controls.Add(this.panelSingleLine); this.groupBoxEdit.Controls.Add(this.labelTextLineLengths); this.groupBoxEdit.Controls.Add(this.labelTextLineTotal); this.groupBoxEdit.Controls.Add(this.labelCharactersPerSecond); @@ -2841,7 +2897,6 @@ this.groupBoxEdit.Controls.Add(this.numericUpDownDuration); this.groupBoxEdit.Controls.Add(this.buttonPrevious); this.groupBoxEdit.Controls.Add(this.buttonNext); - this.groupBoxEdit.Controls.Add(this.labelText); this.groupBoxEdit.Controls.Add(this.labelStartTime); this.groupBoxEdit.Controls.Add(this.textBoxListViewText); this.groupBoxEdit.Controls.Add(this.labelDuration); @@ -2852,6 +2907,88 @@ this.groupBoxEdit.TabIndex = 1; this.groupBoxEdit.TabStop = false; // + // labelAlternateCharactersPerSecond + // + this.labelAlternateCharactersPerSecond.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelAlternateCharactersPerSecond.AutoSize = true; + this.labelAlternateCharactersPerSecond.Location = new System.Drawing.Point(838, 12); + this.labelAlternateCharactersPerSecond.Name = "labelAlternateCharactersPerSecond"; + this.labelAlternateCharactersPerSecond.Size = new System.Drawing.Size(64, 13); + this.labelAlternateCharactersPerSecond.TabIndex = 38; + this.labelAlternateCharactersPerSecond.Text = "altCharsSec"; + // + // labelTextAlternateLineTotal + // + this.labelTextAlternateLineTotal.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelTextAlternateLineTotal.AutoSize = true; + this.labelTextAlternateLineTotal.Location = new System.Drawing.Point(884, 86); + this.labelTextAlternateLineTotal.Name = "labelTextAlternateLineTotal"; + this.labelTextAlternateLineTotal.Size = new System.Drawing.Size(36, 13); + this.labelTextAlternateLineTotal.TabIndex = 37; + this.labelTextAlternateLineTotal.Text = "AltTot"; + // + // labelAlternateSingleLine + // + this.labelAlternateSingleLine.AutoSize = true; + this.labelAlternateSingleLine.Location = new System.Drawing.Point(839, 86); + this.labelAlternateSingleLine.Name = "labelAlternateSingleLine"; + this.labelAlternateSingleLine.Size = new System.Drawing.Size(47, 13); + this.labelAlternateSingleLine.TabIndex = 36; + this.labelAlternateSingleLine.Text = "AltSinLin"; + // + // labelTextAlternateLineLengths + // + this.labelTextAlternateLineLengths.AutoSize = true; + this.labelTextAlternateLineLengths.Location = new System.Drawing.Point(786, 86); + this.labelTextAlternateLineLengths.Name = "labelTextAlternateLineLengths"; + this.labelTextAlternateLineLengths.Size = new System.Drawing.Size(56, 13); + this.labelTextAlternateLineLengths.TabIndex = 35; + this.labelTextAlternateLineLengths.Text = "AltLineLen"; + // + // labelAlternateText + // + this.labelAlternateText.AutoSize = true; + this.labelAlternateText.Location = new System.Drawing.Point(803, 12); + this.labelAlternateText.Name = "labelAlternateText"; + this.labelAlternateText.Size = new System.Drawing.Size(29, 13); + this.labelAlternateText.TabIndex = 34; + this.labelAlternateText.Text = "Text"; + this.labelAlternateText.Visible = false; + // + // labelText + // + this.labelText.AutoSize = true; + this.labelText.Location = new System.Drawing.Point(203, 11); + this.labelText.Name = "labelText"; + this.labelText.Size = new System.Drawing.Size(29, 13); + this.labelText.TabIndex = 5; + this.labelText.Text = "Text"; + // + // textBoxListViewTextAlternate + // + this.textBoxListViewTextAlternate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxListViewTextAlternate.ContextMenuStrip = this.contextMenuStripTextBoxListView; + this.textBoxListViewTextAlternate.Enabled = false; + this.textBoxListViewTextAlternate.HideSelection = false; + this.textBoxListViewTextAlternate.Location = new System.Drawing.Point(806, 28); + this.textBoxListViewTextAlternate.Multiline = true; + this.textBoxListViewTextAlternate.Name = "textBoxListViewTextAlternate"; + this.textBoxListViewTextAlternate.Size = new System.Drawing.Size(13, 56); + this.textBoxListViewTextAlternate.TabIndex = 33; + this.textBoxListViewTextAlternate.Visible = false; + this.textBoxListViewTextAlternate.TextChanged += new System.EventHandler(this.textBoxListViewTextAlternate_TextChanged); + this.textBoxListViewTextAlternate.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBoxListViewTextAlternate_KeyDown); + // + // labelSingleLine + // + this.labelSingleLine.AutoSize = true; + this.labelSingleLine.Location = new System.Drawing.Point(310, 86); + this.labelSingleLine.Name = "labelSingleLine"; + this.labelSingleLine.Size = new System.Drawing.Size(76, 13); + this.labelSingleLine.TabIndex = 32; + this.labelSingleLine.Text = "labelSingleLine"; + // // buttonAutoBreak // this.buttonAutoBreak.Location = new System.Drawing.Point(139, 75); @@ -2862,15 +2999,6 @@ this.buttonAutoBreak.UseVisualStyleBackColor = true; this.buttonAutoBreak.Click += new System.EventHandler(this.ButtonAutoBreakClick); // - // panelSingleLine - // - this.panelSingleLine.AutoSize = true; - this.panelSingleLine.Location = new System.Drawing.Point(314, 86); - this.panelSingleLine.Margin = new System.Windows.Forms.Padding(0); - this.panelSingleLine.Name = "panelSingleLine"; - this.panelSingleLine.Size = new System.Drawing.Size(52, 16); - this.panelSingleLine.TabIndex = 7; - // // labelTextLineLengths // this.labelTextLineLengths.AutoSize = true; @@ -2883,22 +3011,22 @@ // labelTextLineTotal // this.labelTextLineTotal.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelTextLineTotal.Location = new System.Drawing.Point(625, 84); + this.labelTextLineTotal.AutoSize = true; + this.labelTextLineTotal.Location = new System.Drawing.Point(625, 86); this.labelTextLineTotal.Name = "labelTextLineTotal"; - this.labelTextLineTotal.Size = new System.Drawing.Size(177, 18); + this.labelTextLineTotal.Size = new System.Drawing.Size(94, 13); this.labelTextLineTotal.TabIndex = 21; this.labelTextLineTotal.Text = "labelTextLineTotal"; - this.labelTextLineTotal.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // labelCharactersPerSecond // this.labelCharactersPerSecond.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelCharactersPerSecond.Location = new System.Drawing.Point(625, 10); + this.labelCharactersPerSecond.AutoSize = true; + this.labelCharactersPerSecond.Location = new System.Drawing.Point(634, 11); this.labelCharactersPerSecond.Name = "labelCharactersPerSecond"; - this.labelCharactersPerSecond.Size = new System.Drawing.Size(177, 17); + this.labelCharactersPerSecond.Size = new System.Drawing.Size(133, 13); this.labelCharactersPerSecond.TabIndex = 31; this.labelCharactersPerSecond.Text = "labelCharactersPerSecond"; - this.labelCharactersPerSecond.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // buttonUnBreak // @@ -2996,15 +3124,6 @@ this.buttonNext.UseVisualStyleBackColor = true; this.buttonNext.Click += new System.EventHandler(this.ButtonNextClick); // - // labelText - // - this.labelText.AutoSize = true; - this.labelText.Location = new System.Drawing.Point(203, 11); - this.labelText.Name = "labelText"; - this.labelText.Size = new System.Drawing.Size(29, 13); - this.labelText.TabIndex = 5; - this.labelText.Text = "Text"; - // // labelStartTime // this.labelStartTime.AutoSize = true; @@ -3339,7 +3458,6 @@ private System.Windows.Forms.ToolStripMenuItem changeLanguageToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemCompare; - private System.Windows.Forms.Panel panelSingleLine; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemUnbreakLines; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemAutoBreakLines; private System.Windows.Forms.ToolStripSeparator toolStripSeparatorBreakLines; @@ -3516,6 +3634,18 @@ private System.Windows.Forms.ContextMenuStrip contextMenuStripEmpty; private System.Windows.Forms.ToolStripMenuItem insertLineToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem closeVideoToolStripMenuItem; + private System.Windows.Forms.Label labelSingleLine; + private System.Windows.Forms.TextBox textBoxListViewTextAlternate; + private System.Windows.Forms.Label labelAlternateText; + private System.Windows.Forms.Label labelAlternateCharactersPerSecond; + private System.Windows.Forms.Label labelTextAlternateLineTotal; + private System.Windows.Forms.Label labelAlternateSingleLine; + private System.Windows.Forms.Label labelTextAlternateLineLengths; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator20; + private System.Windows.Forms.ToolStripMenuItem saveOriginalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveOriginalAstoolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openOriginalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeOriginalToolStripMenuItem; } } diff --git a/src/Forms/Main.cs b/src/Forms/Main.cs index f66b6efaf..626085bde 100644 --- a/src/Forms/Main.cs +++ b/src/Forms/Main.cs @@ -50,6 +50,7 @@ namespace Nikse.SubtitleEdit.Forms int _replaceStartLineIndex = 0; bool _sourceViewChange; bool _change; + bool _changeAlternate; int _subtitleListViewIndex = -1; Paragraph _oldSelectedParagraph; bool _converted; @@ -104,7 +105,7 @@ namespace Nikse.SubtitleEdit.Forms if (versionInfo.Length >= 3 && versionInfo[2] != "0") _title += "." + versionInfo[2]; } - return _title + " Beta 7"; + return _title + " Beta 8"; } } @@ -933,7 +934,7 @@ namespace Nikse.SubtitleEdit.Forms OpenSubtitle(fileName, encoding, null, null); } - private void OpenSubtitle(string fileName, Encoding encoding, string videoFileName, string orginalFileName) + private void OpenSubtitle(string fileName, Encoding encoding, string videoFileName, string originalFileName) { if (File.Exists(fileName)) { @@ -941,7 +942,7 @@ namespace Nikse.SubtitleEdit.Forms // save last first visible index + first selected index from listview if (!string.IsNullOrEmpty(_fileName)) - Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, orginalFileName); + Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, originalFileName); openFileDialog1.InitialDirectory = Path.GetDirectoryName(fileName); @@ -1005,8 +1006,8 @@ namespace Nikse.SubtitleEdit.Forms SetCurrentFormat(format); _subtitleAlternateFileName = null; - if (LoadAlternateSubtitleFile(orginalFileName)) - _subtitleAlternateFileName = orginalFileName; + if (LoadAlternateSubtitleFile(originalFileName)) + _subtitleAlternateFileName = originalFileName; textBoxSource.Text = _subtitle.ToText(format); SubtitleListview1.Fill(_subtitle, _subtitleAlternate); @@ -1406,6 +1407,7 @@ namespace Nikse.SubtitleEdit.Forms _subtitleListViewIndex = -1; textBoxListViewText.Text = string.Empty; + textBoxListViewTextAlternate.Text = string.Empty; textBoxListViewText.Enabled = false; labelTextLineLengths.Text = string.Empty; labelCharactersPerSecond.Text = string.Empty; @@ -2765,6 +2767,7 @@ namespace Nikse.SubtitleEdit.Forms { _subtitleListViewIndex = -1; textBoxListViewText.Text = string.Empty; + textBoxListViewTextAlternate.Text = string.Empty; MakeHistoryForUndo(_language.BeforeUndo); string subtitleFormatFriendlyName; @@ -3237,6 +3240,19 @@ namespace Nikse.SubtitleEdit.Forms newParagraph.EndTime.TotalMilliseconds = 3000; } + if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0) + { + if (next != null) + { + Paragraph original = Utilities.GetOriginalParagraph(_subtitle.GetIndex(next), next, _subtitleAlternate.Paragraphs); + if (original != null) + { + int originalInsertIndex = _subtitleAlternate.GetIndex(original); + _subtitleAlternate.Paragraphs.Insert(originalInsertIndex, new Paragraph(newParagraph)); + } + } + } + if (_networkSession != null) { _networkSession.TimerStop(); @@ -3298,6 +3314,22 @@ namespace Nikse.SubtitleEdit.Forms newParagraph.EndTime.TotalMilliseconds = 3000; } + if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0) + { + if (prev != null) + { + Paragraph original = Utilities.GetOriginalParagraph(_subtitle.GetIndex(prev), prev, _subtitleAlternate.Paragraphs); + if (original != null) + { + int originalInsertIndex = _subtitleAlternate.GetIndex(original); + if (originalInsertIndex >= 0) + { + _subtitleAlternate.Paragraphs.Insert(originalInsertIndex+1, new Paragraph(newParagraph)); + } + } + } + } + if (_networkSession != null) { _networkSession.TimerStop(); @@ -3371,14 +3403,14 @@ namespace Nikse.SubtitleEdit.Forms Paragraph p = _subtitle.GetParagraphOrDefault(firstSelectedIndex); if (p != null) { - textBoxListViewText.TextChanged -= TextBoxListViewTextTextChanged; InitializeListViewEditBox(p); - textBoxListViewText.TextChanged += TextBoxListViewTextTextChanged; - _subtitleListViewIndex = firstSelectedIndex; _oldSelectedParagraph = new Paragraph(p); + UpdateListViewTextInfo(labelTextLineLengths, labelSingleLine, labelTextLineTotal, labelCharactersPerSecond, p); - UpdateListViewTextInfo(p); + InitializeListViewEditBoxAlternate(p, firstSelectedIndex); + labelAlternateCharactersPerSecond.Left = textBoxListViewTextAlternate.Left + (textBoxListViewTextAlternate.Width - labelAlternateCharactersPerSecond.Width); + labelTextAlternateLineTotal.Left = textBoxListViewTextAlternate.Left + (textBoxListViewTextAlternate.Width - labelTextAlternateLineTotal.Width); } } } @@ -3396,7 +3428,7 @@ namespace Nikse.SubtitleEdit.Forms toolStripSelected.Text = string.Format(_language.XLinesSelected, SubtitleListview1.SelectedItems.Count); } - private void UpdateListViewTextCharactersPerSeconds(Paragraph paragraph) + private void UpdateListViewTextCharactersPerSeconds(Label charsPerSecond, Paragraph paragraph) { const string zeroWhiteSpace = "\u200B"; const string zeroWidthNoBreakSpace = "\uFEFF"; @@ -3406,48 +3438,48 @@ namespace Nikse.SubtitleEdit.Forms { double charactersPerSecond = s.Length / paragraph.Duration.TotalSeconds; if (charactersPerSecond > Configuration.Settings.General.SubtitleMaximumCharactersPerSeconds + 7) - labelCharactersPerSecond.ForeColor = System.Drawing.Color.Red; + charsPerSecond.ForeColor = System.Drawing.Color.Red; else if (charactersPerSecond > Configuration.Settings.General.SubtitleMaximumCharactersPerSeconds) - labelCharactersPerSecond.ForeColor = System.Drawing.Color.Orange; + charsPerSecond.ForeColor = System.Drawing.Color.Orange; else - labelCharactersPerSecond.ForeColor = System.Drawing.Color.Black; - labelCharactersPerSecond.Text = string.Format(_language.CharactersPerSecond, charactersPerSecond); + charsPerSecond.ForeColor = System.Drawing.Color.Black; + charsPerSecond.Text = string.Format(_language.CharactersPerSecond, charactersPerSecond); } else { - labelCharactersPerSecond.ForeColor = System.Drawing.Color.Red; - labelCharactersPerSecond.Text = string.Format(_language.CharactersPerSecond, _languageGeneral.NotAvailable); + charsPerSecond.ForeColor = System.Drawing.Color.Red; + charsPerSecond.Text = string.Format(_language.CharactersPerSecond, _languageGeneral.NotAvailable); } } - private void UpdateListViewTextInfo(Paragraph paragraph) + private void UpdateListViewTextInfo(Label lineLengths, Label singleLine, Label lineTotal, Label charactersPerSecond, Paragraph paragraph) { if (paragraph == null) return; string text = paragraph.Text; - labelTextLineLengths.Text = _languageGeneral.SingleLineLengths; - panelSingleLine.Left = labelTextLineLengths.Left + labelTextLineLengths.Width - 6; - Utilities.DisplayLineLengths(panelSingleLine, text); + lineLengths.Text = _languageGeneral.SingleLineLengths; + singleLine.Left = lineLengths.Left + lineLengths.Width - 6; + Utilities.GetLineLengths(singleLine, text); string s = Utilities.RemoveHtmlTags(text).Replace(Environment.NewLine, " "); if (s.Length < Configuration.Settings.General.SubtitleLineMaximumLength * 1.9) { - labelTextLineTotal.ForeColor = System.Drawing.Color.Black; - labelTextLineTotal.Text = string.Format(_languageGeneral.TotalLengthX, s.Length); + lineTotal.ForeColor = System.Drawing.Color.Black; + lineTotal.Text = string.Format(_languageGeneral.TotalLengthX, s.Length); } else if (s.Length < Configuration.Settings.General.SubtitleLineMaximumLength * 2.1) { - labelTextLineTotal.ForeColor = System.Drawing.Color.Orange; - labelTextLineTotal.Text = string.Format(_languageGeneral.TotalLengthX, s.Length); + lineTotal.ForeColor = System.Drawing.Color.Orange; + lineTotal.Text = string.Format(_languageGeneral.TotalLengthX, s.Length); } else { - labelTextLineTotal.ForeColor = System.Drawing.Color.Red; - labelTextLineTotal.Text = string.Format(_languageGeneral.TotalLengthXSplitLine, s.Length); + lineTotal.ForeColor = System.Drawing.Color.Red; + lineTotal.Text = string.Format(_languageGeneral.TotalLengthXSplitLine, s.Length); } - UpdateListViewTextCharactersPerSeconds(paragraph); - } + UpdateListViewTextCharactersPerSeconds(charactersPerSecond, paragraph); + } private void ButtonNextClick(object sender, EventArgs e) { @@ -3521,12 +3553,37 @@ namespace Nikse.SubtitleEdit.Forms // update _subtitle + listview _subtitle.Paragraphs[_subtitleListViewIndex].Text = text; - UpdateListViewTextInfo(_subtitle.Paragraphs[_subtitleListViewIndex]); + UpdateListViewTextInfo(labelTextLineLengths, labelSingleLine, labelTextLineTotal, labelCharactersPerSecond, _subtitle.Paragraphs[_subtitleListViewIndex]); SubtitleListview1.SetText(_subtitleListViewIndex, text); _change = true; } } + private void TextBoxListViewTextAlternateTextChanged(object sender, EventArgs e) + { + if (_subtitleListViewIndex >= 0) + { + Paragraph p = _subtitle.GetParagraphOrDefault(_subtitleListViewIndex); + if (p == null) + return; + + Paragraph original = Utilities.GetOriginalParagraph(_subtitleListViewIndex, p, _subtitleAlternate.Paragraphs); + if (original != null) + { + string text = textBoxListViewTextAlternate.Text.TrimEnd(); + + // update _subtitle + listview + original.Text = text; + UpdateListViewTextInfo(labelTextAlternateLineLengths, labelAlternateSingleLine, labelTextAlternateLineTotal, labelAlternateCharactersPerSecond, original); + SubtitleListview1.SetAlternateText(_subtitleListViewIndex, text); + _changeAlternate = true; + } + else + { + } + } + } + private void TextBoxListViewTextKeyDown(object sender, KeyEventArgs e) { int numberOfNewLines = textBoxListViewText.Text.Length - textBoxListViewText.Text.Replace(Environment.NewLine, " ").Length; @@ -3539,7 +3596,7 @@ namespace Nikse.SubtitleEdit.Forms ButtonAutoBreakClick(null, null); e.SuppressKeyPress = true; } - else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.R) + else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.U) { ButtonUnBreakClick(null, null); e.SuppressKeyPress = true; @@ -3571,7 +3628,6 @@ namespace Nikse.SubtitleEdit.Forms e.SuppressKeyPress = true; } - // last key down in text _lastTextKeyDownTicks = DateTime.Now.Ticks; } @@ -3878,7 +3934,7 @@ namespace Nikse.SubtitleEdit.Forms if (currentParagraph != null) { UpdateOverlapErrors(timeUpDownStartTime.TimeCode); - UpdateListViewTextCharactersPerSeconds(currentParagraph); + UpdateListViewTextCharactersPerSeconds(labelCharactersPerSecond, currentParagraph); // update _subtitle + listview string oldDuration = currentParagraph.Duration.ToString(); @@ -3886,6 +3942,16 @@ namespace Nikse.SubtitleEdit.Forms SubtitleListview1.SetDuration(firstSelectedIndex, currentParagraph); _change = true; + if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0) + { + Paragraph original = Utilities.GetOriginalParagraph(firstSelectedIndex, currentParagraph, _subtitleAlternate.Paragraphs); + if (original != null) + { + original.EndTime.TotalMilliseconds = currentParagraph.EndTime.TotalMilliseconds; + _changeAlternate = true; + } + } + MakeHistoryForUndoWhenNoMoreChanges(string.Format(_language.DisplayTimeAdjustedX, "#" + currentParagraph.Number + ": " + oldDuration + " -> " + currentParagraph.Duration.ToString())); } } @@ -3906,6 +3972,30 @@ namespace Nikse.SubtitleEdit.Forms } } + + private void InitializeListViewEditBoxAlternate(Paragraph p, int firstSelectedIndex) + { + if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0) + { + Paragraph original = Utilities.GetOriginalParagraph(firstSelectedIndex, p, _subtitleAlternate.Paragraphs); + if (original == null) + { + textBoxListViewTextAlternate.Enabled = false; + textBoxListViewTextAlternate.Text = string.Empty; + labelAlternateCharactersPerSecond.Text = string.Empty; + } + else + { + textBoxListViewTextAlternate.Enabled = true; + textBoxListViewTextAlternate.TextChanged -= TextBoxListViewTextAlternateTextChanged; + textBoxListViewTextAlternate.Text = original.Text; + textBoxListViewTextAlternate.TextChanged += TextBoxListViewTextAlternateTextChanged; + //UpdateOverlapErrors(timeUpDownStartTime.TimeCode); + UpdateListViewTextCharactersPerSeconds(labelAlternateCharactersPerSecond, p); + } + } + } + private void InitializeListViewEditBox(Paragraph p) { textBoxListViewText.TextChanged -= TextBoxListViewTextTextChanged; @@ -3921,7 +4011,7 @@ namespace Nikse.SubtitleEdit.Forms numericUpDownDuration.ValueChanged += NumericUpDownDurationValueChanged; UpdateOverlapErrors(timeUpDownStartTime.TimeCode); - UpdateListViewTextCharactersPerSeconds(p); + UpdateListViewTextCharactersPerSeconds(labelCharactersPerSecond, p); if (_subtitle != null && _subtitle.Paragraphs.Count > 0) textBoxListViewText.Enabled = true; } @@ -3932,6 +4022,23 @@ namespace Nikse.SubtitleEdit.Forms { UpdateStartTimeInfo(timeUpDownStartTime.TimeCode); _change = true; + + if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0) + { + int firstSelectedIndex = FirstSelectedIndex; + Paragraph p = _subtitle.GetParagraphOrDefault(firstSelectedIndex); + if (p != null) + { + Paragraph original = Utilities.GetOriginalParagraph(firstSelectedIndex, p, _subtitleAlternate.Paragraphs); + if (original != null) + { + original.StartTime.TotalMilliseconds = p.StartTime.TotalMilliseconds; + original.EndTime.TotalMilliseconds = p.EndTime.TotalMilliseconds; + _changeAlternate = true; + } + } + } + MakeHistoryForUndoWhenNoMoreChanges(string.Format(_language.StarTimeAdjustedX, "#" + (_subtitleListViewIndex+1).ToString() + ": " + timeUpDownStartTime.TimeCode.ToString())); } } @@ -5232,6 +5339,10 @@ namespace Nikse.SubtitleEdit.Forms _fileName = _subtitleAlternateFileName; _subtitleAlternateFileName = tempName; + bool tempChange = _change; + _change = _changeAlternate; + _changeAlternate = tempChange; + SubtitleListview1.Fill(_subtitle, _subtitleAlternate); RefreshSelectedParagraph(); } @@ -5672,6 +5783,7 @@ namespace Nikse.SubtitleEdit.Forms { toolStripMenuItemTranslationMode.Text = _language.Menu.Edit.ShowOriginalText; } + toolStripMenuItemTranslationMode.Visible = false; //TODO: Remove this (now in file menu) } private void InsertUnicodeSymbol(object sender, EventArgs e) @@ -5869,6 +5981,20 @@ namespace Nikse.SubtitleEdit.Forms SubtitleListview1.HideAlternateTextColumn(); _subtitleAlternate = new Subtitle(); _subtitleAlternateFileName = null; + + buttonUnBreak.Visible = true; + buttonUndoListViewChanges.Visible = true; + textBoxListViewTextAlternate.Visible = false; + labelAlternateText.Visible = false; + labelAlternateCharactersPerSecond.Visible = false; + labelTextAlternateLineLengths.Visible = false; + labelAlternateSingleLine.Visible = false; + labelTextAlternateLineTotal.Visible = false; + textBoxListViewText.Width = (groupBoxEdit.Width - (textBoxListViewText.Left + 8 + buttonUnBreak.Width)); + textBoxListViewText.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right; + + labelCharactersPerSecond.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelCharactersPerSecond.Width); + labelTextLineTotal.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelTextLineTotal.Width); } else { @@ -5878,6 +6004,7 @@ namespace Nikse.SubtitleEdit.Forms private void OpenAlternateSubtitle() { + SaveSubtitleListviewIndexes(); openFileDialog1.Title = Configuration.Settings.Language.General.OpenOriginalSubtitleFile; openFileDialog1.FileName = string.Empty; openFileDialog1.Filter = Utilities.GetOpenDialogFiler(); @@ -5888,6 +6015,7 @@ namespace Nikse.SubtitleEdit.Forms return; SubtitleListview1.Fill(_subtitle, _subtitleAlternate); + RestoreSubtitleListviewIndexes(); } private bool LoadAlternateSubtitleFile(string fileName) @@ -5921,12 +6049,35 @@ namespace Nikse.SubtitleEdit.Forms else _subtitleAlternate.CalculateFrameNumbersFromTimeCodes(CurrentFrameRate); + if (_subtitleAlternate.Paragraphs.Count > 1) + { + buttonUnBreak.Visible = false; + buttonUndoListViewChanges.Visible = false; + + textBoxListViewText.Anchor = AnchorStyles.Left | AnchorStyles.Top; + textBoxListViewText.Width = (groupBoxEdit.Width - (textBoxListViewText.Left + 10)) / 2; + textBoxListViewTextAlternate.Anchor = AnchorStyles.Left | AnchorStyles.Top; + textBoxListViewTextAlternate.Left = textBoxListViewText.Left + textBoxListViewText.Width + 3; + textBoxListViewTextAlternate.Width = textBoxListViewText.Width; + textBoxListViewTextAlternate.Visible = true; + labelAlternateText.Text = Configuration.Settings.Language.General.OriginalText; + labelAlternateText.Visible = true; + labelAlternateCharactersPerSecond.Visible = true; + labelTextAlternateLineLengths.Visible = true; + labelAlternateSingleLine.Visible = true; + labelTextAlternateLineTotal.Visible = true; + + labelCharactersPerSecond.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelCharactersPerSecond.Width); + labelTextLineTotal.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelTextLineTotal.Width); + Main_Resize(null, null); + _changeAlternate = false; + } + SubtitleListview1.ShowAlternateTextColumn(Configuration.Settings.Language.General.OriginalText); return true; } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -6272,6 +6423,23 @@ namespace Nikse.SubtitleEdit.Forms private void Main_Resize(object sender, EventArgs e) { panelVideoPlayer.Invalidate(); + + if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0) + { + textBoxListViewText.Width = (groupBoxEdit.Width - (textBoxListViewText.Left + 10)) / 2; + textBoxListViewTextAlternate.Left = textBoxListViewText.Left + textBoxListViewText.Width + 3; + labelAlternateText.Left = textBoxListViewTextAlternate.Left; + + textBoxListViewTextAlternate.Width = textBoxListViewText.Width; + + labelAlternateCharactersPerSecond.Left = textBoxListViewTextAlternate.Left + (textBoxListViewTextAlternate.Width - labelAlternateCharactersPerSecond.Width); + labelTextAlternateLineLengths.Left = textBoxListViewTextAlternate.Left; + labelAlternateSingleLine.Left = labelTextAlternateLineLengths.Left + labelTextAlternateLineLengths.Width; + labelTextAlternateLineTotal.Left = textBoxListViewTextAlternate.Left + (textBoxListViewTextAlternate.Width - labelTextAlternateLineTotal.Width); + } + + labelCharactersPerSecond.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelCharactersPerSecond.Width); + labelTextLineTotal.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelTextLineTotal.Width); } private void PlayCurrent() @@ -6838,6 +7006,26 @@ namespace Nikse.SubtitleEdit.Forms private void fileToolStripMenuItem_DropDownOpening(object sender, EventArgs e) { toolStripMenuItemOpenContainingFolder.Visible = !string.IsNullOrEmpty(_fileName) && File.Exists(_fileName); + + if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0) + { + saveOriginalToolStripMenuItem.Visible = true; + saveOriginalAstoolStripMenuItem.Visible = true; + removeOriginalToolStripMenuItem.Visible = true; + } + else + { + saveOriginalToolStripMenuItem.Visible = false; + saveOriginalAstoolStripMenuItem.Visible = false; + removeOriginalToolStripMenuItem.Visible = false; + + if (_subtitle == null || _subtitle.Paragraphs.Count < 1) + { + openOriginalToolStripMenuItem.Visible = false; + toolStripSeparator20.Visible = false; + } + + } } private void toolStripMenuItemOpenContainingFolder_Click(object sender, EventArgs e) @@ -6976,6 +7164,7 @@ namespace Nikse.SubtitleEdit.Forms _timerAutoSave.Interval = 1000 * Configuration.Settings.General.AutoBackupSeconds; // take backup every x second if changes were made _timerAutoSave.Start(); } + Main_Resize(null, null); } void TimerAutoSaveTick(object sender, EventArgs e) @@ -8293,6 +8482,188 @@ namespace Nikse.SubtitleEdit.Forms private void toolStripMenuItemVideo_DropDownOpening(object sender, EventArgs e) { closeVideoToolStripMenuItem.Visible = !string.IsNullOrEmpty(_videoFileName); + } + + private void textBoxListViewTextAlternate_TextChanged(object sender, EventArgs e) + { + if (_subtitleAlternate == null || _subtitleAlternate.Paragraphs.Count < 1) + return; + + if (_subtitleListViewIndex >= 0) + { + Paragraph original = Utilities.GetOriginalParagraph(_subtitleListViewIndex, _subtitle.Paragraphs[_subtitleListViewIndex], _subtitleAlternate.Paragraphs); + if (original != null) + { + string text = textBoxListViewTextAlternate.Text.TrimEnd(); + + // update _subtitle + listview + original.Text = text; + UpdateListViewTextInfo(labelTextAlternateLineLengths, labelAlternateSingleLine, labelTextAlternateLineTotal, labelAlternateCharactersPerSecond, original); + SubtitleListview1.SetAlternateText(_subtitleListViewIndex, text); + _changeAlternate = true; + } + } + } + + private void textBoxListViewTextAlternate_KeyDown(object sender, KeyEventArgs e) + { + if (_subtitleAlternate == null || _subtitleAlternate.Paragraphs.Count < 1) + return; + + int numberOfNewLines = textBoxListViewTextAlternate.Text.Length - textBoxListViewTextAlternate.Text.Replace(Environment.NewLine, " ").Length; + if (e.KeyCode == Keys.Enter && numberOfNewLines > 1) + { + e.SuppressKeyPress = true; + } + else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.R) + { + if (textBoxListViewTextAlternate.Text.Length > 0) + textBoxListViewTextAlternate.Text = Utilities.AutoBreakLine(textBoxListViewTextAlternate.Text); + e.SuppressKeyPress = true; + } + else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.U) + { + textBoxListViewTextAlternate.Text = Utilities.UnbreakLine(textBoxListViewTextAlternate.Text); + e.SuppressKeyPress = true; + } + else if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.I) + { + if (textBoxListViewTextAlternate.SelectionLength == 0) + { + string tag = "i"; + if (textBoxListViewTextAlternate.Text.Contains("<" + tag + ">")) + { + textBoxListViewTextAlternate.Text = textBoxListViewTextAlternate.Text.Replace("<" + tag + ">", string.Empty); + textBoxListViewTextAlternate.Text = textBoxListViewTextAlternate.Text.Replace("", string.Empty); + } + else + { + textBoxListViewTextAlternate.Text = string.Format("<{0}>{1}", tag, textBoxListViewTextAlternate.Text); + } + } + else + { + //NIO:TODO: TextBoxListViewToogleTag("i"); + } + } + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.D) + { + textBoxListViewTextAlternate.SelectionLength = 0; + e.SuppressKeyPress = true; + } + + // last key down in text + _lastTextKeyDownTicks = DateTime.Now.Ticks; + } + + private void openOriginalToolStripMenuItem_Click(object sender, EventArgs e) + { + OpenAlternateSubtitle(); + } + + private void saveOriginalAstoolStripMenuItem_Click(object sender, EventArgs e) + { + SubtitleFormat currentFormat = GetCurrentSubtitleFormat(); + Utilities.SetSaveDialogFilter(saveFileDialog1, currentFormat); + + saveFileDialog1.Title = _language.SaveOriginalSubtitleAs; + saveFileDialog1.DefaultExt = "*" + currentFormat.Extension; + saveFileDialog1.AddExtension = true; + + if (!string.IsNullOrEmpty(_videoFileName)) + saveFileDialog1.FileName = Path.GetFileNameWithoutExtension(_videoFileName); + else + saveFileDialog1.FileName = Path.GetFileNameWithoutExtension(_subtitleAlternateFileName); + + if (!string.IsNullOrEmpty(openFileDialog1.InitialDirectory)) + saveFileDialog1.InitialDirectory = openFileDialog1.InitialDirectory; + + DialogResult result = saveFileDialog1.ShowDialog(this); + if (result == DialogResult.OK) + { + //TODO!!!! + } + } + + private void saveOriginalToolStripMenuItem_Click(object sender, EventArgs e) + { + SubtitleFormat format = GetCurrentSubtitleFormat(); + + if (string.IsNullOrEmpty(_subtitleAlternateFileName)) + { + saveOriginalAstoolStripMenuItem_Click(null, null); + return; + } + + try + { + string allText = _subtitleAlternate.ToText(format).Trim(); + var currentEncoding = GetCurrentEncoding(); + if (currentEncoding == Encoding.Default && (allText.Contains("♪") || allText.Contains("♫") | allText.Contains("♥"))) // ANSI & music/unicode symbols + { + if (MessageBox.Show(string.Format(_language.UnicodeMusicSymbolsAnsiWarning), Title, MessageBoxButtons.YesNo) == DialogResult.No) + return; + } + + bool containsNegativeTime = false; + foreach (var p in _subtitleAlternate.Paragraphs) + { + if (p.StartTime.TotalMilliseconds < 0 || p.EndTime.TotalMilliseconds < 0) + { + containsNegativeTime = true; + break; + } + } + if (containsNegativeTime && !string.IsNullOrEmpty(_language.NegativeTimeWarning)) + { + if (MessageBox.Show(_language.NegativeTimeWarning, Title, MessageBoxButtons.YesNo) == DialogResult.No) + return; + } + + if (File.Exists(_subtitleAlternateFileName)) + { + DateTime fileOnDisk = File.GetLastWriteTime(_subtitleAlternateFileName); + if (_fileDateTime != fileOnDisk && _fileDateTime != new DateTime()) + { + if (MessageBox.Show(string.Format(_language.OverwriteModifiedFile, + _fileName, fileOnDisk.ToShortDateString(), fileOnDisk.ToString("HH:mm:ss"), + Environment.NewLine, _fileDateTime.ToShortDateString(), _fileDateTime.ToString("HH:mm:ss")), + Title + " - " + _language.FileOnDiskModified, MessageBoxButtons.YesNo) == DialogResult.No) + return; + } + File.Delete(_subtitleAlternateFileName); + } + + File.WriteAllText(_subtitleAlternateFileName, allText, currentEncoding); + _fileDateTime = File.GetLastWriteTime(_subtitleAlternateFileName); + ShowStatus(string.Format(_language.SavedSubtitleX, _subtitleAlternateFileName)); + _changeAlternate = false; + } + catch + { + MessageBox.Show(string.Format(_language.UnableToSaveSubtitleX, _subtitleAlternateFileName)); + } + } + + private void removeOriginalToolStripMenuItem_Click(object sender, EventArgs e) + { + SubtitleListview1.HideAlternateTextColumn(); + _subtitleAlternate = new Subtitle(); + _subtitleAlternateFileName = null; + + buttonUnBreak.Visible = true; + buttonUndoListViewChanges.Visible = true; + textBoxListViewTextAlternate.Visible = false; + labelAlternateText.Visible = false; + labelAlternateCharactersPerSecond.Visible = false; + labelTextAlternateLineLengths.Visible = false; + labelAlternateSingleLine.Visible = false; + labelTextAlternateLineTotal.Visible = false; + textBoxListViewText.Width = (groupBoxEdit.Width - (textBoxListViewText.Left + 8 + buttonUnBreak.Width)); + textBoxListViewText.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right; + + labelCharactersPerSecond.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelCharactersPerSecond.Width); + labelTextLineTotal.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelTextLineTotal.Width); } } diff --git a/src/Logic/Language.cs b/src/Logic/Language.cs index fb9b39bac..489a9fe50 100644 --- a/src/Logic/Language.cs +++ b/src/Logic/Language.cs @@ -481,7 +481,10 @@ namespace Nikse.SubtitleEdit.Logic { SaveChangesToUntitled = "Save changes to untitled?", SaveChangesToX = "Save changes to {0}?", + SaveChangesToUntitledOriginal = "Save changes to untitled original?", + SaveChangesToOriginalX = "Save changes to original {0}?", SaveSubtitleAs = "Save subtitle as...", + SaveOriginalSubtitleAs = "Save original subtitle as...", NoSubtitleLoaded = "No subtitle loaded", VisualSyncSelectedLines = "Visual sync - selected lines", VisualSyncTitle = "Visual sync", @@ -497,6 +500,7 @@ namespace Nikse.SubtitleEdit.Logic FileIsEmptyOrShort = "File is empty or very short!", FileNotFound = "File not found: {0}", SavedSubtitleX = "Saved subtitle {0}", + SavedOriginalSubtitleX = "Saved original subtitle {0}", FileOnDiskModified = "file on disk modified", OverwriteModifiedFile = "Overwrite the file {0} modified at {1} {2}{3} with current file loaded from disk at {4} {5}?", UnableToSaveSubtitleX = "Unable to save subtitle file {0}", diff --git a/src/Logic/LanguageStructure.cs b/src/Logic/LanguageStructure.cs index 76927101e..dcea58f0b 100644 --- a/src/Logic/LanguageStructure.cs +++ b/src/Logic/LanguageStructure.cs @@ -413,7 +413,10 @@ public MainVideoControls VideoControls { get; set; } public string SaveChangesToUntitled { get; set; } public string SaveChangesToX { get; set; } + public string SaveChangesToUntitledOriginal { get; set; } + public string SaveChangesToOriginalX { get; set; } public string SaveSubtitleAs { get; set; } + public string SaveOriginalSubtitleAs { get; set; } public string NoSubtitleLoaded { get; set; } public string VisualSyncSelectedLines { get; set; } public string VisualSyncTitle { get; set; } @@ -429,6 +432,7 @@ public string FileIsEmptyOrShort { get; set; } public string FileNotFound { get; set; } public string SavedSubtitleX { get; set; } + public string SavedOriginalSubtitleX { get; set; } public string FileOnDiskModified { get; set; } public string OverwriteModifiedFile { get; set; } public string UnableToSaveSubtitleX { get; set; } diff --git a/src/Logic/Settings.cs b/src/Logic/Settings.cs index 3f1c1d76c..395ea44a2 100644 --- a/src/Logic/Settings.cs +++ b/src/Logic/Settings.cs @@ -240,6 +240,7 @@ namespace Nikse.SubtitleEdit.Logic public bool SyncListViewWithVideoWhilePlaying { get; set; } public int AutoBackupSeconds { get; set; } public string SpellChecker { get; set; } + public bool AllowEditOfOriginalSubtitle { get; set; } public GeneralSettings() { @@ -287,6 +288,7 @@ namespace Nikse.SubtitleEdit.Logic SyncListViewWithVideoWhilePlaying = false; AutoBackupSeconds = 0; SpellChecker = "hunspell"; + AllowEditOfOriginalSubtitle = false; } } @@ -641,7 +643,10 @@ namespace Nikse.SubtitleEdit.Logic settings.General.AutoBackupSeconds = Convert.ToInt32(subNode.InnerText); subNode = node.SelectSingleNode("SpellChecker"); if (subNode != null) - settings.General.SpellChecker = subNode.InnerText; + settings.General.SpellChecker = subNode.InnerText; + subNode = node.SelectSingleNode("AllowEditOfOriginalSubtitle"); + if (subNode != null) + settings.General.AllowEditOfOriginalSubtitle = Convert.ToBoolean(subNode.InnerText); settings.Tools = new Nikse.SubtitleEdit.Logic.ToolsSettings(); node = doc.DocumentElement.SelectSingleNode("Tools"); @@ -951,6 +956,7 @@ namespace Nikse.SubtitleEdit.Logic textWriter.WriteElementString("SyncListViewWithVideoWhilePlaying", settings.General.SyncListViewWithVideoWhilePlaying.ToString()); textWriter.WriteElementString("AutoBackupSeconds", settings.General.AutoBackupSeconds.ToString()); textWriter.WriteElementString("SpellChecker", settings.General.SpellChecker); + textWriter.WriteElementString("AllowEditOfOriginalSubtitle", settings.General.AllowEditOfOriginalSubtitle.ToString()); textWriter.WriteEndElement(); textWriter.WriteStartElement("Tools", ""); diff --git a/src/Logic/Utilities.cs b/src/Logic/Utilities.cs index 4f11de9f2..89761d354 100644 --- a/src/Logic/Utilities.cs +++ b/src/Logic/Utilities.cs @@ -1168,47 +1168,80 @@ namespace Nikse.SubtitleEdit.Logic } } - - internal static void DisplayLineLengths(Panel panelSingleLine, string text) + internal static void GetLineLengths(Label label, string text) { - string cleanText = RemoveHtmlTags(text).Replace(Environment.NewLine, "|"); + label.ForeColor = Color.Black; + string cleanText = Utilities.RemoveHtmlTags(text).Replace(Environment.NewLine, "|"); string[] lines = cleanText.Split('|'); - int position = 0; - - // we must dispose before clearing controls (or this will occur: "Error creating window handle") - foreach (Control ctrl in panelSingleLine.Controls) - ctrl.Dispose(); - panelSingleLine.Controls.Clear(); + const int max = 3; + StringBuilder sb = new StringBuilder(); for (int i = 0; i < lines.Length; i++) { string line = lines[i]; if (i > 0) { - var labelSlash = new Label {AutoSize = true, Margin = new Padding(0)}; - panelSingleLine.Controls.Add(labelSlash); - labelSlash.Text = "/"; - labelSlash.Top = 0; - labelSlash.Left = position; - position += labelSlash.Width - 4; - + sb.Append("/"); } - var labelLength = new Label(); - labelLength.AutoSize = true; - labelLength.Margin = new Padding(0); - panelSingleLine.Controls.Add(labelLength); - labelLength.Text = line.Length.ToString(); - labelLength.Top = 0; - labelLength.Left = position; - position += labelLength.Width - 4; + + if (i > max) + { + label.ForeColor = Color.Red; + sb.Append("..."); + label.Text = sb.ToString(); + return; + } + + sb.Append(line.Length.ToString()); if (line.Length > Configuration.Settings.General.SubtitleLineMaximumLength) - labelLength.ForeColor = Color.Red; + label.ForeColor = Color.Red; else if (line.Length > Configuration.Settings.General.SubtitleLineMaximumLength - 5) - labelLength.ForeColor = Color.Orange; + label.ForeColor = Color.Orange; } + label.Text = sb.ToString(); } + //internal static void DisplayLineLengths(Panel panelSingleLine, string text) + //{ + // string cleanText = RemoveHtmlTags(text).Replace(Environment.NewLine, "|"); + // string[] lines = cleanText.Split('|'); + + // int position = 0; + + // // we must dispose before clearing controls (or this will occur: "Error creating window handle") + // foreach (Control ctrl in panelSingleLine.Controls) + // ctrl.Dispose(); + // panelSingleLine.Controls.Clear(); + + // for (int i = 0; i < lines.Length; i++) + // { + // string line = lines[i]; + // if (i > 0) + // { + // var labelSlash = new Label {AutoSize = true, Margin = new Padding(0)}; + // panelSingleLine.Controls.Add(labelSlash); + // labelSlash.Text = "/"; + // labelSlash.Top = 0; + // labelSlash.Left = position; + // position += labelSlash.Width - 4; + + // } + // var labelLength = new Label(); + // labelLength.AutoSize = true; + // labelLength.Margin = new Padding(0); + // panelSingleLine.Controls.Add(labelLength); + // labelLength.Text = line.Length.ToString(); + // labelLength.Top = 0; + // labelLength.Left = position; + // position += labelLength.Width - 4; + // if (line.Length > Configuration.Settings.General.SubtitleLineMaximumLength) + // labelLength.ForeColor = Color.Red; + // else if (line.Length > Configuration.Settings.General.SubtitleLineMaximumLength - 5) + // labelLength.ForeColor = Color.Orange; + // } + //} + public static bool IsValidRegex(string testPattern) { if (!string.IsNullOrEmpty(testPattern)) @@ -1643,6 +1676,26 @@ namespace Nikse.SubtitleEdit.Logic } return text; } + + internal static Paragraph GetOriginalParagraph(int index, Paragraph paragraph, List originalParagraphs) + { + if (index < originalParagraphs.Count && Math.Abs(originalParagraphs[index].StartTime.TotalMilliseconds - paragraph.StartTime.TotalMilliseconds) < 50) + return originalParagraphs[index]; + + foreach (Paragraph p in originalParagraphs) + { + if (p.StartTime.TotalMilliseconds == paragraph.StartTime.TotalMilliseconds) + return p; + } + + foreach (Paragraph p in originalParagraphs) + { + if (p.StartTime.TotalMilliseconds > paragraph.StartTime.TotalMilliseconds - 200 && + p.StartTime.TotalMilliseconds < paragraph.StartTime.TotalMilliseconds + 1000) + return p; + } + return null; + } } } \ No newline at end of file