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 event TaskViewMouseEventHandler ContextMenuRequested;
public event EventHandler SelectedPanelChanged;
public TaskThumbnailView()
{
Panels = new List<TaskThumbnailPanel>();
@ -177,6 +179,7 @@ public void RemovePanel(WorkerTask task)
if (panel != null)
{
Panels.Remove(panel);
SelectedPanels.Remove(panel);
flpMain.Controls.Remove(panel);
panel.Dispose();
}
@ -202,6 +205,8 @@ public void UnselectAllPanels()
{
SelectedPanels.Clear();
OnSelectedPanelChanged();
foreach (TaskThumbnailPanel panel in Panels)
{
panel.Selected = false;
@ -210,10 +215,12 @@ public void UnselectAllPanels()
protected void OnContextMenuRequested(object sender, MouseEventArgs e)
{
if (ContextMenuRequested != null)
{
ContextMenuRequested(sender, e);
}
ContextMenuRequested?.Invoke(sender, e);
}
protected void OnSelectedPanelChanged()
{
SelectedPanelChanged?.Invoke(this, EventArgs.Empty);
}
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)
{
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.pNews = new System.Windows.Forms.Panel();
this.btnCloseNews = new System.Windows.Forms.Button();
this.ucNews = new ShareX.NewsListControl();
this.pThumbnailView = new System.Windows.Forms.Panel();
this.lblThumbnailViewTip = new System.Windows.Forms.Label();
this.ucTaskThumbnailView = new ShareX.TaskThumbnailView();
this.ttMain = new System.Windows.Forms.ToolTip(this.components);
this.pToolbars = new System.Windows.Forms.Panel();
this.tsSocialButtons = new ShareX.HelpersLib.ToolStripBorderRight();
@ -288,8 +290,6 @@ private void InitializeComponent()
this.tsbPatreon = new System.Windows.Forms.ToolStripButton();
this.tsbBitcoin = 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();
this.scMain.Panel1.SuspendLayout();
this.scMain.Panel2.SuspendLayout();
@ -2202,6 +2202,12 @@ private void InitializeComponent()
this.btnCloseNews.UseVisualStyleBackColor = true;
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
//
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.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
//
this.ttMain.AutoPopDelay = 5000;
@ -2295,22 +2313,6 @@ private void InitializeComponent()
this.tsbGitHub.Padding = new System.Windows.Forms.Padding(1);
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
//
this.AllowDrop = true;

View file

@ -305,7 +305,7 @@ public void UpdateControls()
UpdateMainWindowLayout();
UpdateUploaderMenuNames();
UpdateDestinationStates();
UpdateContextMenu();
UpdateInfoManager();
UpdateToggleHotkeyButton();
AfterTaskSettingsJobs();
AfterApplicationSettingsJobs();
@ -610,7 +610,7 @@ private void EnableDisableToolStripMenuItems<T>(params ToolStripDropDownItem[] p
}
}
private void UpdateContextMenu()
private void UpdateInfoManager()
{
cmsTaskInfo.SuspendLayout();
@ -1124,11 +1124,16 @@ private WorkerTask[] GetSelectedTasks()
return null;
}
private void RemoveTasks(IEnumerable<WorkerTask> tasks)
private void RemoveTasks(WorkerTask[] tasks)
{
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);
}
RemoveTasks(tasks);
RemoveTasks(tasks.ToArray());
}
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()
@ -1448,7 +1453,7 @@ private void lblListViewTip_MouseUp(object sender, MouseEventArgs e)
}
else if (e.Button == MouseButtons.Right)
{
UpdateContextMenu();
UpdateInfoManager();
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;
await Task.Delay(1);
lvUploads.SelectedIndexChanged += lvUploads_SelectedIndexChanged;
UpdateContextMenu();
UpdateInfoManager();
}
private void lvUploads_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
UpdateContextMenu();
UpdateInfoManager();
cmsTaskInfo.Show(lvUploads, e.X + 1, e.Y + 1);
}
}
@ -1536,7 +1541,7 @@ private void lvUploads_KeyDown(object sender, KeyEventArgs e)
case Keys.Apps:
if (lvUploads.SelectedItems.Count > 0)
{
UpdateContextMenu();
UpdateInfoManager();
Rectangle rect = lvUploads.GetItemRect(lvUploads.SelectedIndex);
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;
}
private void ucTaskThumbnailView_SelectedPanelChanged(object sender, EventArgs e)
{
UpdateInfoManager();
}
private void UcTaskView_ContextMenuRequested(object sender, MouseEventArgs e)
{
UpdateContextMenu();
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;
tsmiImagePreviewShow.Check();
UpdateContextMenu();
UpdateInfoManager();
}
private void tsmiImagePreviewHide_Click(object sender, EventArgs e)
{
Program.Settings.ImagePreview = ImagePreviewVisibility.Hide;
tsmiImagePreviewHide.Check();
UpdateContextMenu();
UpdateInfoManager();
}
private void tsmiImagePreviewAutomatic_Click(object sender, EventArgs e)
{
Program.Settings.ImagePreview = ImagePreviewVisibility.Automatic;
tsmiImagePreviewAutomatic.Check();
UpdateContextMenu();
UpdateInfoManager();
}
private void tsmiImagePreviewSide_Click(object sender, EventArgs e)
{
Program.Settings.ImagePreviewLocation = ImagePreviewLocation.Side;
tsmiImagePreviewSide.Check();
UpdateContextMenu();
UpdateInfoManager();
}
private void tsmiImagePreviewBottom_Click(object sender, EventArgs e)
{
Program.Settings.ImagePreviewLocation = ImagePreviewLocation.Bottom;
tsmiImagePreviewBottom.Check();
UpdateContextMenu();
UpdateInfoManager();
}
private void TsmiThumbnailTitleShow_Click(object sender, EventArgs e)
@ -2511,7 +2520,7 @@ private void TsmiSwitchTaskViewMode_Click(object sender, EventArgs e)
UpdateTaskViewMode();
UpdateMainWindowLayout();
UpdateContextMenu();
UpdateInfoManager();
}
#endregion UploadInfoMenu events

View file

@ -2112,9 +2112,6 @@
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>844, 471</value>
</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">
<value>510, 250</value>
</data>