Allow sort/move for "Add end time of prev" in "Join subtitles" - thx Leon :)

Work on  #8257
This commit is contained in:
Nikolaj Olsson 2024-04-28 18:33:49 +02:00
parent 2122a8dc30
commit 443d88d195
4 changed files with 266 additions and 1 deletions

View File

@ -28,6 +28,7 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container();
this.buttonCancel = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button();
this.buttonJoin = new System.Windows.Forms.Button(); this.buttonJoin = new System.Windows.Forms.Button();
this.listViewParts = new System.Windows.Forms.ListView(); this.listViewParts = new System.Windows.Forms.ListView();
@ -45,7 +46,13 @@
this.numericUpDownAddMs = new Nikse.SubtitleEdit.Controls.NikseUpDown(); this.numericUpDownAddMs = new Nikse.SubtitleEdit.Controls.NikseUpDown();
this.radioButtonJoinAddTime = new System.Windows.Forms.RadioButton(); this.radioButtonJoinAddTime = new System.Windows.Forms.RadioButton();
this.labelAddTime = new Nikse.SubtitleEdit.Controls.NikseLabel(); this.labelAddTime = new Nikse.SubtitleEdit.Controls.NikseLabel();
this.contextMenuStripParts = new System.Windows.Forms.ContextMenuStrip(this.components);
this.moveUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.moveTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.moveBottomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.groupBoxPreview.SuspendLayout(); this.groupBoxPreview.SuspendLayout();
this.contextMenuStripParts.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// buttonCancel // buttonCancel
@ -83,6 +90,7 @@
this.columnHeaderStartTime, this.columnHeaderStartTime,
this.columnHeaderEndTime, this.columnHeaderEndTime,
this.columnHeaderFileName}); this.columnHeaderFileName});
this.listViewParts.ContextMenuStrip = this.contextMenuStripParts;
this.listViewParts.FullRowSelect = true; this.listViewParts.FullRowSelect = true;
this.listViewParts.HideSelection = false; this.listViewParts.HideSelection = false;
this.listViewParts.Location = new System.Drawing.Point(6, 19); this.listViewParts.Location = new System.Drawing.Point(6, 19);
@ -91,6 +99,7 @@
this.listViewParts.TabIndex = 101; this.listViewParts.TabIndex = 101;
this.listViewParts.UseCompatibleStateImageBehavior = false; this.listViewParts.UseCompatibleStateImageBehavior = false;
this.listViewParts.View = System.Windows.Forms.View.Details; this.listViewParts.View = System.Windows.Forms.View.Details;
this.listViewParts.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewParts_ColumnClick);
this.listViewParts.DragDrop += new System.Windows.Forms.DragEventHandler(this.listViewParts_DragDrop); this.listViewParts.DragDrop += new System.Windows.Forms.DragEventHandler(this.listViewParts_DragDrop);
this.listViewParts.DragEnter += new System.Windows.Forms.DragEventHandler(this.listViewParts_DragEnter); this.listViewParts.DragEnter += new System.Windows.Forms.DragEventHandler(this.listViewParts_DragEnter);
// //
@ -252,6 +261,49 @@
this.labelAddTime.TabIndex = 34; this.labelAddTime.TabIndex = 34;
this.labelAddTime.Text = "Add milliseconds after each file"; this.labelAddTime.Text = "Add milliseconds after each file";
// //
// contextMenuStripParts
//
this.contextMenuStripParts.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.moveUpToolStripMenuItem,
this.moveDownToolStripMenuItem,
this.moveTopToolStripMenuItem,
this.moveBottomToolStripMenuItem});
this.contextMenuStripParts.Name = "contextMenuStrip1";
this.contextMenuStripParts.Size = new System.Drawing.Size(216, 92);
this.contextMenuStripParts.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripParts_Opening);
//
// moveUpToolStripMenuItem
//
this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem";
this.moveUpToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Up)));
this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
this.moveUpToolStripMenuItem.Text = "Move up";
this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.moveUpToolStripMenuItem_Click);
//
// moveDownToolStripMenuItem
//
this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem";
this.moveDownToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Down)));
this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
this.moveDownToolStripMenuItem.Text = "Move down";
this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.moveDownToolStripMenuItem_Click);
//
// moveTopToolStripMenuItem
//
this.moveTopToolStripMenuItem.Name = "moveTopToolStripMenuItem";
this.moveTopToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Home)));
this.moveTopToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
this.moveTopToolStripMenuItem.Text = "Move to top";
this.moveTopToolStripMenuItem.Click += new System.EventHandler(this.moveTopToolStripMenuItem_Click);
//
// moveBottomToolStripMenuItem
//
this.moveBottomToolStripMenuItem.Name = "moveBottomToolStripMenuItem";
this.moveBottomToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End)));
this.moveBottomToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
this.moveBottomToolStripMenuItem.Text = "Move to bottom";
this.moveBottomToolStripMenuItem.Click += new System.EventHandler(this.moveBottomToolStripMenuItem_Click);
//
// JoinSubtitles // JoinSubtitles
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -279,6 +331,7 @@
this.Resize += new System.EventHandler(this.JoinSubtitles_Resize); this.Resize += new System.EventHandler(this.JoinSubtitles_Resize);
this.groupBoxPreview.ResumeLayout(false); this.groupBoxPreview.ResumeLayout(false);
this.groupBoxPreview.PerformLayout(); this.groupBoxPreview.PerformLayout();
this.contextMenuStripParts.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@ -303,5 +356,10 @@
private Nikse.SubtitleEdit.Controls.NikseUpDown numericUpDownAddMs; private Nikse.SubtitleEdit.Controls.NikseUpDown numericUpDownAddMs;
private System.Windows.Forms.RadioButton radioButtonJoinAddTime; private System.Windows.Forms.RadioButton radioButtonJoinAddTime;
private Nikse.SubtitleEdit.Controls.NikseLabel labelAddTime; private Nikse.SubtitleEdit.Controls.NikseLabel labelAddTime;
private System.Windows.Forms.ContextMenuStrip contextMenuStripParts;
private System.Windows.Forms.ToolStripMenuItem moveUpToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem moveDownToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem moveTopToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem moveBottomToolStripMenuItem;
} }
} }

View File

@ -30,6 +30,11 @@ namespace Nikse.SubtitleEdit.Forms
listViewParts.Columns[2].Text = LanguageSettings.Current.JoinSubtitles.EndTime; listViewParts.Columns[2].Text = LanguageSettings.Current.JoinSubtitles.EndTime;
listViewParts.Columns[3].Text = LanguageSettings.Current.JoinSubtitles.FileName; listViewParts.Columns[3].Text = LanguageSettings.Current.JoinSubtitles.FileName;
moveUpToolStripMenuItem.Text = LanguageSettings.Current.DvdSubRip.MoveUp;
moveDownToolStripMenuItem.Text = LanguageSettings.Current.DvdSubRip.MoveDown;
moveTopToolStripMenuItem.Text = LanguageSettings.Current.MultipleReplace.MoveToTop;
moveBottomToolStripMenuItem.Text = LanguageSettings.Current.MultipleReplace.MoveToBottom;
buttonAddFile.Text = LanguageSettings.Current.DvdSubRip.Add; buttonAddFile.Text = LanguageSettings.Current.DvdSubRip.Add;
buttonRemoveFile.Text = LanguageSettings.Current.DvdSubRip.Remove; buttonRemoveFile.Text = LanguageSettings.Current.DvdSubRip.Remove;
buttonClear.Text = LanguageSettings.Current.DvdSubRip.Clear; buttonClear.Text = LanguageSettings.Current.DvdSubRip.Clear;
@ -388,6 +393,7 @@ namespace Nikse.SubtitleEdit.Forms
{ {
MessageBox.Show(sb.ToString()); MessageBox.Show(sb.ToString());
} }
JoinSubtitles_Resize(sender, e); JoinSubtitles_Resize(sender, e);
} }
} }
@ -438,5 +444,203 @@ namespace Nikse.SubtitleEdit.Forms
labelAddTime.Enabled = radioButtonJoinAddTime.Checked; labelAddTime.Enabled = radioButtonJoinAddTime.Checked;
SortAndLoad(); SortAndLoad();
} }
private void contextMenuStripParts_Opening(object sender, System.ComponentModel.CancelEventArgs e)
{
if (radioButtonJoinPlain.Checked)
{
e.Cancel = true;
}
}
private void MoveUp(ListView listView)
{
if (listView.SelectedItems.Count != 1)
{
return;
}
var idx = listView.SelectedItems[0].Index;
if (idx == 0)
{
return;
}
var item = listView.SelectedItems[0];
listView.Items.RemoveAt(idx);
var style = _fileNamesToJoin[idx];
_fileNamesToJoin.RemoveAt(idx);
_fileNamesToJoin.Insert(idx - 1, style);
idx--;
listView.Items.Insert(idx, item);
UpdateSelectedIndices(listView, idx);
}
private void MoveDown(ListView listView)
{
if (listView.SelectedItems.Count != 1)
{
return;
}
var idx = listView.SelectedItems[0].Index;
if (idx >= listView.Items.Count - 1)
{
return;
}
var item = listView.SelectedItems[0];
listView.Items.RemoveAt(idx);
var style = _fileNamesToJoin[idx];
_fileNamesToJoin.RemoveAt(idx);
_fileNamesToJoin.Insert(idx + 1, style);
idx++;
listView.Items.Insert(idx, item);
UpdateSelectedIndices(listView, idx);
}
private void MoveToTop(ListView listView)
{
if (listView.SelectedItems.Count != 1)
{
return;
}
var idx = listView.SelectedItems[0].Index;
if (idx == 0)
{
return;
}
var item = listView.SelectedItems[0];
listView.Items.RemoveAt(idx);
var style = _fileNamesToJoin[idx];
_fileNamesToJoin.RemoveAt(idx);
_fileNamesToJoin.Insert(0, style);
idx = 0;
listView.Items.Insert(idx, item);
UpdateSelectedIndices(listView, idx);
}
private void MoveToBottom(ListView listView)
{
if (listView.SelectedItems.Count != 1)
{
return;
}
var idx = listView.SelectedItems[0].Index;
if (idx == listView.Items.Count - 1)
{
return;
}
var item = listView.SelectedItems[0];
listView.Items.RemoveAt(idx);
var style = _fileNamesToJoin[idx];
_fileNamesToJoin.RemoveAt(idx);
_fileNamesToJoin.Add(style);
listView.Items.Add(item);
UpdateSelectedIndices(listView);
}
private static void UpdateSelectedIndices(ListView listView, int startingIndex = -1, int numberOfSelectedItems = 1)
{
if (numberOfSelectedItems == 0)
{
return;
}
if (startingIndex == -1 || startingIndex >= listView.Items.Count)
{
startingIndex = listView.Items.Count - 1;
}
if (startingIndex - numberOfSelectedItems < -1)
{
return;
}
listView.SelectedItems.Clear();
for (var i = 0; i < numberOfSelectedItems; i++)
{
listView.Items[startingIndex - i].Selected = true;
listView.Items[startingIndex - i].EnsureVisible();
listView.Items[startingIndex - i].Focused = true;
}
}
private void moveUpToolStripMenuItem_Click(object sender, EventArgs e)
{
if (radioButtonJoinPlain.Checked)
{
return;
}
MoveUp(listViewParts);
}
private void moveDownToolStripMenuItem_Click(object sender, EventArgs e)
{
if (radioButtonJoinPlain.Checked)
{
return;
}
MoveDown(listViewParts);
}
private void moveTopToolStripMenuItem_Click(object sender, EventArgs e)
{
if (radioButtonJoinPlain.Checked)
{
return;
}
MoveToTop(listViewParts);
}
private void moveBottomToolStripMenuItem_Click(object sender, EventArgs e)
{
if (radioButtonJoinPlain.Checked)
{
return;
}
MoveToBottom(listViewParts);
}
private void listViewParts_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (radioButtonJoinPlain.Checked || e.Column != 3)
{
return;
}
var lv = (ListView)sender;
if (!(lv.ListViewItemSorter is ListViewSorter sorter))
{
sorter = new ListViewSorter
{
ColumnNumber = e.Column,
};
lv.ListViewItemSorter = sorter;
}
if (e.Column == sorter.ColumnNumber)
{
sorter.Descending = !sorter.Descending; // inverse sort direction
}
else
{
sorter.ColumnNumber = e.Column;
}
lv.Sort();
}
} }
} }

View File

@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="contextMenuStripParts.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>159, 22</value>
</metadata>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>

View File

@ -13,7 +13,7 @@ namespace Nikse.SubtitleEdit.Logic
public bool IsDisplayFileSize { get; set; } public bool IsDisplayFileSize { get; set; }
public bool Descending { get; set; } public bool Descending { get; set; }
private Regex _invariantNumber = new Regex(@"\d+\.{1,2}", RegexOptions.Compiled); private readonly Regex _invariantNumber = new Regex(@"\d+\.{1,2}", RegexOptions.Compiled);
public int Compare(object o1, object o2) public int Compare(object o1, object o2)
{ {