From 3e74b7cc9f248fad8cd505eee996133b0f9bcf0a Mon Sep 17 00:00:00 2001 From: niksedk Date: Sun, 28 Nov 2010 08:44:08 +0000 Subject: [PATCH] Added "Chars/sec" info to textbox in main window git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@170 99eadd0c-20b8-1223-b5c4-2a2b2df33de2 --- src/Forms/Main.Designer.cs | 13 ++++++ src/Forms/Main.cs | 43 ++++++++++++++--- src/Forms/Main.resx | 82 ++++++++++++++++----------------- src/Logic/Language.cs | 1 + src/Logic/LanguageStructure.cs | 1 + src/Logic/Settings.cs | 6 +++ src/Resources/da-DK.xml | 1 + src/Resources/da-DK.xml.zip | Bin 19641 -> 19668 bytes 8 files changed, 99 insertions(+), 48 deletions(-) diff --git a/src/Forms/Main.Designer.cs b/src/Forms/Main.Designer.cs index 176d47e65..dd25ee17b 100644 --- a/src/Forms/Main.Designer.cs +++ b/src/Forms/Main.Designer.cs @@ -301,6 +301,7 @@ this.mergeWithNextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItemWaveFormPlaySelection = new System.Windows.Forms.ToolStripMenuItem(); + this.labelCharactersPerSecond = new System.Windows.Forms.Label(); this.statusStrip1.SuspendLayout(); this.toolStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout(); @@ -1331,6 +1332,7 @@ // this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.labelCharactersPerSecond); this.groupBox1.Controls.Add(this.labelAutoDuration); this.groupBox1.Controls.Add(this.panelSingleLine); this.groupBox1.Controls.Add(this.labelTextLineTotal); @@ -2948,6 +2950,16 @@ this.toolStripMenuItemWaveFormPlaySelection.Text = "Play selection"; this.toolStripMenuItemWaveFormPlaySelection.Click += new System.EventHandler(this.toolStripMenuItemWaveFormPlaySelection_Click); // + // 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(1170, 12); + this.labelCharactersPerSecond.Name = "labelCharactersPerSecond"; + this.labelCharactersPerSecond.Size = new System.Drawing.Size(177, 13); + this.labelCharactersPerSecond.TabIndex = 31; + this.labelCharactersPerSecond.Text = "labelCharactersPerSecond"; + this.labelCharactersPerSecond.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // // Main // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -3288,6 +3300,7 @@ private System.Windows.Forms.ToolStripMenuItem underlineToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem colorToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem fontNameToolStripMenuItem; + private System.Windows.Forms.Label labelCharactersPerSecond; } } diff --git a/src/Forms/Main.cs b/src/Forms/Main.cs index b1114b400..e5053d028 100644 --- a/src/Forms/Main.cs +++ b/src/Forms/Main.cs @@ -140,6 +140,7 @@ namespace Nikse.SubtitleEdit.Forms SetLanguage(Configuration.Settings.General.Language); labelTextLineLengths.Text = string.Empty; + labelCharactersPerSecond.Text = string.Empty; labelTextLineTotal.Text = string.Empty; labelStartTimeWarning.Text = string.Empty; labelDurationWarning.Text = string.Empty; @@ -1309,8 +1310,9 @@ namespace Nikse.SubtitleEdit.Forms textBoxListViewText.Text = string.Empty; textBoxListViewText.Enabled = false; labelTextLineLengths.Text = string.Empty; + labelCharactersPerSecond.Text = string.Empty; labelTextLineTotal.Text = string.Empty; - + if (mediaPlayer.VideoPlayer != null) { mediaPlayer.VideoPlayer.DisposeVideoPlayer(); @@ -3168,12 +3170,11 @@ namespace Nikse.SubtitleEdit.Forms _subtitleListViewIndex = firstSelectedIndex; _oldSelectedParagraph = new Paragraph(p); - UpdateListViewTextInfo(p.Text); + UpdateListViewTextInfo(p); } } } - private void SubtitleListview1_SelectedIndexChanged(object sender, EventArgs e) { SubtitleListView1SelectedIndexChange(); @@ -3187,8 +3188,33 @@ namespace Nikse.SubtitleEdit.Forms toolStripSelected.Text = string.Format(_language.XLinesSelected, SubtitleListview1.SelectedItems.Count); } - private void UpdateListViewTextInfo(string text) + private void UpdateListViewTextCharactersPerSeconds(Paragraph paragraph) { + string s = Utilities.RemoveHtmlTags(paragraph.Text).Replace(" ", string.Empty).Replace(Environment.NewLine, string.Empty); + if (paragraph.Duration.TotalSeconds > 0) + { + double charactersPerSecond = s.Length / paragraph.Duration.TotalSeconds; + if (charactersPerSecond > Configuration.Settings.General.SubtitleMaximumCharactersPerSeconds + 7) + labelCharactersPerSecond.ForeColor = System.Drawing.Color.Red; + else if (charactersPerSecond > Configuration.Settings.General.SubtitleMaximumCharactersPerSeconds) + labelCharactersPerSecond.ForeColor = System.Drawing.Color.Orange; + else + labelCharactersPerSecond.ForeColor = System.Drawing.Color.Black; + labelCharactersPerSecond.Text = string.Format(_language.CharactersPerSecond, charactersPerSecond); + } + else + { + labelCharactersPerSecond.ForeColor = System.Drawing.Color.Red; + labelCharactersPerSecond.Text = string.Format(_language.CharactersPerSecond, _languageGeneral.NotAvailable); + } + } + + private void UpdateListViewTextInfo(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); @@ -3209,6 +3235,7 @@ namespace Nikse.SubtitleEdit.Forms labelTextLineTotal.ForeColor = System.Drawing.Color.Red; labelTextLineTotal.Text = string.Format(_languageGeneral.TotalLengthXSplitLine, s.Length); } + UpdateListViewTextCharactersPerSeconds(paragraph); } private void ButtonNextClick(object sender, EventArgs e) @@ -3280,10 +3307,10 @@ namespace Nikse.SubtitleEdit.Forms if (_subtitleListViewIndex >= 0) { string text = textBoxListViewText.Text.TrimEnd(); - UpdateListViewTextInfo(text); - + // update _subtitle + listview _subtitle.Paragraphs[_subtitleListViewIndex].Text = text; + UpdateListViewTextInfo(_subtitle.Paragraphs[_subtitleListViewIndex]); SubtitleListview1.SetText(_subtitleListViewIndex, text); _change = true; } @@ -3478,7 +3505,7 @@ namespace Nikse.SubtitleEdit.Forms { labelDurationWarning.Text = _languageGeneral.Negative; } - } + } } } @@ -3492,6 +3519,7 @@ namespace Nikse.SubtitleEdit.Forms if (currentParagraph != null) { UpdateOverlapErrors(timeUpDownStartTime.TimeCode); + UpdateListViewTextCharactersPerSeconds(currentParagraph); // update _subtitle + listview currentParagraph.EndTime.TotalMilliseconds = currentParagraph.StartTime.TotalMilliseconds + ((double)numericUpDownDuration.Value * 1000.0); @@ -3531,6 +3559,7 @@ namespace Nikse.SubtitleEdit.Forms numericUpDownDuration.ValueChanged += NumericUpDownDurationValueChanged; UpdateOverlapErrors(timeUpDownStartTime.TimeCode); + UpdateListViewTextCharactersPerSeconds(p); if (_subtitle != null && _subtitle.Paragraphs.Count > 0) textBoxListViewText.Enabled = true; } diff --git a/src/Forms/Main.resx b/src/Forms/Main.resx index 683705515..4c96b714f 100644 --- a/src/Forms/Main.resx +++ b/src/Forms/Main.resx @@ -291,47 +291,47 @@ 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 RK5CYII= diff --git a/src/Logic/Language.cs b/src/Logic/Language.cs index 9bf033fff..7bcaf1726 100644 --- a/src/Logic/Language.cs +++ b/src/Logic/Language.cs @@ -636,6 +636,7 @@ namespace Nikse.SubtitleEdit.Logic BeforeInsertSubtitleAtVideoPosition = "Before insert subtitle at video position", BeforeSetStartTimeAndOffsetTheRest = "Before set start time and offset the rest", ContinueWithCurrentSpellCheck = "Continue with current spell check?", + CharactersPerSecond = "Chars/sec: {0:0.00}", Menu = new LanguageStructure.Main.MainMenu { diff --git a/src/Logic/LanguageStructure.cs b/src/Logic/LanguageStructure.cs index 99addbafa..aca2c4ae6 100644 --- a/src/Logic/LanguageStructure.cs +++ b/src/Logic/LanguageStructure.cs @@ -569,6 +569,7 @@ public string BeforeInsertSubtitleAtVideoPosition { get; set; } public string BeforeSetStartTimeAndOffsetTheRest { get; set; } public string ContinueWithCurrentSpellCheck { get; set; } + public string CharactersPerSecond { get; set; } public class MainMenu { diff --git a/src/Logic/Settings.cs b/src/Logic/Settings.cs index cecde723c..97b03fc27 100644 --- a/src/Logic/Settings.cs +++ b/src/Logic/Settings.cs @@ -220,6 +220,7 @@ namespace Nikse.SubtitleEdit.Logic public bool StartInSourceView { get; set; } public bool RemoveBlankLinesWhenOpening { get; set; } public int SubtitleLineMaximumLength { get; set; } + public int SubtitleMaximumCharactersPerSeconds { get; set; } public string SpellCheckLanguage { get; set; } public string VideoPlayer { get; set; } public int VideoPlayerDefaultVolume { get; set; } @@ -263,6 +264,7 @@ namespace Nikse.SubtitleEdit.Logic StartLoadLastFile = true; StartRememberPositionAndSize = true; SubtitleLineMaximumLength = 65; + SubtitleMaximumCharactersPerSeconds = 25; SpellCheckLanguage = null; VideoPlayer = string.Empty; VideoPlayerDefaultVolume = 50; @@ -547,6 +549,9 @@ namespace Nikse.SubtitleEdit.Logic subNode = node.SelectSingleNode("SubtitleLineMaximumLength"); if (subNode != null) settings.General.SubtitleLineMaximumLength = Convert.ToInt32(subNode.InnerText); + subNode = node.SelectSingleNode("SubtitleMaximumCharactersPerSeconds"); + if (subNode != null) + settings.General.SubtitleMaximumCharactersPerSeconds = Convert.ToInt32(subNode.InnerText); subNode = node.SelectSingleNode("SpellCheckLanguage"); if (subNode != null) settings.General.SpellCheckLanguage = subNode.InnerText; @@ -853,6 +858,7 @@ namespace Nikse.SubtitleEdit.Logic textWriter.WriteElementString("StartInSourceView", settings.General.StartInSourceView.ToString()); textWriter.WriteElementString("RemoveBlankLinesWhenOpening", settings.General.RemoveBlankLinesWhenOpening.ToString()); textWriter.WriteElementString("SubtitleLineMaximumLength", settings.General.SubtitleLineMaximumLength.ToString()); + textWriter.WriteElementString("SubtitleMaximumCharactersPerSeconds", settings.General.SubtitleMaximumCharactersPerSeconds.ToString()); textWriter.WriteElementString("SpellCheckLanguage", settings.General.SpellCheckLanguage); textWriter.WriteElementString("VideoPlayer", settings.General.VideoPlayer); textWriter.WriteElementString("VideoPlayerDefaultVolume", settings.General.VideoPlayerDefaultVolume.ToString()); diff --git a/src/Resources/da-DK.xml b/src/Resources/da-DK.xml index cbda92506..1af35f9e5 100644 --- a/src/Resources/da-DK.xml +++ b/src/Resources/da-DK.xml @@ -710,6 +710,7 @@ Fortsæt? Før ny tekst ved aktuel video position Før sæt start tid og juster resten Fortsæt med aktuelle stavekontrol? + Bogstav/sek: {0:0.00} Vælg undertekst fra Matroska fil diff --git a/src/Resources/da-DK.xml.zip b/src/Resources/da-DK.xml.zip index efa50e6fc2247c722d39d070a059ee0ce5d9e9c8..37c9349e58174c16e66f4b879d059afda1581982 100644 GIT binary patch delta 6083 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 JpzF)>000FoJ^%m! delta 6056 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 i9-P!2pEpPb07p%%hTjY8cysEx_Wuts;#gOF