ShareX/ShareX/Forms/MainForm.cs

2400 lines
88 KiB
C#
Raw Normal View History

2013-11-03 23:53:49 +13:00
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
2024-01-03 12:57:14 +13:00
Copyright (c) 2007-2024 ShareX Team
2013-11-03 23:53:49 +13:00
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
2014-12-11 09:25:20 +13:00
using ShareX.HelpersLib;
using ShareX.ImageEffectsLib;
2013-11-03 23:53:49 +13:00
using ShareX.Properties;
2014-12-11 12:19:28 +13:00
using ShareX.ScreenCaptureLib;
using ShareX.UploadersLib;
2013-11-03 23:53:49 +13:00
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
2013-11-03 23:53:49 +13:00
using System.Linq;
using System.Threading.Tasks;
2013-11-03 23:53:49 +13:00
using System.Windows.Forms;
namespace ShareX
{
public partial class MainForm : HotkeyForm
{
public bool IsReady { get; private set; }
2013-11-03 23:53:49 +13:00
2016-09-29 13:33:12 +13:00
private bool forceClose, trayMenuSaveSettings = true;
private int trayClickCount = 0;
2013-11-03 23:53:49 +13:00
private UploadInfoManager uim;
private ToolStripDropDownItem tsmiImageFileUploaders, tsmiTrayImageFileUploaders, tsmiTextFileUploaders, tsmiTrayTextFileUploaders;
2020-05-12 23:55:44 +12:00
private ImageFilesCache actionsMenuIconCache = new ImageFilesCache();
2013-11-03 23:53:49 +13:00
public MainForm()
{
InitializeControls();
2013-11-03 23:53:49 +13:00
}
private async void MainForm_HandleCreated(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
2016-06-20 18:44:21 +12:00
RunPuushTasks();
2020-03-31 20:26:18 +13:00
NativeMethods.UseImmersiveDarkMode(Handle, ShareXResources.IsDarkTheme);
2024-03-29 12:29:07 +13:00
await UpdateControls();
2013-11-03 23:53:49 +13:00
DebugHelper.WriteLine("Startup time: {0} ms", Program.StartTimer.ElapsedMilliseconds);
await Program.CLI.UseCommandLineArgs();
2016-12-30 07:41:15 +13:00
if (Program.Settings.ActionsToolbarRunAtStartup)
{
2017-01-20 01:39:10 +13:00
TaskHelpers.OpenActionsToolbar();
}
2015-09-11 13:18:12 +12:00
}
private void InitializeControls()
2013-11-03 23:53:49 +13:00
{
InitializeComponent();
2019-02-11 11:26:08 +13:00
ShareXResources.UseWhiteIcon = Program.Settings.UseWhiteShareXIcon;
2021-11-27 07:48:16 +13:00
Icon = ShareXResources.Icon;
niTray.Icon = ShareXResources.Icon;
2013-11-03 23:53:49 +13:00
Text = Program.Title;
UpdateTheme();
2024-01-18 02:28:15 +13:00
this.CloseOnEscape();
cmsTray.IgnoreSeparatorClick();
cmsTaskInfo.IgnoreSeparatorClick();
tsddbWorkflows.HideImageMargin();
tsmiTrayWorkflows.HideImageMargin();
tsmiMonitor.HideImageMargin();
tsmiTrayMonitor.HideImageMargin();
tsmiOpen.HideImageMargin();
tsmiCopy.HideImageMargin();
tsmiShortenSelectedURL.HideImageMargin();
tsmiShareSelectedURL.HideImageMargin();
tsmiTrayRecentItems.HideImageMargin();
AddMultiEnumItems<AfterCaptureTasks>(x => Program.DefaultTaskSettings.AfterCaptureJob = Program.DefaultTaskSettings.AfterCaptureJob.Swap(x),
2013-11-03 23:53:49 +13:00
tsddbAfterCaptureTasks, tsmiTrayAfterCaptureTasks);
tsddbAfterCaptureTasks.DropDownOpening += TsddbAfterCaptureTasks_DropDownOpening;
tsmiTrayAfterCaptureTasks.DropDownOpening += TsmiTrayAfterCaptureTasks_DropDownOpening;
AddMultiEnumItems<AfterUploadTasks>(x => Program.DefaultTaskSettings.AfterUploadJob = Program.DefaultTaskSettings.AfterUploadJob.Swap(x),
2013-11-03 23:53:49 +13:00
tsddbAfterUploadTasks, tsmiTrayAfterUploadTasks);
AddEnumItems<ImageDestination>(x =>
{
Program.DefaultTaskSettings.ImageDestination = x;
if (x == ImageDestination.FileUploader)
{
2014-10-25 13:04:41 +13:00
SetEnumChecked(Program.DefaultTaskSettings.ImageFileDestination, tsmiImageFileUploaders, tsmiTrayImageFileUploaders);
}
else
{
Uncheck(tsmiImageFileUploaders, tsmiTrayImageFileUploaders);
}
}, tsmiImageUploaders, tsmiTrayImageUploaders);
tsmiImageFileUploaders = (ToolStripDropDownItem)tsmiImageUploaders.DropDownItems[tsmiImageUploaders.DropDownItems.Count - 1];
tsmiTrayImageFileUploaders = (ToolStripDropDownItem)tsmiTrayImageUploaders.DropDownItems[tsmiTrayImageUploaders.DropDownItems.Count - 1];
AddEnumItems<FileDestination>(x =>
{
Program.DefaultTaskSettings.ImageFileDestination = x;
tsmiImageFileUploaders.PerformClick();
tsmiTrayImageFileUploaders.PerformClick();
}, tsmiImageFileUploaders, tsmiTrayImageFileUploaders);
AddEnumItems<TextDestination>(x =>
{
Program.DefaultTaskSettings.TextDestination = x;
if (x == TextDestination.FileUploader)
{
2014-10-25 13:04:41 +13:00
SetEnumChecked(Program.DefaultTaskSettings.TextFileDestination, tsmiTextFileUploaders, tsmiTrayTextFileUploaders);
}
else
{
Uncheck(tsmiTextFileUploaders, tsmiTrayTextFileUploaders);
}
}, tsmiTextUploaders, tsmiTrayTextUploaders);
tsmiTextFileUploaders = (ToolStripDropDownItem)tsmiTextUploaders.DropDownItems[tsmiTextUploaders.DropDownItems.Count - 1];
tsmiTrayTextFileUploaders = (ToolStripDropDownItem)tsmiTrayTextUploaders.DropDownItems[tsmiTrayTextUploaders.DropDownItems.Count - 1];
AddEnumItems<FileDestination>(x =>
{
Program.DefaultTaskSettings.TextFileDestination = x;
tsmiTextFileUploaders.PerformClick();
tsmiTrayTextFileUploaders.PerformClick();
}, tsmiTextFileUploaders, tsmiTrayTextFileUploaders);
AddEnumItems<FileDestination>(x => Program.DefaultTaskSettings.FileDestination = x, tsmiFileUploaders, tsmiTrayFileUploaders);
AddEnumItems<UrlShortenerType>(x => Program.DefaultTaskSettings.URLShortenerDestination = x, tsmiURLShorteners, tsmiTrayURLShorteners);
2014-07-14 08:59:17 +12:00
AddEnumItems<URLSharingServices>(x => Program.DefaultTaskSettings.URLSharingServiceDestination = x, tsmiURLSharingServices, tsmiTrayURLSharingServices);
2013-11-03 23:53:49 +13:00
foreach (UrlShortenerType urlShortener in Helpers.GetEnums<UrlShortenerType>())
{
2014-10-25 13:04:41 +13:00
ToolStripMenuItem tsmi = new ToolStripMenuItem(urlShortener.GetLocalizedDescription());
tsmi.Click += (sender, e) => uim.ShortenURL(urlShortener);
tsmiShortenSelectedURL.DropDownItems.Add(tsmi);
}
2014-07-14 08:59:17 +12:00
foreach (URLSharingServices urlSharingService in Helpers.GetEnums<URLSharingServices>())
{
2014-10-25 13:04:41 +13:00
ToolStripMenuItem tsmi = new ToolStripMenuItem(urlSharingService.GetLocalizedDescription());
2014-07-14 08:59:17 +12:00
tsmi.Click += (sender, e) => uim.ShareURL(urlSharingService);
tsmiShareSelectedURL.DropDownItems.Add(tsmi);
}
2020-02-09 04:07:17 +13:00
lvUploads.SupportCustomTheme();
2019-06-29 10:35:34 +12:00
2013-11-03 23:53:49 +13:00
ImageList il = new ImageList();
il.ColorDepth = ColorDepth.Depth32Bit;
il.Images.Add(Resources.navigation_090_button);
il.Images.Add(Resources.cross_button);
il.Images.Add(Resources.tick_button);
il.Images.Add(Resources.navigation_000_button);
2016-02-23 07:00:22 +13:00
il.Images.Add(Resources.clock);
2013-11-03 23:53:49 +13:00
lvUploads.SmallImageList = il;
2019-06-14 04:12:20 +12:00
TaskManager.TaskListView = new TaskListView(lvUploads);
2019-05-26 23:09:56 +12:00
TaskManager.TaskThumbnailView = ucTaskThumbnailView;
uim = new UploadInfoManager();
foreach (ToolStripDropDownItem dropDownItem in new ToolStripDropDownItem[]
{
tsddbAfterCaptureTasks, tsddbAfterUploadTasks, tsmiImageUploaders, tsmiImageFileUploaders, tsmiTextUploaders, tsmiTextFileUploaders, tsmiFileUploaders,
tsmiURLShorteners, tsmiURLSharingServices, tsmiTrayAfterCaptureTasks, tsmiTrayAfterUploadTasks, tsmiTrayImageUploaders, tsmiTrayImageFileUploaders,
tsmiTrayTextUploaders, tsmiTrayTextFileUploaders, tsmiTrayFileUploaders, tsmiTrayURLShorteners, tsmiTrayURLSharingServices, tsmiScreenshotDelay,
tsmiTrayScreenshotDelay
})
{
dropDownItem.DisableMenuCloseOnClick();
}
2014-06-07 06:51:09 +12:00
ExportImportControl.UploadRequested += json => UploadManager.UploadText(json);
#if MicrosoftStore
tsmiDNSChanger.Visible = false;
tsmiTrayDNSChanger.Visible = false;
#endif
2017-06-17 18:24:34 +12:00
HandleCreated += MainForm_HandleCreated;
}
2024-03-29 12:29:07 +13:00
public async Task UpdateControls()
{
IsReady = false;
niTray.Visible = Program.Settings.ShowTray;
2017-10-10 21:53:33 +13:00
TaskManager.UpdateMainFormTip();
TaskManager.RecentManager.InitItems();
bool isPositionChanged = false;
if (Program.Settings.RememberMainFormPosition && !Program.Settings.MainFormPosition.IsEmpty &&
CaptureHelpers.GetScreenBounds().IntersectsWith(new Rectangle(Program.Settings.MainFormPosition, Program.Settings.MainFormSize)))
{
StartPosition = FormStartPosition.Manual;
Location = Program.Settings.MainFormPosition;
isPositionChanged = true;
}
tsMain.Width = tsMain.PreferredSize.Width;
int height = Size.Height + tsMain.PreferredSize.Height - tsMain.Height;
MinimumSize = new Size(MinimumSize.Width, height);
if (Program.Settings.RememberMainFormSize && !Program.Settings.MainFormSize.IsEmpty)
{
Size = Program.Settings.MainFormSize;
if (!isPositionChanged)
{
StartPosition = FormStartPosition.Manual;
Rectangle activeScreen = CaptureHelpers.GetActiveScreenBounds();
Location = new Point((activeScreen.Width / 2) - (Size.Width / 2), (activeScreen.Height / 2) - (Size.Height / 2));
}
}
else
{
Size = new Size(Size.Width, height);
}
if (Program.Settings.PreviewSplitterDistance > 0)
{
scMain.SplitterDistance = Program.Settings.PreviewSplitterDistance;
}
2018-10-02 10:29:55 +13:00
if (Program.Settings.TaskListViewColumnWidths != null)
{
int len = Math.Min(lvUploads.Columns.Count - 1, Program.Settings.TaskListViewColumnWidths.Count);
for (int i = 0; i < len; i++)
{
lvUploads.Columns[i].Width = Program.Settings.TaskListViewColumnWidths[i];
}
}
TaskbarManager.Enabled = Program.Settings.TaskbarProgressEnabled;
UpdateCheckStates();
UpdateUploaderMenuNames();
UpdateDestinationStates();
UpdateToggleHotkeyButton();
AfterTaskSettingsJobs();
AfterApplicationSettingsJobs();
2016-02-12 13:15:23 +13:00
2024-03-29 12:29:07 +13:00
await InitHotkeys();
2016-02-12 13:15:23 +13:00
IsReady = true;
2016-02-12 13:15:23 +13:00
}
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)WindowsMessages.QUERYENDSESSION)
{
2018-11-20 08:35:33 +13:00
// Calling ToInt64 because the int conversion operator (called when directly casting the IntPtr to the enum)
2018-11-20 08:32:16 +13:00
// enforces checked semantics thus crashes any 64 bits build. ToInt64() and long -> enum conversion doesn't.
EndSessionReasons reason = (EndSessionReasons)m.LParam.ToInt64();
if (reason.HasFlag(EndSessionReasons.ENDSESSION_CLOSEAPP))
{
// Register for restart. This allows our application to automatically restart when it is installing an update from the Store.
// Also allows it to restart if it gets terminated for other reasons (see description of ENDSESSION_CLOSEAPP).
// Add the silent switch to avoid ShareX popping up in front of the user when the application restarts.
NativeMethods.RegisterApplicationRestart("-silent", 0);
}
m.Result = new IntPtr(1); // "Applications should respect the user's intentions and return TRUE."
}
else if (m.Msg == (int)WindowsMessages.ENDSESSION)
{
if (m.WParam != IntPtr.Zero)
{
// If wParam is not equal to false (0), the application can be terminated at any moment after processing this message
// thus should save its data while processing the message.
2018-10-17 09:34:55 +13:00
Program.CloseSequence();
}
m.Result = IntPtr.Zero; // "If an application processes this message, it should return zero."
}
else
{
base.WndProc(ref m);
}
}
private void AfterShownJobs()
{
if (!Program.Settings.ShowMostRecentTaskFirst && lvUploads.Items.Count > 0)
{
lvUploads.Items[lvUploads.Items.Count - 1].EnsureVisible();
}
if (Program.SteamFirstTimeConfig)
{
using (FirstTimeConfigForm firstTimeConfigForm = new FirstTimeConfigForm())
{
firstTimeConfigForm.ShowDialog();
}
}
else
{
this.ForceActivate();
}
2013-11-03 23:53:49 +13:00
}
2024-03-29 12:29:07 +13:00
private async Task InitHotkeys()
{
2024-03-29 12:29:07 +13:00
await Task.Run(() => SettingManager.WaitHotkeysConfig());
if (Program.HotkeyManager == null)
{
2024-03-29 12:29:07 +13:00
Program.HotkeyManager = new HotkeyManager(this);
Program.HotkeyManager.HotkeyTrigger += HandleHotkeys;
}
2024-03-29 12:29:07 +13:00
Program.HotkeyManager.UpdateHotkeys(Program.HotkeysConfig.Hotkeys, !Program.IgnoreHotkeyWarning);
2024-03-29 12:29:07 +13:00
DebugHelper.WriteLine("HotkeyManager started.");
2024-03-29 12:29:07 +13:00
if (Program.WatchFolderManager == null)
{
Program.WatchFolderManager = new WatchFolderManager();
}
2024-03-29 12:29:07 +13:00
Program.WatchFolderManager.UpdateWatchFolders();
2024-03-29 12:29:07 +13:00
DebugHelper.WriteLine("WatchFolderManager started.");
2024-03-29 12:29:07 +13:00
UpdateWorkflowsMenu();
2024-01-17 18:53:08 +13:00
2024-03-29 12:29:07 +13:00
if (pHotkeys.Visible)
{
pHotkeys.Focus();
}
}
private async void HandleHotkeys(HotkeySettings hotkeySetting)
{
DebugHelper.WriteLine("Hotkey triggered. " + hotkeySetting);
await TaskHelpers.ExecuteJob(hotkeySetting.TaskSettings);
}
private void UpdateWorkflowsMenu()
{
tsddbWorkflows.DropDownItems.Clear();
tsmiTrayWorkflows.DropDownItems.Clear();
2014-06-07 13:08:34 +12:00
foreach (HotkeySettings hotkeySetting in Program.HotkeysConfig.Hotkeys)
{
2014-05-19 06:12:39 +12:00
if (hotkeySetting.TaskSettings.Job != HotkeyType.None && (!Program.Settings.WorkflowsOnlyShowEdited || !hotkeySetting.TaskSettings.IsUsingDefaultSettings))
{
2014-05-19 06:12:39 +12:00
tsddbWorkflows.DropDownItems.Add(WorkflowMenuItem(hotkeySetting));
tsmiTrayWorkflows.DropDownItems.Add(WorkflowMenuItem(hotkeySetting));
}
2014-05-19 06:12:39 +12:00
}
2014-06-07 13:08:34 +12:00
if (tsddbWorkflows.DropDownItems.Count > 0)
{
ToolStripSeparator tss = new ToolStripSeparator();
tsddbWorkflows.DropDownItems.Add(tss);
}
ToolStripMenuItem tsmi = new ToolStripMenuItem(Resources.MainForm_UpdateWorkflowsMenu_You_can_add_workflows_from_hotkey_settings___);
2014-06-07 13:08:34 +12:00
tsmi.Click += tsbHotkeySettings_Click;
tsddbWorkflows.DropDownItems.Add(tsmi);
tsmiTrayWorkflows.Visible = tsmiTrayWorkflows.DropDownItems.Count > 0;
UpdateMainFormTip();
}
private void UpdateMainFormTip()
{
2014-11-24 08:04:14 +13:00
TaskManager.UpdateMainFormTip();
dgvHotkeys.Rows.Clear();
foreach (HotkeySettings hotkey in Program.HotkeysConfig.Hotkeys.Where(x => x.HotkeyInfo.IsValidHotkey))
{
int index = dgvHotkeys.Rows.Add();
DataGridViewRow row = dgvHotkeys.Rows[index];
row.Cells[0].Style.BackColor = row.Cells[0].Style.SelectionBackColor =
hotkey.HotkeyInfo.Status == HotkeyStatus.Registered ? Color.FromArgb(80, 160, 80) : Color.FromArgb(200, 80, 80);
row.Cells[1].Value = hotkey.HotkeyInfo.ToString();
row.Cells[2].Value = hotkey.TaskSettings.ToString();
2016-04-25 03:17:59 +12:00
}
}
2014-05-19 06:12:39 +12:00
private ToolStripMenuItem WorkflowMenuItem(HotkeySettings hotkeySetting)
{
2015-01-17 12:29:52 +13:00
ToolStripMenuItem tsmi = new ToolStripMenuItem(hotkeySetting.TaskSettings.ToString().Replace("&", "&&"));
2014-06-07 13:08:34 +12:00
if (hotkeySetting.HotkeyInfo.IsValidHotkey)
{
2014-10-19 10:48:47 +13:00
tsmi.ShortcutKeyDisplayString = " " + hotkeySetting.HotkeyInfo;
2014-06-07 13:08:34 +12:00
}
2014-06-07 13:08:34 +12:00
if (!hotkeySetting.TaskSettings.IsUsingDefaultSettings)
{
tsmi.Font = new Font(tsmi.Font, FontStyle.Bold);
}
tsmi.Click += async (sender, e) => await TaskHelpers.ExecuteJob(hotkeySetting.TaskSettings);
2014-05-19 06:12:39 +12:00
return tsmi;
}
2013-11-03 23:53:49 +13:00
private void UpdateDestinationStates()
{
if (Program.UploadersConfig != null)
{
EnableDisableToolStripMenuItems<ImageDestination>(tsmiImageUploaders, tsmiTrayImageUploaders);
EnableDisableToolStripMenuItems<FileDestination>(tsmiImageFileUploaders, tsmiTrayImageFileUploaders);
2013-11-03 23:53:49 +13:00
EnableDisableToolStripMenuItems<TextDestination>(tsmiTextUploaders, tsmiTrayTextUploaders);
EnableDisableToolStripMenuItems<FileDestination>(tsmiTextFileUploaders, tsmiTrayTextFileUploaders);
2013-11-03 23:53:49 +13:00
EnableDisableToolStripMenuItems<FileDestination>(tsmiFileUploaders, tsmiTrayFileUploaders);
EnableDisableToolStripMenuItems<UrlShortenerType>(tsmiURLShorteners, tsmiTrayURLShorteners);
EnableDisableToolStripMenuItems<URLSharingServices>(tsmiURLSharingServices, tsmiTrayURLSharingServices);
2013-11-03 23:53:49 +13:00
}
}
private void AddEnumItems<T>(Action<T> selectedEnum, params ToolStripDropDownItem[] parents) where T : Enum
2013-11-03 23:53:49 +13:00
{
T[] enums = Helpers.GetEnums<T>();
2013-11-03 23:53:49 +13:00
foreach (ToolStripDropDownItem parent in parents)
{
for (int i = 0; i < enums.Length; i++)
{
T currentEnum = enums[i];
ToolStripMenuItem tsmi = new ToolStripMenuItem(currentEnum.GetLocalizedDescription());
2013-11-03 23:53:49 +13:00
int index = i;
tsmi.Click += (sender, e) =>
{
foreach (ToolStripDropDownItem parent2 in parents)
{
for (int i2 = 0; i2 < enums.Length; i2++)
{
ToolStripMenuItem tsmi2 = (ToolStripMenuItem)parent2.DropDownItems[i2];
tsmi2.Checked = index == i2;
}
}
selectedEnum(currentEnum);
2013-11-03 23:53:49 +13:00
UpdateUploaderMenuNames();
};
parent.DropDownItems.Add(tsmi);
}
}
}
2014-10-25 13:04:41 +13:00
public static void Uncheck(params ToolStripDropDownItem[] lists)
{
foreach (ToolStripDropDownItem parent in lists)
{
2016-09-17 19:07:02 +12:00
foreach (ToolStripItem dropDownItem in parent.DropDownItems)
2014-10-25 13:04:41 +13:00
{
((ToolStripMenuItem)dropDownItem).Checked = false;
}
}
}
private static void SetEnumChecked(Enum value, params ToolStripDropDownItem[] parents)
2013-11-03 23:53:49 +13:00
{
if (value == null)
2014-10-25 13:04:41 +13:00
{
return;
2014-10-25 13:04:41 +13:00
}
2013-11-03 23:53:49 +13:00
int index = value.GetIndex();
foreach (ToolStripDropDownItem parent in parents)
{
((ToolStripMenuItem)parent.DropDownItems[index]).RadioCheck();
2013-11-03 23:53:49 +13:00
}
}
private void AddMultiEnumItems<T>(Action<T> selectedEnum, params ToolStripDropDownItem[] parents) where T : Enum
2013-11-03 23:53:49 +13:00
{
T[] enums = Helpers.GetEnums<T>().Skip(1).ToArray();
2013-11-03 23:53:49 +13:00
foreach (ToolStripDropDownItem parent in parents)
{
2014-10-19 09:29:23 +13:00
for (int i = 0; i < enums.Length; i++)
2013-11-03 23:53:49 +13:00
{
T currentEnum = enums[i];
ToolStripMenuItem tsmi = new ToolStripMenuItem(currentEnum.GetLocalizedDescription());
tsmi.Image = TaskHelpers.FindMenuIcon(currentEnum);
2013-11-03 23:53:49 +13:00
int index = i;
tsmi.Click += (sender, e) =>
{
foreach (ToolStripDropDownItem parent2 in parents)
{
ToolStripMenuItem tsmi2 = (ToolStripMenuItem)parent2.DropDownItems[index];
tsmi2.Checked = !tsmi2.Checked;
}
selectedEnum(currentEnum);
2013-11-03 23:53:49 +13:00
UpdateUploaderMenuNames();
};
parent.DropDownItems.Add(tsmi);
}
}
}
private void UpdateImageEffectsMenu(ToolStripDropDownItem parent)
{
2020-09-17 09:18:17 +12:00
int indexAddImageEffects = AfterCaptureTasks.AddImageEffects.GetIndex() - 1;
ToolStripMenuItem tsmiAddImageEffects = (ToolStripMenuItem)parent.DropDownItems[indexAddImageEffects];
2020-09-17 09:32:41 +12:00
tsmiAddImageEffects.DisableMenuCloseOnClick();
tsmiAddImageEffects.DropDownItems.Clear();
2021-11-27 05:54:48 +13:00
if (Program.DefaultTaskSettings.ImageSettings.ImageEffectPresets == null)
{
Program.DefaultTaskSettings.ImageSettings.ImageEffectPresets = new List<ImageEffectPreset>();
}
int count = Program.DefaultTaskSettings.ImageSettings.ImageEffectPresets.Count;
if (count > 0)
{
List<ToolStripItem> items = new List<ToolStripItem>();
for (int i = 0; i < count; i++)
{
ImageEffectPreset effectPreset = Program.DefaultTaskSettings.ImageSettings.ImageEffectPresets[i];
if (effectPreset != null)
{
ToolStripMenuItem tsmi = new ToolStripMenuItem(effectPreset.ToString());
tsmi.Checked = i == Program.DefaultTaskSettings.ImageSettings.SelectedImageEffectPreset;
int indexSelected = i;
tsmi.Click += (sender, e) =>
{
Program.DefaultTaskSettings.ImageSettings.SelectedImageEffectPreset = indexSelected;
((ToolStripMenuItem)sender).RadioCheck();
};
items.Add(tsmi);
}
}
if (items.Count > 0)
{
tsmiAddImageEffects.DropDownItems.AddRange(items.ToArray());
}
}
}
2013-11-03 23:53:49 +13:00
private void SetMultiEnumChecked(Enum value, params ToolStripDropDownItem[] parents)
{
for (int i = 0; i < parents[0].DropDownItems.Count; i++)
{
foreach (ToolStripDropDownItem parent in parents)
{
ToolStripMenuItem tsmi = (ToolStripMenuItem)parent.DropDownItems[i];
tsmi.Checked = value.HasFlag(1 << i);
}
}
}
private void EnableDisableToolStripMenuItems<T>(params ToolStripDropDownItem[] parents)
{
foreach (ToolStripDropDownItem parent in parents)
{
for (int i = 0; i < parent.DropDownItems.Count; i++)
{
parent.DropDownItems[i].ForeColor = UploadersConfigValidator.Validate<T>(i, Program.UploadersConfig) ?
SystemColors.ControlText : Color.FromArgb(200, 0, 0);
2013-11-03 23:53:49 +13:00
}
}
}
private void UpdateInfoManager()
2013-11-03 23:53:49 +13:00
{
2014-07-17 18:58:17 +12:00
cmsTaskInfo.SuspendLayout();
2013-11-03 23:53:49 +13:00
tsmiStopUpload.Visible = tsmiOpen.Visible = tsmiCopy.Visible = tsmiShowErrors.Visible = tsmiShowResponse.Visible =
tsmiGoogleLens.Visible = tsmiBingVisualSearch.Visible = tsmiShowQRCode.Visible = tsmiOCRImage.Visible =
tsmiCombineImages.Visible = tsmiUploadSelectedFile.Visible = tsmiDownloadSelectedURL.Visible = tsmiEditSelectedFile.Visible =
tsmiBeautifyImage.Visible = tsmiAddImageEffects.Visible = tsmiPinSelectedFile.Visible = tsmiRunAction.Visible =
tsmiDeleteSelectedItem.Visible = tsmiDeleteSelectedFile.Visible = tsmiShortenSelectedURL.Visible = tsmiShareSelectedURL.Visible = false;
2013-11-03 23:53:49 +13:00
2019-05-13 10:21:37 +12:00
if (Program.Settings.TaskViewMode == TaskViewMode.ListView)
2014-06-19 07:17:22 +12:00
{
2019-05-12 08:36:00 +12:00
pbPreview.Reset();
uim.UpdateSelectedItems(lvUploads.SelectedItems.Cast<ListViewItem>().Select(x => x.Tag as WorkerTask));
2014-06-19 07:17:22 +12:00
2019-05-12 08:36:00 +12:00
switch (Program.Settings.ImagePreview)
{
case ImagePreviewVisibility.Show:
scMain.Panel2Collapsed = false;
break;
case ImagePreviewVisibility.Hide:
scMain.Panel2Collapsed = true;
break;
case ImagePreviewVisibility.Automatic:
scMain.Panel2Collapsed = !uim.IsItemSelected || (!uim.SelectedItem.IsImageFile && !uim.SelectedItem.IsImageURL);
break;
}
switch (Program.Settings.ImagePreviewLocation)
{
case ImagePreviewLocation.Side:
scMain.Orientation = Orientation.Vertical;
break;
case ImagePreviewLocation.Bottom:
scMain.Orientation = Orientation.Horizontal;
break;
}
}
else if (Program.Settings.TaskViewMode == TaskViewMode.ThumbnailView)
{
uim.UpdateSelectedItems(ucTaskThumbnailView.SelectedPanels.Select(x => x.Task));
}
2013-11-03 23:53:49 +13:00
if (uim.IsItemSelected)
{
// Open
tsmiOpen.Visible = true;
tsmiOpenURL.Enabled = uim.SelectedItem.IsURLExist;
tsmiOpenShortenedURL.Enabled = uim.SelectedItem.IsShortenedURLExist;
tsmiOpenThumbnailURL.Enabled = uim.SelectedItem.IsThumbnailURLExist;
tsmiOpenDeletionURL.Enabled = uim.SelectedItem.IsDeletionURLExist;
tsmiOpenFile.Enabled = uim.SelectedItem.IsFileExist;
tsmiOpenFolder.Enabled = uim.SelectedItem.IsFileExist;
tsmiOpenThumbnailFile.Enabled = uim.SelectedItem.IsThumbnailFileExist;
2019-05-14 12:56:01 +12:00
if (uim.SelectedItems != null && uim.SelectedItems.Any(x => x.Task.IsWorking))
2013-11-03 23:53:49 +13:00
{
tsmiStopUpload.Visible = true;
}
else
{
tsmiShowErrors.Visible = uim.SelectedItem.Info.Result.IsError;
2013-11-03 23:53:49 +13:00
// Copy
tsmiCopy.Visible = true;
2013-11-03 23:53:49 +13:00
tsmiCopyURL.Enabled = uim.SelectedItems.Any(x => x.IsURLExist);
tsmiCopyShortenedURL.Enabled = uim.SelectedItems.Any(x => x.IsShortenedURLExist);
tsmiCopyThumbnailURL.Enabled = uim.SelectedItems.Any(x => x.IsThumbnailURLExist);
tsmiCopyDeletionURL.Enabled = uim.SelectedItems.Any(x => x.IsDeletionURLExist);
2013-11-03 23:53:49 +13:00
tsmiCopyFile.Enabled = uim.SelectedItem.IsFileExist;
tsmiCopyImage.Enabled = uim.SelectedItem.IsImageFile;
tsmiCopyImageDimensions.Enabled = uim.SelectedItem.IsImageFile;
tsmiCopyText.Enabled = uim.SelectedItem.IsTextFile;
tsmiCopyThumbnailFile.Enabled = uim.SelectedItem.IsThumbnailFileExist;
tsmiCopyThumbnailImage.Enabled = uim.SelectedItem.IsThumbnailFileExist;
2013-11-03 23:53:49 +13:00
tsmiCopyHTMLLink.Enabled = uim.SelectedItems.Any(x => x.IsURLExist);
tsmiCopyHTMLImage.Enabled = uim.SelectedItems.Any(x => x.IsImageURL);
tsmiCopyHTMLLinkedImage.Enabled = uim.SelectedItems.Any(x => x.IsImageURL && x.IsThumbnailURLExist);
2013-11-03 23:53:49 +13:00
tsmiCopyForumLink.Enabled = uim.SelectedItems.Any(x => x.IsURLExist);
tsmiCopyForumImage.Enabled = uim.SelectedItems.Any(x => x.IsImageURL && x.IsURLExist);
tsmiCopyForumLinkedImage.Enabled = uim.SelectedItems.Any(x => x.IsImageURL && x.IsThumbnailURLExist);
2013-11-03 23:53:49 +13:00
2017-09-28 03:15:49 +13:00
tsmiCopyMarkdownLink.Enabled = uim.SelectedItems.Any(x => x.IsURLExist);
tsmiCopyMarkdownImage.Enabled = uim.SelectedItems.Any(x => x.IsImageURL);
tsmiCopyMarkdownLinkedImage.Enabled = uim.SelectedItems.Any(x => x.IsImageURL && x.IsThumbnailURLExist);
tsmiCopyFilePath.Enabled = uim.SelectedItems.Any(x => x.IsFilePathValid);
tsmiCopyFileName.Enabled = uim.SelectedItems.Any(x => x.IsFilePathValid);
tsmiCopyFileNameWithExtension.Enabled = uim.SelectedItems.Any(x => x.IsFilePathValid);
tsmiCopyFolder.Enabled = uim.SelectedItems.Any(x => x.IsFilePathValid);
2013-11-03 23:53:49 +13:00
CleanCustomClipboardFormats();
2013-11-03 23:53:49 +13:00
if (Program.Settings.ClipboardContentFormats != null && Program.Settings.ClipboardContentFormats.Count > 0)
{
2017-09-28 03:15:49 +13:00
tssCopy6.Visible = true;
foreach (ClipboardFormat cf in Program.Settings.ClipboardContentFormats)
{
ToolStripMenuItem tsmiClipboardFormat = new ToolStripMenuItem(cf.Description);
tsmiClipboardFormat.Tag = cf;
tsmiClipboardFormat.Click += tsmiClipboardFormat_Click;
tsmiCopy.DropDownItems.Add(tsmiClipboardFormat);
2013-11-03 23:53:49 +13:00
}
}
tsmiUploadSelectedFile.Visible = uim.SelectedItem.IsFileExist;
tsmiDownloadSelectedURL.Visible = uim.SelectedItem.IsFileURL;
2014-07-17 18:58:17 +12:00
tsmiEditSelectedFile.Visible = uim.SelectedItem.IsImageFile;
tsmiBeautifyImage.Visible = uim.SelectedItem.IsImageFile;
tsmiAddImageEffects.Visible = uim.SelectedItem.IsImageFile;
2022-07-24 20:31:18 +12:00
tsmiPinSelectedFile.Visible = uim.SelectedItem.IsImageFile;
UpdateActionsMenu(uim.SelectedItem.Info.FilePath);
2017-02-14 07:00:47 +13:00
tsmiDeleteSelectedItem.Visible = true;
2014-07-28 10:08:37 +12:00
tsmiDeleteSelectedFile.Visible = uim.SelectedItem.IsFileExist;
tsmiShortenSelectedURL.Visible = uim.SelectedItem.IsURLExist;
tsmiShareSelectedURL.Visible = uim.SelectedItem.IsURLExist;
tsmiGoogleLens.Visible = uim.SelectedItem.IsURLExist;
2021-07-31 19:49:53 +12:00
tsmiBingVisualSearch.Visible = uim.SelectedItem.IsURLExist;
tsmiShowQRCode.Visible = uim.SelectedItem.IsURLExist;
tsmiOCRImage.Visible = uim.SelectedItem.IsImageFile;
2018-04-29 10:30:39 +12:00
tsmiCombineImages.Visible = uim.SelectedItems.Count(x => x.IsImageFile) > 1;
tsmiShowResponse.Visible = !string.IsNullOrEmpty(uim.SelectedItem.Info.Result.Response);
2013-11-03 23:53:49 +13:00
}
2019-05-13 10:21:37 +12:00
if (Program.Settings.TaskViewMode == TaskViewMode.ListView)
2013-11-03 23:53:49 +13:00
{
2019-05-12 08:36:00 +12:00
if (!scMain.Panel2Collapsed)
2013-11-03 23:53:49 +13:00
{
2019-05-12 08:36:00 +12:00
if (uim.SelectedItem.IsImageFile)
{
pbPreview.LoadImageFromFileAsync(uim.SelectedItem.Info.FilePath);
}
else if (uim.SelectedItem.IsImageURL)
{
pbPreview.LoadImageFromURLAsync(uim.SelectedItem.Info.Result.URL);
}
2013-11-03 23:53:49 +13:00
}
}
}
tsmiClearList.Visible = tssUploadInfo1.Visible = lvUploads.Items.Count > 0;
2014-07-17 18:58:17 +12:00
cmsTaskInfo.ResumeLayout();
2014-06-19 07:17:22 +12:00
Refresh();
2013-11-03 23:53:49 +13:00
}
private void UpdateTaskViewMode()
{
if (Program.Settings.TaskViewMode == TaskViewMode.ListView)
{
2019-08-24 15:50:52 +12:00
tsmiSwitchTaskViewMode.Text = Resources.SwitchToThumbnailView;
tsmiSwitchTaskViewMode.Image = Resources.application_icon_large;
scMain.Visible = true;
ucTaskThumbnailView.Visible = false;
scMain.Focus();
}
else
{
2019-08-24 15:50:52 +12:00
tsmiSwitchTaskViewMode.Text = Resources.SwitchToListView;
tsmiSwitchTaskViewMode.Image = Resources.application_list;
ucTaskThumbnailView.Visible = true;
scMain.Visible = false;
ucTaskThumbnailView.Focus();
}
}
public void UpdateTheme()
{
2019-09-07 22:41:38 +12:00
if (Program.Settings.Themes == null || Program.Settings.Themes.Count == 0)
{
2020-12-09 18:32:46 +13:00
Program.Settings.Themes = ShareXTheme.GetDefaultThemes();
2019-09-07 22:41:38 +12:00
Program.Settings.SelectedTheme = 0;
}
if (!Program.Settings.Themes.IsValidIndex(Program.Settings.SelectedTheme))
{
Program.Settings.SelectedTheme = 0;
}
ShareXResources.Theme = Program.Settings.Themes[Program.Settings.SelectedTheme];
2020-02-05 21:13:55 +13:00
ShareXResources.UseCustomTheme = Program.Settings.UseCustomTheme;
2019-09-07 22:41:38 +12:00
if (IsHandleCreated)
{
2020-03-31 20:26:18 +13:00
NativeMethods.UseImmersiveDarkMode(Handle, ShareXResources.IsDarkTheme);
}
2020-02-05 21:13:55 +13:00
if (ShareXResources.UseCustomTheme)
{
BackColor = ShareXResources.Theme.BackgroundColor;
2021-08-23 15:17:35 +12:00
tsMain.Font = ShareXResources.Theme.MenuFont;
tsMain.Renderer = new ToolStripDarkRenderer();
tsMain.DrawCustomBorder = false;
2020-02-09 04:07:17 +13:00
ShareXResources.ApplyCustomThemeToContextMenuStrip(cmsTray);
ShareXResources.ApplyCustomThemeToContextMenuStrip(cmsTaskInfo);
ttMain.BackColor = ShareXResources.Theme.BackgroundColor;
ttMain.ForeColor = ShareXResources.Theme.TextColor;
lvUploads.BackColor = ShareXResources.Theme.BackgroundColor;
lvUploads.ForeColor = ShareXResources.Theme.TextColor;
scMain.SplitterColor = ShareXResources.Theme.BackgroundColor;
scMain.SplitterLineColor = ShareXResources.Theme.BorderColor;
ShareXResources.ApplyCustomThemeToControl(dgvHotkeys);
dgvHotkeys.BackgroundColor = ShareXResources.Theme.BackgroundColor;
}
else
{
BackColor = SystemColors.Window;
tsMain.Renderer = new ToolStripCustomRenderer();
tsMain.DrawCustomBorder = true;
cmsTray.Renderer = new ToolStripCustomRenderer();
cmsTray.Opacity = 1;
cmsTaskInfo.Renderer = new ToolStripCustomRenderer();
2020-07-09 00:12:49 +12:00
cmsTaskInfo.Opacity = 1;
2019-08-16 22:07:25 +12:00
ttMain.BackColor = SystemColors.Window;
ttMain.ForeColor = SystemColors.ControlText;
2019-05-16 17:40:54 +12:00
lvUploads.BackColor = SystemColors.Window;
lvUploads.ForeColor = SystemColors.ControlText;
2019-05-16 18:04:47 +12:00
scMain.SplitterColor = Color.White;
scMain.SplitterLineColor = ProfessionalColors.SeparatorDark;
dgvHotkeys.BackgroundColor = SystemColors.Window;
}
2024-01-20 02:57:07 +13:00
tsmiTweetMessage.Image = TaskHelpers.FindMenuIcon(HotkeyType.TweetMessage);
tsmiTrayTweetMessage.Image = TaskHelpers.FindMenuIcon(HotkeyType.TweetMessage);
tsbX.Image = TaskHelpers.FindMenuIcon(HotkeyType.TweetMessage);
tsbDiscord.Image = ShareXResources.IsDarkTheme ? Resources.Discord_white : Resources.Discord_black;
tsmiQRCode.Image = TaskHelpers.FindMenuIcon(HotkeyType.QRCode);
tsmiTrayQRCode.Image = TaskHelpers.FindMenuIcon(HotkeyType.QRCode);
tsmiShowQRCode.Image = TaskHelpers.FindMenuIcon(HotkeyType.QRCode);
tsmiOCR.Image = TaskHelpers.FindMenuIcon(HotkeyType.OCR);
tsmiTrayOCR.Image = TaskHelpers.FindMenuIcon(HotkeyType.OCR);
tsmiOCRImage.Image = TaskHelpers.FindMenuIcon(HotkeyType.OCR);
tsmiShortenURL.Image = TaskHelpers.FindMenuIcon(HotkeyType.ShortenURL);
tsmiTrayShortenURL.Image = TaskHelpers.FindMenuIcon(HotkeyType.ShortenURL);
tsmiURLShorteners.Image = TaskHelpers.FindMenuIcon(HotkeyType.ShortenURL);
tsmiTrayURLShorteners.Image = TaskHelpers.FindMenuIcon(HotkeyType.ShortenURL);
tsmiTestURLShortener.Image = TaskHelpers.FindMenuIcon(HotkeyType.ShortenURL);
tsmiShortenSelectedURL.Image = TaskHelpers.FindMenuIcon(HotkeyType.ShortenURL);
2019-05-24 01:55:49 +12:00
pbPreview.UpdateTheme();
pbPreview.UpdateCheckers(true);
2019-05-26 23:09:56 +12:00
ucTaskThumbnailView.UpdateTheme();
}
2013-11-03 23:53:49 +13:00
private void CleanCustomClipboardFormats()
{
2017-09-28 03:15:49 +13:00
tssCopy6.Visible = false;
2013-11-03 23:53:49 +13:00
2017-09-28 03:15:49 +13:00
int tssCopy6Index = tsmiCopy.DropDownItems.IndexOf(tssCopy6);
2013-11-03 23:53:49 +13:00
2017-09-28 03:15:49 +13:00
while (tssCopy6Index < tsmiCopy.DropDownItems.Count - 1)
2013-11-03 23:53:49 +13:00
{
using (ToolStripItem tsi = tsmiCopy.DropDownItems[tsmiCopy.DropDownItems.Count - 1])
{
tsmiCopy.DropDownItems.Remove(tsi);
}
}
}
private void UpdateActionsMenu(string filePath)
{
tsmiRunAction.DropDownItems.Clear();
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
{
IEnumerable<ExternalProgram> actions = Program.DefaultTaskSettings.ExternalPrograms.
Where(x => !string.IsNullOrEmpty(x.Name) && x.CheckExtension(filePath));
if (actions.Count() > 0)
{
tsmiRunAction.Visible = true;
foreach (ExternalProgram action in actions)
{
string name = action.Name.Truncate(50, "...");
ToolStripMenuItem tsmi = new ToolStripMenuItem(name);
try
{
2020-05-12 23:55:44 +12:00
string actionFilePath = action.GetFullPath();
2020-05-13 00:45:32 +12:00
tsmi.Image = actionsMenuIconCache.GetFileIconAsImage(actionFilePath);
}
2022-01-05 19:43:21 +13:00
catch
{
}
tsmi.Click += async (sender, e) => await action.RunAsync(filePath);
tsmiRunAction.DropDownItems.Add(tsmi);
}
}
}
}
private void AfterApplicationSettingsJobs()
2013-11-03 23:53:49 +13:00
{
2018-05-29 22:08:33 +12:00
HotkeyRepeatLimit = Program.Settings.HotkeyRepeatLimit;
HelpersOptions.CurrentProxy = Program.Settings.ProxySettings;
HelpersOptions.AcceptInvalidSSLCertificates = Program.Settings.AcceptInvalidSSLCertificates;
HelpersOptions.URLEncodeIgnoreEmoji = Program.Settings.URLEncodeIgnoreEmoji;
HelpersOptions.DefaultCopyImageFillBackground = Program.Settings.DefaultClipboardCopyImageFillBackground;
HelpersOptions.UseAlternativeClipboardCopyImage = Program.Settings.UseAlternativeClipboardCopyImage;
HelpersOptions.UseAlternativeClipboardGetImage = Program.Settings.UseAlternativeClipboardGetImage;
HelpersOptions.RotateImageByExifOrientationData = Program.Settings.RotateImageByExifOrientationData;
HelpersOptions.BrowserPath = Program.Settings.BrowserPath;
2018-04-24 22:46:12 +12:00
HelpersOptions.RecentColors = Program.Settings.RecentColors;
2020-10-19 11:23:08 +13:00
HelpersOptions.DevMode = Program.Settings.DevMode;
Program.UpdateHelpersSpecialFolders();
TaskManager.RecentManager.MaxCount = Program.Settings.RecentTasksMaxCount;
2019-09-06 23:48:57 +12:00
UpdateTheme();
Refresh();
if (ShareXResources.UseWhiteIcon != Program.Settings.UseWhiteShareXIcon)
{
ShareXResources.UseWhiteIcon = Program.Settings.UseWhiteShareXIcon;
Icon = ShareXResources.Icon;
niTray.Icon = ShareXResources.Icon;
}
Text = Program.Title;
niTray.Text = Program.TitleShort;
2020-10-19 11:23:08 +13:00
tsmiRestartAsAdmin.Visible = HelpersOptions.DevMode && !Helpers.IsAdministrator();
2016-09-29 13:33:12 +13:00
#if RELEASE
2018-10-17 23:31:39 +13:00
ConfigureAutoUpdate();
#else
if (UpdateChecker.ForceUpdate)
{
ConfigureAutoUpdate();
}
#endif
UpdateTaskViewMode();
UpdateMainWindowLayout();
UpdateInfoManager();
2018-10-17 23:31:39 +13:00
}
private void ConfigureAutoUpdate()
{
Program.UpdateManager.AllowAutoUpdate = !SystemOptions.DisableUpdateCheck && Program.Settings.AutoCheckUpdate;
2024-04-02 18:29:07 +13:00
Program.UpdateManager.UpdateChannel = Program.Settings.UpdateChannel;
Program.UpdateManager.ConfigureAutoUpdate();
2013-11-03 23:53:49 +13:00
}
private void AfterTaskSettingsJobs()
{
tsmiShowCursor.Checked = tsmiTrayShowCursor.Checked = Program.DefaultTaskSettings.CaptureSettings.ShowCursor;
SetScreenshotDelay(Program.DefaultTaskSettings.CaptureSettings.ScreenshotDelay);
}
public void UpdateCheckStates()
2013-11-03 23:53:49 +13:00
{
SetMultiEnumChecked(Program.DefaultTaskSettings.AfterCaptureJob, tsddbAfterCaptureTasks, tsmiTrayAfterCaptureTasks);
SetMultiEnumChecked(Program.DefaultTaskSettings.AfterUploadJob, tsddbAfterUploadTasks, tsmiTrayAfterUploadTasks);
SetEnumChecked(Program.DefaultTaskSettings.ImageDestination, tsmiImageUploaders, tsmiTrayImageUploaders);
SetImageFileDestinationChecked(Program.DefaultTaskSettings.ImageDestination, Program.DefaultTaskSettings.ImageFileDestination, tsmiImageFileUploaders, tsmiTrayImageFileUploaders);
SetEnumChecked(Program.DefaultTaskSettings.TextDestination, tsmiTextUploaders, tsmiTrayTextUploaders);
SetTextFileDestinationChecked(Program.DefaultTaskSettings.TextDestination, Program.DefaultTaskSettings.TextFileDestination, tsmiTextFileUploaders, tsmiTrayTextFileUploaders);
SetEnumChecked(Program.DefaultTaskSettings.FileDestination, tsmiFileUploaders, tsmiTrayFileUploaders);
SetEnumChecked(Program.DefaultTaskSettings.URLShortenerDestination, tsmiURLShorteners, tsmiTrayURLShorteners);
2014-07-14 08:59:17 +12:00
SetEnumChecked(Program.DefaultTaskSettings.URLSharingServiceDestination, tsmiURLSharingServices, tsmiTrayURLSharingServices);
2013-11-03 23:53:49 +13:00
}
public static void SetTextFileDestinationChecked(TextDestination textDestination, FileDestination textFileDestination, params ToolStripDropDownItem[] lists)
{
if (textDestination == TextDestination.FileUploader)
{
SetEnumChecked(textFileDestination, lists);
}
else
{
Uncheck(lists);
}
}
public static void SetImageFileDestinationChecked(ImageDestination imageDestination, FileDestination imageFileDestination, params ToolStripDropDownItem[] lists)
{
if (imageDestination == ImageDestination.FileUploader)
{
SetEnumChecked(imageFileDestination, lists);
}
else
{
Uncheck(lists);
}
}
public void UpdateUploaderMenuNames()
2013-11-03 23:53:49 +13:00
{
string imageUploader = Program.DefaultTaskSettings.ImageDestination == ImageDestination.FileUploader ?
2014-10-25 13:04:41 +13:00
Program.DefaultTaskSettings.ImageFileDestination.GetLocalizedDescription() : Program.DefaultTaskSettings.ImageDestination.GetLocalizedDescription();
tsmiImageUploaders.Text = tsmiTrayImageUploaders.Text = string.Format(Resources.TaskSettingsForm_UpdateUploaderMenuNames_Image_uploader___0_, imageUploader);
2013-11-03 23:53:49 +13:00
string textUploader = Program.DefaultTaskSettings.TextDestination == TextDestination.FileUploader ?
2014-10-25 13:04:41 +13:00
Program.DefaultTaskSettings.TextFileDestination.GetLocalizedDescription() : Program.DefaultTaskSettings.TextDestination.GetLocalizedDescription();
tsmiTextUploaders.Text = tsmiTrayTextUploaders.Text = string.Format(Resources.TaskSettingsForm_UpdateUploaderMenuNames_Text_uploader___0_, textUploader);
2013-11-03 23:53:49 +13:00
tsmiFileUploaders.Text = tsmiTrayFileUploaders.Text = string.Format(Resources.TaskSettingsForm_UpdateUploaderMenuNames_File_uploader___0_,
2014-10-25 13:04:41 +13:00
Program.DefaultTaskSettings.FileDestination.GetLocalizedDescription());
2013-11-03 23:53:49 +13:00
tsmiURLShorteners.Text = tsmiTrayURLShorteners.Text = string.Format(Resources.TaskSettingsForm_UpdateUploaderMenuNames_URL_shortener___0_,
2014-10-25 13:04:41 +13:00
Program.DefaultTaskSettings.URLShortenerDestination.GetLocalizedDescription());
2013-11-03 23:53:49 +13:00
tsmiURLSharingServices.Text = tsmiTrayURLSharingServices.Text = string.Format(Resources.TaskSettingsForm_UpdateUploaderMenuNames_URL_sharing_service___0_,
2014-10-25 13:04:41 +13:00
Program.DefaultTaskSettings.URLSharingServiceDestination.GetLocalizedDescription());
2013-11-03 23:53:49 +13:00
}
2019-05-14 12:56:01 +12:00
private WorkerTask[] GetSelectedTasks()
2013-11-03 23:53:49 +13:00
{
if (lvUploads.SelectedItems.Count > 0)
{
2015-08-31 18:03:03 +12:00
return lvUploads.SelectedItems.Cast<ListViewItem>().Select(x => x.Tag as WorkerTask).Where(x => x != null).ToArray();
2013-11-03 23:53:49 +13:00
}
return null;
}
private void RemoveTasks(WorkerTask[] tasks)
{
if (tasks != null)
{
foreach (WorkerTask task in tasks.Where(x => x != null && !x.IsWorking))
{
TaskManager.Remove(task);
}
UpdateInfoManager();
}
}
2013-11-03 23:53:49 +13:00
private void RemoveSelectedItems()
{
IEnumerable<WorkerTask> tasks = null;
if (Program.Settings.TaskViewMode == TaskViewMode.ListView)
{
tasks = lvUploads.SelectedItems.Cast<ListViewItem>().Select(x => x.Tag as WorkerTask);
}
else if (Program.Settings.TaskViewMode == TaskViewMode.ThumbnailView)
{
tasks = ucTaskThumbnailView.SelectedPanels.Select(x => x.Task);
}
RemoveTasks(tasks.ToArray());
2013-11-03 23:53:49 +13:00
}
private void RemoveAllItems()
{
RemoveTasks(lvUploads.Items.Cast<ListViewItem>().Select(x => x.Tag as WorkerTask).ToArray());
2013-11-03 23:53:49 +13:00
}
private void UpdateMainWindowLayout()
2013-11-03 23:53:49 +13:00
{
tsMain.Visible = Program.Settings.ShowMenu;
2016-01-30 00:54:35 +13:00
ucTaskThumbnailView.TitleVisible = Program.Settings.ShowThumbnailTitle;
ucTaskThumbnailView.TitleLocation = Program.Settings.ThumbnailTitleLocation;
ucTaskThumbnailView.ThumbnailSize = Program.Settings.ThumbnailSize;
2021-10-15 03:47:04 +13:00
ucTaskThumbnailView.ClickAction = Program.Settings.ThumbnailClickAction;
lvUploads.HeaderStyle = Program.Settings.ShowColumns ? ColumnHeaderStyle.Nonclickable : ColumnHeaderStyle.None;
2013-11-03 23:53:49 +13:00
Refresh();
}
public void UpdateToggleHotkeyButton()
{
if (Program.Settings.DisableHotkeys)
{
tsmiTrayToggleHotkeys.Text = Resources.MainForm_UpdateToggleHotkeyButton_Enable_hotkeys;
tsmiTrayToggleHotkeys.Image = Resources.keyboard__plus;
}
else
{
tsmiTrayToggleHotkeys.Text = Resources.MainForm_UpdateToggleHotkeyButton_Disable_hotkeys;
tsmiTrayToggleHotkeys.Image = Resources.keyboard__minus;
}
}
2016-06-20 18:44:21 +12:00
private void RunPuushTasks()
{
if (Program.PuushMode && Program.Settings.IsFirstTimeRun)
2016-06-20 18:44:21 +12:00
{
using (PuushLoginForm puushLoginForm = new PuushLoginForm())
{
if (puushLoginForm.ShowDialog() == DialogResult.OK)
{
Program.DefaultTaskSettings.ImageDestination = ImageDestination.FileUploader;
Program.DefaultTaskSettings.ImageFileDestination = FileDestination.Puush;
Program.DefaultTaskSettings.TextDestination = TextDestination.FileUploader;
Program.DefaultTaskSettings.TextFileDestination = FileDestination.Puush;
Program.DefaultTaskSettings.FileDestination = FileDestination.Puush;
SettingManager.WaitUploadersConfig();
2016-06-20 18:44:21 +12:00
if (Program.UploadersConfig != null)
{
Program.UploadersConfig.PuushAPIKey = puushLoginForm.APIKey;
}
}
}
}
}
private void SetScreenshotDelay(decimal delay)
{
Program.DefaultTaskSettings.CaptureSettings.ScreenshotDelay = delay;
switch (delay)
{
default:
tsmiScreenshotDelay.UpdateCheckedAll(false);
tsmiTrayScreenshotDelay.UpdateCheckedAll(false);
break;
case 0:
tsmiScreenshotDelay0.RadioCheck();
tsmiTrayScreenshotDelay0.RadioCheck();
break;
case 1:
tsmiScreenshotDelay1.RadioCheck();
tsmiTrayScreenshotDelay1.RadioCheck();
break;
case 2:
tsmiScreenshotDelay2.RadioCheck();
tsmiTrayScreenshotDelay2.RadioCheck();
break;
case 3:
tsmiScreenshotDelay3.RadioCheck();
tsmiTrayScreenshotDelay3.RadioCheck();
break;
case 4:
tsmiScreenshotDelay4.RadioCheck();
tsmiTrayScreenshotDelay4.RadioCheck();
break;
case 5:
tsmiScreenshotDelay5.RadioCheck();
tsmiTrayScreenshotDelay5.RadioCheck();
break;
}
tsmiScreenshotDelay.Text = tsmiTrayScreenshotDelay.Text = string.Format(Resources.ScreenshotDelay0S, delay.ToString("0.#"));
tsmiScreenshotDelay.Checked = tsmiTrayScreenshotDelay.Checked = delay > 0;
}
private async Task PrepareCaptureMenuAsync(ToolStripMenuItem tsmiWindow, EventHandler handlerWindow, ToolStripMenuItem tsmiMonitor, EventHandler handlerMonitor)
{
tsmiWindow.DropDownItems.Clear();
WindowsList windowsList = new WindowsList();
2021-08-27 20:31:29 +12:00
List<WindowInfo> windows = await Task.Run(() => windowsList.GetVisibleWindowsList());
2021-08-27 20:31:29 +12:00
if (windows != null && windows.Count > 0)
{
List<ToolStripItem> items = new List<ToolStripItem>();
foreach (WindowInfo window in windows)
{
try
{
string title = window.Text.Truncate(50, "...");
ToolStripMenuItem tsmi = new ToolStripMenuItem(title);
tsmi.Tag = window;
tsmi.Click += handlerWindow;
2022-06-14 03:21:08 +12:00
items.Add(tsmi);
2022-06-14 03:21:08 +12:00
using (Icon icon = await Task.Run(() => window.Icon))
{
if (icon != null && icon.Width > 0 && icon.Height > 0)
{
tsmi.Image = icon.ToBitmap();
}
}
}
catch (Exception e)
{
DebugHelper.WriteException(e);
}
}
2021-08-27 20:31:29 +12:00
tsmiWindow.DropDownItems.AddRange(items.ToArray());
}
2021-08-27 20:31:29 +12:00
tsmiWindow.Invalidate();
2021-08-27 20:31:29 +12:00
tsmiMonitor.DropDownItems.Clear();
Screen[] screens = Screen.AllScreens;
2021-08-27 20:31:29 +12:00
if (screens != null && screens.Length > 0)
{
2021-08-27 20:31:29 +12:00
ToolStripItem[] items = new ToolStripItem[screens.Length];
for (int i = 0; i < items.Length; i++)
{
Screen screen = screens[i];
string text = string.Format("{0}. {1}x{2}", i + 1, screen.Bounds.Width, screen.Bounds.Height);
ToolStripMenuItem tsmi = new ToolStripMenuItem(text);
tsmi.Tag = screen.Bounds;
tsmi.Click += handlerMonitor;
items[i] = tsmi;
}
tsmiMonitor.DropDownItems.AddRange(items);
}
tsmiMonitor.Invalidate();
}
2017-01-23 01:41:20 +13:00
public void ForceClose()
{
if (ScreenRecordManager.IsRecording)
{
2023-06-05 10:16:01 +12:00
if (MessageBox.Show(Resources.ShareXCannotBeClosedWhileScreenRecordingIsActive, "ShareX",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
ScreenRecordManager.AbortRecording();
}
}
else
{
forceClose = true;
Close();
}
2017-01-23 01:41:20 +13:00
}
2013-11-03 23:53:49 +13:00
#region Form events
protected override void SetVisibleCore(bool value)
{
if (value && !IsHandleCreated && (Program.SilentRun || Program.Settings.SilentRun) && Program.Settings.ShowTray)
2013-11-03 23:53:49 +13:00
{
CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
private void MainForm_Shown(object sender, EventArgs e)
{
AfterShownJobs();
}
private void MainForm_Resize(object sender, EventArgs e)
{
Refresh();
}
private void MainForm_LocationChanged(object sender, EventArgs e)
{
if (IsReady && WindowState == FormWindowState.Normal)
{
Program.Settings.MainFormPosition = Location;
}
}
2014-06-15 11:38:38 +12:00
private void MainForm_SizeChanged(object sender, EventArgs e)
{
if (IsReady && WindowState == FormWindowState.Normal)
2014-06-15 11:38:38 +12:00
{
Program.Settings.MainFormSize = Size;
}
2013-11-03 23:53:49 +13:00
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing && Program.Settings.ShowTray && !forceClose)
{
e.Cancel = true;
Hide();
SettingManager.SaveAllSettingsAsync();
if (Program.Settings.FirstTimeMinimizeToTray)
{
TaskHelpers.ShowNotificationTip(Resources.ShareXIsMinimizedToTheSystemTray, "ShareX", 8000);
Program.Settings.FirstTimeMinimizeToTray = false;
}
2013-11-03 23:53:49 +13:00
}
}
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
TaskManager.StopAllTasks();
}
private void MainForm_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop, false) ||
e.Data.GetDataPresent(DataFormats.Bitmap, false) ||
e.Data.GetDataPresent(DataFormats.Text, false))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void MainForm_DragDrop(object sender, DragEventArgs e)
{
UploadManager.DragDropUpload(e.Data);
}
2019-08-16 22:07:25 +12:00
private void TtMain_Draw(object sender, DrawToolTipEventArgs e)
{
e.DrawBackground();
e.DrawBorder();
e.DrawText();
}
private void dgvHotkeys_MouseUp(object sender, MouseEventArgs e)
2014-07-05 02:23:53 +12:00
{
if (Program.Settings.TaskViewMode == TaskViewMode.ListView)
{
if (e.Button == MouseButtons.Left)
{
lvUploads.Focus();
}
else if (e.Button == MouseButtons.Right)
{
UpdateInfoManager();
cmsTaskInfo.Show((Control)sender, e.X + 1, e.Y + 1);
}
}
else if (Program.Settings.TaskViewMode == TaskViewMode.ThumbnailView)
{
if (e.Button == MouseButtons.Right)
{
UcTaskView_ContextMenuRequested(sender, e);
}
}
}
private void dgvHotkeys_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
tsbHotkeySettings_Click(sender, e);
}
2014-07-05 02:23:53 +12:00
}
private async void lvUploads_SelectedIndexChanged(object sender, EventArgs e)
2014-08-14 00:33:14 +12:00
{
lvUploads.SelectedIndexChanged -= lvUploads_SelectedIndexChanged;
await Task.Delay(1);
lvUploads.SelectedIndexChanged += lvUploads_SelectedIndexChanged;
UpdateInfoManager();
2014-08-14 00:33:14 +12:00
}
private void lvUploads_MouseUp(object sender, MouseEventArgs e)
2013-11-03 23:53:49 +13:00
{
if (e.Button == MouseButtons.Right)
{
UpdateInfoManager();
cmsTaskInfo.Show(lvUploads, e.X + 1, e.Y + 1);
}
2013-11-03 23:53:49 +13:00
}
private void lvUploads_MouseDoubleClick(object sender, MouseEventArgs e)
2013-11-03 23:53:49 +13:00
{
if (e.Button == MouseButtons.Left)
{
uim.TryOpen();
}
2013-11-03 23:53:49 +13:00
}
private void scMain_SplitterMoved(object sender, SplitterEventArgs e)
2014-04-06 14:10:34 +12:00
{
Program.Settings.PreviewSplitterDistance = scMain.SplitterDistance;
2014-04-06 14:10:34 +12:00
}
private void lvUploads_KeyDown(object sender, KeyEventArgs e)
2014-07-20 08:08:45 +12:00
{
switch (e.KeyData)
{
default:
return;
case Keys.Enter:
uim.TryOpen();
break;
case Keys.Control | Keys.Enter:
uim.OpenFile();
break;
case Keys.Shift | Keys.Enter:
uim.OpenFolder();
break;
case Keys.Control | Keys.C:
uim.TryCopy();
break;
case Keys.Shift | Keys.C:
uim.CopyFile();
break;
case Keys.Alt | Keys.C:
uim.CopyImage();
break;
case Keys.Control | Keys.Shift | Keys.C:
uim.CopyFilePath();
break;
case Keys.Control | Keys.X:
uim.TryCopy();
RemoveSelectedItems();
break;
case Keys.Control | Keys.V:
UploadManager.ClipboardUploadMainWindow();
break;
case Keys.Control | Keys.U:
uim.Upload();
break;
case Keys.Control | Keys.D:
uim.Download();
break;
case Keys.Control | Keys.E:
uim.EditImage();
break;
case Keys.Control | Keys.P:
uim.PinToScreen();
break;
case Keys.Delete:
RemoveSelectedItems();
break;
case Keys.Shift | Keys.Delete:
uim.DeleteFiles();
RemoveSelectedItems();
break;
case Keys.Apps:
if (lvUploads.SelectedItems.Count > 0)
{
UpdateInfoManager();
Rectangle rect = lvUploads.GetItemRect(lvUploads.SelectedIndex);
cmsTaskInfo.Show(lvUploads, new Point(rect.X, rect.Bottom));
}
break;
}
2023-06-04 10:07:30 +12:00
e.SuppressKeyPress = true;
2014-07-20 08:08:45 +12:00
}
private void pbPreview_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && lvUploads.SelectedIndices.Count > 0)
{
string[] files = lvUploads.Items.Cast<ListViewItem>().Select(x => ((WorkerTask)x.Tag).Info?.FilePath).ToArray();
int index = lvUploads.SelectedIndices[0];
ImageViewer.ShowImage(files, index);
}
}
private void ucTaskThumbnailView_SelectedPanelChanged(object sender, EventArgs e)
{
UpdateInfoManager();
}
private void UcTaskView_ContextMenuRequested(object sender, MouseEventArgs e)
2019-05-12 08:36:00 +12:00
{
cmsTaskInfo.Show(sender as Control, e.X + 1, e.Y + 1);
}
private void cmsTaskInfo_Closing(object sender, ToolStripDropDownClosingEventArgs e)
2015-01-25 19:51:24 +13:00
{
if (e.CloseReason == ToolStripDropDownCloseReason.Keyboard)
{
e.Cancel = !(NativeMethods.GetKeyState((int)Keys.Apps) < 0 || NativeMethods.GetKeyState((int)Keys.F10) < 0 || NativeMethods.GetKeyState((int)Keys.Escape) < 0);
}
2014-07-20 08:08:45 +12:00
}
private void cmsTaskInfo_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
2014-07-20 08:08:45 +12:00
{
if (e.KeyData == Keys.Apps)
{
cmsTaskInfo.Close();
}
2015-08-25 04:38:35 +12:00
}
2018-10-17 09:23:16 +13:00
private void lvUploads_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
if (IsReady)
{
Program.Settings.TaskListViewColumnWidths = new List<int>();
2018-11-04 00:02:34 +13:00
for (int i = 0; i < lvUploads.Columns.Count; i++)
{
Program.Settings.TaskListViewColumnWidths.Add(lvUploads.Columns[i].Width);
}
}
2018-10-17 09:23:16 +13:00
}
private void lvUploads_ItemDrag(object sender, ItemDragEventArgs e)
2015-08-25 04:38:35 +12:00
{
2019-05-14 12:56:01 +12:00
TaskInfo[] taskInfos = GetSelectedTasks().Select(x => x.Info).Where(x => x != null).ToArray();
if (taskInfos.Length > 0)
{
IDataObject dataObject = null;
if (ModifierKeys.HasFlag(Keys.Control))
{
string[] urls = taskInfos.Select(x => x.ToString()).Where(x => !string.IsNullOrEmpty(x)).ToArray();
if (urls.Length > 0)
{
dataObject = new DataObject(DataFormats.Text, string.Join(Environment.NewLine, urls));
}
}
else
{
string[] files = taskInfos.Select(x => x.FilePath).Where(x => !string.IsNullOrEmpty(x) && File.Exists(x)).ToArray();
if (files.Length > 0)
{
dataObject = new DataObject(DataFormats.FileDrop, files);
}
}
if (dataObject != null)
{
AllowDrop = false;
lvUploads.DoDragDrop(dataObject, DragDropEffects.Copy | DragDropEffects.Move);
2019-05-21 00:58:40 +12:00
AllowDrop = true;
}
}
2014-07-20 08:08:45 +12:00
}
#region Menu events
2014-07-20 08:08:45 +12:00
private void tsmiFullscreen_Click(object sender, EventArgs e)
2014-07-20 08:08:45 +12:00
{
new CaptureFullscreen().Capture(true);
2014-07-20 08:08:45 +12:00
}
private async void tsddbCapture_DropDownOpening(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
await PrepareCaptureMenuAsync(tsmiWindow, tsmiWindowItems_Click, tsmiMonitor, tsmiMonitorItems_Click);
2013-11-03 23:53:49 +13:00
}
private void tsmiWindowItems_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
ToolStripItem tsi = (ToolStripItem)sender;
2021-06-10 10:14:01 +12:00
if (tsi.Tag is WindowInfo wi)
{
new CaptureWindow(wi.Handle).Capture(true);
}
2013-11-03 23:53:49 +13:00
}
private void tsmiMonitorItems_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
ToolStripItem tsi = (ToolStripItem)sender;
Rectangle rect = (Rectangle)tsi.Tag;
if (!rect.IsEmpty)
{
new CaptureMonitor(rect).Capture(true);
}
2013-11-03 23:53:49 +13:00
}
private void tsmiRectangle_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
new CaptureRegion().Capture(true);
2013-11-03 23:53:49 +13:00
}
private void tsmiRectangleLight_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
new CaptureRegion(RegionCaptureType.Light).Capture(true);
2013-11-03 23:53:49 +13:00
}
private void tsmiRectangleTransparent_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
new CaptureRegion(RegionCaptureType.Transparent).Capture(true);
2013-11-03 23:53:49 +13:00
}
private void tsmiLastRegion_Click(object sender, EventArgs e)
2014-07-20 08:08:45 +12:00
{
new CaptureLastRegion().Capture(true);
2014-07-20 08:08:45 +12:00
}
private void tsmiScreenRecordingFFmpeg_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.Region);
}
private void tsmiScreenRecordingGIF_Click(object sender, EventArgs e)
{
TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.Region);
2013-11-03 23:53:49 +13:00
}
private async void tsmiScrollingCapture_Click(object sender, EventArgs e)
2015-09-25 20:12:03 +12:00
{
await TaskHelpers.OpenScrollingCapture();
2015-09-25 20:12:03 +12:00
}
private void tsmiAutoCapture_Click(object sender, EventArgs e)
{
TaskHelpers.OpenAutoCapture();
}
private void tsmiShowCursor_Click(object sender, EventArgs e)
{
Program.DefaultTaskSettings.CaptureSettings.ShowCursor = ((ToolStripMenuItem)sender).Checked;
tsmiShowCursor.Checked = tsmiTrayShowCursor.Checked = Program.DefaultTaskSettings.CaptureSettings.ShowCursor;
}
private void tsmiScreenshotDelay0_Click(object sender, EventArgs e)
{
SetScreenshotDelay(0);
}
private void tsmiScreenshotDelay1_Click(object sender, EventArgs e)
{
SetScreenshotDelay(1);
}
private void tsmiScreenshotDelay2_Click(object sender, EventArgs e)
{
SetScreenshotDelay(2);
}
private void tsmiScreenshotDelay3_Click(object sender, EventArgs e)
{
SetScreenshotDelay(3);
}
private void tsmiScreenshotDelay4_Click(object sender, EventArgs e)
{
SetScreenshotDelay(4);
}
private void tsmiScreenshotDelay5_Click(object sender, EventArgs e)
{
SetScreenshotDelay(5);
}
private void tsbFileUpload_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
UploadManager.UploadFile();
}
2013-11-03 23:53:49 +13:00
private void tsmiUploadFolder_Click(object sender, EventArgs e)
{
UploadManager.UploadFolder();
2013-11-03 23:53:49 +13:00
}
private void tsbClipboardUpload_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
UploadManager.ClipboardUploadMainWindow();
}
2013-11-03 23:53:49 +13:00
private void tsmiUploadText_Click(object sender, EventArgs e)
{
UploadManager.ShowTextUploadDialog();
}
private void tsmiUploadURL_Click(object sender, EventArgs e)
{
UploadManager.UploadURL();
2013-11-03 23:53:49 +13:00
}
private void tsbDragDropUpload_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.OpenDropWindow();
}
2013-11-03 23:53:49 +13:00
private void tsmiShortenURL_Click(object sender, EventArgs e)
{
UploadManager.ShowShortenURLDialog();
}
private void tsmiTweetMessage_Click(object sender, EventArgs e)
{
TaskHelpers.TweetMessage();
}
private void tsmiColorPicker_Click(object sender, EventArgs e)
{
TaskHelpers.ShowScreenColorPickerDialog();
2013-11-03 23:53:49 +13:00
}
private void tsmiScreenColorPicker_Click(object sender, EventArgs e)
{
TaskHelpers.OpenScreenColorPicker();
}
private void tsmiRuler_Click(object sender, EventArgs e)
{
TaskHelpers.OpenRuler();
}
2022-07-24 20:31:18 +12:00
private void tsmiPinToScreen_Click(object sender, EventArgs e)
{
2022-07-27 15:27:37 +12:00
TaskHelpers.PinToScreen();
2022-07-24 20:31:18 +12:00
}
private void tsmiImageEditor_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.OpenImageEditor();
2013-11-03 23:53:49 +13:00
}
2023-04-25 02:33:40 +12:00
private void tsmiImageBeautifier_Click(object sender, EventArgs e)
{
TaskHelpers.OpenImageBeautifier();
}
private void tsmiImageEffects_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.OpenImageEffects();
2013-11-03 23:53:49 +13:00
}
2022-03-24 21:57:13 +13:00
private void tsmiImageViewer_Click(object sender, EventArgs e)
{
TaskHelpers.OpenImageViewer();
}
private void tsmiImageCombiner_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.OpenImageCombiner();
2013-11-03 23:53:49 +13:00
}
2019-09-29 04:55:26 +13:00
private void TsmiImageSplitter_Click(object sender, EventArgs e)
{
TaskHelpers.OpenImageSplitter();
}
2017-07-10 11:04:19 +12:00
private void tsmiImageThumbnailer_Click(object sender, EventArgs e)
{
TaskHelpers.OpenImageThumbnailer();
}
2019-11-17 08:34:32 +13:00
private void tsmiVideoConverter_Click(object sender, EventArgs e)
{
TaskHelpers.OpenVideoConverter();
}
private void tsmiVideoThumbnailer_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.OpenVideoThumbnailer();
2013-11-03 23:53:49 +13:00
}
private async void tsmiOCR_Click(object sender, EventArgs e)
{
Hide();
await Task.Delay(250);
try
{
await TaskHelpers.OCRImage();
}
catch (Exception ex)
{
DebugHelper.WriteException(ex);
}
finally
{
this.ForceActivate();
}
}
private void tsmiQRCode_Click(object sender, EventArgs e)
2021-01-14 08:16:43 +13:00
{
TaskHelpers.OpenQRCode();
}
private void tsmiHashChecker_Click(object sender, EventArgs e)
{
TaskHelpers.OpenHashCheck();
}
private void tsmiIndexFolder_Click(object sender, EventArgs e)
{
TaskHelpers.OpenDirectoryIndexer();
2021-01-14 08:16:43 +13:00
}
2020-09-14 06:00:49 +12:00
private void tsmiClipboardViewer_Click(object sender, EventArgs e)
{
TaskHelpers.OpenClipboardViewer();
}
private void tsmiBorderlessWindow_Click(object sender, EventArgs e)
{
TaskHelpers.OpenBorderlessWindow();
}
private void tsmiInspectWindow_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.OpenInspectWindow();
}
private void tsmiMonitorTest_Click(object sender, EventArgs e)
{
TaskHelpers.OpenMonitorTest();
}
private void tsmiDNSChanger_Click(object sender, EventArgs e)
{
TaskHelpers.OpenDNSChanger();
}
private void TsddbAfterCaptureTasks_DropDownOpening(object sender, EventArgs e)
{
UpdateImageEffectsMenu(tsddbAfterCaptureTasks);
}
private void TsmiTrayAfterCaptureTasks_DropDownOpening(object sender, EventArgs e)
{
UpdateImageEffectsMenu(tsmiTrayAfterCaptureTasks);
}
private void tsddbDestinations_DropDownOpened(object sender, EventArgs e)
{
UpdateDestinationStates();
}
private void tsmiDestinationSettings_Click(object sender, EventArgs e)
{
TaskHelpers.OpenUploadersConfigWindow();
}
private void tsmiCustomUploaderSettings_Click(object sender, EventArgs e)
{
TaskHelpers.OpenCustomUploaderSettingsWindow();
}
2021-06-08 08:29:31 +12:00
private void tsbApplicationSettings_Click(object sender, EventArgs e)
{
2021-06-08 08:29:31 +12:00
using (ApplicationSettingsForm settingsForm = new ApplicationSettingsForm())
2013-11-03 23:53:49 +13:00
{
2021-06-08 08:29:31 +12:00
settingsForm.ShowDialog();
2013-11-03 23:53:49 +13:00
}
if (!IsDisposed)
{
2021-06-08 08:29:31 +12:00
AfterApplicationSettingsJobs();
UpdateWorkflowsMenu();
SettingManager.SaveApplicationConfigAsync();
}
2013-11-03 23:53:49 +13:00
}
2021-06-08 08:29:31 +12:00
private void tsbTaskSettings_Click(object sender, EventArgs e)
{
2021-06-08 08:29:31 +12:00
using (TaskSettingsForm taskSettingsForm = new TaskSettingsForm(Program.DefaultTaskSettings, true))
{
2021-06-08 08:29:31 +12:00
taskSettingsForm.ShowDialog();
}
if (!IsDisposed)
{
2021-06-08 08:29:31 +12:00
AfterTaskSettingsJobs();
SettingManager.SaveApplicationConfigAsync();
}
}
private void tsbHotkeySettings_Click(object sender, EventArgs e)
{
if (Program.HotkeyManager != null)
{
using (HotkeySettingsForm hotkeySettingsForm = new HotkeySettingsForm(Program.HotkeyManager))
{
hotkeySettingsForm.ShowDialog();
}
if (!IsDisposed)
{
UpdateWorkflowsMenu();
SettingManager.SaveHotkeysConfigAsync();
}
}
}
private void tsbScreenshotsFolder_Click(object sender, EventArgs e)
{
TaskHelpers.OpenScreenshotsFolder();
}
private void tsbHistory_Click(object sender, EventArgs e)
{
TaskHelpers.OpenHistory();
}
private void tsbImageHistory_Click(object sender, EventArgs e)
{
TaskHelpers.OpenImageHistory();
}
2016-04-25 02:43:57 +12:00
private void tsmiShowDebugLog_Click(object sender, EventArgs e)
{
TaskHelpers.OpenDebugLog();
}
2016-04-25 02:43:57 +12:00
private void tsmiTestImageUpload_Click(object sender, EventArgs e)
{
UploadManager.UploadImage(ShareXResources.Logo);
}
2016-04-25 02:43:57 +12:00
private void tsmiTestTextUpload_Click(object sender, EventArgs e)
{
UploadManager.UploadText(Resources.MainForm_tsmiTestTextUpload_Click_Text_upload_test);
}
2016-04-25 02:43:57 +12:00
private void tsmiTestFileUpload_Click(object sender, EventArgs e)
{
UploadManager.UploadImage(ShareXResources.Logo, ImageDestination.FileUploader, Program.DefaultTaskSettings.FileDestination);
}
private void tsmiTestURLShortener_Click(object sender, EventArgs e)
{
2022-05-15 09:32:09 +12:00
UploadManager.ShortenURL(Links.Website);
}
private void tsmiTestURLSharing_Click(object sender, EventArgs e)
{
2022-05-15 09:32:09 +12:00
UploadManager.ShareURL(Links.Website);
}
private void tsbDonate_Click(object sender, EventArgs e)
{
2022-05-15 09:32:09 +12:00
URLHelpers.OpenURL(Links.Donate);
}
2024-01-20 02:57:07 +13:00
private void tsbX_Click(object sender, EventArgs e)
2021-08-23 12:28:47 +12:00
{
2024-01-20 02:57:07 +13:00
URLHelpers.OpenURL(Links.XFollow);
2021-08-23 12:28:47 +12:00
}
private void tsbDiscord_Click(object sender, EventArgs e)
{
2022-05-15 09:32:09 +12:00
URLHelpers.OpenURL(Links.Discord);
2021-08-23 12:28:47 +12:00
}
private void tsbAbout_Click(object sender, EventArgs e)
{
using (AboutForm aboutForm = new AboutForm())
{
aboutForm.ShowDialog();
}
}
#endregion Menu events
2013-11-03 23:53:49 +13:00
#region Tray events
private async void niTray_MouseUp(object sender, MouseEventArgs e)
2013-11-03 23:53:49 +13:00
{
if (e.Button == MouseButtons.Left)
2013-11-03 23:53:49 +13:00
{
if (Program.Settings.TrayLeftDoubleClickAction == HotkeyType.None)
{
await TaskHelpers.ExecuteJob(Program.Settings.TrayLeftClickAction);
}
else
{
trayClickCount++;
if (trayClickCount == 1)
{
timerTraySingleClick.Interval = SystemInformation.DoubleClickTime;
timerTraySingleClick.Start();
}
else
{
trayClickCount = 0;
timerTraySingleClick.Stop();
await TaskHelpers.ExecuteJob(Program.Settings.TrayLeftDoubleClickAction);
}
}
}
else if (e.Button == MouseButtons.Middle)
{
await TaskHelpers.ExecuteJob(Program.Settings.TrayMiddleClickAction);
2013-11-03 23:53:49 +13:00
}
}
private async void timerTraySingleClick_Tick(object sender, EventArgs e)
{
if (trayClickCount == 1)
{
trayClickCount = 0;
timerTraySingleClick.Stop();
await TaskHelpers.ExecuteJob(Program.Settings.TrayLeftClickAction);
}
}
private void niTray_BalloonTipClicked(object sender, EventArgs e)
{
2021-06-10 10:14:01 +12:00
if (niTray.Tag is BalloonTipAction action)
{
switch (action.ClickAction)
{
case BalloonTipClickAction.OpenURL:
URLHelpers.OpenURL(action.Text);
break;
case BalloonTipClickAction.OpenDebugLog:
TaskHelpers.OpenDebugLog();
break;
}
}
}
private void cmsTray_Opened(object sender, EventArgs e)
{
if (Program.Settings.TrayAutoExpandCaptureMenu)
{
tsmiTrayCapture.Select();
tsmiTrayCapture.ShowDropDown();
}
}
private void tsmiTrayFullscreen_Click(object sender, EventArgs e)
{
new CaptureFullscreen().Capture();
}
private async void tsmiCapture_DropDownOpening(object sender, EventArgs e)
{
await PrepareCaptureMenuAsync(tsmiTrayWindow, tsmiTrayWindowItems_Click, tsmiTrayMonitor, tsmiTrayMonitorItems_Click);
}
private void tsmiTrayWindowItems_Click(object sender, EventArgs e)
{
ToolStripItem tsi = (ToolStripItem)sender;
2021-06-10 10:14:01 +12:00
if (tsi.Tag is WindowInfo wi)
{
new CaptureWindow(wi.Handle).Capture();
}
}
private void tsmiTrayMonitorItems_Click(object sender, EventArgs e)
{
ToolStripItem tsi = (ToolStripItem)sender;
Rectangle rect = (Rectangle)tsi.Tag;
if (!rect.IsEmpty)
{
new CaptureMonitor(rect).Capture();
}
}
private void tsmiTrayRectangle_Click(object sender, EventArgs e)
{
new CaptureRegion().Capture();
}
private void tsmiTrayRectangleLight_Click(object sender, EventArgs e)
{
new CaptureRegion(RegionCaptureType.Light).Capture();
}
private void tsmiTrayRectangleTransparent_Click(object sender, EventArgs e)
{
new CaptureRegion(RegionCaptureType.Transparent).Capture();
}
private void tsmiTrayLastRegion_Click(object sender, EventArgs e)
{
new CaptureLastRegion().Capture();
}
private async void tsmiTrayOCR_Click(object sender, EventArgs e)
{
2018-11-30 20:43:56 +13:00
try
{
await TaskHelpers.OCRImage();
}
catch (Exception ex)
{
DebugHelper.WriteException(ex);
}
}
private void tsmiTrayToggleHotkeys_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
TaskHelpers.ToggleHotkeys();
2013-11-03 23:53:49 +13:00
}
private void tsmiRestartAsAdmin_Click(object sender, EventArgs e)
{
Program.Restart(true);
}
2017-01-20 01:39:10 +13:00
private void tsmiOpenActionsToolbar_Click(object sender, EventArgs e)
{
2017-01-21 00:56:44 +13:00
TaskHelpers.ToggleActionsToolbar();
2017-01-20 01:39:10 +13:00
}
2014-02-18 11:53:53 +13:00
private void tsmiTrayShow_Click(object sender, EventArgs e)
{
this.ForceActivate();
2014-02-18 11:53:53 +13:00
}
private void tsmiTrayExit_MouseDown(object sender, MouseEventArgs e)
2013-11-03 23:53:49 +13:00
{
2016-03-17 22:25:43 +13:00
trayMenuSaveSettings = false;
2013-11-03 23:53:49 +13:00
}
private void cmsTray_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
2016-03-17 22:25:43 +13:00
if (trayMenuSaveSettings)
{
SettingManager.SaveAllSettingsAsync();
}
2016-03-17 22:25:43 +13:00
trayMenuSaveSettings = true;
}
private void tsmiTrayExit_Click(object sender, EventArgs e)
{
2017-01-23 01:41:20 +13:00
ForceClose();
}
2013-11-03 23:53:49 +13:00
#endregion Tray events
#region UploadInfoMenu events
2014-07-17 18:58:17 +12:00
private void tsmiShowErrors_Click(object sender, EventArgs e)
{
uim.ShowErrors();
}
2013-11-03 23:53:49 +13:00
private void tsmiStopUpload_Click(object sender, EventArgs e)
{
2019-05-14 12:56:01 +12:00
uim.StopUpload();
2013-11-03 23:53:49 +13:00
}
private void tsmiOpenURL_Click(object sender, EventArgs e)
{
uim.OpenURL();
}
private void tsmiOpenShortenedURL_Click(object sender, EventArgs e)
{
uim.OpenShortenedURL();
}
private void tsmiOpenThumbnailURL_Click(object sender, EventArgs e)
{
uim.OpenThumbnailURL();
}
private void tsmiOpenDeletionURL_Click(object sender, EventArgs e)
{
uim.OpenDeletionURL();
}
private void tsmiOpenFile_Click(object sender, EventArgs e)
{
uim.OpenFile();
}
private void tsmiOpenThumbnailFile_Click(object sender, EventArgs e)
{
uim.OpenThumbnailFile();
}
2013-11-03 23:53:49 +13:00
private void tsmiOpenFolder_Click(object sender, EventArgs e)
{
uim.OpenFolder();
}
private void tsmiCopyURL_Click(object sender, EventArgs e)
{
uim.CopyURL();
}
private void tsmiCopyShortenedURL_Click(object sender, EventArgs e)
{
uim.CopyShortenedURL();
}
private void tsmiCopyThumbnailURL_Click(object sender, EventArgs e)
{
uim.CopyThumbnailURL();
}
private void tsmiCopyDeletionURL_Click(object sender, EventArgs e)
{
uim.CopyDeletionURL();
}
private void tsmiCopyFile_Click(object sender, EventArgs e)
{
uim.CopyFile();
}
private void tsmiCopyImage_Click(object sender, EventArgs e)
{
uim.CopyImage();
}
private void tsmiCopyImageDimensions_Click(object sender, EventArgs e)
{
uim.CopyImageDimensions();
}
2013-11-03 23:53:49 +13:00
private void tsmiCopyText_Click(object sender, EventArgs e)
{
uim.CopyText();
}
private void tsmiCopyThumbnailFile_Click(object sender, EventArgs e)
{
uim.CopyThumbnailFile();
}
private void tsmiCopyThumbnailImage_Click(object sender, EventArgs e)
{
uim.CopyThumbnailImage();
}
2013-11-03 23:53:49 +13:00
private void tsmiCopyHTMLLink_Click(object sender, EventArgs e)
{
uim.CopyHTMLLink();
}
private void tsmiCopyHTMLImage_Click(object sender, EventArgs e)
{
uim.CopyHTMLImage();
}
private void tsmiCopyHTMLLinkedImage_Click(object sender, EventArgs e)
{
uim.CopyHTMLLinkedImage();
}
private void tsmiCopyForumLink_Click(object sender, EventArgs e)
{
uim.CopyForumLink();
}
private void tsmiCopyForumImage_Click(object sender, EventArgs e)
{
uim.CopyForumImage();
}
private void tsmiCopyForumLinkedImage_Click(object sender, EventArgs e)
{
uim.CopyForumLinkedImage();
}
2017-09-28 03:15:49 +13:00
private void tsmiCopyMarkdownLink_Click(object sender, EventArgs e)
{
uim.CopyMarkdownLink();
}
private void tsmiCopyMarkdownImage_Click(object sender, EventArgs e)
{
uim.CopyMarkdownImage();
}
private void tsmiCopyMarkdownLinkedImage_Click(object sender, EventArgs e)
{
uim.CopyMarkdownLinkedImage();
}
2013-11-03 23:53:49 +13:00
private void tsmiCopyFilePath_Click(object sender, EventArgs e)
{
uim.CopyFilePath();
}
private void tsmiCopyFileName_Click(object sender, EventArgs e)
{
uim.CopyFileName();
}
private void tsmiCopyFileNameWithExtension_Click(object sender, EventArgs e)
{
uim.CopyFileNameWithExtension();
}
private void tsmiCopyFolder_Click(object sender, EventArgs e)
{
uim.CopyFolder();
}
private void tsmiClipboardFormat_Click(object sender, EventArgs e)
{
ToolStripMenuItem tsmiClipboardFormat = sender as ToolStripMenuItem;
ClipboardFormat cf = tsmiClipboardFormat.Tag as ClipboardFormat;
uim.CopyCustomFormat(cf.Format);
}
2014-07-17 18:58:17 +12:00
private void tsmiUploadSelectedFile_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
2014-07-17 18:58:17 +12:00
uim.Upload();
2013-11-03 23:53:49 +13:00
}
private void tsmiDownloadSelectedURL_Click(object sender, EventArgs e)
{
uim.Download();
}
2017-02-14 07:00:47 +13:00
private void tsmiDeleteSelectedItem_Click(object sender, EventArgs e)
{
RemoveSelectedItems();
}
2014-07-27 23:02:08 +12:00
private void tsmiDeleteSelectedFile_Click(object sender, EventArgs e)
{
if (MessageBox.Show(Resources.MainForm_tsmiDeleteSelectedFile_Click_Do_you_really_want_to_delete_this_file_,
"ShareX - " + Resources.MainForm_tsmiDeleteSelectedFile_Click_File_delete_confirmation, MessageBoxButtons.YesNo) == DialogResult.Yes)
{
uim.DeleteFiles();
RemoveSelectedItems();
}
2014-07-27 23:02:08 +12:00
}
2014-07-17 18:58:17 +12:00
private void tsmiEditSelectedFile_Click(object sender, EventArgs e)
2013-11-03 23:53:49 +13:00
{
2014-07-17 18:58:17 +12:00
uim.EditImage();
2013-11-03 23:53:49 +13:00
}
private void tsmiBeautifyImage_Click(object sender, EventArgs e)
{
uim.BeautifyImage();
}
private void tsmiAddImageEffects_Click(object sender, EventArgs e)
{
uim.AddImageEffects();
}
2022-07-24 20:31:18 +12:00
private void tsmiPinSelectedFile_Click(object sender, EventArgs e)
{
uim.PinToScreen();
}
private void tsmiGoogleLens_Click(object sender, EventArgs e)
{
uim.SearchImageUsingGoogleLens();
2021-07-31 19:42:12 +12:00
}
private void tsmiBingVisualSearch_Click(object sender, EventArgs e)
{
uim.SearchImageUsingBing();
}
2014-05-21 09:25:06 +12:00
private void tsmiShowQRCode_Click(object sender, EventArgs e)
{
uim.ShowQRCode();
}
2018-11-30 20:43:56 +13:00
private async void tsmiOCRImage_Click(object sender, EventArgs e)
{
2018-11-30 20:43:56 +13:00
await uim.OCRImage();
}
private void tsmiCombineImages_Click(object sender, EventArgs e)
{
uim.CombineImages();
}
private void tsmiCombineImagesHorizontally_Click(object sender, EventArgs e)
{
uim.CombineImages(Orientation.Horizontal);
}
private void tsmiCombineImagesVertically_Click(object sender, EventArgs e)
{
uim.CombineImages(Orientation.Vertical);
}
2014-07-17 18:58:17 +12:00
private void tsmiShowResponse_Click(object sender, EventArgs e)
{
2014-07-17 18:58:17 +12:00
uim.ShowResponse();
}
2013-11-03 23:53:49 +13:00
private void tsmiClearList_Click(object sender, EventArgs e)
{
RemoveAllItems();
TaskManager.RecentManager.Clear();
2013-11-03 23:53:49 +13:00
}
private void TsmiSwitchTaskViewMode_Click(object sender, EventArgs e)
{
tsMain.SendToBack();
if (Program.Settings.TaskViewMode == TaskViewMode.ListView)
{
Program.Settings.TaskViewMode = TaskViewMode.ThumbnailView;
ucTaskThumbnailView.UpdateAllThumbnails();
}
else
{
Program.Settings.TaskViewMode = TaskViewMode.ListView;
}
UpdateTaskViewMode();
UpdateMainWindowLayout();
UpdateInfoManager();
}
2013-11-03 23:53:49 +13:00
#endregion UploadInfoMenu events
#endregion Form events
}
2015-08-16 20:34:46 +12:00
}