#4280: Support shift click selection of thumbnail panels

This commit is contained in:
Jaex 2019-10-06 12:21:27 +03:00
parent 69afd98332
commit f95b3bdd1d
3 changed files with 50 additions and 5 deletions

View file

@ -755,5 +755,30 @@ public static void SupportDarkTheme(this ListView lv)
};
}
}
public static List<T> Range<T>(this List<T> 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<T> Range<T>(this List<T> source, T start, T end)
{
int startIndex = source.IndexOf(start);
if (startIndex == -1) return new List<T>();
int endIndex = source.IndexOf(end);
if (endIndex == -1) return new List<T>();
return Range(source, startIndex, endIndex);
}
}
}

View file

@ -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;

View file

@ -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);
}