From f95b3bdd1dcfa03d9542439d8b57fb0577a79cca Mon Sep 17 00:00:00 2001 From: Jaex Date: Sun, 6 Oct 2019 12:21:27 +0300 Subject: [PATCH] #4280: Support shift click selection of thumbnail panels --- ShareX.HelpersLib/Extensions/Extensions.cs | 25 +++++++++++++++++++++ ShareX/Controls/TaskThumbnailPanel.cs | 4 ++-- ShareX/Controls/TaskThumbnailView.cs | 26 +++++++++++++++++++--- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/ShareX.HelpersLib/Extensions/Extensions.cs b/ShareX.HelpersLib/Extensions/Extensions.cs index c9ecb8b7d..fdecf183e 100644 --- a/ShareX.HelpersLib/Extensions/Extensions.cs +++ b/ShareX.HelpersLib/Extensions/Extensions.cs @@ -755,5 +755,30 @@ public static void SupportDarkTheme(this ListView lv) }; } } + + public static List Range(this List source, int start, int end) + { + if (start > end) + { + int temp = start; + start = end; + end = temp; + } + + int length = end - start + 1; + + return source.GetRange(start, length); + } + + public static List Range(this List source, T start, T end) + { + int startIndex = source.IndexOf(start); + if (startIndex == -1) return new List(); + + int endIndex = source.IndexOf(end); + if (endIndex == -1) return new List(); + + return Range(source, startIndex, endIndex); + } } } \ No newline at end of file diff --git a/ShareX/Controls/TaskThumbnailPanel.cs b/ShareX/Controls/TaskThumbnailPanel.cs index fff4064f0..a6fb69d83 100644 --- a/ShareX/Controls/TaskThumbnailPanel.cs +++ b/ShareX/Controls/TaskThumbnailPanel.cs @@ -411,7 +411,7 @@ public void ClearThumbnail() private void LblTitle_MouseClick(object sender, MouseEventArgs e) { - if (ModifierKeys != Keys.Control && e.Button == MouseButtons.Left && Task.Info != null) + if (ModifierKeys == Keys.None && e.Button == MouseButtons.Left && Task.Info != null) { if (Task.Info.Result != null) { @@ -447,7 +447,7 @@ private void PbThumbnail_MouseUp(object sender, MouseEventArgs e) private void PbThumbnail_MouseClick(object sender, MouseEventArgs e) { - if (ThumbnailSupportsClick && ModifierKeys != Keys.Control && e.Button == MouseButtons.Left && Task.Info != null) + if (ThumbnailSupportsClick && ModifierKeys == Keys.None && e.Button == MouseButtons.Left && Task.Info != null) { string filePath = Task.Info.FilePath; diff --git a/ShareX/Controls/TaskThumbnailView.cs b/ShareX/Controls/TaskThumbnailView.cs index 180d6de81..cfc82f0d8 100644 --- a/ShareX/Controls/TaskThumbnailView.cs +++ b/ShareX/Controls/TaskThumbnailView.cs @@ -205,12 +205,12 @@ public void UnselectAllPanels() { SelectedPanels.Clear(); - OnSelectedPanelChanged(); - foreach (TaskThumbnailPanel panel in Panels) { panel.Selected = false; } + + OnSelectedPanelChanged(); } protected void OnContextMenuRequested(object sender, MouseEventArgs e) @@ -264,6 +264,26 @@ private void Panel_MouseUp(object sender, MouseEventArgs e, TaskThumbnailPanel p SelectedPanels.Add(panel); } } + else if (ModifierKeys == Keys.Shift) + { + if (SelectedPanels.Count > 0) + { + TaskThumbnailPanel lastPanel = SelectedPanels[SelectedPanels.Count - 1]; + + UnselectAllPanels(); + + foreach (TaskThumbnailPanel p in Panels.Range(panel, lastPanel)) + { + p.Selected = true; + SelectedPanels.Add(p); + } + } + else + { + panel.Selected = true; + SelectedPanels.Add(panel); + } + } else { if (!panel.Selected) @@ -277,7 +297,7 @@ private void Panel_MouseUp(object sender, MouseEventArgs e, TaskThumbnailPanel p OnSelectedPanelChanged(); - if (ModifierKeys != Keys.Control && e.Button == MouseButtons.Right) + if (e.Button == MouseButtons.Right) { OnContextMenuRequested(sender, e); }