Allow selecting via shortcuts in more list view - thx tormento :)

Windows: ocr, batch convert, export to images, fix common errors, multiple replace
Shortcuts: ctrl+a (select all), ctrl + d (de-select), ctrl+shift+i (inverse selection)
This commit is contained in:
Nikolaj Olsson 2018-03-01 08:12:30 +01:00
parent 2e2597a607
commit 7e37058bad
11 changed files with 176 additions and 52 deletions

View File

@ -1,5 +1,17 @@
Subtitle Edit Changelog
3.5.7 (xth May 2018)
* NEW:
*
* IMPROVED:
* Update Brazilian translation - thx Igor
* Update Czech translation - thx Trottel
* Update Hungarian translation - thx ZityiSoft Team
* Update Turkish translation - thx Falcon006
* Ctrl+a/ctrl+d/ctrl+shift+i works in more lists - thx tormento
* FIXED:
*
3.5.6 (27th February 2018)
* NEW:

View File

@ -181,6 +181,9 @@ namespace Nikse.SubtitleEdit.Core
public static void SetSecurityProtocol()
{
if (Environment.OSVersion.Version.Major < 6)
return; // don't try TLS 1.2 on WinXP as it does not exist and will crash
// Github requires TLS 1.2
var tls12Protocol = (SslProtocols)0x00000C00; //TODO: Remove this when it's standard in .net framework - 4.5?
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | (SecurityProtocolType)tls12Protocol;

View File

@ -1433,7 +1433,24 @@ namespace Nikse.SubtitleEdit.Forms
private void ListViewInputFilesKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
RemoveSelectedFiles();
}
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
{
listViewInputFiles.SelectAll();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control)
{
listViewInputFiles.SelectFirstSelectedItemOnly();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.I && e.Modifiers == (Keys.Control | Keys.Shift)) //InverseSelection
{
listViewInputFiles.InverseSelection();
e.SuppressKeyPress = true;
}
}
private void buttonFixCommonErrorSettings_Click(object sender, EventArgs e)

View File

@ -2606,7 +2606,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
}
}
if (parameter.JustifyLeft)
if (parameter.JustifyLeft)
{
// left justify centered lines
var minX = lefts.Min(p => p);
@ -4588,35 +4588,19 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
ListViewToggleTag("i");
subtitleListView1_SelectedIndexChanged(null, null);
}
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control) //SelectAll
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
{
subtitleListView1.BeginUpdate();
foreach (ListViewItem item in subtitleListView1.Items)
item.Selected = true;
subtitleListView1.EndUpdate();
subtitleListView1.SelectAll();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control) //SelectFirstSelectedItemOnly
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control)
{
if (subtitleListView1.SelectedItems.Count > 0)
{
bool skipFirst = true;
foreach (ListViewItem item in subtitleListView1.SelectedItems)
{
if (skipFirst)
skipFirst = false;
else
item.Selected = false;
}
e.SuppressKeyPress = true;
}
subtitleListView1.SelectFirstSelectedItemOnly();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.I && e.Modifiers == (Keys.Control | Keys.Shift)) //InverseSelection
else if (e.KeyCode == Keys.I && e.Modifiers == (Keys.Control | Keys.Shift))
{
subtitleListView1.BeginUpdate();
foreach (ListViewItem item in subtitleListView1.Items)
item.Selected = !item.Selected;
subtitleListView1.EndUpdate();
subtitleListView1.InverseSelection();
e.SuppressKeyPress = true;
}
}

View File

@ -31,6 +31,7 @@ namespace Nikse.SubtitleEdit.Forms
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
Nikse.SubtitleEdit.Core.TimeCode timeCode1 = new Nikse.SubtitleEdit.Core.TimeCode();
this.buttonCancel = new System.Windows.Forms.Button();
this.buttonNextFinish = new System.Windows.Forms.Button();
this.labelStatus = new System.Windows.Forms.Label();
@ -85,6 +86,7 @@ namespace Nikse.SubtitleEdit.Forms
this.groupBox2.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPageFixes.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainerStep2)).BeginInit();
this.splitContainerStep2.Panel1.SuspendLayout();
this.splitContainerStep2.Panel2.SuspendLayout();
this.splitContainerStep2.SuspendLayout();
@ -227,8 +229,8 @@ namespace Nikse.SubtitleEdit.Forms
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.listView1.FullRowSelect = true;
this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.listView1.Location = new System.Drawing.Point(6, 48);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(810, 461);
@ -410,6 +412,7 @@ namespace Nikse.SubtitleEdit.Forms
//
// subtitleListView1
//
this.subtitleListView1.AllowColumnReorder = true;
this.subtitleListView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
@ -418,6 +421,7 @@ namespace Nikse.SubtitleEdit.Forms
this.subtitleListView1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.subtitleListView1.FullRowSelect = true;
this.subtitleListView1.GridLines = true;
this.subtitleListView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.subtitleListView1.HideSelection = false;
this.subtitleListView1.Location = new System.Drawing.Point(3, 5);
this.subtitleListView1.Name = "subtitleListView1";
@ -431,6 +435,7 @@ namespace Nikse.SubtitleEdit.Forms
this.subtitleListView1.UseSyntaxColoring = true;
this.subtitleListView1.View = System.Windows.Forms.View.Details;
this.subtitleListView1.SelectedIndexChanged += new System.EventHandler(this.SubtitleListView1SelectedIndexChanged);
this.subtitleListView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.subtitleListView1_KeyDown);
//
// contextMenuStripListview
//
@ -551,11 +556,21 @@ namespace Nikse.SubtitleEdit.Forms
//
this.timeUpDownStartTime.AutoSize = true;
this.timeUpDownStartTime.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.timeUpDownStartTime.Font = new System.Drawing.Font("Segoe UI", 9F);
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(96, 25);
this.timeUpDownStartTime.Size = new System.Drawing.Size(96, 27);
this.timeUpDownStartTime.TabIndex = 112;
timeCode1.Hours = 0;
timeCode1.Milliseconds = 0;
timeCode1.Minutes = 0;
timeCode1.Seconds = 0;
timeCode1.TimeSpan = System.TimeSpan.Parse("00:00:00");
timeCode1.TotalMilliseconds = 0D;
timeCode1.TotalSeconds = 0D;
this.timeUpDownStartTime.TimeCode = timeCode1;
this.timeUpDownStartTime.UseVideoOffset = false;
//
// numericUpDownDuration
//
@ -700,6 +715,7 @@ namespace Nikse.SubtitleEdit.Forms
this.tabPageFixes.ResumeLayout(false);
this.splitContainerStep2.Panel1.ResumeLayout(false);
this.splitContainerStep2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainerStep2)).EndInit();
this.splitContainerStep2.ResumeLayout(false);
this.contextMenuStripListview.ResumeLayout(false);
this.groupBoxEditPanel.ResumeLayout(false);

View File

@ -1634,5 +1634,24 @@ namespace Nikse.SubtitleEdit.Forms
Configuration.Settings.CommonErrors.SetDefaultFixes();
AddFixActions(CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage).ThreeLetterISOLanguageName);
}
private void subtitleListView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
{
subtitleListView1.SelectAll();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control)
{
subtitleListView1.SelectFirstSelectedItemOnly();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.I && e.Modifiers == (Keys.Control | Keys.Shift)) //InverseSelection
{
subtitleListView1.InverseSelection();
e.SuppressKeyPress = true;
}
}
}
}

View File

@ -13396,24 +13396,15 @@ namespace Nikse.SubtitleEdit.Forms
_cutText = tmp.ToText(new SubRip());
ToolStripMenuItemDeleteClick(null, null);
}
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control) //SelectAll
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
{
foreach (ListViewItem item in SubtitleListview1.Items)
item.Selected = true;
SubtitleListview1.SelectAll();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control) //SelectFirstSelectedItemOnly
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control)
{
int itemsCount = SubtitleListview1.SelectedItems.Count - 1;
if (itemsCount > 0)
{
do
{
SubtitleListview1.SelectedItems[itemsCount--].Selected = false;
}
while (itemsCount > 0);
e.SuppressKeyPress = true;
}
SubtitleListview1.SelectFirstSelectedItemOnly();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.Delete && SubtitleListview1.SelectedItems.Count > 0) //Delete
{
@ -16719,7 +16710,7 @@ namespace Nikse.SubtitleEdit.Forms
{
if (parent.DropDownItems.Count - relativeOffset.Value >= 0 &&
relativeOffset.Value < parent.DropDownItems.Count &&
parent.DropDownItems.Count > 0 &&
parent.DropDownItems.Count > 0 &&
parent.DropDownItems[parent.DropDownItems.Count - relativeOffset.Value].GetType() == typeof(ToolStripSeparator))
return; // don't app separator after separator

View File

@ -161,6 +161,7 @@
this.listViewFixes.TabIndex = 10;
this.listViewFixes.UseCompatibleStateImageBehavior = false;
this.listViewFixes.View = System.Windows.Forms.View.Details;
this.listViewFixes.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listViewFixes_KeyDown);
//
// columnHeader4
//
@ -330,7 +331,7 @@
this.listViewRules.UseCompatibleStateImageBehavior = false;
this.listViewRules.View = System.Windows.Forms.View.Details;
this.listViewRules.SelectedIndexChanged += new System.EventHandler(this.ListViewReplaceListSelectedIndexChanged);
this.listViewRules.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListViewReplaceListKeyDown);
this.listViewRules.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListViewRulesKeyDown);
//
// columnHeader1
//

View File

@ -403,11 +403,29 @@ namespace Nikse.SubtitleEdit.Forms
GeneratePreview();
}
private void ListViewReplaceListKeyDown(object sender, KeyEventArgs e)
private void ListViewRulesKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
DeleteToolStripMenuItemClick(null, null);
if (listViewRules.SelectedItems.Count == 1)
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
{
listViewRules.SelectAll();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control)
{
listViewRules.SelectFirstSelectedItemOnly();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.I && e.Modifiers == (Keys.Control | Keys.Shift)) //InverseSelection
{
listViewRules.InverseSelection();
e.SuppressKeyPress = true;
}
else if (listViewRules.SelectedItems.Count == 1)
{
if (e.KeyCode == Keys.Up && e.Control && !e.Alt && !e.Shift)
moveUpToolStripMenuItem_Click(sender, e);
@ -1126,5 +1144,24 @@ namespace Nikse.SubtitleEdit.Forms
exportToolStripMenuItem_Click(sender, e);
}
private void listViewFixes_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
{
listViewFixes.SelectAll();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control)
{
listViewFixes.SelectFirstSelectedItemOnly();
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.I && e.Modifiers == (Keys.Control | Keys.Shift)) //InverseSelection
{
listViewFixes.InverseSelection();
e.SuppressKeyPress = true;
}
}
}
}

View File

@ -8417,10 +8417,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A)
{
subtitleListView1.SelectedIndexChanged -= SubtitleListView1SelectedIndexChanged;
subtitleListView1.BeginUpdate();
for (int i = 0; i < subtitleListView1.Items.Count; i++)
subtitleListView1.Items[i].Selected = true;
subtitleListView1.EndUpdate();
subtitleListView1.SelectAll();
subtitleListView1.SelectedIndexChanged += SubtitleListView1SelectedIndexChanged;
e.Handled = true;
e.SuppressKeyPress = true;
@ -8428,10 +8425,15 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.D)
{
subtitleListView1.SelectedIndexChanged -= SubtitleListView1SelectedIndexChanged;
subtitleListView1.BeginUpdate();
for (int i = 0; i < subtitleListView1.Items.Count; i++)
subtitleListView1.Items[i].Selected = false;
subtitleListView1.EndUpdate();
subtitleListView1.SelectFirstSelectedItemOnly();
subtitleListView1.SelectedIndexChanged += SubtitleListView1SelectedIndexChanged;
e.Handled = true;
e.SuppressKeyPress = true;
}
else if (e.KeyCode == Keys.I && e.Modifiers == (Keys.Control | Keys.Shift)) //InverseSelection
{
subtitleListView1.SelectedIndexChanged -= SubtitleListView1SelectedIndexChanged;
subtitleListView1.InverseSelection();
subtitleListView1.SelectedIndexChanged += SubtitleListView1SelectedIndexChanged;
e.Handled = true;
e.SuppressKeyPress = true;

View File

@ -736,5 +736,47 @@ namespace Nikse.SubtitleEdit.Logic
public static string GetListViewTextFromString(string s) => s.Replace(Environment.NewLine, Configuration.Settings.General.ListViewLineSeparatorString);
public static string GetStringFromListViewText(string lviText) => lviText.Replace(Configuration.Settings.General.ListViewLineSeparatorString, Environment.NewLine);
public static void SelectAll(this ListView lv)
{
lv.BeginUpdate();
foreach (ListViewItem item in lv.Items)
item.Selected = true;
lv.EndUpdate();
}
public static void SelectFirstSelectedItemOnly(this ListView lv)
{
int itemsCount = lv.SelectedItems.Count - 1;
if (itemsCount > 0)
{
lv.BeginUpdate();
do
{
lv.SelectedItems[itemsCount--].Selected = false;
}
while (itemsCount > 0);
if (lv.SelectedItems.Count > 0)
{
lv.EnsureVisible(lv.SelectedItems[0].Index);
lv.FocusedItem = lv.SelectedItems[0];
}
else if (lv.Items.Count > 0)
{
lv.EnsureVisible(0);
lv.FocusedItem = lv.Items[0];
}
lv.EndUpdate();
}
}
public static void InverseSelection(this ListView lv)
{
lv.BeginUpdate();
foreach (ListViewItem item in lv.Items)
item.Selected = !item.Selected;
lv.EndUpdate();
}
}
}