diff --git a/ShareX/Forms/ApplicationSettingsForm.cs b/ShareX/Forms/ApplicationSettingsForm.cs index 6b79008cb..47a520e1d 100644 --- a/ShareX/Forms/ApplicationSettingsForm.cs +++ b/ShareX/Forms/ApplicationSettingsForm.cs @@ -38,13 +38,11 @@ public partial class ApplicationSettingsForm : BaseForm { private const int MaxBufferSizePower = 14; - private bool loaded = false; - private bool firstLoad = true; + private bool ready; public ApplicationSettingsForm() { - InitializeComponent(); - UpdateSettings(); + InitializeControls(); } private void SettingsForm_Shown(object sender, EventArgs e) @@ -62,23 +60,32 @@ private void SettingsForm_FormClosed(object sender, FormClosedEventArgs e) Program.WritePersonalPathConfig(txtPersonalFolderPath.Text); } - private void UpdateSettings() + private void InitializeControls() { - loaded = false; + InitializeComponent(); - // General - if (firstLoad) + foreach (SupportedLanguage language in Helpers.GetEnums()) { - foreach (SupportedLanguage language in Helpers.GetEnums()) - { - ToolStripMenuItem tsmi = new ToolStripMenuItem(language.GetLocalizedDescription()); - tsmi.Image = GetLanguageIcon(language); - tsmi.ImageScaling = ToolStripItemImageScaling.None; - SupportedLanguage lang = language; - tsmi.Click += (sender, e) => ChangeLanguage(lang); - cmsLanguages.Items.Add(tsmi); - } + ToolStripMenuItem tsmi = new ToolStripMenuItem(language.GetLocalizedDescription()); + tsmi.Image = GetLanguageIcon(language); + tsmi.ImageScaling = ToolStripItemImageScaling.None; + SupportedLanguage lang = language; + tsmi.Click += (sender, e) => ChangeLanguage(lang); + cmsLanguages.Items.Add(tsmi); } + + CodeMenu.Create(txtSaveImageSubFolderPattern, ReplCodeMenuEntry.t, ReplCodeMenuEntry.pn, ReplCodeMenuEntry.i, ReplCodeMenuEntry.width, ReplCodeMenuEntry.height, ReplCodeMenuEntry.n); + + cbProxyMethod.Items.AddRange(Helpers.GetLocalizedEnumDescriptions()); + + UpdateControls(); + + ready = true; + } + + private void UpdateControls() + { + // General ChangeLanguage(Program.Settings.Language); cbShowTray.Checked = Program.Settings.ShowTray; @@ -108,12 +115,6 @@ private void UpdateSettings() txtCustomScreenshotsPath.Text = Program.Settings.CustomScreenshotsPath; txtSaveImageSubFolderPattern.Text = Program.Settings.SaveImageSubFolderPattern; - if (firstLoad) - { - CodeMenu.Create(txtSaveImageSubFolderPattern, ReplCodeMenuEntry.t, ReplCodeMenuEntry.pn, ReplCodeMenuEntry.i, - ReplCodeMenuEntry.width, ReplCodeMenuEntry.height, ReplCodeMenuEntry.n); - } - // Export / Import cbExportSettings.Checked = Program.Settings.ExportSettings; cbExportHistory.Checked = Program.Settings.ExportHistory; @@ -121,11 +122,6 @@ private void UpdateSettings() UpdateExportButton(); // Proxy - if (firstLoad) - { - cbProxyMethod.Items.AddRange(Helpers.GetLocalizedEnumDescriptions()); - } - cbProxyMethod.SelectedIndex = (int)Program.Settings.ProxySettings.ProxyMethod; txtProxyUsername.Text = Program.Settings.ProxySettings.Username; txtProxyPassword.Text = Program.Settings.ProxySettings.Password; @@ -178,9 +174,6 @@ private void UpdateSettings() pgSettings.SelectedObject = Program.Settings; tttvMain.MainTabControl = tcSettings; - - loaded = true; - firstLoad = false; } private Image GetLanguageIcon(SupportedLanguage language) @@ -239,7 +232,7 @@ private void ChangeLanguage(SupportedLanguage language) btnLanguages.Text = language.GetLocalizedDescription(); btnLanguages.Image = GetLanguageIcon(language); - if (loaded) + if (ready) { Program.Settings.Language = language; @@ -302,7 +295,7 @@ private void cbShowTray_CheckedChanged(object sender, EventArgs e) { Program.Settings.ShowTray = cbShowTray.Checked; - if (loaded) + if (ready) { Program.MainForm.niTray.Visible = Program.Settings.ShowTray; } @@ -324,7 +317,7 @@ private void cbTaskbarProgressEnabled_CheckedChanged(object sender, EventArgs e) { Program.Settings.TaskbarProgressEnabled = cbTaskbarProgressEnabled.Checked; - if (loaded) + if (ready) { TaskbarManager.Enabled = Program.Settings.TaskbarProgressEnabled; } @@ -346,7 +339,7 @@ private void cbRememberMainFormSize_CheckedChanged(object sender, EventArgs e) private void cbStartWithWindows_CheckedChanged(object sender, EventArgs e) { - if (loaded) + if (ready) { IntegrationHelpers.CreateStartupShortcut(cbStartWithWindows.Checked); } @@ -354,7 +347,7 @@ private void cbStartWithWindows_CheckedChanged(object sender, EventArgs e) private void cbShellContextMenu_CheckedChanged(object sender, EventArgs e) { - if (loaded) + if (ready) { IntegrationHelpers.CreateShellContextMenuButton(cbShellContextMenu.Checked); } @@ -362,7 +355,7 @@ private void cbShellContextMenu_CheckedChanged(object sender, EventArgs e) private void cbSendToMenu_CheckedChanged(object sender, EventArgs e) { - if (loaded) + if (ready) { IntegrationHelpers.CreateSendToMenuButton(cbSendToMenu.Checked); } @@ -375,7 +368,7 @@ private void btnChromeSupport_Click(object sender, EventArgs e) private void cbSteamShowInApp_CheckedChanged(object sender, EventArgs e) { - if (loaded) + if (ready) { IntegrationHelpers.SteamShowInApp(cbSteamShowInApp.Checked); } @@ -503,13 +496,13 @@ private void btnImport_Click(object sender, EventArgs e) { if (!IsDisposed) { - UpdateSettings(); + UpdateControls(); pbExportImport.Visible = false; btnExport.Enabled = true; btnImport.Enabled = true; } - Program.MainForm.UpdateSettings(); + Program.MainForm.UpdateControls(); }); } } diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index 1c7306215..9e196250f 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -51,13 +51,12 @@ public partial class MainForm : HotkeyForm public MainForm() { - InitControls(); - HandleCreated += MainForm_HandleCreated; + InitializeControls(); } private void MainForm_HandleCreated(object sender, EventArgs e) { - UpdateSettings(); + UpdateControls(); InitHotkeys(); IsReady = true; @@ -67,28 +66,7 @@ private void MainForm_HandleCreated(object sender, EventArgs e) UseCommandLineArgs(Program.CLI.Commands); } - private void AfterShownJobs() - { - if (Program.IsFirstTimeConfig) - { - using (FirstTimeConfigForm firstTimeConfigForm = new FirstTimeConfigForm()) - { - firstTimeConfigForm.ShowDialog(); - } - } - else - { - this.ShowActivate(); - } - - if (Program.Settings != null && Program.Settings.ShowTrayLeftClickTip && niTray.Visible && Program.Settings.TrayLeftClickAction == HotkeyType.RectangleRegion) - { - niTray.ShowBalloonTip(5000, "ShareX", Resources.MainForm_AfterShownJobs_You_can_single_left_click_the_ShareX_tray_icon_to_start_region_capture_, ToolTipIcon.Info); - Program.Settings.ShowTrayLeftClickTip = false; - } - } - - private void InitControls() + private void InitializeControls() { InitializeComponent(); @@ -109,16 +87,15 @@ private void InitControls() tsddbAfterCaptureTasks, tsmiTrayAfterCaptureTasks); AddMultiEnumItems(x => Program.DefaultTaskSettings.AfterUploadJob = Program.DefaultTaskSettings.AfterUploadJob.Swap(x), tsddbAfterUploadTasks, tsmiTrayAfterUploadTasks); - // Destinations -> Image uploader AddEnumItems(x => { Program.DefaultTaskSettings.ImageDestination = x; - // if click on "folder" with file destinations then set ImageFileDestination and check it + if (x == ImageDestination.FileUploader) { SetEnumChecked(Program.DefaultTaskSettings.ImageFileDestination, tsmiImageFileUploaders, tsmiTrayImageFileUploaders); } - else // if click not on "folder" with destinations then uncheck file destinations + else { Uncheck(tsmiImageFileUploaders, tsmiTrayImageFileUploaders); } @@ -131,16 +108,15 @@ private void InitControls() tsmiImageFileUploaders.PerformClick(); tsmiTrayImageFileUploaders.PerformClick(); }, tsmiImageFileUploaders, tsmiTrayImageFileUploaders); - // Destinations -> Text uploader AddEnumItems(x => { Program.DefaultTaskSettings.TextDestination = x; - // if click on "folder" with file destinations then set TextFileDestination and check it + if (x == TextDestination.FileUploader) { SetEnumChecked(Program.DefaultTaskSettings.TextFileDestination, tsmiTextFileUploaders, tsmiTrayTextFileUploaders); } - else // if click not on "folder" with destinations then uncheck file destinations + else { Uncheck(tsmiTextFileUploaders, tsmiTrayTextFileUploaders); } @@ -153,7 +129,6 @@ private void InitControls() tsmiTextFileUploaders.PerformClick(); tsmiTrayTextFileUploaders.PerformClick(); }, tsmiTextFileUploaders, tsmiTrayTextFileUploaders); - // Destinations -> File uploader AddEnumItems(x => Program.DefaultTaskSettings.FileDestination = x, tsmiFileUploaders, tsmiTrayFileUploaders); AddEnumItems(x => Program.DefaultTaskSettings.URLShortenerDestination = x, tsmiURLShorteners, tsmiTrayURLShorteners); AddEnumItems(x => Program.DefaultTaskSettings.URLSharingServiceDestination = x, tsmiURLSharingServices, tsmiTrayURLSharingServices); @@ -194,6 +169,102 @@ private void InitControls() } ExportImportControl.UploadRequested += json => UploadManager.UploadText(json); + + HandleCreated += MainForm_HandleCreated; + } + + public void UpdateControls() + { + niTray.Visible = Program.Settings.ShowTray; + + if (Program.Settings.RecentLinksRemember) + { + TaskManager.RecentManager.UpdateItems(Program.Settings.RecentLinks); + } + + 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; + } + + // Adjust the menu width to the items + tsMain.Width = tsMain.PreferredSize.Width; + + // Calculate the required height to view the whole menu + int height = Size.Height + tsMain.PreferredSize.Height - tsMain.Height; + + // Set the minimum size of the form to prevent menu items from hidding + 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 + { + // Adjust the size to the minimum if not loaded + Size = new Size(Size.Width, height); + } + + switch (Program.Settings.ImagePreview) + { + case ImagePreviewVisibility.Show: + tsmiImagePreviewShow.Check(); + break; + case ImagePreviewVisibility.Hide: + tsmiImagePreviewHide.Check(); + break; + case ImagePreviewVisibility.Automatic: + tsmiImagePreviewAutomatic.Check(); + break; + } + + if (Program.Settings.PreviewSplitterDistance > 0) + { + scMain.SplitterDistance = Program.Settings.PreviewSplitterDistance; + } + + TaskbarManager.Enabled = Program.Settings.TaskbarProgressEnabled; + + UpdateCheckStates(); + UpdateMainWindowLayout(); + UpdateUploaderMenuNames(); + UpdateContextMenu(); + UpdateToggleHotkeyButton(); + AfterSettingsJobs(); + } + + private void AfterShownJobs() + { + if (Program.IsFirstTimeConfig) + { + using (FirstTimeConfigForm firstTimeConfigForm = new FirstTimeConfigForm()) + { + firstTimeConfigForm.ShowDialog(); + } + } + else + { + this.ShowActivate(); + } + + if (Program.Settings != null && Program.Settings.ShowTrayLeftClickTip && niTray.Visible && Program.Settings.TrayLeftClickAction == HotkeyType.RectangleRegion) + { + niTray.ShowBalloonTip(5000, "ShareX", Resources.MainForm_AfterShownJobs_You_can_single_left_click_the_ShareX_tray_icon_to_start_region_capture_, ToolTipIcon.Info); + Program.Settings.ShowTrayLeftClickTip = false; + } } private void UpdateWorkflowsMenu() @@ -321,11 +392,6 @@ public static void Uncheck(params ToolStripDropDownItem[] lists) } } - /// - /// Finds dropDowonItem corresponding to the enum value and checks it. - /// - /// Enum item - /// DropDowns where enum-th item must be checked. private static void SetEnumChecked(Enum value, params ToolStripDropDownItem[] parents) { if (value == null) @@ -394,7 +460,7 @@ private void EnableDisableToolStripMenuItems(params ToolStripDropDownItem[] p } } - private void UpdateControls() + private void UpdateContextMenu() { cmsTaskInfo.SuspendLayout(); @@ -523,81 +589,6 @@ private void CleanCustomClipboardFormats() } } - public void UpdateSettings() - { - niTray.Visible = Program.Settings.ShowTray; - - if (Program.Settings.RecentLinksRemember) - { - TaskManager.RecentManager.UpdateItems(Program.Settings.RecentLinks); - } - - 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; - } - - // Adjust the menu width to the items - tsMain.Width = tsMain.PreferredSize.Width; - - // Calculate the required height to view the whole menu - int height = Size.Height + tsMain.PreferredSize.Height - tsMain.Height; - - // Set the minimum size of the form to prevent menu items from hidding - 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 - { - // Adjust the size to the minimum if not loaded - Size = new Size(Size.Width, height); - } - - switch (Program.Settings.ImagePreview) - { - case ImagePreviewVisibility.Show: - tsmiImagePreviewShow.Check(); - break; - case ImagePreviewVisibility.Hide: - tsmiImagePreviewHide.Check(); - break; - case ImagePreviewVisibility.Automatic: - tsmiImagePreviewAutomatic.Check(); - break; - } - - UpdateMainFormSettings(); - UpdateMenu(); - UpdateUploaderMenuNames(); - - if (Program.Settings.PreviewSplitterDistance > 0) - { - scMain.SplitterDistance = Program.Settings.PreviewSplitterDistance; - } - - UpdateControls(); - UpdateToggleHotkeyButton(); - - TaskbarManager.Enabled = Program.Settings.TaskbarProgressEnabled; - - AfterSettingsJobs(); - } - private void AfterSettingsJobs() { HelpersOptions.CurrentProxy = Program.Settings.ProxySettings; @@ -610,29 +601,20 @@ private void AfterSettingsJobs() ConfigureAutoUpdate(); } - public void UpdateMainFormSettings() + public void UpdateCheckStates() { 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); + SetImageFileDestinationChecked(Program.DefaultTaskSettings.ImageDestination, Program.DefaultTaskSettings.ImageFileDestination, tsmiImageFileUploaders, tsmiTrayImageFileUploaders); SetEnumChecked(Program.DefaultTaskSettings.TextDestination, tsmiTextUploaders, tsmiTrayTextUploaders); - SetTextFileDestinationChecked(Program.DefaultTaskSettings.TextDestination, - Program.DefaultTaskSettings.TextFileDestination, tsmiTextFileUploaders, tsmiTrayTextFileUploaders); + SetTextFileDestinationChecked(Program.DefaultTaskSettings.TextDestination, Program.DefaultTaskSettings.TextFileDestination, tsmiTextFileUploaders, tsmiTrayTextFileUploaders); SetEnumChecked(Program.DefaultTaskSettings.FileDestination, tsmiFileUploaders, tsmiTrayFileUploaders); SetEnumChecked(Program.DefaultTaskSettings.URLShortenerDestination, tsmiURLShorteners, tsmiTrayURLShorteners); SetEnumChecked(Program.DefaultTaskSettings.URLSharingServiceDestination, tsmiURLSharingServices, tsmiTrayURLSharingServices); } - /// - /// Sets necessary menu item checked in Text Uploader->File Uploader. - /// - /// Currently checked menu item inside Text Uploader - /// Currently checked menu item inside Text Uploader->File Uploader - /// List of menu items to be analysed for being checked. - public static void SetTextFileDestinationChecked(TextDestination textDestination, - FileDestination textFileDestination, params ToolStripDropDownItem[] lists) + public static void SetTextFileDestinationChecked(TextDestination textDestination, FileDestination textFileDestination, params ToolStripDropDownItem[] lists) { if (textDestination == TextDestination.FileUploader) { @@ -644,14 +626,7 @@ public static void SetTextFileDestinationChecked(TextDestination textDestination } } - /// - /// Sets necessary menu item checked in Image Uploader->File Uploader. - /// - /// Currently checked menu item inside Image Uploader - /// Currently checked menu item inside Image Uploader->File Uploader - /// List of menu items to be analysed for being checked. - public static void SetImageFileDestinationChecked(ImageDestination imageDestination, - FileDestination imageFileDestination, params ToolStripDropDownItem[] lists) + public static void SetImageFileDestinationChecked(ImageDestination imageDestination, FileDestination imageFileDestination, params ToolStripDropDownItem[] lists) { if (imageDestination == ImageDestination.FileUploader) { @@ -838,7 +813,7 @@ private void RemoveAllItems() lvUploads.Items.Cast().Select(x => x.Tag as WorkerTask).Where(x => x != null && !x.IsWorking).ForEach(TaskManager.Remove); } - private void UpdateMenu() + private void UpdateMainWindowLayout() { if (Program.Settings.ShowMenu) { @@ -1243,21 +1218,21 @@ private void lblDragAndDropTip_MouseUp(object sender, MouseEventArgs e) } else if (e.Button == MouseButtons.Right) { - UpdateControls(); + UpdateContextMenu(); cmsTaskInfo.Show((Control)sender, e.X + 1, e.Y + 1); } } private void lvUploads_SelectedIndexChanged(object sender, EventArgs e) { - UpdateControls(); + UpdateContextMenu(); } private void lvUploads_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { - UpdateControls(); + UpdateContextMenu(); cmsTaskInfo.Show(lvUploads, e.X + 1, e.Y + 1); } } @@ -1558,34 +1533,34 @@ private void tsmiClearList_Click(object sender, EventArgs e) private void tsmiHideMenu_Click(object sender, EventArgs e) { Program.Settings.ShowMenu = !Program.Settings.ShowMenu; - UpdateMenu(); + UpdateMainWindowLayout(); } private void tsmiHideColumns_Click(object sender, EventArgs e) { Program.Settings.ShowColumns = !Program.Settings.ShowColumns; - UpdateMenu(); + UpdateMainWindowLayout(); } private void tsmiImagePreviewShow_Click(object sender, EventArgs e) { Program.Settings.ImagePreview = ImagePreviewVisibility.Show; tsmiImagePreviewShow.Check(); - UpdateControls(); + UpdateContextMenu(); } private void tsmiImagePreviewHide_Click(object sender, EventArgs e) { Program.Settings.ImagePreview = ImagePreviewVisibility.Hide; tsmiImagePreviewHide.Check(); - UpdateControls(); + UpdateContextMenu(); } private void tsmiImagePreviewAutomatic_Click(object sender, EventArgs e) { Program.Settings.ImagePreview = ImagePreviewVisibility.Automatic; tsmiImagePreviewAutomatic.Check(); - UpdateControls(); + UpdateContextMenu(); } #endregion UploadInfoMenu events diff --git a/ShareX/TaskManager.cs b/ShareX/TaskManager.cs index ec0e0d410..2ee67d2e3 100644 --- a/ShareX/TaskManager.cs +++ b/ShareX/TaskManager.cs @@ -245,7 +245,7 @@ private static void task_UploadCompleted(WorkerTask task) { if (task.RequestSettingUpdate) { - Program.MainForm.UpdateMainFormSettings(); + Program.MainForm.UpdateCheckStates(); } TaskInfo info = task.Info;