Merge pull request #4406 from Jaex/thumbnail-view-multi-select-support

fixed #4397: Support handling key inputs in thumbnail view mode
This commit is contained in:
Jaex 2019-10-03 12:51:42 +03:00 committed by GitHub
commit 07da0fc0e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 66 additions and 42 deletions

View file

@ -119,6 +119,8 @@ public Size ThumbnailSize
public delegate void TaskViewMouseEventHandler(object sender, MouseEventArgs e); public delegate void TaskViewMouseEventHandler(object sender, MouseEventArgs e);
public event TaskViewMouseEventHandler ContextMenuRequested; public event TaskViewMouseEventHandler ContextMenuRequested;
public event EventHandler SelectedPanelChanged;
public TaskThumbnailView() public TaskThumbnailView()
{ {
Panels = new List<TaskThumbnailPanel>(); Panels = new List<TaskThumbnailPanel>();
@ -177,6 +179,7 @@ public void RemovePanel(WorkerTask task)
if (panel != null) if (panel != null)
{ {
Panels.Remove(panel); Panels.Remove(panel);
SelectedPanels.Remove(panel);
flpMain.Controls.Remove(panel); flpMain.Controls.Remove(panel);
panel.Dispose(); panel.Dispose();
} }
@ -202,6 +205,8 @@ public void UnselectAllPanels()
{ {
SelectedPanels.Clear(); SelectedPanels.Clear();
OnSelectedPanelChanged();
foreach (TaskThumbnailPanel panel in Panels) foreach (TaskThumbnailPanel panel in Panels)
{ {
panel.Selected = false; panel.Selected = false;
@ -210,10 +215,12 @@ public void UnselectAllPanels()
protected void OnContextMenuRequested(object sender, MouseEventArgs e) protected void OnContextMenuRequested(object sender, MouseEventArgs e)
{ {
if (ContextMenuRequested != null) ContextMenuRequested?.Invoke(sender, e);
{
ContextMenuRequested(sender, e);
} }
protected void OnSelectedPanelChanged()
{
SelectedPanelChanged?.Invoke(this, EventArgs.Empty);
} }
private void FlpMain_MouseEnter(object sender, EventArgs e) private void FlpMain_MouseEnter(object sender, EventArgs e)
@ -268,10 +275,19 @@ private void Panel_MouseUp(object sender, MouseEventArgs e, TaskThumbnailPanel p
} }
} }
OnSelectedPanelChanged();
if (ModifierKeys != Keys.Control && e.Button == MouseButtons.Right) if (ModifierKeys != Keys.Control && e.Button == MouseButtons.Right)
{ {
OnContextMenuRequested(sender, e); OnContextMenuRequested(sender, e);
} }
} }
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
OnKeyDown(new KeyEventArgs(keyData));
return base.ProcessCmdKey(ref msg, keyData);
}
} }
} }

View file

@ -278,8 +278,10 @@ private void InitializeComponent()
this.timerTraySingleClick = new System.Windows.Forms.Timer(this.components); this.timerTraySingleClick = new System.Windows.Forms.Timer(this.components);
this.pNews = new System.Windows.Forms.Panel(); this.pNews = new System.Windows.Forms.Panel();
this.btnCloseNews = new System.Windows.Forms.Button(); this.btnCloseNews = new System.Windows.Forms.Button();
this.ucNews = new ShareX.NewsListControl();
this.pThumbnailView = new System.Windows.Forms.Panel(); this.pThumbnailView = new System.Windows.Forms.Panel();
this.lblThumbnailViewTip = new System.Windows.Forms.Label(); this.lblThumbnailViewTip = new System.Windows.Forms.Label();
this.ucTaskThumbnailView = new ShareX.TaskThumbnailView();
this.ttMain = new System.Windows.Forms.ToolTip(this.components); this.ttMain = new System.Windows.Forms.ToolTip(this.components);
this.pToolbars = new System.Windows.Forms.Panel(); this.pToolbars = new System.Windows.Forms.Panel();
this.tsSocialButtons = new ShareX.HelpersLib.ToolStripBorderRight(); this.tsSocialButtons = new ShareX.HelpersLib.ToolStripBorderRight();
@ -288,8 +290,6 @@ private void InitializeComponent()
this.tsbPatreon = new System.Windows.Forms.ToolStripButton(); this.tsbPatreon = new System.Windows.Forms.ToolStripButton();
this.tsbBitcoin = new System.Windows.Forms.ToolStripButton(); this.tsbBitcoin = new System.Windows.Forms.ToolStripButton();
this.tsbGitHub = new System.Windows.Forms.ToolStripButton(); this.tsbGitHub = new System.Windows.Forms.ToolStripButton();
this.ucNews = new ShareX.NewsListControl();
this.ucTaskThumbnailView = new ShareX.TaskThumbnailView();
((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
this.scMain.Panel1.SuspendLayout(); this.scMain.Panel1.SuspendLayout();
this.scMain.Panel2.SuspendLayout(); this.scMain.Panel2.SuspendLayout();
@ -2202,6 +2202,12 @@ private void InitializeComponent()
this.btnCloseNews.UseVisualStyleBackColor = true; this.btnCloseNews.UseVisualStyleBackColor = true;
this.btnCloseNews.Click += new System.EventHandler(this.btnCloseNews_Click); this.btnCloseNews.Click += new System.EventHandler(this.btnCloseNews_Click);
// //
// ucNews
//
this.ucNews.BackColor = System.Drawing.SystemColors.Window;
resources.ApplyResources(this.ucNews, "ucNews");
this.ucNews.Name = "ucNews";
//
// pThumbnailView // pThumbnailView
// //
this.pThumbnailView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(47)))), ((int)(((byte)(56))))); this.pThumbnailView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(47)))), ((int)(((byte)(56)))));
@ -2219,6 +2225,18 @@ private void InitializeComponent()
this.lblThumbnailViewTip.UseMnemonic = false; this.lblThumbnailViewTip.UseMnemonic = false;
this.lblThumbnailViewTip.MouseUp += new System.Windows.Forms.MouseEventHandler(this.LblThumbnailViewTip_MouseUp); this.lblThumbnailViewTip.MouseUp += new System.Windows.Forms.MouseEventHandler(this.LblThumbnailViewTip_MouseUp);
// //
// ucTaskThumbnailView
//
resources.ApplyResources(this.ucTaskThumbnailView, "ucTaskThumbnailView");
this.ucTaskThumbnailView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(47)))), ((int)(((byte)(56)))));
this.ucTaskThumbnailView.Name = "ucTaskThumbnailView";
this.ucTaskThumbnailView.ThumbnailSize = new System.Drawing.Size(200, 150);
this.ucTaskThumbnailView.TitleLocation = ShareX.ThumbnailTitleLocation.Top;
this.ucTaskThumbnailView.TitleVisible = true;
this.ucTaskThumbnailView.ContextMenuRequested += new ShareX.TaskThumbnailView.TaskViewMouseEventHandler(this.UcTaskView_ContextMenuRequested);
this.ucTaskThumbnailView.SelectedPanelChanged += new System.EventHandler(this.ucTaskThumbnailView_SelectedPanelChanged);
this.ucTaskThumbnailView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvUploads_KeyDown);
//
// ttMain // ttMain
// //
this.ttMain.AutoPopDelay = 5000; this.ttMain.AutoPopDelay = 5000;
@ -2295,22 +2313,6 @@ private void InitializeComponent()
this.tsbGitHub.Padding = new System.Windows.Forms.Padding(1); this.tsbGitHub.Padding = new System.Windows.Forms.Padding(1);
this.tsbGitHub.Click += new System.EventHandler(this.TsbGitHub_Click); this.tsbGitHub.Click += new System.EventHandler(this.TsbGitHub_Click);
// //
// ucNews
//
this.ucNews.BackColor = System.Drawing.SystemColors.Window;
resources.ApplyResources(this.ucNews, "ucNews");
this.ucNews.Name = "ucNews";
//
// ucTaskThumbnailView
//
resources.ApplyResources(this.ucTaskThumbnailView, "ucTaskThumbnailView");
this.ucTaskThumbnailView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(42)))), ((int)(((byte)(47)))), ((int)(((byte)(56)))));
this.ucTaskThumbnailView.Name = "ucTaskThumbnailView";
this.ucTaskThumbnailView.ThumbnailSize = new System.Drawing.Size(200, 150);
this.ucTaskThumbnailView.TitleLocation = ShareX.ThumbnailTitleLocation.Top;
this.ucTaskThumbnailView.TitleVisible = true;
this.ucTaskThumbnailView.ContextMenuRequested += new ShareX.TaskThumbnailView.TaskViewMouseEventHandler(this.UcTaskView_ContextMenuRequested);
//
// MainForm // MainForm
// //
this.AllowDrop = true; this.AllowDrop = true;

View file

@ -305,7 +305,7 @@ public void UpdateControls()
UpdateMainWindowLayout(); UpdateMainWindowLayout();
UpdateUploaderMenuNames(); UpdateUploaderMenuNames();
UpdateDestinationStates(); UpdateDestinationStates();
UpdateContextMenu(); UpdateInfoManager();
UpdateToggleHotkeyButton(); UpdateToggleHotkeyButton();
AfterTaskSettingsJobs(); AfterTaskSettingsJobs();
AfterApplicationSettingsJobs(); AfterApplicationSettingsJobs();
@ -610,7 +610,7 @@ private void EnableDisableToolStripMenuItems<T>(params ToolStripDropDownItem[] p
} }
} }
private void UpdateContextMenu() private void UpdateInfoManager()
{ {
cmsTaskInfo.SuspendLayout(); cmsTaskInfo.SuspendLayout();
@ -1124,11 +1124,16 @@ private WorkerTask[] GetSelectedTasks()
return null; return null;
} }
private void RemoveTasks(IEnumerable<WorkerTask> tasks) private void RemoveTasks(WorkerTask[] tasks)
{ {
if (tasks != null) if (tasks != null)
{ {
tasks.Where(x => x != null && !x.IsWorking).ForEach(TaskManager.Remove); foreach (WorkerTask task in tasks.Where(x => x != null && !x.IsWorking))
{
TaskManager.Remove(task);
}
UpdateInfoManager();
} }
} }
@ -1145,12 +1150,12 @@ private void RemoveSelectedItems()
tasks = ucTaskThumbnailView.SelectedPanels.Select(x => x.Task); tasks = ucTaskThumbnailView.SelectedPanels.Select(x => x.Task);
} }
RemoveTasks(tasks); RemoveTasks(tasks.ToArray());
} }
private void RemoveAllItems() private void RemoveAllItems()
{ {
RemoveTasks(lvUploads.Items.Cast<ListViewItem>().Select(x => x.Tag as WorkerTask)); RemoveTasks(lvUploads.Items.Cast<ListViewItem>().Select(x => x.Tag as WorkerTask).ToArray());
} }
private void UpdateMainWindowLayout() private void UpdateMainWindowLayout()
@ -1448,7 +1453,7 @@ private void lblListViewTip_MouseUp(object sender, MouseEventArgs e)
} }
else if (e.Button == MouseButtons.Right) else if (e.Button == MouseButtons.Right)
{ {
UpdateContextMenu(); UpdateInfoManager();
cmsTaskInfo.Show((Control)sender, e.X + 1, e.Y + 1); cmsTaskInfo.Show((Control)sender, e.X + 1, e.Y + 1);
} }
} }
@ -1458,14 +1463,14 @@ private async void lvUploads_SelectedIndexChanged(object sender, EventArgs e)
lvUploads.SelectedIndexChanged -= lvUploads_SelectedIndexChanged; lvUploads.SelectedIndexChanged -= lvUploads_SelectedIndexChanged;
await Task.Delay(1); await Task.Delay(1);
lvUploads.SelectedIndexChanged += lvUploads_SelectedIndexChanged; lvUploads.SelectedIndexChanged += lvUploads_SelectedIndexChanged;
UpdateContextMenu(); UpdateInfoManager();
} }
private void lvUploads_MouseUp(object sender, MouseEventArgs e) private void lvUploads_MouseUp(object sender, MouseEventArgs e)
{ {
if (e.Button == MouseButtons.Right) if (e.Button == MouseButtons.Right)
{ {
UpdateContextMenu(); UpdateInfoManager();
cmsTaskInfo.Show(lvUploads, e.X + 1, e.Y + 1); cmsTaskInfo.Show(lvUploads, e.X + 1, e.Y + 1);
} }
} }
@ -1536,7 +1541,7 @@ private void lvUploads_KeyDown(object sender, KeyEventArgs e)
case Keys.Apps: case Keys.Apps:
if (lvUploads.SelectedItems.Count > 0) if (lvUploads.SelectedItems.Count > 0)
{ {
UpdateContextMenu(); UpdateInfoManager();
Rectangle rect = lvUploads.GetItemRect(lvUploads.SelectedIndex); Rectangle rect = lvUploads.GetItemRect(lvUploads.SelectedIndex);
cmsTaskInfo.Show(lvUploads, new Point(rect.X, rect.Bottom)); cmsTaskInfo.Show(lvUploads, new Point(rect.X, rect.Bottom));
} }
@ -1546,9 +1551,13 @@ private void lvUploads_KeyDown(object sender, KeyEventArgs e)
e.Handled = e.SuppressKeyPress = true; e.Handled = e.SuppressKeyPress = true;
} }
private void ucTaskThumbnailView_SelectedPanelChanged(object sender, EventArgs e)
{
UpdateInfoManager();
}
private void UcTaskView_ContextMenuRequested(object sender, MouseEventArgs e) private void UcTaskView_ContextMenuRequested(object sender, MouseEventArgs e)
{ {
UpdateContextMenu();
cmsTaskInfo.Show(sender as Control, e.X + 1, e.Y + 1); cmsTaskInfo.Show(sender as Control, e.X + 1, e.Y + 1);
} }
@ -2436,35 +2445,35 @@ private void tsmiImagePreviewShow_Click(object sender, EventArgs e)
{ {
Program.Settings.ImagePreview = ImagePreviewVisibility.Show; Program.Settings.ImagePreview = ImagePreviewVisibility.Show;
tsmiImagePreviewShow.Check(); tsmiImagePreviewShow.Check();
UpdateContextMenu(); UpdateInfoManager();
} }
private void tsmiImagePreviewHide_Click(object sender, EventArgs e) private void tsmiImagePreviewHide_Click(object sender, EventArgs e)
{ {
Program.Settings.ImagePreview = ImagePreviewVisibility.Hide; Program.Settings.ImagePreview = ImagePreviewVisibility.Hide;
tsmiImagePreviewHide.Check(); tsmiImagePreviewHide.Check();
UpdateContextMenu(); UpdateInfoManager();
} }
private void tsmiImagePreviewAutomatic_Click(object sender, EventArgs e) private void tsmiImagePreviewAutomatic_Click(object sender, EventArgs e)
{ {
Program.Settings.ImagePreview = ImagePreviewVisibility.Automatic; Program.Settings.ImagePreview = ImagePreviewVisibility.Automatic;
tsmiImagePreviewAutomatic.Check(); tsmiImagePreviewAutomatic.Check();
UpdateContextMenu(); UpdateInfoManager();
} }
private void tsmiImagePreviewSide_Click(object sender, EventArgs e) private void tsmiImagePreviewSide_Click(object sender, EventArgs e)
{ {
Program.Settings.ImagePreviewLocation = ImagePreviewLocation.Side; Program.Settings.ImagePreviewLocation = ImagePreviewLocation.Side;
tsmiImagePreviewSide.Check(); tsmiImagePreviewSide.Check();
UpdateContextMenu(); UpdateInfoManager();
} }
private void tsmiImagePreviewBottom_Click(object sender, EventArgs e) private void tsmiImagePreviewBottom_Click(object sender, EventArgs e)
{ {
Program.Settings.ImagePreviewLocation = ImagePreviewLocation.Bottom; Program.Settings.ImagePreviewLocation = ImagePreviewLocation.Bottom;
tsmiImagePreviewBottom.Check(); tsmiImagePreviewBottom.Check();
UpdateContextMenu(); UpdateInfoManager();
} }
private void TsmiThumbnailTitleShow_Click(object sender, EventArgs e) private void TsmiThumbnailTitleShow_Click(object sender, EventArgs e)
@ -2511,7 +2520,7 @@ private void TsmiSwitchTaskViewMode_Click(object sender, EventArgs e)
UpdateTaskViewMode(); UpdateTaskViewMode();
UpdateMainWindowLayout(); UpdateMainWindowLayout();
UpdateContextMenu(); UpdateInfoManager();
} }
#endregion UploadInfoMenu events #endregion UploadInfoMenu events

View file

@ -2112,9 +2112,6 @@
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>844, 471</value> <value>844, 471</value>
</data> </data>
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>510, 250</value> <value>510, 250</value>
</data> </data>