fixed #2483: Added "Run actions" sub menu to task context menu

This commit is contained in:
Jaex 2019-09-20 13:58:47 +03:00
parent 20c83136a9
commit 465b31844c
4 changed files with 107 additions and 34 deletions

View file

@ -26,6 +26,7 @@ You should have received a copy of the GNU General Public License
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
namespace ShareX.HelpersLib
{
@ -133,6 +134,11 @@ public string Run(string inputPath)
return inputPath;
}
public async Task<string> RunAsync(string inputPath)
{
return await Task.Run(() => Run(inputPath));
}
private bool CheckExtension(string path, string extensions)
{
if (!string.IsNullOrWhiteSpace(path))

View file

@ -274,10 +274,8 @@ 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.flpSocialButtons = new System.Windows.Forms.FlowLayoutPanel();
this.pbPatreonButton = new System.Windows.Forms.PictureBox();
this.pbBitcoinButton = new System.Windows.Forms.PictureBox();
@ -285,6 +283,9 @@ private void InitializeComponent()
this.pbDiscordButton = new System.Windows.Forms.PictureBox();
this.pbSocialHideButton = new System.Windows.Forms.PictureBox();
this.ttMain = new System.Windows.Forms.ToolTip(this.components);
this.tsmiRunAction = new System.Windows.Forms.ToolStripMenuItem();
this.ucNews = new ShareX.NewsListControl();
this.ucTaskThumbnailView = new ShareX.TaskThumbnailView();
((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
this.scMain.Panel1.SuspendLayout();
this.scMain.Panel2.SuspendLayout();
@ -1000,6 +1001,7 @@ private void InitializeComponent()
this.tsmiUploadSelectedFile,
this.tsmiDownloadSelectedURL,
this.tsmiEditSelectedFile,
this.tsmiRunAction,
this.tsmiDeleteSelectedItem,
this.tsmiDeleteSelectedFile,
this.tsmiShortenSelectedURL,
@ -2172,12 +2174,6 @@ 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)))));
@ -2195,15 +2191,6 @@ 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.TitleVisible = true;
this.ucTaskThumbnailView.ContextMenuRequested += new ShareX.TaskThumbnailView.TaskViewMouseEventHandler(this.UcTaskView_ContextMenuRequested);
//
// flpSocialButtons
//
resources.ApplyResources(this.flpSocialButtons, "flpSocialButtons");
@ -2272,6 +2259,28 @@ private void InitializeComponent()
this.ttMain.ReshowDelay = 100;
this.ttMain.Draw += new System.Windows.Forms.DrawToolTipEventHandler(this.TtMain_Draw);
//
// tsmiRunAction
//
this.tsmiRunAction.Image = global::ShareX.Properties.Resources.application_terminal;
this.tsmiRunAction.Name = "tsmiRunAction";
resources.ApplyResources(this.tsmiRunAction, "tsmiRunAction");
//
// 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;
@ -2573,5 +2582,6 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripSeparator tssThumbnailTitle;
private System.Windows.Forms.ToolStripMenuItem tsmiThumbnailTitleTop;
private System.Windows.Forms.ToolStripMenuItem tsmiThumbnailTitleBottom;
private System.Windows.Forms.ToolStripMenuItem tsmiRunAction;
}
}

View file

@ -616,7 +616,7 @@ private void UpdateContextMenu(WorkerTask task = null)
tsmiStopUpload.Visible = tsmiOpen.Visible = tsmiCopy.Visible = tsmiShowErrors.Visible = tsmiShowResponse.Visible = tsmiSearchImage.Visible =
tsmiShowQRCode.Visible = tsmiOCRImage.Visible = tsmiCombineImages.Visible = tsmiUploadSelectedFile.Visible = tsmiDownloadSelectedURL.Visible =
tsmiEditSelectedFile.Visible = tsmiDeleteSelectedItem.Visible = tsmiDeleteSelectedFile.Visible = tsmiShortenSelectedURL.Visible =
tsmiEditSelectedFile.Visible = tsmiRunAction.Visible = tsmiDeleteSelectedItem.Visible = tsmiDeleteSelectedFile.Visible = tsmiShortenSelectedURL.Visible =
tsmiShareSelectedURL.Visible = false;
if (Program.Settings.TaskViewMode == TaskViewMode.ListView)
@ -724,6 +724,8 @@ private void UpdateContextMenu(WorkerTask task = null)
tsmiUploadSelectedFile.Visible = uim.SelectedItem.IsFileExist;
tsmiDownloadSelectedURL.Visible = uim.SelectedItem.IsFileURL;
tsmiEditSelectedFile.Visible = uim.SelectedItem.IsImageFile;
tsmiRunAction.Visible = uim.SelectedItem.IsFileExist && Program.DefaultTaskSettings.ExternalPrograms.Count > 0;
UpdateActionsMenu(uim.SelectedItem.Info.FilePath);
tsmiDeleteSelectedItem.Visible = true;
tsmiDeleteSelectedFile.Visible = uim.SelectedItem.IsFileExist;
tsmiShortenSelectedURL.Visible = uim.SelectedItem.IsURLExist;
@ -862,6 +864,41 @@ private void CleanCustomClipboardFormats()
}
}
private void UpdateActionsMenu(string filePath)
{
tsmiRunAction.DropDownItems.Clear();
if (Program.DefaultTaskSettings.ExternalPrograms.Count > 0 && !string.IsNullOrEmpty(filePath) && File.Exists(filePath))
{
foreach (ExternalProgram action in Program.DefaultTaskSettings.ExternalPrograms)
{
if (!string.IsNullOrEmpty(action.Name))
{
string name = action.Name.Truncate(50, "...");
ToolStripMenuItem tsmi = new ToolStripMenuItem(name);
try
{
using (Icon icon = NativeMethods.GetFileIcon(action.Path, true))
{
if (icon != null && icon.Width > 0 && icon.Height > 0)
{
tsmi.Image = icon.ToBitmap();
}
}
}
catch (Exception e)
{
DebugHelper.WriteException(e);
}
tsmi.Click += async (sender, e) => await action.RunAsync(filePath);
tsmiRunAction.DropDownItems.Add(tsmi);
}
}
}
}
private void AfterApplicationSettingsJobs()
{
if (Program.Settings.TrayTextMoreInfo)
@ -1231,17 +1268,19 @@ await Task.Run(() =>
try
{
string title = window.Text.Truncate(50, "...");
ToolStripItem tsi = tsmiWindow.DropDownItems.Add(title);
tsi.Tag = window;
tsi.Click += handlerWindow;
ToolStripMenuItem tsmi = new ToolStripMenuItem(title);
tsmi.Tag = window;
tsmi.Click += handlerWindow;
using (Icon icon = window.Icon)
{
if (icon != null && icon.Width > 0 && icon.Height > 0)
{
tsi.Image = icon.ToBitmap();
tsmi.Image = icon.ToBitmap();
}
}
tsmiWindow.DropDownItems.Add(tsmi);
}
catch (Exception e)
{

View file

@ -1146,6 +1146,12 @@
<data name="tsmiEditSelectedFile.Text" xml:space="preserve">
<value>Edit image...</value>
</data>
<data name="tsmiRunAction.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 22</value>
</data>
<data name="tsmiRunAction.Text" xml:space="preserve">
<value>Run action</value>
</data>
<data name="tsmiDeleteSelectedItem.ShortcutKeyDisplayString" xml:space="preserve">
<value>Del</value>
</data>
@ -1228,34 +1234,34 @@
<value>Hide columns</value>
</data>
<data name="tsmiImagePreviewShow.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>130, 22</value>
</data>
<data name="tsmiImagePreviewShow.Text" xml:space="preserve">
<value>Show</value>
</data>
<data name="tsmiImagePreviewHide.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>130, 22</value>
</data>
<data name="tsmiImagePreviewHide.Text" xml:space="preserve">
<value>Hide</value>
</data>
<data name="tsmiImagePreviewAutomatic.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>130, 22</value>
</data>
<data name="tsmiImagePreviewAutomatic.Text" xml:space="preserve">
<value>Automatic</value>
</data>
<data name="tssImagePreview.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 6</value>
<value>127, 6</value>
</data>
<data name="tsmiImagePreviewSide.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>130, 22</value>
</data>
<data name="tsmiImagePreviewSide.Text" xml:space="preserve">
<value>Side</value>
</data>
<data name="tsmiImagePreviewBottom.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>130, 22</value>
</data>
<data name="tsmiImagePreviewBottom.Text" xml:space="preserve">
<value>Bottom</value>
@ -1267,28 +1273,28 @@
<value>Image preview</value>
</data>
<data name="tsmiThumbnailTitleShow.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>114, 22</value>
</data>
<data name="tsmiThumbnailTitleShow.Text" xml:space="preserve">
<value>Show</value>
</data>
<data name="tsmiThumbnailTitleHide.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>114, 22</value>
</data>
<data name="tsmiThumbnailTitleHide.Text" xml:space="preserve">
<value>Hide</value>
</data>
<data name="tssThumbnailTitle.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 6</value>
<value>111, 6</value>
</data>
<data name="tsmiThumbnailTitleTop.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>114, 22</value>
</data>
<data name="tsmiThumbnailTitleTop.Text" xml:space="preserve">
<value>Top</value>
</data>
<data name="tsmiThumbnailTitleBottom.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
<value>114, 22</value>
</data>
<data name="tsmiThumbnailTitleBottom.Text" xml:space="preserve">
<value>Bottom</value>
@ -1306,7 +1312,7 @@
<value>Switch to thumbnail view</value>
</data>
<data name="cmsTaskInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>229, 494</value>
<value>229, 516</value>
</data>
<data name="&gt;&gt;cmsTaskInfo.Name" xml:space="preserve">
<value>cmsTaskInfo</value>
@ -1983,6 +1989,9 @@
<data name="flpSocialButtons.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="pbPatreonButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pbPatreonButton.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
@ -2181,6 +2190,9 @@
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>834, 429</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>500, 250</value>
</data>
@ -3603,6 +3615,12 @@
<data name="&gt;&gt;ttMain.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsmiRunAction.Name" xml:space="preserve">
<value>tsmiRunAction</value>
</data>
<data name="&gt;&gt;tsmiRunAction.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MainForm</value>
</data>