2012-04-26 21:35:38 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using Nikse.SubtitleEdit.Logic;
|
|
|
|
|
|
|
|
|
|
namespace Nikse.SubtitleEdit.Forms
|
|
|
|
|
{
|
|
|
|
|
public partial class JoinSubtitles : Form
|
|
|
|
|
{
|
|
|
|
|
List<string> _fileNamesToJoin = new List<string>();
|
|
|
|
|
public Subtitle JoinedSubtitle { get; set; }
|
|
|
|
|
|
|
|
|
|
public JoinSubtitles()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
JoinedSubtitle = new Subtitle();
|
2012-04-28 18:39:22 +02:00
|
|
|
|
labelTotalLines.Text = string.Empty;
|
2012-04-26 21:35:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void buttonCancel_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DialogResult = DialogResult.Cancel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void buttonSplit_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DialogResult = DialogResult.OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void JoinSubtitles_KeyDown(object sender, KeyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode == Keys.Escape)
|
|
|
|
|
DialogResult = DialogResult.Cancel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listViewParts_DragEnter(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
|
|
|
|
|
e.Effect = DragDropEffects.All;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void listViewParts_DragDrop(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
|
|
|
|
foreach (string fileName in files)
|
|
|
|
|
{
|
|
|
|
|
bool alreadyInList = false;
|
|
|
|
|
foreach (string existingFileName in _fileNamesToJoin)
|
|
|
|
|
{
|
|
|
|
|
if (existingFileName.ToLower() == fileName.ToLower())
|
|
|
|
|
alreadyInList = true;
|
|
|
|
|
}
|
|
|
|
|
if (!alreadyInList)
|
2012-04-29 12:13:50 +02:00
|
|
|
|
_fileNamesToJoin.Add(fileName);
|
2012-04-26 21:35:38 +02:00
|
|
|
|
}
|
|
|
|
|
SortAndLoad();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SortAndLoad()
|
|
|
|
|
{
|
|
|
|
|
List<Subtitle> subtitles = new List<Subtitle>();
|
|
|
|
|
foreach (string fileName in _fileNamesToJoin)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Subtitle sub = new Subtitle();
|
|
|
|
|
Encoding encoding;
|
|
|
|
|
var format = sub.LoadSubtitle(fileName, out encoding, null);
|
|
|
|
|
if (format == null)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("Unkown subtitle format: " + fileName);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
subtitles.Add(sub);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception exception)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show(exception.Message);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int outer = 0; outer < subtitles.Count; outer++)
|
|
|
|
|
{
|
|
|
|
|
for (int inner = 1; inner < subtitles.Count; inner++)
|
|
|
|
|
{
|
|
|
|
|
var a = subtitles[inner - 1];
|
|
|
|
|
var b = subtitles[inner];
|
|
|
|
|
if (a.Paragraphs.Count > 0 && b.Paragraphs.Count > 0 && a.Paragraphs[0].StartTime.TotalMilliseconds > b.Paragraphs[0].StartTime.TotalMilliseconds)
|
|
|
|
|
{
|
|
|
|
|
string t1 = _fileNamesToJoin[inner - 1];
|
|
|
|
|
_fileNamesToJoin[inner - 1] = _fileNamesToJoin[inner];
|
|
|
|
|
_fileNamesToJoin[inner] = t1;
|
|
|
|
|
|
|
|
|
|
var t2 = subtitles[inner - 1];
|
|
|
|
|
subtitles[inner - 1] = subtitles[inner];
|
|
|
|
|
subtitles[inner] = t2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
listViewParts.Items.Clear();
|
|
|
|
|
int i = 0;
|
|
|
|
|
foreach (string fileName in _fileNamesToJoin)
|
|
|
|
|
{
|
|
|
|
|
Subtitle sub = subtitles[i];
|
|
|
|
|
ListViewItem lvi = new ListViewItem(string.Format("{0:#,###,###}", sub.Paragraphs.Count));
|
|
|
|
|
if (sub.Paragraphs.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
lvi.SubItems.Add(sub.Paragraphs[0].StartTime.ToString());
|
|
|
|
|
lvi.SubItems.Add(sub.Paragraphs[sub.Paragraphs.Count-1].StartTime.ToString());
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lvi.SubItems.Add("-");
|
|
|
|
|
lvi.SubItems.Add("-");
|
|
|
|
|
}
|
|
|
|
|
lvi.SubItems.Add(fileName);
|
|
|
|
|
listViewParts.Items.Add(lvi);
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
JoinedSubtitle = new Subtitle();
|
|
|
|
|
foreach (Subtitle sub in subtitles)
|
|
|
|
|
{
|
|
|
|
|
foreach (Paragraph p in sub.Paragraphs)
|
|
|
|
|
{
|
|
|
|
|
JoinedSubtitle.Paragraphs.Add(p);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
JoinedSubtitle.Renumber(1);
|
2012-04-28 18:39:22 +02:00
|
|
|
|
labelTotalLines.Text = string.Format("Total number of lines: {0:#,###,###}", JoinedSubtitle.Paragraphs.Count);
|
2012-04-26 21:35:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void JoinSubtitles_Resize(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
columnHeaderFileName.Width = -2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void buttonAddVobFile_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
openFileDialog1.Title = Configuration.Settings.Language.General.OpenSubtitle;
|
|
|
|
|
openFileDialog1.FileName = string.Empty;
|
|
|
|
|
openFileDialog1.Filter = Utilities.GetOpenDialogFilter();
|
|
|
|
|
openFileDialog1.Multiselect = true;
|
|
|
|
|
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
foreach (string fileName in openFileDialog1.FileNames)
|
|
|
|
|
{
|
|
|
|
|
bool alreadyInList = false;
|
|
|
|
|
foreach (string existingFileName in _fileNamesToJoin)
|
|
|
|
|
{
|
|
|
|
|
if (existingFileName.ToLower() == fileName.ToLower())
|
|
|
|
|
alreadyInList = true;
|
|
|
|
|
}
|
|
|
|
|
if (!alreadyInList)
|
|
|
|
|
_fileNamesToJoin.Add(fileName);
|
|
|
|
|
}
|
|
|
|
|
SortAndLoad();
|
2012-04-29 12:13:50 +02:00
|
|
|
|
}
|
2012-04-26 21:35:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ButtonRemoveVob_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
List<int> indices = new List<int>();
|
|
|
|
|
foreach (int index in listViewParts.SelectedIndices)
|
|
|
|
|
indices.Add(index);
|
|
|
|
|
indices.Reverse();
|
|
|
|
|
foreach (int index in indices)
|
|
|
|
|
_fileNamesToJoin.RemoveAt(index);
|
|
|
|
|
|
|
|
|
|
if (_fileNamesToJoin.Count == 0)
|
|
|
|
|
buttonClear_Click(null, null);
|
|
|
|
|
else
|
|
|
|
|
SortAndLoad();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void buttonClear_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
_fileNamesToJoin.Clear();
|
|
|
|
|
listViewParts.Items.Clear();
|
|
|
|
|
JoinedSubtitle = new Subtitle();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void JoinSubtitles_Shown(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
columnHeaderFileName.Width = -2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|