Code refactoring in mainform, applicationsettingsform

This commit is contained in:
Jaex 2016-02-12 01:28:03 +02:00
parent aeecd30850
commit 30f2f5fd11
3 changed files with 152 additions and 184 deletions

View file

@ -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<SupportedLanguage>())
{
foreach (SupportedLanguage language in Helpers.GetEnums<SupportedLanguage>())
{
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<ProxyMethod>());
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<ProxyMethod>());
}
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();
});
}
}

View file

@ -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<AfterUploadTasks>(x => Program.DefaultTaskSettings.AfterUploadJob = Program.DefaultTaskSettings.AfterUploadJob.Swap(x),
tsddbAfterUploadTasks, tsmiTrayAfterUploadTasks);
// Destinations -> Image uploader
AddEnumItems<ImageDestination>(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<TextDestination>(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<FileDestination>(x => Program.DefaultTaskSettings.FileDestination = x, tsmiFileUploaders, tsmiTrayFileUploaders);
AddEnumItems<UrlShortenerType>(x => Program.DefaultTaskSettings.URLShortenerDestination = x, tsmiURLShorteners, tsmiTrayURLShorteners);
AddEnumItems<URLSharingServices>(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)
}
}
/// <summary>
/// Finds dropDowonItem corresponding to the enum value and checks it.
/// </summary>
/// <param name="value">Enum item</param>
/// <param name="parents">DropDowns where enum-th item must be checked.</param>
private static void SetEnumChecked(Enum value, params ToolStripDropDownItem[] parents)
{
if (value == null)
@ -394,7 +460,7 @@ private void EnableDisableToolStripMenuItems<T>(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);
}
/// <summary>
/// Sets necessary menu item checked in Text Uploader->File Uploader.
/// </summary>
/// <param name="textDestination">Currently checked menu item inside Text Uploader</param>
/// <param name="textFileDestination">Currently checked menu item inside Text Uploader->File Uploader</param>
/// <param name="lists">List of menu items to be analysed for being checked.</param>
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
}
}
/// <summary>
/// Sets necessary menu item checked in Image Uploader->File Uploader.
/// </summary>
/// <param name="imageDestination">Currently checked menu item inside Image Uploader</param>
/// <param name="imageFileDestination">Currently checked menu item inside Image Uploader->File Uploader</param>
/// <param name="lists">List of menu items to be analysed for being checked.</param>
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<ListViewItem>().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

View file

@ -245,7 +245,7 @@ private static void task_UploadCompleted(WorkerTask task)
{
if (task.RequestSettingUpdate)
{
Program.MainForm.UpdateMainFormSettings();
Program.MainForm.UpdateCheckStates();
}
TaskInfo info = task.Info;