Advertisement
ivandrofly

Subtitle Edit

Feb 27th, 2015
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.31 KB | None | 0 0
  1. using System;
  2. using System.Globalization;
  3. using System.Windows.Forms;
  4. using Nikse.SubtitleEdit.Logic;
  5. using System.Collections.Generic;
  6. using System.Drawing;
  7.  
  8. namespace Nikse.SubtitleEdit.Forms
  9. {
  10.     public partial class AutoBreakUnbreakLines : PositionAndSizeForm
  11.     {
  12.         private List<Paragraph> _paragraphs2;
  13.         private List<Paragraph> _paragraphs;
  14.         private int _changes;
  15.         private bool _modeAutoBalance;
  16.  
  17.         public int Changes
  18.         {
  19.             get { return _changes; }
  20.         }
  21.  
  22.         public List<Paragraph> FixedParagraphs
  23.         {
  24.             get
  25.             {
  26.                 return _paragraphs;
  27.             }
  28.         }
  29.  
  30.         public AutoBreakUnbreakLines()
  31.         {
  32.             InitializeComponent();
  33.             groupBoxLinesFound.Text = string.Empty;
  34.             listViewFixes.Columns[2].Width = 290;
  35.             listViewFixes.Columns[3].Width = 290;
  36.  
  37.             listViewFixes.Columns[0].Text = Configuration.Settings.Language.General.Apply;
  38.             listViewFixes.Columns[1].Text = Configuration.Settings.Language.General.LineNumber;
  39.             listViewFixes.Columns[2].Text = Configuration.Settings.Language.General.Before;
  40.             listViewFixes.Columns[3].Text = Configuration.Settings.Language.General.After;
  41.             buttonOK.Text = Configuration.Settings.Language.General.Ok;
  42.             buttonCancel.Text = Configuration.Settings.Language.General.Cancel;
  43.             FixLargeFonts();
  44.         }
  45.  
  46.         private void FixLargeFonts()
  47.         {
  48.             Graphics graphics = CreateGraphics();
  49.             SizeF textSize = graphics.MeasureString(buttonOK.Text, Font);
  50.             if (textSize.Height > buttonOK.Height - 4)
  51.             {
  52.                 var newButtonHeight = (int)(textSize.Height + 7 + 0.5);
  53.                 Utilities.SetButtonHeight(this, newButtonHeight, 1);
  54.             }
  55.         }
  56.  
  57.         public void Initialize(List<Paragraph> paragraphs, bool autoBalance)
  58.         {
  59.             _modeAutoBalance = autoBalance;
  60.             _paragraphs2 = paragraphs;
  61.             if (autoBalance)
  62.             {
  63.                 labelCondition.Text = Configuration.Settings.Language.AutoBreakUnbreakLines.OnlyBreakLinesLongerThan;
  64.                 const int start = 10;
  65.                 const int max = 60;
  66.                 for (int i = start; i <= max; i++)
  67.                     comboBoxConditions.Items.Add(i.ToString(CultureInfo.InvariantCulture));
  68.  
  69.                 int index = Configuration.Settings.Tools.MergeLinesShorterThan - (start + 1);
  70.                 if (index > 0 && index < max)
  71.                     comboBoxConditions.SelectedIndex = index;
  72.                 else
  73.                     comboBoxConditions.SelectedIndex = 30;
  74.  
  75.                 AutoBalance();
  76.             }
  77.             else
  78.             {
  79.                 labelCondition.Text = Configuration.Settings.Language.AutoBreakUnbreakLines.OnlyUnbreakLinesLongerThan;
  80.                 for (int i = 5; i < 51; i++)
  81.                     comboBoxConditions.Items.Add(i.ToString(CultureInfo.InvariantCulture));
  82.                 comboBoxConditions.SelectedIndex = 5;
  83.  
  84.                 Unbreak();
  85.             }
  86.         }
  87.  
  88.         public int MinimumLength
  89.         {
  90.             get
  91.             {
  92.                 return int.Parse(comboBoxConditions.Items[comboBoxConditions.SelectedIndex].ToString());
  93.             }
  94.         }
  95.  
  96.         public int MergeLinesShorterThan
  97.         {
  98.             get
  99.             {
  100.                 if (Configuration.Settings.Tools.MergeLinesShorterThan > MinimumLength)
  101.                     return MinimumLength - 1;
  102.                 return Configuration.Settings.Tools.MergeLinesShorterThan;
  103.             }
  104.         }
  105.  
  106.         private void AutoBalance()
  107.         {
  108.             int minLength = MinimumLength;
  109.             Text = Configuration.Settings.Language.AutoBreakUnbreakLines.TitleAutoBreak;
  110.  
  111.             Subtitle sub = new Subtitle();
  112.             foreach (Paragraph p in _paragraphs2)
  113.                 sub.Paragraphs.Add(p);
  114.             string language = Utilities.AutoDetectGoogleLanguage(sub);
  115.  
  116.             listViewFixes.BeginUpdate();
  117.             listViewFixes.Items.Clear();
  118.             foreach (Paragraph p in _paragraphs2)
  119.             {
  120.                 if (p.Text.Length > minLength || p.Text.Contains(Environment.NewLine))
  121.                 {
  122.                     string text = Utilities.AutoBreakLine(p.Text, 5, MergeLinesShorterThan, language);
  123.                     if (text != p.Text)
  124.                     {
  125.                         AddToListView(p, text);
  126.                         _changes++;
  127.                     }
  128.                 }
  129.             }
  130.             listViewFixes.EndUpdate();
  131.             groupBoxLinesFound.Text = string.Format(Configuration.Settings.Language.AutoBreakUnbreakLines.LinesFoundX, listViewFixes.Items.Count);
  132.         }
  133.  
  134.         private void Unbreak()
  135.         {
  136.             int minLength = int.Parse(comboBoxConditions.Items[comboBoxConditions.SelectedIndex].ToString());
  137.             Text = Configuration.Settings.Language.AutoBreakUnbreakLines.TitleUnbreak;
  138.             listViewFixes.BeginUpdate();
  139.             listViewFixes.Items.Clear();
  140.             foreach (Paragraph p in _paragraphs2)
  141.             {
  142.                 if (p.Text != null && p.Text.Length > minLength && p.Text.Contains(Environment.NewLine))
  143.                 {
  144.                     string text = p.Text.Replace(Environment.NewLine, " ");
  145.                     while (text.Contains("  "))
  146.                         text = text.Replace("  ", " ");
  147.  
  148.                     if (text != p.Text)
  149.                     {
  150.                         AddToListView(p, text);
  151.                         _changes++;
  152.                     }
  153.                 }
  154.             }
  155.             listViewFixes.EndUpdate();
  156.             groupBoxLinesFound.Text = string.Format(Configuration.Settings.Language.AutoBreakUnbreakLines.LinesFoundX, listViewFixes.Items.Count);
  157.         }
  158.  
  159.         private void AutoBreakUnbreakLinesKeyDown(object sender, KeyEventArgs e)
  160.         {
  161.             if (e.KeyCode == Keys.Escape)
  162.                 DialogResult = DialogResult.Cancel;
  163.         }
  164.  
  165.         private void AddToListView(Paragraph p, string newText)
  166.         {
  167.             var item = new ListViewItem(string.Empty) { Tag = p, Checked = true };
  168.  
  169.             var subItem = new ListViewItem.ListViewSubItem(item, p.Number.ToString(CultureInfo.InvariantCulture));
  170.             item.SubItems.Add(subItem);
  171.             subItem = new ListViewItem.ListViewSubItem(item, p.Text.Replace(Environment.NewLine, Configuration.Settings.General.ListViewLineSeparatorString));
  172.             item.SubItems.Add(subItem);
  173.             subItem = new ListViewItem.ListViewSubItem(item, newText.Replace(Environment.NewLine, Configuration.Settings.General.ListViewLineSeparatorString));
  174.             item.SubItems.Add(subItem);
  175.  
  176.             listViewFixes.Items.Add(item);
  177.         }
  178.  
  179.         private bool IsFixAllowed(Paragraph p)
  180.         {
  181.             var lastIndex = listViewFixes.Items.Count - 1;
  182.             var firstIndex = 0;
  183.             while (firstIndex <= lastIndex)
  184.             {
  185.                 var index = (firstIndex + lastIndex) >> 1;
  186.                 var item = listViewFixes.Items[index];
  187.                 var mPrph = (Paragraph)item.Tag;
  188.  
  189.                 if (mPrph.ID == p.ID)
  190.                     return item.Checked;
  191.                 if (mPrph.Number < p.Number)
  192.                     firstIndex = index + 1;
  193.                 else
  194.                     lastIndex = index - 1;
  195.             }
  196.             return false;
  197.         }
  198.  
  199.         private void ButtonOkClick(object sender, EventArgs e)
  200.         {
  201.             _paragraphs = new List<Paragraph>();
  202.             foreach (ListViewItem item in this.listViewFixes.Items)
  203.             {
  204.                 if (item.Checked)
  205.                     _paragraphs.Add((Paragraph)item.Tag);
  206.             }
  207.             /*
  208.             for (int i = _paragraphs.Count - 1; i >= 0; i--)
  209.             {
  210.                 if (!IsFixAllowed(_paragraphs[i]))
  211.                     _paragraphs.RemoveAt(i);
  212.             }*/
  213.             DialogResult = DialogResult.OK;
  214.         }
  215.  
  216.         private void ComboBoxConditionsSelectedIndexChanged(object sender, EventArgs e)
  217.         {
  218.             if (_modeAutoBalance)
  219.                 AutoBalance();
  220.             else
  221.                 Unbreak();
  222.         }
  223.     }
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement