mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-03 02:36:50 +13:00
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:
commit
07da0fc0e6
4 changed files with 66 additions and 42 deletions
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
38
ShareX/Forms/MainForm.Designer.cs
generated
38
ShareX/Forms/MainForm.Designer.cs
generated
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue