From 8780758e3275921c99f74bf8e0416f2300e300e4 Mon Sep 17 00:00:00 2001 From: Smurf-iv Date: Wed, 29 Dec 2021 13:59:13 +0000 Subject: [PATCH 1/2] - Fix `-N` usage to only apply to relevant commands - Update to use .Net4.8 - Update Nuget packages to use latest - Set Code style for c# `language = preview` - Apply `Use Expression body` style - Apply var for local variables style - Apply local `using`s style - Update installer to check for .Net48 fixes: #82 --- Elucidate/.editorconfig | 4 + .../CheckFor.Net.wxs | 115 +++-- .../Elucidate Windows Installer.wixproj | 37 +- .../Elucidate Windows Installer/Elucidate.wxs | 36 +- .../Elucidate Windows Installer/Product.wxs | 8 +- Elucidate/Elucidate.sln | 11 +- Elucidate/Elucidate.sln.DotSettings | 15 +- .../DataGridViewTripleValueBarColumn.cs | 41 +- Elucidate/Elucidate/Controls/ListBoxLog.cs | 57 +-- .../Elucidate/Controls/LogsViewerControl.cs | 60 +-- .../Controls/ProtectedDrivesDisplay.cs | 36 +- Elucidate/Elucidate/Controls/RunControl.cs | 145 +++---- Elucidate/Elucidate/Elucidate.csproj | 402 +++--------------- .../Elucidate/Elucidate.csproj.DotSettings | 2 +- .../ExtendedToolkit/CommandLinkTextValues.cs | 20 +- .../Elucidate/ExtendedToolkit/ImageValue.cs | 53 +-- .../KryptonCommandLinkButtonActionList.cs | 60 +-- .../KryptonCommandLinkButtonDesigner.cs | 7 +- .../KryptonCommandLinkVersion1.cs | 197 ++++----- .../ViewDrawCommandLinkButton.cs | 202 +++++---- .../Elucidate/Forms/CalculateBlockSize.cs | 26 +- Elucidate/Elucidate/Forms/ElucidateForm.cs | 42 +- Elucidate/Elucidate/Forms/Settings.cs | 206 +++++---- .../HelperClasses/AdvancedSettingsHelper.cs | 2 +- .../HelperClasses/ConfigFileHelper.cs | 135 +++--- .../HelperClasses/ErrorProviderExtensions.cs | 16 +- .../Elucidate/HelperClasses/StorageUtil.cs | 180 ++++---- Elucidate/Elucidate/HelperClasses/Util.cs | 73 ++-- .../Elucidate/HelperClasses/WindowLocation.cs | 24 +- Elucidate/Elucidate/Objects/Constants.cs | 12 +- Elucidate/Elucidate/Objects/CoveragePath.cs | 12 +- Elucidate/Elucidate/Program.cs | 36 +- .../Elucidate/Properties/AssemblyInfo.cs | 32 +- .../Elucidate/Shared/BufferedTreeView.cs | 2 +- .../Elucidate/Shared/FolderSelectDialog.cs | 10 +- .../Shared/MessageBoxExtForm.Designer.cs | 258 ----------- .../Elucidate/Shared/MessageBoxExtForm.cs | 206 --------- .../Elucidate/Shared/MessageBoxExtForm.resx | 120 ------ .../Shared/NumericUpDownPowerOfTwo.cs | 4 +- .../Elucidate/Shared/TextOverProgressBar.cs | 131 +++--- Elucidate/Elucidate/Shared/WaitCursor.cs | 3 +- Elucidate/Elucidate/TabPages/CommonTab.cs | 52 +-- Elucidate/Elucidate/TabPages/Recover.cs | 54 +-- .../wyDay.Controls/Windows7ProgressBar.cs | 76 ++-- .../wyDay.Controls/Windows7Taskbar.cs | 13 +- .../MountedFolderSupportLibrary.csproj | 8 +- 46 files changed, 1097 insertions(+), 2144 deletions(-) create mode 100644 Elucidate/.editorconfig delete mode 100644 Elucidate/Elucidate/Shared/MessageBoxExtForm.Designer.cs delete mode 100644 Elucidate/Elucidate/Shared/MessageBoxExtForm.cs delete mode 100644 Elucidate/Elucidate/Shared/MessageBoxExtForm.resx diff --git a/Elucidate/.editorconfig b/Elucidate/.editorconfig new file mode 100644 index 0000000..abb819f --- /dev/null +++ b/Elucidate/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# IDE1006: Naming Styles +dotnet_diagnostic.IDE1006.severity = none diff --git a/Elucidate/Elucidate Windows Installer/CheckFor.Net.wxs b/Elucidate/Elucidate Windows Installer/CheckFor.Net.wxs index 96b4ada..379b5db 100644 --- a/Elucidate/Elucidate Windows Installer/CheckFor.Net.wxs +++ b/Elucidate/Elucidate Windows Installer/CheckFor.Net.wxs @@ -4,63 +4,62 @@ All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> - - Official documentation can be found at the following location: - - .NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2 - http://msdn.microsoft.com/en-us/library/w0x726c2(v=vs.110).aspx - --> - - - - - + + + + - - - WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx472MinRelease)" + + + WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx480MinRelease)" - - - - - + + + + + - + + Name="!(wix.NetFx48WebPackageDirectory)ndp48-web.exe"> + CertificatePublicKey="793980B0038EBF0A88DAA08420FD3E66F53CC0CE" + CertificateThumbprint="9DC17888B5CFAD98B3CB35C1994E96227F061675" + Description="Microsoft .NET Framework 4.8 Setup" + Hash="755349ECD6A478FE010E466B29911D2388F6CE94" + ProductName="Microsoft .NET Framework 4.8" + Size="1486376" + Version="4.8.3761.0" /> @@ -68,36 +67,36 @@ See LICENSE.TXT file in the project root for full license information. --> - - - - - + + + + + - + + Name="!(wix.NetFx48RedistPackageDirectory)ndp48-x86-x64-allos-enu.exe"> + CertificatePublicKey="793980B0038EBF0A88DAA08420FD3E66F53CC0CE" + CertificateThumbprint="9DC17888B5CFAD98B3CB35C1994E96227F061675" + Description="Microsoft .NET Framework 4.8 Setup" + Hash="0D425249D42A01E7AB3AC243152FA7773C43F0BF" + ProductName="Microsoft .NET Framework 4.8" + Size="72721568" + Version="4.8.3761.0" /> diff --git a/Elucidate/Elucidate Windows Installer/Elucidate Windows Installer.wixproj b/Elucidate/Elucidate Windows Installer/Elucidate Windows Installer.wixproj index 2f9146d..4016a72 100644 --- a/Elucidate/Elucidate Windows Installer/Elucidate Windows Installer.wixproj +++ b/Elucidate/Elucidate Windows Installer/Elucidate Windows Installer.wixproj @@ -1,32 +1,29 @@  - + Debug x64 - 3.5 + 3.10 {ea76fde5-c6ae-46b7-ada4-f3dc9dccc9fb} 2.0 Elucidate.Windows.Installer Package - $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets - $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets - SAK - SAK - SAK - SAK bin\$(Configuration)\ obj\$(Configuration)\ Debug + False + True + True + True bin\$(Configuration)\ obj\$(Configuration)\ - True False True - False + True True @@ -65,13 +62,17 @@ INSTALLFOLDER - + + + + + + To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Wix.targets. + + + + + --> \ No newline at end of file diff --git a/Elucidate/Elucidate Windows Installer/Elucidate.wxs b/Elucidate/Elucidate Windows Installer/Elucidate.wxs index 1a3f2e9..8f8b8e6 100644 --- a/Elucidate/Elucidate Windows Installer/Elucidate.wxs +++ b/Elucidate/Elucidate Windows Installer/Elucidate.wxs @@ -4,7 +4,7 @@ xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" > - + @@ -18,7 +18,7 @@ - + @@ -39,48 +39,48 @@ - + - + - + - + - + - + - + - + - + @@ -90,37 +90,37 @@ - + - + - + - + - + - + - + diff --git a/Elucidate/Elucidate Windows Installer/Product.wxs b/Elucidate/Elucidate Windows Installer/Product.wxs index eeff8a3..9667334 100644 --- a/Elucidate/Elucidate Windows Installer/Product.wxs +++ b/Elucidate/Elucidate Windows Installer/Product.wxs @@ -3,8 +3,6 @@ xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> - - @@ -52,11 +50,11 @@ - + - - + + diff --git a/Elucidate/Elucidate.sln b/Elucidate/Elucidate.sln index c5afa6e..f8d939a 100644 --- a/Elucidate/Elucidate.sln +++ b/Elucidate/Elucidate.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29609.76 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elucidate", "Elucidate\Elucidate.csproj", "{C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elucidate", "Elucidate\Elucidate.csproj", "{C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}" EndProject Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Elucidate Windows Installer", "Elucidate Windows Installer\Elucidate Windows Installer.wixproj", "{EA76FDE5-C6AE-46B7-ADA4-F3DC9DCCC9FB}" EndProject @@ -16,6 +16,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ToggleSwitch", "ToggleSwitc EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4387A76F-EC87-446D-A4A7-E7D96F8DD9A3}" ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig ..\license.md = ..\license.md ..\README.md = ..\README.md EndProjectSection @@ -60,8 +61,8 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}.Release|Any CPU.Build.0 = Release|Any CPU + {C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}.Release|Any CPU.ActiveCfg = Release|x64 + {C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E}.Release|Any CPU.Build.0 = Release|x64 {EA76FDE5-C6AE-46B7-ADA4-F3DC9DCCC9FB}.Debug|Any CPU.ActiveCfg = Debug|x64 {EA76FDE5-C6AE-46B7-ADA4-F3DC9DCCC9FB}.Release|Any CPU.ActiveCfg = Release|x64 {EA76FDE5-C6AE-46B7-ADA4-F3DC9DCCC9FB}.Release|Any CPU.Build.0 = Release|x64 @@ -74,8 +75,8 @@ Global {95AFED29-C452-4F6F-9FB1-6E6E072EA4F4} = {4387A76F-EC87-446D-A4A7-E7D96F8DD9A3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {39E6A612-AC12-4D63-BE2A-60EA16940A8A} - BuildVersion_StartDate = 2000/1/1 BuildVersion_UseGlobalSettings = False + BuildVersion_StartDate = 2000/1/1 + SolutionGuid = {39E6A612-AC12-4D63-BE2A-60EA16940A8A} EndGlobalSection EndGlobal diff --git a/Elucidate/Elucidate.sln.DotSettings b/Elucidate/Elucidate.sln.DotSettings index e5a3f84..c007c3e 100644 --- a/Elucidate/Elucidate.sln.DotSettings +++ b/Elucidate/Elucidate.sln.DotSettings @@ -1,5 +1,18 @@  + WARNING RAID + <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + True + True + True True - True \ No newline at end of file + True + True + True + True + True + True + True + True \ No newline at end of file diff --git a/Elucidate/Elucidate/Controls/DataGridViewTripleValueBarColumn.cs b/Elucidate/Elucidate/Controls/DataGridViewTripleValueBarColumn.cs index c7015ab..48f9273 100644 --- a/Elucidate/Elucidate/Controls/DataGridViewTripleValueBarColumn.cs +++ b/Elucidate/Elucidate/Controls/DataGridViewTripleValueBarColumn.cs @@ -6,10 +6,7 @@ namespace Elucidate.Controls { public class DataGridViewTripleValueBarColumn : DataGridViewImageColumn { - public DataGridViewTripleValueBarColumn() - { - CellTemplate = new DataGridViewTripleValueBarCell(); - } + public DataGridViewTripleValueBarColumn() => CellTemplate = new DataGridViewTripleValueBarCell(); } /// @@ -17,20 +14,14 @@ public DataGridViewTripleValueBarColumn() /// Low, Middle, Max /// These are colon separated float values. /// - class DataGridViewTripleValueBarCell : DataGridViewImageCell + internal class DataGridViewTripleValueBarCell : DataGridViewImageCell { // Used to make custom cell consistent with a DataGridViewImageCell - static Image emptyImage; + private static readonly Image EmptyImage; - static DataGridViewTripleValueBarCell() - { - emptyImage = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - } + static DataGridViewTripleValueBarCell() => EmptyImage = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - public DataGridViewTripleValueBarCell() - { - this.ValueType = typeof(string); - } + public DataGridViewTripleValueBarCell() => ValueType = typeof(string); // Method required to make the Progress Cell consistent with the default Image Cell. // The default Image Cell assumes an Image as a value, although the value of the Progress Cell is an string. @@ -38,33 +29,31 @@ protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, - DataGridViewDataErrorContexts context) - { - return emptyImage; - } + DataGridViewDataErrorContexts context) => + EmptyImage; - protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + protected override void Paint(Graphics g, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { try { - string s = ((string)value); + var s = ((string)value); if (string.IsNullOrWhiteSpace(s)) { return; } - string[] values = s.Split(':'); + var values = s.Split(':'); if (values.Length != 3) { return; } - float.TryParse(values[0], out float low); - float.TryParse(values[1], out float mid); - float.TryParse(values[2], out float max); + float.TryParse(values[0], out var low); + float.TryParse(values[1], out var mid); + float.TryParse(values[2], out var max); - float lowPercent = low / max; - float midPercent = mid / max; + var lowPercent = low / max; + var midPercent = mid / max; // Draws the cell grid base.Paint(g, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, diff --git a/Elucidate/Elucidate/Controls/ListBoxLog.cs b/Elucidate/Elucidate/Controls/ListBoxLog.cs index a335a13..ec5bfdd 100644 --- a/Elucidate/Elucidate/Controls/ListBoxLog.cs +++ b/Elucidate/Elucidate/Controls/ListBoxLog.cs @@ -34,7 +34,7 @@ private class LogString public string Message; }; - private readonly ConcurrentQueue pendingLogMessages = new ConcurrentQueue(); + private readonly ConcurrentQueue pendingLogMessages = new (); private bool alreadyDequing; public ListBoxLog(ListBox listBox, int maxLinesInListbox = DEFAULT_MAX_LINES_IN_LISTBOX, int defaultUpdateFrequencyms = DEFAULT_UPDATE_FREQUENCY_MS) @@ -57,7 +57,7 @@ public ListBoxLog(ListBox listBox, int maxLinesInListbox = DEFAULT_MAX_LINES_IN_ listBoxInt.KeyDown += KeyDownHandler; listBoxInt.MeasureItem += MeasureItem; - MenuItem[] menuItems = new[] { new MenuItem("Copy", CopyMenuOnClickHandler) }; + var menuItems = new[] { new MenuItem("Copy", CopyMenuOnClickHandler) }; listBoxInt.ContextMenu = new ContextMenu(menuItems); listBoxInt.ContextMenu.Popup += CopyMenuPopupHandler; @@ -115,7 +115,7 @@ private void MeasureItem(object sender, MeasureItemEventArgs e) { if (e.Index >= 0) { - if (!(((ListBox)sender).Items[e.Index] is LogString logEvent)) + if (((ListBox)sender).Items[e.Index] is not LogString logEvent) { logEvent = new LogString { @@ -143,7 +143,7 @@ private void DrawItemHandler(object sender, DrawItemEventArgs e) e.DrawFocusRectangle(); // SafeGuard against wrong configuration of list box - if (!(((ListBox)sender).Items[e.Index] is LogString logEvent)) + if (((ListBox)sender).Items[e.Index] is not LogString logEvent) { logEvent = new LogString { @@ -152,31 +152,16 @@ private void DrawItemHandler(object sender, DrawItemEventArgs e) }; } - Color color; - switch (logEvent.LevelUppercase) - { - case @"FATAL": - color = Color.White; - break; - case @"ERROR": - color = Color.Red; - break; - case @"WARN": - color = Color.Goldenrod; - break; - case @"INFO": - color = Color.Black; - break; - case @"DEBUG": - color = Color.Gray; - break; - case @"TRACE": - color = Color.DarkGray; - break; - default: - color = Color.Black; - break; - } + Color color = logEvent.LevelUppercase switch + { + @"FATAL" => Color.White, + @"ERROR" => Color.Red, + @"WARN" => Color.Goldenrod, + @"INFO" => Color.Black, + @"DEBUG" => Color.Gray, + @"TRACE" => Color.DarkGray, + _ => Color.Black + }; if (logEvent.LevelUppercase == @"FATAL") { @@ -198,7 +183,7 @@ private void KeyDownHandler(object sender, KeyEventArgs e) else if (e.KeyCode == Keys.C) { listBoxInt.BeginUpdate(); - for (int i = listBoxInt.Items.Count - 1; i >= 0; i--) + for (var i = listBoxInt.Items.Count - 1; i >= 0; i--) { listBoxInt.SetSelected(i, true); } @@ -235,11 +220,11 @@ private void timer1_Tick(object sender, EventArgs e) listBoxInt.BeginInvoke((MethodInvoker)delegate { - //some stuffs for best performance - listBoxInt.BeginUpdate(); + //some stuffs for best performance + listBoxInt.BeginUpdate(); - // find the style to use - while (pendingLogMessages.TryDequeue(out LogString log)) + // find the style to use + while (pendingLogMessages.TryDequeue(out LogString log)) { listBoxInt.Items.Add(log); } @@ -269,7 +254,7 @@ private void CopyToClipboard() { if (listBoxInt.SelectedItems.Count > 0) { - StringBuilder selectedItemsAsRtfText = new StringBuilder(); + var selectedItemsAsRtfText = new StringBuilder(); //selectedItemsAsRtfText.AppendLine(@"{\rtf1\ansi\deff0{\fonttbl{\f0\fcharset0 Courier;}}"); //selectedItemsAsRtfText.AppendLine( // @"{\colortbl;\red255\green255\blue255;\red255\green0\blue0;\red218\green165\blue32;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0}"); @@ -292,7 +277,7 @@ private void CopyToClipboard() } - private void Dispose(bool disposing) + private void Dispose(bool _) { if (listBoxInt != null) { diff --git a/Elucidate/Elucidate/Controls/LogsViewerControl.cs b/Elucidate/Elucidate/Controls/LogsViewerControl.cs index 934ecbe..dca3f56 100644 --- a/Elucidate/Elucidate/Controls/LogsViewerControl.cs +++ b/Elucidate/Elucidate/Controls/LogsViewerControl.cs @@ -44,14 +44,14 @@ public enum LexerNameEnum { ScanRaid, NLog } public LexerNameEnum LexerToUse { get; set; } = LexerNameEnum.NLog; - private readonly FileSystemWatcher logFileWatcher = new FileSystemWatcher(); + private readonly FileSystemWatcher logFileWatcher = new(); private string selectedDirectoryTitle; - private readonly string snapraidErrorSearchTerm = "error: "; - private readonly string snapraidWarningSearchTerm = "WARNING"; - private readonly string elucidateErrorSearchTerm = "] ERROR "; - private readonly string elucidateWarningSearchTerm = "] WARN "; + private readonly string snapraidErrorSearchTerm = @"error: "; + private readonly string snapraidWarningSearchTerm = @"WARNING"; + private readonly string elucidateErrorSearchTerm = @"] ERROR "; + private readonly string elucidateWarningSearchTerm = @"] WARN "; // log file path is based upon the config file location private string logSourcePath; @@ -81,9 +81,9 @@ private void LogsViewerControl_Load(object sender, EventArgs e) } // Read the contents of the file. - static string GetFileText(string name) + private static string GetFileText(string name) { - string fileContents = string.Empty; + var fileContents = string.Empty; if (File.Exists(name)) { fileContents = File.ReadAllText(name); @@ -98,8 +98,8 @@ private void UpdateLogFileList(string selectedDirectoryTitle = null) FileTarget fileTarget = (FileTarget)LogManager.Configuration.FindTargetByName("file"); // Need to set timestamp here if filename uses date. // For example - filename="${basedir}/logs/${shortdate}/trace.log" - LogEventInfo logEventInfo = new LogEventInfo { TimeStamp = DateTime.Now }; - string fileName = fileTarget.FileName.Render(logEventInfo); + var logEventInfo = new LogEventInfo { TimeStamp = DateTime.Now }; + var fileName = fileTarget.FileName.Render(logEventInfo); selectedDirectoryTitle = Path.GetDirectoryName(fileName); } else @@ -112,7 +112,7 @@ private void UpdateLogFileList(string selectedDirectoryTitle = null) // remember user selection string selectedIndexValue = null; - int selectedIndex = listBoxViewLogFiles.SelectedIndex; + var selectedIndex = listBoxViewLogFiles.SelectedIndex; if (selectedIndex >= 0) { selectedIndexValue = listBoxViewLogFiles.SelectedItems[0].ToString(); @@ -120,7 +120,7 @@ private void UpdateLogFileList(string selectedDirectoryTitle = null) switch (selectedDirectoryTitle) { - case "SnapRAID Scheduled Jobs": + case @"SnapRAID Scheduled Jobs": // SnapRAID Scheduled Jobs errorSearchTerm = snapraidErrorSearchTerm; warningSearchTerm = snapraidWarningSearchTerm; @@ -135,7 +135,7 @@ private void UpdateLogFileList(string selectedDirectoryTitle = null) logFileWatcher.Filter = "*.log"; logFileWatcher.EnableRaisingEvents = true; break; - case "Elucidate": + case @"Elucidate": // Elucidate errorSearchTerm = elucidateErrorSearchTerm; warningSearchTerm = elucidateWarningSearchTerm; @@ -159,32 +159,32 @@ private void UpdateLogFileList(string selectedDirectoryTitle = null) listBoxViewLogFiles.Items.Clear(); - DirectoryInfo logFileDirectoryInfo = new DirectoryInfo(logSourcePath); + var logFileDirectoryInfo = new DirectoryInfo(logSourcePath); - List allLogs = logFileDirectoryInfo.GetFiles("*.log").OrderByDescending(a => a.Name).ToList(); + var allLogs = logFileDirectoryInfo.GetFiles(@"*.log").OrderByDescending(static a => a.Name).ToList(); - List filteredLogs = new List(); + var filteredLogs = new List(); if (checkedFilesWithError.Checked) { - IEnumerable filesWithErrors = from file in allLogs - let fileText = GetFileText(file.FullName) - where fileText.Contains(errorSearchTerm) - select file; + var filesWithErrors = from file in allLogs + let fileText = GetFileText(file.FullName) + where fileText.Contains(errorSearchTerm) + select file; filteredLogs = filteredLogs.Union(filesWithErrors).ToList(); } if (checkedFilesWithWarn.Checked) { - IEnumerable filesWithWarnings = from file in allLogs - let fileText = GetFileText(file.FullName) - where fileText.Contains(warningSearchTerm) - select file; + var filesWithWarnings = from file in allLogs + let fileText = GetFileText(file.FullName) + where fileText.Contains(warningSearchTerm) + select file; filteredLogs = filteredLogs.Union(filesWithWarnings).ToList(); } - List logsToShow = filteredLogs.Count > 0 ? filteredLogs : allLogs; - logsToShow = logsToShow.OrderByDescending(a => a.Name).ToList(); + var logsToShow = filteredLogs.Count > 0 ? filteredLogs : allLogs; + logsToShow = logsToShow.OrderByDescending(static a => a.Name).ToList(); foreach (FileInfo log in logsToShow) { listBoxViewLogFiles.Items.Add(log.Name); @@ -193,7 +193,7 @@ where fileText.Contains(warningSearchTerm) // restore user selection, if it still exists if (selectedIndex >= 0 && !string.IsNullOrEmpty(selectedIndexValue)) { - int indexFound = listBoxViewLogFiles.FindStringExact(selectedIndexValue); + var indexFound = listBoxViewLogFiles.FindStringExact(selectedIndexValue); if (indexFound >= 0) { listBoxViewLogFiles.SelectedIndex = indexFound; @@ -213,7 +213,7 @@ private void listBoxViewLogFiles_SelectedIndexChanged(object sender, EventArgs e return; } - string fullPath = $@"{logSourcePath}\{listBoxViewLogFiles.SelectedItems[0]}"; + var fullPath = $@"{logSourcePath}\{listBoxViewLogFiles.SelectedItems[0]}"; scintilla.ReadOnly = false; scintilla.Text = File.ReadAllText(fullPath); @@ -244,13 +244,13 @@ private void logViewToolStripMenuItem_Click(object sender, EventArgs e) { // if (_liveRunLogControl.ActionWorker.IsBusy) { return; } - string userAppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Elucidate"); + var userAppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Elucidate"); - OpenFileDialog openFileDialog = new OpenFileDialog + var openFileDialog = new OpenFileDialog { InitialDirectory = Path.Combine(userAppData, @"Logs"), Filter = @"Log files (*.log)|*.log|Archive logs (*.*)|*.*", - FileName = "*.log", + FileName = @"*.log", FilterIndex = 2, Title = @"Select name to view contents" }; diff --git a/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.cs b/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.cs index 1e22a44..907dc53 100644 --- a/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.cs +++ b/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.cs @@ -23,7 +23,6 @@ #endregion Copyright (C) using System; -using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -89,11 +88,11 @@ public void RefreshGrid(ConfigFileHelper srConfig, bool excludeParity) { driveGrid.Rows.RemoveAt(0); } - List pathsOfInterest = srConfig.GetPathsOfInterest(); + var pathsOfInterest = srConfig.GetPathsOfInterest(); cancelTokenSrc = new CancellationTokenSource(); if (excludeParity) { - foreach (CoveragePath coveragePath in pathsOfInterest.Where(s => s.PathType == PathTypeEnum.Source)) + foreach (CoveragePath coveragePath in pathsOfInterest.Where(static s => s.PathType == PathTypeEnum.Source)) { AddCoverage(coveragePath); } @@ -118,25 +117,25 @@ private void driveGrid_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e { if (!cancelTokenSrc.IsCancellationRequested) { - for (int index = e.RowIndex; index < e.RowIndex + e.RowCount; index++) + for (var index = e.RowIndex; index < e.RowIndex + e.RowCount; index++) { // Get data to perform drive usage display DataGridViewRow row = driveGrid.Rows[index]; - StartDriveUsage(cancelTokenSrc.Token, row); + StartDriveUsage(row, cancelTokenSrc.Token); } } } - private void StartDriveUsage(CancellationToken token, DataGridViewRow row) + private void StartDriveUsage(DataGridViewRow row, CancellationToken token) { if (row.Tag is CoveragePath coveragePath) { - DirectoryInfo dirInfo = new DirectoryInfo(coveragePath.DirectoryPath, PathFormat.FullPath); - DriveInfo driveInfo = new DriveInfo(dirInfo.Root.FullName); + var dirInfo = new DirectoryInfo(coveragePath.DirectoryPath, PathFormat.FullPath); + var driveInfo = new DriveInfo(dirInfo.Root.FullName); if (coveragePath.PathType == PathTypeEnum.Parity) { - long totalUsed = driveInfo.TotalSize - driveInfo.AvailableFreeSpace; - long protectedUse = File.Exists(coveragePath.FullPath) ? new FileInfo(coveragePath.FullPath).Length : 0L; + var totalUsed = driveInfo.TotalSize - driveInfo.AvailableFreeSpace; + var protectedUse = File.Exists(coveragePath.FullPath) ? new FileInfo(coveragePath.FullPath).Length : 0L; row.Cells[2].Value = $@"{protectedUse}:{totalUsed}:{driveInfo.TotalSize}"; row.Cells[3].Value = $@"{new ByteSize(protectedUse)} : {new ByteSize(totalUsed)} : {new ByteSize(driveInfo.TotalSize)}"; } @@ -153,9 +152,9 @@ private void StartDriveUsage(CancellationToken token, DataGridViewRow row) private void ProcessProtectedSpace(DataGridViewRow row, DriveInfo driveInfo, DirectoryInfo dirInfo, CancellationToken token) { - long totalUsed = driveInfo.TotalSize - driveInfo.AvailableFreeSpace; + var totalUsed = driveInfo.TotalSize - driveInfo.AvailableFreeSpace; - ulong protectedUse = DirSize(dirInfo, token); + var protectedUse = DirSize(dirInfo, token); if (!token.IsCancellationRequested) { BeginInvoke((MethodInvoker)delegate @@ -168,9 +167,9 @@ private void ProcessProtectedSpace(DataGridViewRow row, DriveInfo driveInfo, } catch { - // Do nothing - // Might be caused by fast closure - } + // Do nothing + // Might be caused by fast closure + } }); } @@ -192,15 +191,16 @@ private static ulong DirSize(DirectoryInfo dir, CancellationToken token) return 0UL; } - return dir.EnumerateFiles().AsParallel().Sum(fi => (ulong)fi.Length) + return dir.EnumerateFiles().AsParallel().Sum(static fi => (ulong)fi.Length) + dir.EnumerateDirectories() - .Where(d => (d.Attributes & System.IO.FileAttributes.System) == 0 && (d.Attributes & System.IO.FileAttributes.Hidden) == 0) + .Where(static d => (d.Attributes & System.IO.FileAttributes.System) == 0 + && (d.Attributes & System.IO.FileAttributes.Hidden) == 0) .AsParallel() .Sum(info => DirSize(info, token)); } catch (UnauthorizedAccessException ex) { - Log.Warn(string.Concat("No Access to ", dir.FullName), ex); + Log.Warn(ex, @"No Access to [{0}]", dir.FullName); } catch (Exception ex) { diff --git a/Elucidate/Elucidate/Controls/RunControl.cs b/Elucidate/Elucidate/Controls/RunControl.cs index c24a8bd..0b305ca 100644 --- a/Elucidate/Elucidate/Controls/RunControl.cs +++ b/Elucidate/Elucidate/Controls/RunControl.cs @@ -27,6 +27,7 @@ using System.ComponentModel; using System.Diagnostics; using System.Drawing; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; @@ -50,10 +51,10 @@ public partial class RunControl : UserControl /// /// eventing idea taken from http://stackoverflow.com/questions/1423484/using-bashcygwin-inside-c-program /// - private readonly ManualResetEvent mreProcessExit = new ManualResetEvent(false); + private readonly ManualResetEvent mreProcessExit = new (false); - private readonly ManualResetEvent mreOutputDone = new ManualResetEvent(false); - private readonly ManualResetEvent mreErrorDone = new ManualResetEvent(false); + private readonly ManualResetEvent mreOutputDone = new (false); + private readonly ManualResetEvent mreErrorDone = new (false); private ProcessPriorityClass requested = ProcessPriorityClass.Normal; private string lastError; private Stack batchPaths; @@ -117,7 +118,7 @@ private void LiveRunLogControl_Load(object sender, EventArgs e) { } - private readonly BackgroundWorker actionWorker = new BackgroundWorker + private readonly BackgroundWorker actionWorker = new () { WorkerReportsProgress = true, WorkerSupportsCancellation = true @@ -137,14 +138,14 @@ internal void StartSnapRaidProcess(CommandType commandToRun, Stack paths { if (IsRunning) { - Log.Debug("Command button clicked but a command is still running."); + Log.Debug(@"Command button clicked but a command is still running."); return; } CommandTypeRunning = commandToRun; - StringBuilder command = new StringBuilder(); - string defaultOption = string.Empty; + var command = new StringBuilder(); + var defaultOption = string.Empty; switch (commandToRun) { @@ -192,7 +193,7 @@ internal void StartSnapRaidProcess(CommandType commandToRun, Stack paths if (checkBoxCommandLineOptions.Checked) { - string addCmd = txtAddCommands.Text; + var addCmd = txtAddCommands.Text; if (addCmd.StartsWith(@"+")) { addCmd = addCmd.TrimStart(@"+".ToCharArray()); @@ -233,22 +234,20 @@ private void actionWorker_DoWork(object sender, DoWorkEventArgs e) { try { - BackgroundWorker worker = sender as BackgroundWorker; - - string command = e.Argument as string; + var command = e.Argument as string; lastError = string.Empty; - if (worker == null) + if (sender is not BackgroundWorker worker) { - Log.Error("Passed in worker is null"); + Log.Error(@"Passed in worker is null"); e.Cancel = true; return; } if (string.IsNullOrWhiteSpace(command)) { - Log.Error("Passed in command is null"); + Log.Error(@"Passed in command is null"); e.Cancel = true; return; } @@ -257,7 +256,7 @@ private void actionWorker_DoWork(object sender, DoWorkEventArgs e) mreOutputDone.Reset(); mreErrorDone.Reset(); - string args = Util.FormatSnapRaidCommandArgs(command, out string appPath); + var args = Util.FormatSnapRaidCommandArgs(command, out var appPath); IsRunning = true; @@ -275,17 +274,17 @@ private void actionWorker_DoWork(object sender, DoWorkEventArgs e) private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, BackgroundWorker worker) { - Log.Info("#########################################"); + Log.Info(@"#########################################"); // RecoveryFix if (CommandTypeRunning == CommandType.RecoverFix) { - StringBuilder sbPaths = new StringBuilder(); + var sbPaths = new StringBuilder(); do { var restore = batchPaths.Pop(); - sbPaths.Append(" -f \"").Append(restore).Append("\""); + sbPaths.Append(" -f \"").Append(restore).Append('"'); } while ((sbPaths.Length < MAX_COMMAND_ARG_LENGTH) && (batchPaths.Count > 0) ); @@ -295,7 +294,7 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro int exitCode; - using (Process process = new Process + using (var process = new Process { StartInfo = new ProcessStartInfo(appPath, args) { @@ -309,17 +308,17 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro EnableRaisingEvents = true }) { - Log.Info("Using: {0}", process.StartInfo.FileName); - Log.Info("with: {0}", process.StartInfo.Arguments); + Log.Info(@"Using: [{0}]", process.StartInfo.FileName); + Log.Info(@"with: [{0}]", process.StartInfo.Arguments); process.Exited += Exited; process.Start(); // Redirect the output stream of the child process. - ThreadObject threadObject = new ThreadObject { BgdWorker = worker, CmdProcess = process }; - ThreadPool.QueueUserWorkItem(o => ReadStandardOutput(threadObject)); - ThreadPool.QueueUserWorkItem(o => ReadStandardError(threadObject)); + var threadObject = new ThreadObject { BgdWorker = worker, CmdProcess = process }; + ThreadPool.QueueUserWorkItem(_ => ReadStandardOutput(threadObject)); + ThreadPool.QueueUserWorkItem(_ => ReadStandardError(threadObject)); if (process.HasExited) { @@ -335,7 +334,7 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro if (worker.CancellationPending) { - Log.Fatal("Attempting to stop the process.."); + Log.Fatal(@"Attempting to stop the process.."); process.Kill(); } else @@ -354,7 +353,7 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro process.Suspend(); } - Log.Fatal("Setting the process priority to[{0}]", requested); + Log.Fatal(@"Setting the process priority to[{0}]", requested); process.PriorityClass = requested; } } @@ -363,12 +362,12 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro if (exitCode == 0) { - Log.Info("ExitCode=[{0}]", exitCode); + Log.Info(@"ExitCode=[{0}]", exitCode); lastError = string.Empty; } else { - Log.Error("ExitCode=[{0}]", exitCode); + Log.Error(@"ExitCode=[{0}]", exitCode); } process.Close(); @@ -382,8 +381,7 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro worker.ReportProgress(101, "Aborted: Error code -1"); break; case 1: - if ((CommandTypeRunning == CommandType.Check) - || (CommandTypeRunning == CommandType.CheckForMissing) + if (CommandTypeRunning is CommandType.Check or CommandType.CheckForMissing ) { Log.Warn(@"Missing files have been reported, the process return code is 1, instead of the default 0"); @@ -405,7 +403,7 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro break; default: - Log.Error("Unhandled ExitCode of [{0}]", exitCode); + Log.Error(@"Unhandled ExitCode of [{0}]", exitCode); break; } @@ -417,7 +415,7 @@ private void RunSnapRaid(DoWorkEventArgs e, string args, string appPath, Backgro private void actionWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { - int progressPercentage = e.ProgressPercentage; + var progressPercentage = e.ProgressPercentage; if (progressPercentage == 101) { @@ -468,7 +466,7 @@ private void actionWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEv { toolStripProgressBar1.State = ProgressBarState.Pause; toolStripProgressBar1.DisplayText = "Cancelled"; - Log.Error("The thread has been cancelled"); + Log.Error(@"The thread has been cancelled"); comboBoxProcessStatus.Text = @"Abort"; } else if (e.Error != null) @@ -487,9 +485,7 @@ private void actionWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEv comboBoxProcessStatus.Text = @"Stopped"; } - if (CommandTypeRunning == CommandType.Check - || CommandTypeRunning == CommandType.CheckForMissing - || CommandTypeRunning == CommandType.RecoverFix + if (CommandTypeRunning is CommandType.Check or CommandType.CheckForMissing or CommandType.RecoverFix ) { toolStripProgressBar1.State = ProgressBarState.Normal; @@ -505,7 +501,7 @@ private void actionWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEv } toolStripProgressBar1.DisplayText = "Error"; - Log.Debug($"Last Error: {lastError}"); + Log.Debug(@"Last Error: {lastError}", lastError); } } @@ -549,12 +545,12 @@ private void ReadStandardOutput(ThreadObject threadObject) do { buf = threadObject.CmdProcess.StandardOutput.ReadLine(); - Log.Info("StdOut[{0}]", buf); + Log.Info(@"StdOut[{0}]", buf); if (!string.IsNullOrWhiteSpace(buf)) { - string[] splits = buf.Split('%'); + var splits = buf.Split('%'); if ((splits.Length > 1) - && int.TryParse(splits[0], out int percentProgress) + && int.TryParse(splits[0], out var percentProgress) ) { threadObject.BgdWorker.ReportProgress(percentProgress, buf); @@ -578,7 +574,7 @@ private void ReadStandardOutput(ThreadObject threadObject) private void Exited(object o, EventArgs e) { - Log.Debug("Process has exited"); + Log.Debug(@"Process has exited"); mreProcessExit.Set(); } @@ -607,28 +603,27 @@ private void comboBoxProcessStatus_SelectedIndexChanged(object sender, EventArgs KryptonComboBox control = (KryptonComboBox)sender; - string strSelected = control.SelectedItem.ToString(); + var strSelected = control.SelectedItem.ToString(); switch (strSelected) { - case "Stopped": + case @"Stopped": if (actionWorker.IsBusy) { - comboBoxProcessStatus.SelectedIndex = comboBoxProcessStatus.FindStringExact("Running"); + comboBoxProcessStatus.SelectedIndex = comboBoxProcessStatus.FindStringExact(@"Running"); } - break; - case "Abort": + case @"Abort": actionWorker.CancelAsync(); - Log.Info("Cancelling the running process..."); + Log.Info(@"Cancelling the running process..."); break; - case "Idle": + case @"Idle": requested = ProcessPriorityClass.Idle; break; - case "Running": + case @"Running": requested = ProcessPriorityClass.Normal; break; - case "Pause": + case @"Pause": requested = ProcessPriorityClass.BelowNormal; break; @@ -643,50 +638,44 @@ public static class ProcessExtension [Flags] private enum ThreadAccess { - TERMINATE = (0x0001), - SUSPEND_RESUME = (0x0002), - GET_CONTEXT = (0x0008), - SET_CONTEXT = (0x0010), - SET_INFORMATION = (0x0020), - QUERY_INFORMATION = (0x0040), - SET_THREAD_TOKEN = (0x0080), - IMPERSONATE = (0x0100), - DIRECT_IMPERSONATION = (0x0200) + Terminate = (0x0001), + SuspendResume = (0x0002), + GetContext = (0x0008), + SetContext = (0x0010), + SetInformation = (0x0020), + QueryInformation = (0x0040), + SetThreadToken = (0x0080), + Impersonate = (0x0100), + DirectImpersonation = (0x0200) } - [DllImport("kernel32.dll")] - static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId); + [DllImport(@"kernel32.dll")] + private static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId); - [DllImport("kernel32.dll")] - static extern uint SuspendThread(IntPtr hThread); + [DllImport(@"kernel32.dll")] + private static extern uint SuspendThread(IntPtr hThread); [DllImport("kernel32.dll")] - static extern int ResumeThread(IntPtr hThread); + private static extern int ResumeThread(IntPtr hThread); public static void Suspend(this Process process) { - foreach (ProcessThread thread in process.Threads) + foreach (IntPtr pOpenThread in (from ProcessThread thread in process.Threads + select OpenThread(ThreadAccess.SuspendResume, false, (uint)thread.Id)) + .TakeWhile(static pOpenThread => pOpenThread != IntPtr.Zero) + ) { - var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); - if (pOpenThread == IntPtr.Zero) - { - break; - } - SuspendThread(pOpenThread); } } public static void Resume(this Process process) { - foreach (ProcessThread thread in process.Threads) + foreach (IntPtr pOpenThread in (from ProcessThread thread in process.Threads + select OpenThread(ThreadAccess.SuspendResume, false, (uint)thread.Id)) + .TakeWhile(static pOpenThread => pOpenThread != IntPtr.Zero) + ) { - var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); - if (pOpenThread == IntPtr.Zero) - { - break; - } - ResumeThread(pOpenThread); } } diff --git a/Elucidate/Elucidate/Elucidate.csproj b/Elucidate/Elucidate/Elucidate.csproj index 2f85af3..ad61cc6 100644 --- a/Elucidate/Elucidate/Elucidate.csproj +++ b/Elucidate/Elucidate/Elucidate.csproj @@ -1,337 +1,67 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {C45A0899-34D4-4CB0-B5FF-9DFADBC5E70E} - WinExe - Properties - Elucidate - Elucidate - v4.7.2 - - - 512 - SAK - SAK - SAK - SAK - false - True - True - True - True - True - YearStamp.MonthStamp.Increment.DayStamp - ShortYearStamp.MonthStamp.Increment.DayStamp - YearStamp.MonthStamp.Increment.DayStamp - AssemblyVersionAttribute - Properties\AssemblyInfo.cs - 2021.4.1030.4 - False - SettingsVersion - None - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - Elucidate.ico - - - true - bin\Debug\ - DEBUG;TRACE - full - AnyCPU - bin\Debug\Elucidate.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - false - false - latest - - - bin\Release\ - TRACE - true - pdbonly - AnyCPU - bin\Release\Elucidate.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - false - false - true - false - latest - - - Elucidate.Program - - - false - - - - - - - - ..\ToggleSwitch\JCS.ToggleSwitch.dll - - - - - - - - - - - - - - - - - - UserControl - - - ProtectedDrivesDisplay.cs - - - - - - - - - Form - - - LiveLog.cs - - - - - - - - - - - - - UserControl - - - RunControl.cs - - - - UserControl - - - CommonTab.cs - - - UserControl - - - LogsViewerControl.cs - - - UserControl - - - Recover.cs - - - UserControl - - - Schedule.cs - - - Form - - - CalculateBlockSize.cs - - - - - - - Component - - - - - Component - - - Component - - - - - - - Form - - - ElucidateForm.cs - - - - - Form - - - Settings.cs - - - - - Component - - - RunControl.cs - - - LiveLog.cs - - - CommonTab.cs - - - LogsViewerControl.cs - - - ProtectedDrivesDisplay.cs - - - Recover.cs - - - Schedule.cs - - - CalculateBlockSize.cs - - - - ElucidateForm.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - Settings.cs - - - Designer - - - Designer - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - PreserveNewest - - - - - - - - - - - - - 2.2.6 - - - 2.0.0 - - - 2.8.0 - - - 4.6.2 - - - 4.6.2 - - - 5.550.2103.1 - - - 5.550.2103.1 - - - 4.7.9 - - - - - - - - - - + + + + net48 + WinExe + Elucidate + Elucidate + false + true + AnyCPU + Elucidate.ico + true + en + 5 + preview + preview + AnyCPU;x64 + + + + + + + PreserveNewest + + + + + + + + + + + + + 2.2.6 + + + 2.1.1 + + + 2.8.0 + + + 4.6.2 + + + 4.6.2 + + + 6.2111.312 + + + 6.2111.312 + + + 4.7.13 + + + + + ..\ToggleSwitch\JCS.ToggleSwitch.dll + + + \ No newline at end of file diff --git a/Elucidate/Elucidate/Elucidate.csproj.DotSettings b/Elucidate/Elucidate/Elucidate.csproj.DotSettings index 827beb4..acd232e 100644 --- a/Elucidate/Elucidate/Elucidate.csproj.DotSettings +++ b/Elucidate/Elucidate/Elucidate.csproj.DotSettings @@ -1,2 +1,2 @@  - Experimental \ No newline at end of file + Preview \ No newline at end of file diff --git a/Elucidate/Elucidate/ExtendedToolkit/CommandLinkTextValues.cs b/Elucidate/Elucidate/ExtendedToolkit/CommandLinkTextValues.cs index 9319190..1a14d96 100644 --- a/Elucidate/Elucidate/ExtendedToolkit/CommandLinkTextValues.cs +++ b/Elucidate/Elucidate/ExtendedToolkit/CommandLinkTextValues.cs @@ -6,29 +6,23 @@ namespace ExtendedControls.ExtendedToolkit.Values { public class CommandLinkTextValues : CaptionValues { - private const string _defaultHeading = @"Command Link V1"; - private const string _defaultDescription = @"Here be the ""Note Text"""; + private const string DEFAULT_HEADING = @"Command Link V1"; + private const string DEFAULT_DESCRIPTION = @"Here be the ""Note Text"""; public CommandLinkTextValues(NeedPaintHandler needPaint) : base(needPaint) { } - protected override string GetHeadingDefault() - { - return _defaultHeading; - } + protected override string GetHeadingDefault() => DEFAULT_HEADING; - protected override string GetDescriptionDefault() - { - return _defaultDescription; - } + protected override string GetDescriptionDefault() => DEFAULT_DESCRIPTION; #region Description /// /// Gets and sets the header description text. /// - [DefaultValue(_defaultDescription)] + [DefaultValue(DEFAULT_DESCRIPTION)] public override string Description { get => base.Description; @@ -38,8 +32,8 @@ public override string Description public void ResetText() { - Heading = _defaultHeading; - Description = _defaultDescription; + Heading = DEFAULT_HEADING; + Description = DEFAULT_DESCRIPTION; } } } diff --git a/Elucidate/Elucidate/ExtendedToolkit/ImageValue.cs b/Elucidate/Elucidate/ExtendedToolkit/ImageValue.cs index 801fb6e..b5af56d 100644 --- a/Elucidate/Elucidate/ExtendedToolkit/ImageValue.cs +++ b/Elucidate/Elucidate/ExtendedToolkit/ImageValue.cs @@ -9,7 +9,7 @@ public class ImageValue : Storage, IContentValues { #region Static Fields - private static readonly Image defaultImage = new Bitmap(1, 1);//Properties.Resources.Question_32_x_32);Properties.Resources.Question_32_x_32; + private static readonly Image DefaultImage = new Bitmap(1, 1);//Properties.Resources.Question_32_x_32);Properties.Resources.Question_32_x_32; #endregion #region Identity @@ -29,9 +29,9 @@ public ImageValue(NeedPaintHandler needPaint) #endregion #region Instance Fields - private Color _transparent; + private Color transparent; - private Image _image; + private Image image; [Localizable(true)] [Category("Visuals")] @@ -39,12 +39,12 @@ public ImageValue(NeedPaintHandler needPaint) [RefreshProperties(RefreshProperties.All)] public Image Image { - get => _image; + get => image; set { - if (_image != value) + if (image != value) { - _image = value; + image = value; PerformNeedPaint(true); } } @@ -57,16 +57,13 @@ public Image Image /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => ((Image == defaultImage) && + public override bool IsDefault => ((Image == DefaultImage) && (ImageTransparentColor == Color.Empty) ); #endregion - private bool ShouldSerializeImage() - { - return Image != defaultImage; - } + private bool ShouldSerializeImage() => Image != DefaultImage; #region IContentValues /// @@ -74,27 +71,18 @@ private bool ShouldSerializeImage() /// public void ResetImage() { - Image = defaultImage; + Image = DefaultImage; } /// /// Gets the content short text. /// /// String value. - public Image GetImage(PaletteState state) - { - return Image; - } + public Image GetImage(PaletteState state) => Image; - public string GetShortText() - { - return string.Empty; - } + public string GetShortText() => string.Empty; - public string GetLongText() - { - return string.Empty; - } + public string GetLongText() => string.Empty; #endregion @@ -109,22 +97,19 @@ public string GetLongText() [KryptonDefaultColorAttribute()] public Color ImageTransparentColor { - get => _transparent; + get => transparent; set { - if (_transparent != value) + if (transparent != value) { - _transparent = value; + transparent = value; PerformNeedPaint(true); } } } - private bool ShouldSerializeImageTransparentColor() - { - return ImageTransparentColor != Color.Empty; - } + private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != Color.Empty; /// /// Resets the ImageTransparentColor property to its default value. @@ -139,10 +124,8 @@ public void ResetImageTransparentColor() /// /// The state for which the image color is needed. /// Color value. - public virtual Color GetImageTransparentColor(PaletteState state) - { - return ImageTransparentColor; - } + public virtual Color GetImageTransparentColor(PaletteState state) => ImageTransparentColor; + #endregion diff --git a/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonActionList.cs b/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonActionList.cs index 9a16161..47dbfce 100644 --- a/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonActionList.cs +++ b/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonActionList.cs @@ -10,8 +10,8 @@ namespace ExtendedControls.ExtendedToolkit.Designers internal class KryptonCommandLinkButtonActionList : DesignerActionList { #region Instance Fields - private readonly KryptonCommandLinkButton _button; - private readonly IComponentChangeService _service; + private readonly KryptonCommandLinkButton button; + private readonly IComponentChangeService service; #endregion #region Identity @@ -23,10 +23,10 @@ public KryptonCommandLinkButtonActionList(KryptonCommandLinkButtonDesigner owner : base(owner.Component) { // Remember the button instance - _button = owner.Component as KryptonCommandLinkButton; + button = owner.Component as KryptonCommandLinkButton; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); } #endregion @@ -36,14 +36,14 @@ public KryptonCommandLinkButtonActionList(KryptonCommandLinkButtonDesigner owner /// public ButtonStyle ButtonStyle { - get => _button.ButtonStyle; + get => button.ButtonStyle; set { - if (_button.ButtonStyle != value) + if (button.ButtonStyle != value) { - _service.OnComponentChanged(_button, null, _button.ButtonStyle, value); - _button.ButtonStyle = value; + service.OnComponentChanged(button, null, button.ButtonStyle, value); + button.ButtonStyle = value; } } } @@ -53,14 +53,14 @@ public ButtonStyle ButtonStyle /// public VisualOrientation Orientation { - get => _button.Orientation; + get => button.Orientation; set { - if (_button.Orientation != value) + if (button.Orientation != value) { - _service.OnComponentChanged(_button, null, _button.Orientation, value); - _button.Orientation = value; + service.OnComponentChanged(button, null, button.Orientation, value); + button.Orientation = value; } } } @@ -70,14 +70,14 @@ public VisualOrientation Orientation /// public string Heading { - get => _button.CommandLinkTextValues.Heading; + get => button.CommandLinkTextValues.Heading; set { - if (_button.CommandLinkTextValues.Heading != value) + if (button.CommandLinkTextValues.Heading != value) { - _service.OnComponentChanged(_button, null, _button.CommandLinkTextValues.Heading, value); - _button.CommandLinkTextValues.Heading = value; + service.OnComponentChanged(button, null, button.CommandLinkTextValues.Heading, value); + button.CommandLinkTextValues.Heading = value; } } } @@ -87,14 +87,14 @@ public string Heading /// public string Description { - get => _button.CommandLinkTextValues.Description; + get => button.CommandLinkTextValues.Description; set { - if (_button.CommandLinkTextValues.Description != value) + if (button.CommandLinkTextValues.Description != value) { - _service.OnComponentChanged(_button, null, _button.CommandLinkTextValues.Description, value); - _button.CommandLinkTextValues.Description = value; + service.OnComponentChanged(button, null, button.CommandLinkTextValues.Description, value); + button.CommandLinkTextValues.Description = value; } } } @@ -104,14 +104,14 @@ public string Description /// public Image Image { - get => _button.CommandLinkImageValue.Image; + get => button.CommandLinkImageValue.Image; set { - if (_button.CommandLinkImageValue.Image != value) + if (button.CommandLinkImageValue.Image != value) { - _service.OnComponentChanged(_button, null, _button.CommandLinkImageValue.Image, value); - _button.CommandLinkImageValue.Image = value; + service.OnComponentChanged(button, null, button.CommandLinkImageValue.Image, value); + button.CommandLinkImageValue.Image = value; } } } @@ -121,14 +121,14 @@ public Image Image /// public PaletteMode PaletteMode { - get => _button.PaletteMode; + get => button.PaletteMode; set { - if (_button.PaletteMode != value) + if (button.PaletteMode != value) { - _service.OnComponentChanged(_button, null, _button.PaletteMode, value); - _button.PaletteMode = value; + service.OnComponentChanged(button, null, button.PaletteMode, value); + button.PaletteMode = value; } } } @@ -142,10 +142,10 @@ public PaletteMode PaletteMode public override DesignerActionItemCollection GetSortedActionItems() { // Create a new collection for holding the single item we want to create - DesignerActionItemCollection actions = new DesignerActionItemCollection(); + var actions = new DesignerActionItemCollection(); // This can be null when deleting a control instance at design time - if (_button != null) + if (button != null) { // Add the list of button specific actions actions.Add(new DesignerActionHeaderItem("Appearance")); diff --git a/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonDesigner.cs b/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonDesigner.cs index 78ac338..e187d11 100644 --- a/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonDesigner.cs +++ b/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkButtonDesigner.cs @@ -9,13 +9,12 @@ internal class KryptonCommandLinkButtonDesigner : ControlDesigner /// /// Initialize a new instance of the KryptonButtonDesigner class. /// - public KryptonCommandLinkButtonDesigner() - { + public KryptonCommandLinkButtonDesigner() => // The resizing handles around the control need to change depending on the // value of the AutoSize and AutoSizeMode properties. When in AutoSize you // do not get the resizing handles, otherwise you do. AutoResizeHandles = true; - } + #endregion #region Public Overrides @@ -27,7 +26,7 @@ public override DesignerActionListCollection ActionLists get { // Create a collection of action lists - DesignerActionListCollection actionLists = new DesignerActionListCollection + var actionLists = new DesignerActionListCollection { // Add the button specific list new KryptonCommandLinkButtonActionList(this) diff --git a/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkVersion1.cs b/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkVersion1.cs index e072cbe..454553b 100644 --- a/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkVersion1.cs +++ b/Elucidate/Elucidate/ExtendedToolkit/KryptonCommandLinkVersion1.cs @@ -32,17 +32,17 @@ public class KryptonCommandLinkButton : VisualSimpleBase, IButtonControl { #region Instance Fields private readonly ViewDrawCommandLinkButton drawButton; - private ButtonStyle _style; - private readonly ButtonController _buttonController; - private VisualOrientation _orientation; - private readonly PaletteTripleOverride _overrideFocus; - private readonly PaletteTripleOverride _overrideNormal; - private readonly PaletteTripleOverride _overrideTracking; - private readonly PaletteTripleOverride _overridePressed; - private IKryptonCommand _command; - private bool _isDefault; - private bool _useMnemonic; - private bool _wasEnabled; + private ButtonStyle style; + private readonly ButtonController buttonController; + private VisualOrientation orientation; + private readonly PaletteTripleOverride overrideFocus; + private readonly PaletteTripleOverride overrideNormal; + private readonly PaletteTripleOverride overrideTracking; + private readonly PaletteTripleOverride overridePressed; + private IKryptonCommand command; + private bool isDefault; + private bool useMnemonic; + private bool wasEnabled; #endregion #region Events @@ -57,7 +57,7 @@ public class KryptonCommandLinkButton : VisualSimpleBase, IButtonControl #region Identity /// /// Initialize a new instance of the KryptonButton class. - /// + /// public KryptonCommandLinkButton() { // We generate click events manually, suppress default @@ -68,8 +68,8 @@ public KryptonCommandLinkButton() // Set default button properties base.AutoSize = false; DialogResult = DialogResult.None; - _orientation = VisualOrientation.Top; - _useMnemonic = true; + orientation = VisualOrientation.Top; + useMnemonic = true; // Create content storage CommandLinkImageValue = new ImageValue(NeedPaintDelegate); @@ -89,24 +89,29 @@ public KryptonCommandLinkButton() StateTracking = new PaletteTriple(StateCommon, NeedPaintDelegate); StatePressed = new PaletteTriple(StateCommon, NeedPaintDelegate); OverrideDefault = new PaletteTripleRedirect(Redirector, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, NeedPaintDelegate); - OverrideFocus = new PaletteTripleRedirect(Redirector, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, NeedPaintDelegate); - OverrideFocus.Border.Draw = InheritBool.True; - OverrideFocus.Border.DrawBorders = PaletteDrawBorders.All; - OverrideFocus.Border.GraphicsHint = PaletteGraphicsHint.AntiAlias; + OverrideFocus = new PaletteTripleRedirect(Redirector, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, NeedPaintDelegate) + { + Border = + { + Draw = InheritBool.True, + DrawBorders = PaletteDrawBorders.All, + GraphicsHint = PaletteGraphicsHint.AntiAlias + } + }; // Force style update ButtonStyle = ButtonStyle.Command; // Create the override handling classes - _overrideFocus = new PaletteTripleOverride(OverrideFocus, StateNormal, PaletteState.FocusOverride); - _overrideNormal = new PaletteTripleOverride(OverrideDefault, _overrideFocus, PaletteState.NormalDefaultOverride); - _overrideTracking = new PaletteTripleOverride(OverrideFocus, StateTracking, PaletteState.FocusOverride); - _overridePressed = new PaletteTripleOverride(OverrideFocus, StatePressed, PaletteState.FocusOverride); + overrideFocus = new PaletteTripleOverride(OverrideFocus, StateNormal, PaletteState.FocusOverride); + overrideNormal = new PaletteTripleOverride(OverrideDefault, overrideFocus, PaletteState.NormalDefaultOverride); + overrideTracking = new PaletteTripleOverride(OverrideFocus, StateTracking, PaletteState.FocusOverride); + overridePressed = new PaletteTripleOverride(OverrideFocus, StatePressed, PaletteState.FocusOverride); // Create the view button instance drawButton = new ViewDrawCommandLinkButton(StateDisabled, - _overrideNormal, - _overrideTracking, - _overridePressed, + overrideNormal, + overrideTracking, + overridePressed, new PaletteMetricRedirect(Redirector), CommandLinkImageValue, CommandLinkTextValues, Orientation, @@ -117,16 +122,16 @@ public KryptonCommandLinkButton() }; // Create a button controller to handle button style behaviour - _buttonController = new ButtonController(drawButton, NeedPaintDelegate); + buttonController = new ButtonController(drawButton, NeedPaintDelegate); // Assign the controller to the view element to treat as a button - drawButton.MouseController = _buttonController; - drawButton.KeyController = _buttonController; - drawButton.SourceController = _buttonController; + drawButton.MouseController = buttonController; + drawButton.KeyController = buttonController; + drawButton.SourceController = buttonController; // Need to know when user clicks the button view or mouse selects it - _buttonController.Click += OnButtonClick; - _buttonController.MouseSelect += OnButtonSelect; + buttonController.Click += OnButtonClick; + buttonController.MouseSelect += OnButtonSelect; // Create the view manager instance ViewManager = new ViewManager(this, drawButton); @@ -179,11 +184,9 @@ public override string Text set => CommandLinkTextValues.Heading = value; } - private bool ShouldSerializeText() - { + private static bool ShouldSerializeText() => // Never serialize, let the button values serialize instead - return false; - } + false; /// /// Resets the Text property to its default value. @@ -201,13 +204,13 @@ public override void ResetText() [DefaultValue(typeof(VisualOrientation), "Top")] public virtual VisualOrientation Orientation { - get => _orientation; + get => orientation; set { - if (_orientation != value) + if (orientation != value) { - _orientation = value; + orientation = value; // Update the associated visual elements that are effected drawButton.Orientation = value; @@ -224,23 +227,20 @@ public virtual VisualOrientation Orientation [Description("Button style.")] public ButtonStyle ButtonStyle { - get => _style; + get => style; set { - if (_style != value) + if (style != value) { - _style = value; - SetStyles(_style); + style = value; + SetStyles(style); PerformNeedPaint(true); } } } - private bool ShouldSerializeButtonStyle() - { - return (ButtonStyle != ButtonStyle.Command); - } + private bool ShouldSerializeButtonStyle() => (ButtonStyle != ButtonStyle.Command); private void ResetButtonStyle() { @@ -263,10 +263,7 @@ private void ResetButtonStyle() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ImageValue CommandLinkImageValue { get; } - private bool ShouldSerializeValues() - { - return false; - } + private static bool ShouldSerializeCommandLinkImageValue() => false; /// /// Gets access to the common button appearance that other states can override. @@ -276,10 +273,7 @@ private bool ShouldSerializeValues() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteTripleRedirect StateCommon { get; } - private bool ShouldSerializeStateCommon() - { - return !StateCommon.IsDefault; - } + private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; /// /// Gets access to the disabled button appearance entries. @@ -289,10 +283,7 @@ private bool ShouldSerializeStateCommon() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteTriple StateDisabled { get; } - private bool ShouldSerializeStateDisabled() - { - return !StateDisabled.IsDefault; - } + private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; /// /// Gets access to the normal button appearance entries. @@ -302,10 +293,7 @@ private bool ShouldSerializeStateDisabled() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteTriple StateNormal { get; } - private bool ShouldSerializeStateNormal() - { - return !StateNormal.IsDefault; - } + private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; /// /// Gets access to the hot tracking button appearance entries. @@ -315,10 +303,7 @@ private bool ShouldSerializeStateNormal() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteTriple StateTracking { get; } - private bool ShouldSerializeStateTracking() - { - return !StateTracking.IsDefault; - } + private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; /// /// Gets access to the pressed button appearance entries. @@ -328,10 +313,7 @@ private bool ShouldSerializeStateTracking() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteTriple StatePressed { get; } - private bool ShouldSerializeStatePressed() - { - return !StatePressed.IsDefault; - } + private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; /// /// Gets access to the normal button appearance when default. @@ -341,10 +323,7 @@ private bool ShouldSerializeStatePressed() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteTripleRedirect OverrideDefault { get; } - private bool ShouldSerializeOverrideDefault() - { - return !OverrideDefault.IsDefault; - } + private bool ShouldSerializeOverrideDefault() => !OverrideDefault.IsDefault; /// /// Gets access to the button appearance when it has focus. @@ -354,10 +333,7 @@ private bool ShouldSerializeOverrideDefault() [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteTripleRedirect OverrideFocus { get; } - private bool ShouldSerializeOverrideFocus() - { - return !OverrideFocus.IsDefault; - } + private bool ShouldSerializeOverrideFocus() => !OverrideFocus.IsDefault; /// /// Gets or sets the value returned to the parent form when the button is clicked. @@ -375,31 +351,31 @@ private bool ShouldSerializeOverrideFocus() [DefaultValue(null)] public virtual IKryptonCommand KryptonCommand { - get => _command; + get => command; set { - if (_command == value) + if (command == value) return; - if (_command != null) + if (command != null) { - _command.PropertyChanged -= OnCommandPropertyChanged; + command.PropertyChanged -= OnCommandPropertyChanged; } else { - _wasEnabled = Enabled; + wasEnabled = Enabled; } - _command = value; + command = value; OnKryptonCommandChanged(EventArgs.Empty); - if (_command != null) + if (command != null) { - _command.PropertyChanged += OnCommandPropertyChanged; + command.PropertyChanged += OnCommandPropertyChanged; } else { - Enabled = _wasEnabled; + Enabled = wasEnabled; } } } @@ -410,13 +386,13 @@ public virtual IKryptonCommand KryptonCommand /// true if the control should behave as a default button; otherwise false. public void NotifyDefault(bool value) { - if (!ViewDrawButton.IsFixed && (_isDefault != value)) + if (!ViewDrawButton.IsFixed && (isDefault != value)) { // Remember new default status - _isDefault = value; + isDefault = value; // Decide if the default overrides should be applied - _overrideNormal.Apply = value; + overrideNormal.Apply = value; // Change in default state requires a layout and repaint PerformNeedPaint(true); @@ -442,13 +418,13 @@ public void PerformClick() [DefaultValue(true)] public bool UseMnemonic { - get => _useMnemonic; + get => useMnemonic; set { - if (_useMnemonic != value) + if (useMnemonic != value) { - _useMnemonic = value; + useMnemonic = value; drawButton.UseMnemonic = value; PerformNeedPaint(true); } @@ -464,8 +440,8 @@ public virtual void SetFixedState(PaletteState state) if (state == PaletteState.NormalDefaultOverride) { // Setup the overrides correctly to match state - _overrideFocus.Apply = true; - _overrideNormal.Apply = true; + overrideFocus.Apply = true; + overrideNormal.Apply = true; // Must pass a proper drawing state to the view state = PaletteState.Normal; @@ -491,7 +467,7 @@ public virtual void SetFixedState(PaletteState state) /// /// Gets the default size of the control. /// - protected override Size DefaultSize => new Size(250, 55); + protected override Size DefaultSize => new (250, 55); /// /// Gets the default Input Method Editor (IME) mode supported by this control. @@ -520,9 +496,9 @@ protected override void OnGotFocus(EventArgs e) if (!ViewDrawButton.IsFixed) { // Apply the focus overrides - _overrideFocus.Apply = true; - _overrideTracking.Apply = true; - _overridePressed.Apply = true; + overrideFocus.Apply = true; + overrideTracking.Apply = true; + overridePressed.Apply = true; // Change in focus requires a repaint PerformNeedPaint(false); @@ -541,9 +517,9 @@ protected override void OnLostFocus(EventArgs e) if (!ViewDrawButton.IsFixed) { // Apply the focus overrides - _overrideFocus.Apply = false; - _overrideTracking.Apply = false; - _overridePressed.Apply = false; + overrideFocus.Apply = false; + overrideTracking.Apply = false; + overridePressed.Apply = false; // Change in focus requires a repaint PerformNeedPaint(false); @@ -604,7 +580,7 @@ protected override bool ProcessMnemonic(char charCode) /// protected override void ContextMenuClosed() { - _buttonController.RemoveFixed(); + buttonController.RemoveFixed(); } #endregion @@ -626,10 +602,7 @@ protected virtual void SetStyles(ButtonStyle buttonStyle) /// /// Set of button values. /// Delegate for notifying paint requests. - protected virtual ButtonValues CreateButtonValues(NeedPaintHandler needPaint) - { - return new ButtonValues(needPaint); - } + protected virtual ButtonValues CreateButtonValues(NeedPaintHandler needPaint) => new (needPaint); /// /// Raises the KryptonCommandChanged event. @@ -658,13 +631,13 @@ protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEv { switch (e.PropertyName) { - case "Enabled": + case @"Enabled": Enabled = KryptonCommand.Enabled; break; - case "Text": - case "ExtraText": - case "ImageSmall": - case "ImageTransparentColor": + case @"Text": + case @"ExtraText": + case @"ImageSmall": + case @"ImageTransparentColor": PerformNeedPaint(true); break; } diff --git a/Elucidate/Elucidate/ExtendedToolkit/ViewDrawCommandLinkButton.cs b/Elucidate/Elucidate/ExtendedToolkit/ViewDrawCommandLinkButton.cs index 581da11..0460771 100644 --- a/Elucidate/Elucidate/ExtendedToolkit/ViewDrawCommandLinkButton.cs +++ b/Elucidate/Elucidate/ExtendedToolkit/ViewDrawCommandLinkButton.cs @@ -15,18 +15,18 @@ public class ViewDrawCommandLinkButton : ViewComposite { #region Instance Fields - private IPaletteTriple _paletteDisabled; - private IPaletteTriple _paletteNormal; - private IPaletteTriple _paletteTracking; - private IPaletteTriple _palettePressed; - private IPaletteTriple _paletteCheckedNormal; - private IPaletteTriple _paletteCheckedTracking; - private IPaletteTriple _paletteCheckedPressed; - private readonly ViewDrawCanvas _drawCanvas; - private readonly ViewDrawContent _drawContent; - private readonly ViewDrawContent _drawImageContent; - private readonly ViewLayoutCenter _drawImage; - private bool _forcePaletteUpdate; + private IPaletteTriple paletteDisabled; + private IPaletteTriple paletteNormal; + private IPaletteTriple paletteTracking; + private IPaletteTriple palettePressed; + private IPaletteTriple paletteCheckedNormal; + private IPaletteTriple paletteCheckedTracking; + private IPaletteTriple paletteCheckedPressed; + private readonly ViewDrawCanvas drawCanvas; + private readonly ViewDrawContent drawContent; + private readonly ViewDrawContent drawImageContent; + private readonly ViewLayoutCenter drawImage; + private bool forcePaletteUpdate; #endregion #region Identity @@ -58,21 +58,21 @@ public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, } /// - /// Initialize a new instance of the ViewDrawButton class. - /// - /// Palette source for the disabled state. - /// Palette source for the normal state. - /// Palette source for the tracking state. - /// Palette source for the pressed state. + /// Initialize a new instance of the ViewDrawButton class. + /// + /// Palette source for the disabled state. + /// Palette source for the normal state. + /// Palette source for the tracking state. + /// Palette source for the pressed state. /// Palette source for the normal checked state. /// Palette source for the tracking checked state. /// Palette source for the pressed checked state. /// Palette source for metric values. /// /// - /// Visual orientation of the content. - /// Use mnemonics. - public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, + /// Visual orientation of the content. + /// Use mnemonics. + public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, IPaletteTriple paletteNormal, IPaletteTriple paletteTracking, IPaletteTriple palettePressed, @@ -85,26 +85,26 @@ public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, bool useMnemonic) { // Remember the source information - _paletteDisabled = paletteDisabled; - _paletteNormal = paletteNormal; - _paletteTracking = paletteTracking; - _palettePressed = palettePressed; - _paletteCheckedNormal = paletteCheckedNormal; - _paletteCheckedTracking = paletteCheckedTracking; - _paletteCheckedPressed = paletteCheckedPressed; - CurrentPalette = _paletteNormal; + this.paletteDisabled = paletteDisabled; + this.paletteNormal = paletteNormal; + this.paletteTracking = paletteTracking; + this.palettePressed = palettePressed; + this.paletteCheckedNormal = paletteCheckedNormal; + this.paletteCheckedTracking = paletteCheckedTracking; + this.paletteCheckedPressed = paletteCheckedPressed; + CurrentPalette = this.paletteNormal; // Default to not being checked Checked = false; AllowUncheck = true; // Create the drop down view - _drawImageContent = new ViewDrawContent(_paletteNormal.PaletteContent, imageValue, orientation); - _drawImage = new ViewLayoutCenter(paletteMetric, PaletteMetricPadding.BarPaddingOnly, - orientation, _drawImageContent); + drawImageContent = new ViewDrawContent(this.paletteNormal.PaletteContent, imageValue, orientation); + drawImage = new ViewLayoutCenter(paletteMetric, PaletteMetricPadding.BarPaddingOnly, + orientation, drawImageContent); // Our view contains background and border with content inside - _drawContent = new ViewDrawContent(_paletteNormal.PaletteContent, commandLinkTextValues, orientation) + drawContent = new ViewDrawContent(this.paletteNormal.PaletteContent, commandLinkTextValues, orientation) { // Pass the mnemonic default to the content view UseMnemonic = useMnemonic @@ -113,13 +113,13 @@ public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, // Use a docker layout to organize the contents of the canvas LayoutDocker = new ViewLayoutDocker { - { _drawContent, ViewDockStyle.Left }, - { _drawImage, ViewDockStyle.Left } + { drawContent, ViewDockStyle.Left }, + { drawImage, ViewDockStyle.Left } }; LayoutDocker.Tag = this; - _drawCanvas = new ViewDrawCanvas(_paletteNormal.PaletteBack, _paletteNormal.PaletteBorder, paletteMetric, + drawCanvas = new ViewDrawCanvas(this.paletteNormal.PaletteBack, this.paletteNormal.PaletteBorder, paletteMetric, PaletteMetricPadding.BarPaddingTabs, orientation) { // Place the content inside the canvas @@ -127,18 +127,17 @@ public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, }; // Place the canvas inside ourself - Add(_drawCanvas); + Add(drawCanvas); } /// /// Obtains the String representation of this instance. /// /// User readable name of the instance. - public override string ToString() - { + public override string ToString() => // Return the class name and instance identifier - return "ViewDrawButton:" + Id; - } + "ViewDrawButton:" + Id; + #endregion #region LayoutDocker @@ -163,8 +162,8 @@ public override string ToString() /// public IContentValues ButtonValues { - get => _drawContent.Values; - set => _drawContent.Values = value; + get => drawContent.Values; + set => drawContent.Values = value; } #endregion @@ -174,8 +173,8 @@ public IContentValues ButtonValues /// public bool DrawTabBorder { - get => _drawCanvas.DrawTabBorder; - set => _drawCanvas.DrawTabBorder = value; + get => drawCanvas.DrawTabBorder; + set => drawCanvas.DrawTabBorder = value; } #endregion @@ -185,16 +184,16 @@ public bool DrawTabBorder /// public TabBorderStyle TabBorderStyle { - get => _drawCanvas.TabBorderStyle; - set => _drawCanvas.TabBorderStyle = value; + get => drawCanvas.TabBorderStyle; + set => drawCanvas.TabBorderStyle = value; } #endregion #region Enabled /// - /// Gets and sets the enabled state of the element. - /// - public override bool Enabled + /// Gets and sets the enabled state of the element. + /// + public override bool Enabled { get => base.Enabled; @@ -208,9 +207,9 @@ public override bool Enabled } // Pass on the new state to the child elements - _drawCanvas.Enabled = value; - _drawContent.Enabled = value; - _drawImageContent.Enabled = value; + drawCanvas.Enabled = value; + drawContent.Enabled = value; + drawImageContent.Enabled = value; } } #endregion @@ -221,7 +220,7 @@ public override bool Enabled /// public virtual VisualOrientation Orientation { - get => _drawCanvas.Orientation; + get => drawCanvas.Orientation; set => SetOrientation(value, value); } @@ -233,8 +232,8 @@ public virtual VisualOrientation Orientation public void SetOrientation(VisualOrientation borderBackOrient, VisualOrientation contentOrient) { - _drawCanvas.Orientation = borderBackOrient; - _drawContent.Orientation = contentOrient; + drawCanvas.Orientation = borderBackOrient; + drawContent.Orientation = contentOrient; } #endregion @@ -244,8 +243,8 @@ public void SetOrientation(VisualOrientation borderBackOrient, /// public bool UseMnemonic { - get => _drawContent.UseMnemonic; - set => _drawContent.UseMnemonic = value; + get => drawContent.UseMnemonic; + set => drawContent.UseMnemonic = value; } #endregion @@ -271,8 +270,8 @@ public bool UseMnemonic /// public bool DrawButtonComposition { - get => _drawCanvas.DrawCanvasOnComposition; - set => _drawCanvas.DrawCanvasOnComposition = value; + get => drawCanvas.DrawCanvasOnComposition; + set => drawCanvas.DrawCanvasOnComposition = value; } #endregion @@ -282,8 +281,8 @@ public bool DrawButtonComposition /// public bool TestForFocusCues { - get => _drawContent.TestForFocusCues; - set => _drawContent.TestForFocusCues = value; + get => drawContent.TestForFocusCues; + set => drawContent.TestForFocusCues = value; } #endregion @@ -306,13 +305,13 @@ public void SetPalettes(IPaletteTriple paletteDisabled, Debug.Assert(palettePressed != null); // Remember the new palette settings - _paletteDisabled = paletteDisabled; - _paletteNormal = paletteNormal; - _paletteTracking = paletteTracking; - _palettePressed = palettePressed; + this.paletteDisabled = paletteDisabled; + this.paletteNormal = paletteNormal; + this.paletteTracking = paletteTracking; + this.palettePressed = palettePressed; // Must force update of palettes to use latest ones provided - _forcePaletteUpdate = true; + forcePaletteUpdate = true; } /// @@ -330,12 +329,12 @@ public void SetCheckedPalettes(IPaletteTriple paletteCheckedNormal, Debug.Assert(paletteCheckedPressed != null); // Remember the new palette settings - _paletteCheckedNormal = paletteCheckedNormal; - _paletteCheckedTracking = paletteCheckedTracking; - _paletteCheckedPressed = paletteCheckedPressed; + this.paletteCheckedNormal = paletteCheckedNormal; + this.paletteCheckedTracking = paletteCheckedTracking; + this.paletteCheckedPressed = paletteCheckedPressed; // Must force update of palettes to use latest ones provided - _forcePaletteUpdate = true; + forcePaletteUpdate = true; } #endregion @@ -353,25 +352,25 @@ public override bool EvalTransparentPaint(ViewContext context) CheckPaletteState(context); // Ask the renderer to evaluate the given palette - return _drawCanvas.EvalTransparentPaint(context); + return drawCanvas.EvalTransparentPaint(context); } #endregion #region Layout /// - /// Discover the preferred size of the element. - /// - /// Layout context. - public override Size GetPreferredSize(ViewLayoutContext context) + /// Discover the preferred size of the element. + /// + /// Layout context. + public override Size GetPreferredSize(ViewLayoutContext context) { Debug.Assert(context != null); - Debug.Assert(_drawCanvas != null); + Debug.Assert(drawCanvas != null); // Ensure that child elements have correct palette state CheckPaletteState(context); // Delegate work to the child canvas - return _drawCanvas.GetPreferredSize(context); + return drawCanvas.GetPreferredSize(context); } /// @@ -442,18 +441,13 @@ protected virtual void CheckPaletteState(ViewContext context) if (AllowUncheck) { // Show feedback on tracking and pressed - switch (buttonState) - { - case PaletteState.Normal: - buttonState = PaletteState.CheckedNormal; - break; - case PaletteState.Tracking: - buttonState = PaletteState.CheckedTracking; - break; - case PaletteState.Pressed: - buttonState = PaletteState.CheckedPressed; - break; - } + buttonState = buttonState switch + { + PaletteState.Normal => PaletteState.CheckedNormal, + PaletteState.Tracking => PaletteState.CheckedTracking, + PaletteState.Pressed => PaletteState.CheckedPressed, + _ => buttonState + }; } else { @@ -463,39 +457,39 @@ protected virtual void CheckPaletteState(ViewContext context) } // If the child elements are not in correct state - if (_forcePaletteUpdate || (_drawCanvas.ElementState != buttonState)) + if (forcePaletteUpdate || (drawCanvas.ElementState != buttonState)) { // No longer need to force the palettes to be updated - _forcePaletteUpdate = false; + forcePaletteUpdate = false; // Switch the child elements over to correct state - _drawCanvas.ElementState = buttonState; - _drawContent.ElementState = buttonState; - _drawImageContent.ElementState = buttonState; + drawCanvas.ElementState = buttonState; + drawContent.ElementState = buttonState; + drawImageContent.ElementState = buttonState; // Push the correct palettes into them switch (buttonState) { case PaletteState.Disabled: - CurrentPalette = _paletteDisabled; + CurrentPalette = paletteDisabled; break; case PaletteState.Normal: - CurrentPalette = _paletteNormal; + CurrentPalette = paletteNormal; break; case PaletteState.CheckedNormal: - CurrentPalette = _paletteCheckedNormal; + CurrentPalette = paletteCheckedNormal; break; case PaletteState.Pressed: - CurrentPalette = _palettePressed; + CurrentPalette = palettePressed; break; case PaletteState.CheckedPressed: - CurrentPalette = _paletteCheckedPressed; + CurrentPalette = paletteCheckedPressed; break; case PaletteState.Tracking: - CurrentPalette = _paletteTracking; + CurrentPalette = paletteTracking; break; case PaletteState.CheckedTracking: - CurrentPalette = _paletteCheckedTracking; + CurrentPalette = paletteCheckedTracking; break; default: // Should never happen! @@ -504,8 +498,8 @@ protected virtual void CheckPaletteState(ViewContext context) } // Update with the correct palettes - _drawCanvas.SetPalettes(CurrentPalette.PaletteBack, CurrentPalette.PaletteBorder); - _drawContent.SetPalette(CurrentPalette.PaletteContent); + drawCanvas.SetPalettes(CurrentPalette.PaletteBack, CurrentPalette.PaletteBorder); + drawContent.SetPalette(CurrentPalette.PaletteContent); //_drawImageContent.SetPalette(CurrentPalette.PaletteContent); } } diff --git a/Elucidate/Elucidate/Forms/CalculateBlockSize.cs b/Elucidate/Elucidate/Forms/CalculateBlockSize.cs index 2bc6fe8..7afad5f 100644 --- a/Elucidate/Elucidate/Forms/CalculateBlockSize.cs +++ b/Elucidate/Elucidate/Forms/CalculateBlockSize.cs @@ -46,9 +46,9 @@ public CalculateBlockSize() { ParityTargets = new List(2); InitializeComponent(); - ulong available = new ComputerInfo().TotalPhysicalMemory; - const decimal TEST_VALUE = 1UL << 30; // Should be 1 GBytes - numericUpDown1.Value = (available / TEST_VALUE) - 2; // remove some to allow for the OS + var available = new ComputerInfo().TotalPhysicalMemory; + const decimal testValue = 1UL << 30; // Should be 1 GBytes + numericUpDown1.Value = (available / testValue) - 2; // remove some to allow for the OS } private void btnCoverage_Click(object sender, EventArgs e) @@ -60,7 +60,7 @@ private void btnCoverage_Click(object sender, EventArgs e) { ulong min = 0; ulong max = 0; - foreach (string path in SnapShotSources) + foreach (var path in SnapShotSources) { FindAndAddDisplaySizes(path, ref min, ref max); } @@ -107,7 +107,7 @@ private static string FindNextPow2(ulong val) private static void FindAndAddDisplaySizes(string path, ref ulong min, ref ulong max) { // ReSharper disable once UnusedVariable - Util.SourcePathFreeBytesAvailable(path, out ulong freeBytesAvailable, out ulong pathUsedBytes, out ulong rootBytesNotCoveredByPath); + Util.SourcePathFreeBytesAvailable(path, out var freeBytesAvailable, out var pathUsedBytes, out var rootBytesNotCoveredByPath); min += pathUsedBytes; max += pathUsedBytes; @@ -136,12 +136,12 @@ private void btnFileCount_Click(object sender, EventArgs e) // 1st get the Minimum space that could be used for the Parity (Ignore the existing parity) // For each parity target find min space after ignoring "existing" parity file - ulong maxParitySizeAvailable = ulong.MaxValue; - foreach (string parityTarget in ParityTargets) + var maxParitySizeAvailable = ulong.MaxValue; + foreach (var parityTarget in ParityTargets) { - string parityTargetDriveRoot = Directory.GetDirectoryRoot(parityTarget); + var parityTargetDriveRoot = Directory.GetDirectoryRoot(parityTarget); Util.SourcePathFreeBytesAvailable(parityTargetDriveRoot, out freeBytesAvailable, out pathUsedBytes, out rootBytesNotCoveredByPath); - ulong currentTarget = freeBytesAvailable + pathUsedBytes; + var currentTarget = freeBytesAvailable + pathUsedBytes; if (maxParitySizeAvailable > currentTarget) { maxParitySizeAvailable = currentTarget; @@ -158,7 +158,7 @@ private void btnFileCount_Click(object sender, EventArgs e) // Set Max value to the max of those // 4 - Find the Max covered, ulong maxProjectedSource = 0; - foreach (string path in SnapShotSources) + foreach (var path in SnapShotSources) { Util.SourcePathFreeBytesAvailable( path, @@ -166,7 +166,7 @@ private void btnFileCount_Click(object sender, EventArgs e) out pathUsedBytes, out rootBytesNotCoveredByPath); - ulong currentSource = freeBytesAvailable + pathUsedBytes; + var currentSource = freeBytesAvailable + pathUsedBytes; if (maxProjectedSource < currentSource) { @@ -177,8 +177,8 @@ private void btnFileCount_Click(object sender, EventArgs e) // 5 - Make sure that Parity has enough room times the number of max files, // and add onto the left over space to find the min and max values. - ulong minParityNeeded = maxProjectedSource + (minFiles * ulong.Parse(txtBlockSizeByCoverageMin.Text)) / 2; - ulong maxParityNeeded = maxProjectedSource + (maxFiles * ulong.Parse(txtBlockSizeByCoverageMax.Text)) / 2; + var minParityNeeded = maxProjectedSource + (minFiles * ulong.Parse(txtBlockSizeByCoverageMin.Text)) / 2; + var maxParityNeeded = maxProjectedSource + (maxFiles * ulong.Parse(txtBlockSizeByCoverageMax.Text)) / 2; if (maxParityNeeded > maxParitySizeAvailable) { lblBadNews.Text = diff --git a/Elucidate/Elucidate/Forms/ElucidateForm.cs b/Elucidate/Elucidate/Forms/ElucidateForm.cs index 61c7a4b..14094ee 100644 --- a/Elucidate/Elucidate/Forms/ElucidateForm.cs +++ b/Elucidate/Elucidate/Forms/ElucidateForm.cs @@ -35,7 +35,6 @@ using System.Windows.Forms; using Elucidate.Forms; -using Elucidate.Shared; using Krypton.Navigator; using Krypton.Toolkit; @@ -49,8 +48,8 @@ public sealed partial class ElucidateForm : KryptonForm { private static readonly Logger Log = LogManager.GetCurrentClassLogger(); - private readonly ConfigFileHelper srConfig = new ConfigFileHelper(); - private readonly LiveLog liveLog = new LiveLog(); + private readonly ConfigFileHelper srConfig = new (); + private readonly LiveLog liveLog = new (); public ElucidateForm() { @@ -93,7 +92,7 @@ private void ElucidateForm_Load(object sender, EventArgs e) private void ElucidateForm_Shown(object sender, EventArgs e) { - string[] args = Environment.GetCommandLineArgs().Skip(1).ToArray(); + var args = Environment.GetCommandLineArgs().Skip(1).ToArray(); if (args.Contains(@"-H") || args.Contains(@"--help") ) @@ -109,7 +108,7 @@ private void ElucidateForm_Shown(object sender, EventArgs e) // display any warnings from the config validation if (srConfig.HasWarnings) { - MessageBoxExt.Show( + KryptonMessageBox.Show( this, $"There are warnings for the configuration file:{Environment.NewLine} - {string.Join(" - ", srConfig.ConfigWarnings)}", "Configuration File Warnings", @@ -132,7 +131,7 @@ private void EditSnapRAIDConfigToolStripMenuItem_Click(object sender, EventArgs return; } - using (Settings settingsForm = new Settings()) + using (var settingsForm = new Settings()) { settingsForm.ShowDialog(this); } @@ -143,9 +142,7 @@ private void EditSnapRAIDConfigToolStripMenuItem_Click(object sender, EventArgs private void deleteAllSnapRAIDRaidFilesToolStripMenuItem_Click(object sender, EventArgs e) { Log.Info(@"Generate list of file for MessageBiox and deletion code"); - List parityFiles = new List(); - - List contentFiles = new List(); + var parityFiles = new List(); if (!string.IsNullOrWhiteSpace(srConfig.ParityFile1)) { @@ -182,12 +179,8 @@ private void deleteAllSnapRAIDRaidFilesToolStripMenuItem_Click(object sender, Ev parityFiles.Add(srConfig.ParityFile6); } - foreach (string file in srConfig.ContentFiles) - { - contentFiles.Add(file); - } - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(@"Are you sure you want to remove the files below?"); @@ -195,12 +188,13 @@ private void deleteAllSnapRAIDRaidFilesToolStripMenuItem_Click(object sender, Ev sb.AppendLine(); - foreach (string file in parityFiles) + foreach (var file in parityFiles) { sb.AppendLine($@"Parity File: {file}"); } - foreach (string file in contentFiles) + var contentFiles = srConfig.ContentFiles.ToList(); + foreach (var file in contentFiles) { sb.AppendLine($@"Content File: {file}"); } @@ -216,17 +210,17 @@ private void deleteAllSnapRAIDRaidFilesToolStripMenuItem_Click(object sender, Ev { try { - foreach (string file in parityFiles) + foreach (var file in parityFiles) { File.Delete(file); } - foreach (string file in contentFiles) + foreach (var file in contentFiles) { File.Delete(file); } - MessageBoxExt.Show(this, @"The SnapRAID files have been removed", @"Files Removed"); + KryptonMessageBox.Show(this, @"The SnapRAID files have been removed", @"Files Removed"); } catch (Exception ex) { @@ -252,7 +246,7 @@ private void editConfigDirectlyToolStripMenuItem_Click(object sender, EventArgs SystemSounds.Beep.Play(); return; } - using (Process process = new Process + using (var process = new Process { StartInfo = new ProcessStartInfo(@"Wordpad.exe", Properties.Settings.Default.ConfigFileLocation) }) @@ -285,7 +279,7 @@ private void LoadConfigFile(bool launchEditSnapRAID = true) srConfig.LoadConfigFile(Properties.Settings.Default.ConfigFileLocation); Properties.Settings.Default.ConfigFileIsValid = srConfig.IsValid; - bool exists = File.Exists(Properties.Settings.Default.SnapRAIDFileLocation); + var exists = File.Exists(Properties.Settings.Default.SnapRAIDFileLocation); commonTab.SetCommonButtonsEnabledState(srConfig.IsValid && exists); @@ -316,7 +310,7 @@ private void LoadConfigFile(bool launchEditSnapRAID = true) private void SetElucidateFormTitle(string filePath) { - string newTitle = "Elucidate"; + var newTitle = "Elucidate"; if (!string.IsNullOrEmpty(filePath)) { @@ -336,7 +330,7 @@ private void ElucidateForm_FormClosing(object sender, FormClosingEventArgs e) private void tabControl_SelectedPageChanged(object sender, EventArgs e) { - Log.Trace("tabControl_SelectedPageChanged - IN"); + Log.Trace(@"tabControl_SelectedPageChanged - IN"); KryptonPage currentTab = tabControl.SelectedPage; tpCoverage.StopProcessing(); @@ -360,7 +354,7 @@ private void tabControl_SelectedPageChanged(object sender, EventArgs e) { // tabCoveragePage.Reset(); } - Log.Trace("tabControl_SelectedPageChanged - OUT"); + Log.Trace(@"tabControl_SelectedPageChanged - OUT"); } private void themeComboBox_SelectedIndexChanged(object sender, EventArgs e) diff --git a/Elucidate/Elucidate/Forms/Settings.cs b/Elucidate/Elucidate/Forms/Settings.cs index 5dfe3bf..2f06656 100644 --- a/Elucidate/Elucidate/Forms/Settings.cs +++ b/Elucidate/Elucidate/Forms/Settings.cs @@ -47,10 +47,10 @@ public partial class Settings : KryptonForm private static readonly Logger Log = LogManager.GetCurrentClassLogger(); private bool unsavedChangesMade; - private IOrderedEnumerable parityTextBoxes; - private List parityTextBoxesList; + private readonly IOrderedEnumerable parityTextBoxes; + private readonly List parityTextBoxesList; - private ConfigFileHelper cfg = new ConfigFileHelper(); + private ConfigFileHelper cfg = new(); private bool initializing = true; @@ -64,7 +64,7 @@ private bool UnsavedChangesMade } } - private readonly BindingList advSettingsList = new BindingList(); + private readonly BindingList advSettingsList = new(); private int ttIndex; @@ -86,22 +86,22 @@ public Settings() IncludePatterns = new List(); // Add some items to the data source. - advSettingsList.Add(new AdvancedSettingsHelper("Display Output", Properties.Settings.Default.IsDisplayOutputEnabled, "Command output is displayed when enabled.")); - advSettingsList.Add(new AdvancedSettingsHelper("Verbose Output", Properties.Settings.Default.UseVerboseMode, "Displays more information while processing.")); - advSettingsList.Add(new AdvancedSettingsHelper("Find-By-Name in Sync", Properties.Settings.Default.FindByNameInSync, "Allow to sync using only the file path and not the inode (i.e. source drive / directory),but the files themselves are the same (path/filename, size, ctime), and you do not want to waste time resyncing the files.\nThis option is also used after you have lost a drive, restored the files to a new drive, and you want to do a fast sync.\n\"Forced dangerous operation\" of synching a rewritten disk.")); - advSettingsList.Add(new AdvancedSettingsHelper("Hidden files excluded", Properties.Settings.Default.HiddenFilesExcluded, "Option to exclude \"hidden\" files and directories.\nIn Windows files with the HIDDEN attributes, in Unix files starting with \'.\'.")); - advSettingsList.Add(new AdvancedSettingsHelper("Debug Log Output", Properties.Settings.Default.DebugLoggingEnabled, "Option to include debug log output for troubleshooting Elucidate.")); + advSettingsList.Add(new AdvancedSettingsHelper(@"Display Output", Properties.Settings.Default.IsDisplayOutputEnabled, "Command output is displayed when enabled.")); + advSettingsList.Add(new AdvancedSettingsHelper(@"Verbose Output", Properties.Settings.Default.UseVerboseMode, "Displays more information while processing.")); + advSettingsList.Add(new AdvancedSettingsHelper(@"Find-By-Name in Sync", Properties.Settings.Default.FindByNameInSync, "Allow to sync using only the file path and not the inode (i.e. source drive / directory), but the files themselves are the same (path/filename, size, ctime), and you do not want to waste time resyncing the files.\nThis option is also used after you have lost a drive, restored the files to a new drive, and you want to do a fast sync.\n\"Forced dangerous operation\" of synching a rewritten disk.")); + advSettingsList.Add(new AdvancedSettingsHelper(@"Hidden files excluded", Properties.Settings.Default.HiddenFilesExcluded, "Option to exclude \"hidden\" files and directories.\nIn Windows files with the HIDDEN attributes, in Unix files starting with \'.\'.")); + advSettingsList.Add(new AdvancedSettingsHelper(@"Debug Log Output", Properties.Settings.Default.DebugLoggingEnabled, "Option to include debug log output for troubleshooting Elucidate.")); // Binding 'trick'. checkedListBox1.ListBox.DataSource = advSettingsList; checkedListBox1.ListBox.DisplayMember = "DisplayName"; - int offset = 0; + var offset = 0; foreach (AdvancedSettingsHelper helper in advSettingsList) { checkedListBox1.SetItemCheckState(offset++, helper.CheckState ? CheckState.Checked : CheckState.Unchecked); } - parityTextBoxesList = (parityTextBoxes = grpParityLocations.Panel.Controls.OfType().OrderBy(c => c.TabIndex)).ToList(); + parityTextBoxesList = (parityTextBoxes = grpParityLocations.Panel.Controls.OfType().OrderBy(static c => c.TabIndex)).ToList(); labelParity3_CheckedChanged(this, EventArgs.Empty); } @@ -140,16 +140,16 @@ private void StartTree() UseWaitCursor = true; driveAndDirTreeView.Nodes.Clear(); - Log.Debug("Create the root node."); - TreeNode tvwRoot = new TreeNode { Text = Environment.MachineName, ImageIndex = 0 }; + Log.Debug(@"Create the root node."); + var tvwRoot = new TreeNode { Text = Environment.MachineName, ImageIndex = 0 }; tvwRoot.SelectedImageIndex = tvwRoot.ImageIndex; driveAndDirTreeView.Nodes.Add(tvwRoot); - Log.Debug("Now we need to add any children to the root node."); + Log.Debug(@"Now we need to add any children to the root node."); - Log.Debug("Start with drives if you have to search the entire computer."); + Log.Debug(@"Start with drives if you have to search the entire computer."); // retrieve all storage devices - List storageDevices = StorageUtil.GetStorageDevices(); + var storageDevices = StorageUtil.GetStorageDevices(); foreach (StorageDevice storageDevice in storageDevices) { FillInStorageDeviceDirectoryType(tvwRoot, storageDevice); @@ -168,14 +168,14 @@ private void StartTree() } } - private void FillInStorageDeviceDirectoryType(TreeNode parentNode, StorageDevice storageDevice) + private static void FillInStorageDeviceDirectoryType(TreeNode parentNode, StorageDevice storageDevice) { if (storageDevice == null) { return; } - TreeNode thisNode = new TreeNode + var thisNode = new TreeNode { Text = storageDevice.Caption, Tag = new DirectoryInfo(storageDevice.Caption) @@ -226,7 +226,7 @@ private void driveAndDirTreeView_MouseUp(object sender, MouseEventArgs e) return; } - Log.Trace("Select the clicked node"); + Log.Trace(@"Select the clicked node"); driveAndDirTreeView.SelectedNode = driveAndDirTreeView.GetNodeAt(e.X, e.Y); } @@ -238,7 +238,7 @@ private void driveAndDirTreeView_MouseDoubleClick(object sender, MouseEventArgs return; } - Log.Trace("Select the clicked node"); + Log.Trace(@"Select the clicked node"); TreeNode selected = driveAndDirTreeView.GetNodeAt(e.X, e.Y); @@ -250,22 +250,20 @@ private void driveAndDirTreeView_MouseDoubleClick(object sender, MouseEventArgs } } - private string GetSelectedNodesPath(TreeNode selected) + private static string GetSelectedNodesPath(TreeNode selected) { - DirectoryInfo shNode = selected.Tag as DirectoryInfo; + Log.Trace(@"Now we need to add any children to the root node."); - Log.Trace("Now we need to add any children to the root node."); - - string newPath = shNode != null ? shNode.FullName : selected.FullPath; + var newPath = selected.Tag is DirectoryInfo shNode ? shNode.FullName : selected.FullPath; return newPath; } private void PerformSnapShotSourceAddNode(TreeNode selected) { - string newPath = GetSelectedNodesPath(selected); + var newPath = GetSelectedNodesPath(selected); - string newDevice = StorageUtil.GetPathRoot(newPath); + var newDevice = StorageUtil.GetPathRoot(newPath); if (string.IsNullOrWhiteSpace(newPath)) { @@ -275,7 +273,7 @@ private void PerformSnapShotSourceAddNode(TreeNode selected) if (!Directory.Exists(newPath)) { Log.Warn($"Data source not added. Path does not exist. Attempted to add [{newPath}]"); - MessageBoxExt.Show(this, + KryptonMessageBox.Show(this, $"Path does not exist.\nAttempted to add:\n [{newPath}]", "Source not added", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; @@ -286,7 +284,7 @@ private void PerformSnapShotSourceAddNode(TreeNode selected) { if (row.Tag is CoveragePath coveragePath) { - string nodeDevice = StorageUtil.GetPathRoot(coveragePath.FullPath); + var nodeDevice = StorageUtil.GetPathRoot(coveragePath.FullPath); Log.Trace($"adding new node, so compare, nodeDevice = {nodeDevice}"); @@ -296,7 +294,7 @@ private void PerformSnapShotSourceAddNode(TreeNode selected) Log.Warn( $"Data source not added. The path is on a device for an existing path. Attempted to add [{newPath}] which is on the same device as the existing path [{coveragePath.FullPath}]"); - MessageBoxExt.Show(this, + KryptonMessageBox.Show(this, $"Attempted to add:\n [{newPath}]\n\nWhich is on the same device as the existing device path:\n [{coveragePath.FullPath}]", "Source not added", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); @@ -334,7 +332,7 @@ private void driveAndDirTreeView_BeforeExpand(object sender, TreeViewCancelEvent { try { - Log.Trace("Remove the placeholder node."); + Log.Trace(@"Remove the placeholder node."); if (e.Node.Tag is DirectoryInfo) { @@ -349,18 +347,21 @@ private void driveAndDirTreeView_BeforeExpand(object sender, TreeViewCancelEvent } } - private void WalkNextTreeLevel(TreeNode parentNode) + private static void WalkNextTreeLevel(TreeNode parentNode) { try { - if (!(parentNode.Tag is DirectoryInfo root)) + if (parentNode.Tag is not DirectoryInfo root) { return; } - Log.Trace("// Find all the subdirectories under this directory."); + Log.Trace(@"// Find all the subdirectories under this directory."); - DirectoryInfo[] subDirs = root.GetDirectories().Where(dir => (dir.Attributes & FileAttributes.System) == 0 && (dir.Attributes & FileAttributes.Hidden) == 0).ToArray(); + var subDirs = root.GetDirectories() + .Where(static dir => (dir.Attributes & FileAttributes.System) == 0 + && (dir.Attributes & FileAttributes.Hidden) == 0) + .ToArray(); if (!subDirs.Any()) { @@ -371,7 +372,7 @@ private void WalkNextTreeLevel(TreeNode parentNode) { // Recursive call for each subdirectory. - TreeNode tvwChild = new TreeNode + var tvwChild = new TreeNode { Text = dirInfo.Name, SelectedImageIndex = 8, @@ -379,11 +380,14 @@ private void WalkNextTreeLevel(TreeNode parentNode) Tag = dirInfo }; - Log.Trace("If this is a folder item and has children then add a place holder node."); + Log.Trace(@"If this is a folder item and has children then add a place holder node."); try { - DirectoryInfo[] subChildDirs = dirInfo.GetDirectories().Where(dir => (dir.Attributes & FileAttributes.System) == 0 && (dir.Attributes & FileAttributes.Hidden) == 0).ToArray(); + var subChildDirs = dirInfo.GetDirectories() + .Where(static dir => (dir.Attributes & FileAttributes.System) == 0 + && (dir.Attributes & FileAttributes.Hidden) == 0) + .ToArray(); if (subChildDirs.Any()) { @@ -392,7 +396,7 @@ private void WalkNextTreeLevel(TreeNode parentNode) } catch (UnauthorizedAccessException uaex) { - Log.Info(string.Concat("No Access to subdirs in ", tvwChild.Text), uaex); + Log.Info(uaex, @"No Access to subdirs in [{0}]", tvwChild.Text); } parentNode.Nodes.Add(tvwChild); @@ -490,7 +494,7 @@ private void snapShotSourcesTreeView_DragDrop(object sender, DragEventArgs e) private void DRUnit_NewNode_MenuItem_Click(object sender, EventArgs e) { - FolderSelectDialog fsd = new FolderSelectDialog + var fsd = new FolderSelectDialog { Title = @"Select the Target Directory" }; @@ -500,9 +504,9 @@ private void DRUnit_NewNode_MenuItem_Click(object sender, EventArgs e) return; } - DirectoryInfo dirInfo = new DirectoryInfo(fsd.FileName); + var dirInfo = new DirectoryInfo(fsd.FileName); - TreeNode tvwChild = new TreeNode + var tvwChild = new TreeNode { Text = dirInfo.Name, SelectedImageIndex = 8, @@ -549,7 +553,7 @@ private void DriveGridOnCellEndEdit(object sender, DataGridViewCellEventArgs e) } DataGridViewRow selected = snapShotSources.driveGrid.Rows[e.RowIndex]; CoveragePath coveragePath = selected.Tag as CoveragePath; - string value = (string)selected.Cells[1].Value; + var value = (string)selected.Cells[1].Value; if (coveragePath.Name != value) { coveragePath.Name = value; @@ -568,7 +572,7 @@ private bool ValidateFormData() return true; } - bool isValid = true; + var isValid = true; if (!File.Exists(snapRAIDFileLocation.Text)) { @@ -595,13 +599,13 @@ private bool ValidateFormData() errorProvider1.SetError(snapShotSources, "No protected regions set!"); } - List deviceList = new List(); + var deviceList = new List(); foreach (DataGridViewRow row in snapShotSources.driveGrid.Rows) { if (row.Tag is CoveragePath coveragePath) { - string errMsg = string.Empty; + var errMsg = string.Empty; // test if device already exists in list; SnapRAID only permits one device entry per device if (deviceList.Contains(StorageUtil.GetPathRoot(coveragePath.FullPath))) @@ -632,23 +636,19 @@ private bool ValidateFormData() private void findExeFile_Click(object sender, EventArgs e) { - using (OpenFileDialog ofd = new OpenFileDialog()) + using var ofd = new OpenFileDialog() { - ofd.InitialDirectory = Path.GetFullPath(snapRAIDFileLocation.Text); - - Log.Info(@"snapRAIDFileLocation from [{0}]", ofd.InitialDirectory); - - ofd.Filter = @"Snap Raid application|SnapRAID.exe"; - - ofd.CheckFileExists = true; - - ofd.RestoreDirectory = true; + InitialDirectory = Path.GetFullPath(snapRAIDFileLocation.Text), + Filter = @"Snap Raid application|SnapRAID.exe", + CheckFileExists = true, + RestoreDirectory = true + }; + Log.Info(@"snapRAIDFileLocation from [{0}]", ofd.InitialDirectory); - if (DialogResult.OK == ofd.ShowDialog()) - { - snapRAIDFileLocation.Text = Path.GetFullPath(ofd.FileName); - UnsavedChangesMade = true; - } + if (DialogResult.OK == ofd.ShowDialog()) + { + snapRAIDFileLocation.Text = Path.GetFullPath(ofd.FileName); + UnsavedChangesMade = true; } } @@ -661,22 +661,18 @@ private void snapRAIDFileLocation_TextChanged(object sender, EventArgs e) private void findConfigFile_Click(object sender, EventArgs e) { - using (OpenFileDialog ofd = new OpenFileDialog()) + using var ofd = new OpenFileDialog() { - ofd.InitialDirectory = Path.GetFullPath(configFileLocation.Text); - - Log.Trace(@"configFileLocation from [{0}]", ofd.InitialDirectory); - - ofd.Filter = @"Snap Raid Config|*.conf*|All Files|*.*"; - - ofd.CheckFileExists = true; - - ofd.RestoreDirectory = true; + InitialDirectory = Path.GetFullPath(configFileLocation.Text), + Filter = @"Snap Raid Config|*.conf*|All Files|*.*", + CheckFileExists = true, + RestoreDirectory = true + }; + Log.Trace(@"configFileLocation from [{0}]", ofd.InitialDirectory); - if (DialogResult.OK == ofd.ShowDialog()) - { - configFileLocation.Text = Path.GetFullPath(ofd.FileName); - } + if (DialogResult.OK == ofd.ShowDialog()) + { + configFileLocation.Text = Path.GetFullPath(ofd.FileName); } } @@ -728,10 +724,10 @@ private void ReadConfigDetails(string fileToLoad) { if (!cfg.Read()) { - MessageBoxExt.Show( + KryptonMessageBox.Show( this, - "Failed to read the config file.", - "Config Read Error:", + @"Failed to read the config file.", + @"Config Read Error:", MessageBoxButtons.OK, MessageBoxIcon.Error); return; @@ -747,7 +743,7 @@ private void ReadConfigDetails(string fileToLoad) numAutoSaveGB.Value = cfg.AutoSaveGB; - foreach (string excludePattern in cfg.ExcludePatterns.Where(excludePattern => !string.IsNullOrWhiteSpace(excludePattern))) + foreach (var excludePattern in cfg.ExcludePatterns.Where(static excludePattern => !string.IsNullOrWhiteSpace(excludePattern))) { exludedFilesView.Rows.Add(excludePattern); } @@ -787,7 +783,7 @@ private void btnSave_Click(object sender, EventArgs e) { if (errorProvider1.GetErrorCount() > 0) { - MessageBoxExt.Show( + KryptonMessageBox.Show( this, @"Configuration errors still exist.", "Unable to save configuration", @@ -796,7 +792,7 @@ private void btnSave_Click(object sender, EventArgs e) return; } - ConfigFileHelper cfgToSave = new ConfigFileHelper() + var cfgToSave = new ConfigFileHelper() { IncludePatterns = IncludePatterns, BlockSizeKB = (uint)numBlockSizeKB.Value, @@ -804,9 +800,9 @@ private void btnSave_Click(object sender, EventArgs e) AutoSaveGB = (uint)numAutoSaveGB.Value }; - foreach (string value in exludedFilesView.Rows.Cast() - .Select(row => $"{row.Cells[0].Value}") - .Where(value => !string.IsNullOrWhiteSpace(value)) + foreach (var value in exludedFilesView.Rows.Cast() + .Select(static row => $"{row.Cells[0].Value}") + .Where(static value => !string.IsNullOrWhiteSpace(value)) ) { cfgToSave.ExcludePatterns.Add(value); @@ -823,7 +819,7 @@ private void btnSave_Click(object sender, EventArgs e) } // Do not force ContentFiles creation on parity locations - List paths = parityTextBoxesList.Select(c => c.Text).ToList(); + var paths = parityTextBoxesList.Select(static c => c.Text).ToList(); cfgToSave.ParityFile1 = paths[0].Trim(); // Must have at least one to use this! if (string.IsNullOrWhiteSpace(paths[1])) goto doneParity; @@ -849,7 +845,7 @@ private void btnSave_Click(object sender, EventArgs e) if (string.IsNullOrWhiteSpace(paths[5])) goto doneParity; cfgToSave.ParityFile6 = paths[5].Trim(); - doneParity: + doneParity: // temp backup current config if (File.Exists(configFileLocation.Text)) @@ -861,7 +857,7 @@ private void btnSave_Click(object sender, EventArgs e) if (!string.IsNullOrEmpty(writeResult = cfgToSave.Write(configFileLocation.Text))) { - MessageBoxExt.Show( + KryptonMessageBox.Show( this, writeResult, "Config Write Error:", @@ -886,7 +882,7 @@ private void btnSave_Click(object sender, EventArgs e) UnsavedChangesMade = false; // keep config backup - by day, otherwise include minute, otherwise include second - string backupConfig = $"{configFileLocation.Text}.{DateTime.Now:yyyyMMdd}"; + var backupConfig = $"{configFileLocation.Text}.{DateTime.Now:yyyyMMdd}"; if (File.Exists(backupConfig)) { @@ -923,7 +919,7 @@ private void Settings_FormClosing(object sender, FormClosingEventArgs e) return; } - if (DialogResult.No == MessageBoxExt.Show( + if (DialogResult.No == KryptonMessageBox.Show( this, "You have made changes that have not been saved.\n\nDo you wish to discard and exit?", "Settings have changed..", @@ -953,7 +949,7 @@ private void findParity1_Click(object sender, EventArgs e) private void FindParityFor(KryptonTextBox parityLocation, KryptonButton findParity, KryptonLabel labelParity, string cfgParityFile) { - FolderSelectDialog fsd = new FolderSelectDialog + var fsd = new FolderSelectDialog { Title = @"Select the Target Directory" }; @@ -1042,9 +1038,9 @@ private void ShowToolTip() private void btnGetRecommended_Click(object sender, EventArgs e) { - CalculateBlockSize calc = new CalculateBlockSize(); + var calc = new CalculateBlockSize(); - List snaps = new List(); + var snaps = new List(); foreach (DataGridViewRow row in snapShotSources.driveGrid.Rows) { if (row.Tag is CoveragePath coveragePath) @@ -1055,13 +1051,13 @@ private void btnGetRecommended_Click(object sender, EventArgs e) calc.SnapShotSources = snaps; - string trim1 = parityLocation1.Text.Trim(); + var trim1 = parityLocation1.Text.Trim(); if (!string.IsNullOrEmpty(trim1)) { calc.ParityTargets.Add(trim1); - string trim2 = parityLocation2.Text.Trim(); + var trim2 = parityLocation2.Text.Trim(); if (!string.IsNullOrEmpty(trim2)) { @@ -1075,28 +1071,28 @@ private void btnGetRecommended_Click(object sender, EventArgs e) private void numBlockSizeKB_ValueChanged(object sender, EventArgs e) { UnsavedChangesMade = true; - if (numBlockSizeKB.Value < Constants.MinBlockSize) + if (numBlockSizeKB.Value < Constants.MIN_BLOCK_SIZE) { - numBlockSizeKB.Value = Constants.MinBlockSize; + numBlockSizeKB.Value = Constants.MIN_BLOCK_SIZE; } - if (numBlockSizeKB.Value > Constants.MaxBlockSize) + if (numBlockSizeKB.Value > Constants.MAX_BLOCK_SIZE) { - numBlockSizeKB.Value = Constants.MaxBlockSize; + numBlockSizeKB.Value = Constants.MAX_BLOCK_SIZE; } } private void numAutoSaveGB_ValueChanged(object sender, EventArgs e) { UnsavedChangesMade = true; - if (numAutoSaveGB.Value < Constants.MinAutoSave) + if (numAutoSaveGB.Value < Constants.MIN_AUTO_SAVE) { - numBlockSizeKB.Value = Constants.MinAutoSave; + numBlockSizeKB.Value = Constants.MIN_AUTO_SAVE; } - if (numAutoSaveGB.Value > Constants.MaxAutoSave) + if (numAutoSaveGB.Value > Constants.MAX_AUTO_SAVE) { - numBlockSizeKB.Value = Constants.MaxAutoSave; + numBlockSizeKB.Value = Constants.MAX_AUTO_SAVE; } } @@ -1138,14 +1134,14 @@ private void parityLocation6_Leave(object sender, EventArgs e) private void ValidateParityTextBoxes() { - List paths = parityTextBoxesList.Select(c => c.Text).ToList(); + var paths = parityTextBoxesList.Select(static c => c.Text).ToList(); string previous = null; foreach (KryptonTextBox item in parityTextBoxes) { errorProvider1.SetErrorWithCount(item, ""); - string current = item.Text.Trim(); + var current = item.Text.Trim(); if (!ConfigFileHelper.IsRulePassPreviousCannotBeEmpty(previous, current)) { @@ -1163,7 +1159,7 @@ private void ValidateParityTextBoxes() private void labelParity3_CheckedChanged(object sender, EventArgs e) { - bool enableOthers = !labelParity3.Checked; + var enableOthers = !labelParity3.Checked; labelParity4.Enabled = enableOthers; parityLocation4.Enabled = enableOthers; findParity4.Enabled = enableOthers; diff --git a/Elucidate/Elucidate/HelperClasses/AdvancedSettingsHelper.cs b/Elucidate/Elucidate/HelperClasses/AdvancedSettingsHelper.cs index 5e8bd72..5d601ff 100644 --- a/Elucidate/Elucidate/HelperClasses/AdvancedSettingsHelper.cs +++ b/Elucidate/Elucidate/HelperClasses/AdvancedSettingsHelper.cs @@ -39,7 +39,7 @@ internal class AdvancedSettingsHelper public AdvancedSettingsHelper(string displayName, bool checkState, string tootTip) { DisplayName = displayName; - this.CheckState = checkState; + CheckState = checkState; TootTip = tootTip; } diff --git a/Elucidate/Elucidate/HelperClasses/ConfigFileHelper.cs b/Elucidate/Elucidate/HelperClasses/ConfigFileHelper.cs index 62a4382..45a5139 100644 --- a/Elucidate/Elucidate/HelperClasses/ConfigFileHelper.cs +++ b/Elucidate/Elucidate/HelperClasses/ConfigFileHelper.cs @@ -135,7 +135,7 @@ private List ParityPaths { get { - List allParityPaths = new List + var allParityPaths = new List { ParityFile1, ParityFile2, @@ -145,7 +145,7 @@ private List ParityPaths ParityFile5, ParityFile6 }; - return allParityPaths.Where(p => !string.IsNullOrEmpty(p)).ToList(); + return allParityPaths.Where(static p => !string.IsNullOrEmpty(p)).ToList(); } } @@ -155,7 +155,7 @@ private List ParityContentPaths { get { - List allParityContentPaths = ParityPaths.ToList(); + var allParityContentPaths = ParityPaths.ToList(); allParityContentPaths.AddRange(ContentFiles); return allParityContentPaths; } @@ -180,19 +180,8 @@ public ConfigFileHelper(string configPath = null) } } - public bool IsNewSync() - { - // TODO: if files are missing then we have not run the first sync, so the error message for the content files should be ignored - foreach (string path in ParityContentPaths) - { - if (File.Exists(path)) - { - return false; - } - } - - return true; - } + // Note: if files are missing then we have not run the first sync, so the error message for the content files should be ignored + public bool IsNewSync() => !(from path in ParityContentPaths where File.Exists(path) select new { }).Any(); public void LoadConfigFile(string configFile) { @@ -223,7 +212,7 @@ private void DoValidation() return; } - Log.Debug("validating config file {0}", ConfigPath); + Log.Debug(@"validating config file {0}", ConfigPath); // RULE: at least one data source must be specified if (!SnapShotSources.Any()) @@ -250,40 +239,36 @@ private void DoValidation() } // RULE: data paths must be accessible - foreach (SnapShotSource source in DataSourcePaths) + foreach (SnapShotSource source in DataSourcePaths.Where(static source => !Directory.Exists(source.DirSource))) { - // test if path exists - if (!Directory.Exists(source.DirSource)) - { - ConfigErrors.Add($"Source is inaccessible or does not exist: {source.DirSource}"); - } + ConfigErrors.Add($"Source is inaccessible or does not exist: {source.DirSource}"); } // RULE: parity devices should be greater or equal to data devices - ByteSize largestSourceDevice = new ByteSize(StorageUtil.GetDriveSizes(DataSourcePaths).Max()); - ByteSize smallestParityDevice = new ByteSize(StorageUtil.GetDriveSizes(ParityPaths).Min()); + var largestSourceDevice = new ByteSize(StorageUtil.GetDriveSizes(DataSourcePaths).Max()); + var smallestParityDevice = new ByteSize(StorageUtil.GetDriveSizes(ParityPaths).Min()); if (largestSourceDevice > smallestParityDevice) { ConfigWarnings.Add($@"One or more data devices [{largestSourceDevice}] are larger than the smallest parity device [{smallestParityDevice}]. All parity devices should be equal or greater in size than all data devices."); } // RULE: blockSize valid value - if (BlockSizeKB < 1 || BlockSizeKB > 16384) + if (BlockSizeKB is < 1 or > 16384) { ConfigErrors.Add(@"The blockSize value is invalid and must be between 1 and 16384"); } // RULE: autoSave valid value - if (AutoSaveGB > Constants.MaxAutoSave) + if (AutoSaveGB > Constants.MAX_AUTO_SAVE) { - ConfigErrors.Add($"The autoSave value is invalid and must be between {Constants.MinAutoSave} and {Constants.MaxAutoSave}"); + ConfigErrors.Add($"The autoSave value is invalid and must be between {Constants.MIN_AUTO_SAVE} and {Constants.MAX_AUTO_SAVE}"); } if (!IsValid) { Log.Error(@"The configuration file is not valid. See errors below:"); - foreach (string error in ConfigErrors) + foreach (var error in ConfigErrors) { Log.Error(@" - {0}", error); } @@ -292,13 +277,13 @@ private void DoValidation() private static bool IsRulePassDevicesMustNotRepeat(ReadOnlyCollection sources) { - List roots = new List(); + var roots = new List(); try { foreach (SnapShotSource source in sources) { - string root = string.Empty; + var root = string.Empty; try { root = StorageUtil.GetPathRoot(source.DirSource); @@ -333,15 +318,15 @@ internal static bool IsRulePassDevicesMustNotRepeat(List paths, string c // Need to check all entries for multiple locations // ReSharper disable once CollectionNeverQueried.Local - Dictionary alreadyAdded = new Dictionary(); - foreach (string text in paths) + var alreadyAdded = new Dictionary(); + foreach (var text in paths) { if (!string.IsNullOrWhiteSpace(text)) { - string[] possiblePaths = text.Trim().Split(",".ToCharArray()); + var possiblePaths = text.Trim().Split(",".ToCharArray()); try { - foreach (string possiblePath in possiblePaths) + foreach (var possiblePath in possiblePaths) { alreadyAdded.Add(possiblePath, 1); } @@ -390,7 +375,7 @@ public bool Read() return false; } - bool isConfigRead = true; + var isConfigRead = true; ParityFile1 = string.Empty; ParityFile2 = string.Empty; @@ -412,27 +397,21 @@ public bool Read() IncludePatterns.Clear(); - BlockSizeKB = Constants.DefaultBlockSize; + BlockSizeKB = Constants.DEFAULT_BLOCK_SIZE; - AutoSaveGB = Constants.DefaultAutoSave; + AutoSaveGB = Constants.DEFAULT_AUTO_SAVE; - foreach (string line in File.ReadLines(ConfigPath)) + foreach (var configItem in from line in File.ReadLines(ConfigPath) + select line.Trim() + into lineStart + where !string.IsNullOrWhiteSpace(lineStart) && !lineStart.StartsWith(@"#") + select lineStart.Split(new[] { ' ' }, 2) + ) { - string lineStart = line.Trim(); - - if (string.IsNullOrWhiteSpace(lineStart) || lineStart.StartsWith(@"#")) - { - continue; - } - - // Not a comment so process the line - - // split the line by the first space encountered - string[] configItem = lineStart.Split(new[] { ' ' }, 2); Log.Trace(@"configItem [{0}]", string.Join(" ", configItem)); - string configItemName = configItem[0] ?? string.Empty; + var configItemName = configItem[0] ?? string.Empty; Log.Trace(@"configItemName [{0}]", configItemName); - string configItemValue = (configItem.Length > 1) ? configItem[1] : string.Empty; + var configItemValue = (configItem.Length > 1) ? configItem[1] : string.Empty; Log.Trace(@"configItemValue [{0}]", configItemValue); // ignore the line if it is not an a recognized setting @@ -494,12 +473,12 @@ public bool Read() case @"data": // Handle older configs { // get the data name, d1,d2,d3 etc - string diskName = configItemValue.Split(' ')[0]; + var diskName = configItemValue.Split(' ')[0]; // get the path - int diskSplitIndex = configItemValue.IndexOf(' '); + var diskSplitIndex = configItemValue.IndexOf(' '); - string diskPath = configItemValue.Substring(diskSplitIndex + 1); + var diskPath = configItemValue.Substring(diskSplitIndex + 1); // special handling of data sources since order preservation is extremely important if (!string.IsNullOrEmpty(diskName) && !string.IsNullOrEmpty(diskPath)) @@ -519,7 +498,7 @@ public bool Read() case @"block_size": BlockSizeKB = uint.Parse(configItemValue); - if (BlockSizeKB < Constants.MinBlockSize || BlockSizeKB > Constants.MaxBlockSize) + if (BlockSizeKB is < Constants.MIN_BLOCK_SIZE or > Constants.MAX_BLOCK_SIZE) { isConfigRead = false; } @@ -528,7 +507,7 @@ public bool Read() case @"autosave": AutoSaveGB = uint.Parse(configItemValue); // ReSharper disable once ConditionIsAlwaysTrueOrFalse - if (AutoSaveGB < Constants.MinAutoSave || AutoSaveGB > Constants.MaxAutoSave) + if (AutoSaveGB is < Constants.MIN_AUTO_SAVE or > Constants.MAX_AUTO_SAVE) { isConfigRead = false; } @@ -551,7 +530,7 @@ public bool Read() public List GetPathsOfInterest() { - List pathsOfInterest = new List(); + var pathsOfInterest = new List(); // SnapShotSource might be root or folders, so we handle both cases foreach (SnapShotSource source in DataSourcePaths) @@ -585,7 +564,7 @@ private static void AddParityCoverage(List pathsOfInterest, string { if (!string.IsNullOrWhiteSpace(parityPaths)) { - string[] parities = parityPaths.Trim().Split(",".ToCharArray()); + var parities = parityPaths.Trim().Split(",".ToCharArray()); pathsOfInterest.AddRange(parities.Select(parity => new CoveragePath { FullPath = Path.GetFullPath(parity), PathType = PathTypeEnum.Parity, Name = parityName })); } } @@ -598,7 +577,7 @@ public string Write(string trgtFileName) { try { - StringBuilder fileContents = new StringBuilder(); + var fileContents = new StringBuilder(); fileContents.Append(Section1); @@ -624,7 +603,7 @@ public string Write(string trgtFileName) fileContents.Append(Section5); foreach (SnapShotSource shotSource in SnapShotSources) { - fileContents.Append(@"disk ").Append(shotSource.Name).Append(@" ").AppendLine(shotSource.DirSource); + fileContents.Append(@"disk ").Append(shotSource.Name).Append(' ').AppendLine(shotSource.DirSource); } // exclude hidden files @@ -646,7 +625,9 @@ public string Write(string trgtFileName) // blocksize fileContents.Append(Section8); - BlockSizeKB = BlockSizeKB >= Constants.MinBlockSize && BlockSizeKB <= Constants.MaxBlockSize ? BlockSizeKB : Constants.DefaultBlockSize; + BlockSizeKB = BlockSizeKB is >= Constants.MIN_BLOCK_SIZE and <= Constants.MAX_BLOCK_SIZE + ? BlockSizeKB + : Constants.DEFAULT_BLOCK_SIZE; fileContents.Append("block_size ").Append(BlockSizeKB).AppendLine(); // hashsize @@ -655,7 +636,7 @@ public string Write(string trgtFileName) // autosave fileContents.Append(Section10); // ReSharper disable once ConditionIsAlwaysTrueOrFalse - AutoSaveGB = AutoSaveGB >= Constants.MinAutoSave && AutoSaveGB <= Constants.MaxAutoSave ? AutoSaveGB : Constants.DefaultAutoSave; + AutoSaveGB = AutoSaveGB is >= Constants.MIN_AUTO_SAVE and <= Constants.MAX_AUTO_SAVE ? AutoSaveGB : Constants.DEFAULT_AUTO_SAVE; fileContents.Append(@"autosave ").Append(AutoSaveGB).AppendLine(); // pool @@ -685,9 +666,9 @@ private static void AddParityToConfig(StringBuilder fileContents, string parityP } fileContents.Append("parity "); - string[] parities = parityPaths.Trim().Split(",".ToCharArray()); - bool doneFirst = false; - foreach (string parity in parities) + var parities = parityPaths.Trim().Split(",".ToCharArray()); + var doneFirst = false; + foreach (var parity in parities) { if (doneFirst) { @@ -715,7 +696,7 @@ private static StringBuilder Section1 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(@"# Example configuration for SnapRaid for Windows"); return sb; } @@ -725,7 +706,7 @@ private static StringBuilder Section2 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(@"# Defines the file to use as parity storage"); sb.AppendLine(@"# It must NOT be in a data disk"); sb.AppendLine(@"# Format: ""parity FILE [,FILE] ..."""); @@ -738,7 +719,7 @@ private static StringBuilder Section3 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Defines the files to use as additional parity storage."); sb.AppendLine(@"# If specified, they enable the multiple failures protection"); @@ -755,7 +736,7 @@ private static StringBuilder Section4 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Defines the files to use as content list"); sb.AppendLine(@"# You can use multiple specification to store more copies"); @@ -771,7 +752,7 @@ private static StringBuilder Section5 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Defines the data disks to use"); sb.AppendLine(@"# The name and mount point association is relevant for parity, do not change it"); @@ -786,7 +767,7 @@ private static StringBuilder Section6 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Excludes hidden files and directories (uncomment to enable)."); return sb; @@ -797,7 +778,7 @@ private static StringBuilder Section7 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Defines files and directories to exclude"); sb.AppendLine(@"# Remember that all the paths are relative at the mount points"); @@ -813,7 +794,7 @@ private static StringBuilder Section8 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Defines the block size in kibi bytes (1024 bytes) (uncomment to enable)."); sb.AppendLine(@"# WARNING: Changing this value is for experts only!"); @@ -827,7 +808,7 @@ private static StringBuilder Section9 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Defines the hash size in bytes (uncomment to enable)."); sb.AppendLine(@"# WARNING: Changing this value is for experts only!"); @@ -842,7 +823,7 @@ private static StringBuilder Section10 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Automatically save the state when syncing after the specified amount"); sb.AppendLine(@"# of GB processed (uncomment to enable)."); @@ -859,7 +840,7 @@ private static StringBuilder Section11 { get { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine(@"# Defines the pooling directory where the virtual view of the disk"); sb.AppendLine(@"# array is created using the ""pool"" command (uncomment to enable)."); diff --git a/Elucidate/Elucidate/HelperClasses/ErrorProviderExtensions.cs b/Elucidate/Elucidate/HelperClasses/ErrorProviderExtensions.cs index 5e641e8..c68155b 100644 --- a/Elucidate/Elucidate/HelperClasses/ErrorProviderExtensions.cs +++ b/Elucidate/Elucidate/HelperClasses/ErrorProviderExtensions.cs @@ -30,7 +30,7 @@ namespace Elucidate.HelperClasses { public static class ErrorProviderExtensions { - private static int _count; + private static int Count; public static void SetErrorWithCount(this ErrorProvider ep, Control c, string message) { @@ -38,26 +38,20 @@ public static void SetErrorWithCount(this ErrorProvider ep, Control c, string me { if (ep.GetError(c) != "") { - _count--; + Count--; } } else if (ep.GetError(c) == "") { - _count++; + Count++; } ep.SetError(c, message); } - public static bool HasErrors(this ErrorProvider ep) - { - return _count != 0; - } + public static bool HasErrors(this ErrorProvider _) => Count != 0; - public static int GetErrorCount(this ErrorProvider ep) - { - return _count; - } + public static int GetErrorCount(this ErrorProvider _) => Count; } } diff --git a/Elucidate/Elucidate/HelperClasses/StorageUtil.cs b/Elucidate/Elucidate/HelperClasses/StorageUtil.cs index 2659492..7b3bd56 100644 --- a/Elucidate/Elucidate/HelperClasses/StorageUtil.cs +++ b/Elucidate/Elucidate/HelperClasses/StorageUtil.cs @@ -44,12 +44,10 @@ public static class StorageUtil { private static readonly Logger Log = LogManager.GetCurrentClassLogger(); - public static string NormalizePath(string path) - { - return Path.GetFullPath(new Uri(path).LocalPath) + public static string NormalizePath(string path) => + Path.GetFullPath(new Uri(path).LocalPath) .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) .ToUpperInvariant(); - } public static bool IsPathRoot(string path) { @@ -58,7 +56,7 @@ public static bool IsPathRoot(string path) return false; } - string root = GetVolumePathName(path); + var root = GetVolumePathName(path); return path == root; } @@ -69,21 +67,20 @@ public static bool IsPathRoot(string path) /// System.String. public static string GetPathRoot(string path) { - string root = GetVolumePathName(path); + var root = GetVolumePathName(path); return Path.GetFullPath(root); } public static string GetVolumeGuidPath(string mountPoint) { - StringBuilder sb = new StringBuilder(50); + var sb = new StringBuilder(50); GetVolumeNameForVolumeMountPoint(mountPoint, sb, 50); return sb.ToString(); } - public static string GetVolumePathName(string path) - { - return Volume.GetVolumePathName(path); - /*const int MaxVolumeNameLength = 100; + public static string GetVolumePathName(string path) => Volume.GetVolumePathName(path); + + /*const int MaxVolumeNameLength = 100; StringBuilder sb = new StringBuilder(MaxVolumeNameLength); if (!GetVolumePathName(path, sb, MaxVolumeNameLength)) { @@ -93,15 +90,13 @@ public static string GetVolumePathName(string path) string s = sb.ToString(); return s; */ - } - public static ulong GetDriveSize(string path) { - bool success = GetDiskFreeSpaceEx( + var success = GetDiskFreeSpaceEx( path, - out ulong _, - out ulong totalNumberOfBytes, - out ulong _); + out var _, + out var totalNumberOfBytes, + out var _); if (success) { @@ -113,13 +108,13 @@ public static ulong GetDriveSize(string path) public static List GetDriveSizes(List sources) { - List deviceSizes = new List(); + var deviceSizes = new List(); - foreach (string source in sources) + foreach (var source in sources) { try { - string[] possiblePaths = source.Trim().Split(",".ToCharArray()); + var possiblePaths = source.Trim().Split(",".ToCharArray()); deviceSizes.Add(possiblePaths.Select(GetPathRoot).Sum(GetDriveSize)); } catch (Exception ex) @@ -138,7 +133,7 @@ public static List GetDriveSizes(List sources) public static List GetDriveSizes(ReadOnlyCollection sources) { - List sourcePaths = new List(sources.Count); + var sourcePaths = new List(sources.Count); foreach (ConfigFileHelper.SnapShotSource source in sources) { @@ -155,83 +150,65 @@ public static List GetDriveSizes(ReadOnlyCollectionList<StorageDevice>. public static List GetStorageDevices(bool isIncludeNonMountedStorage = false) { - List storageDevices = new List(); - - using (ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Volume")) + var storageDevices = new List(); + + using var mgmtObjSearcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_Volume"); + using ManagementObjectCollection managementQuery = mgmtObjSearcher.Get(); + // convert to LINQ to Objects query + var query = + from ManagementObject mo in managementQuery + orderby Convert.ToString(mo[@"DriveLetter"]) + select new + { + Caption = Convert.ToString(mo[@"Caption"]), + Name = Convert.ToString(mo[@"Name"]), + DeviceID = Convert.ToString(mo[@"DeviceID"]), + DriveType = Convert.ToUInt32(mo[@"DriveType"]), + DriveLetter = Convert.ToString(mo[@"DriveLetter"]), + FileSystem = Convert.ToString(mo[@"FileSystem"]) + }; + + // grab the fields + foreach (var item in query) { - using (ManagementObjectCollection managementQuery = mgmtObjSearcher.Get()) + try { - // convert to LINQ to Objects query - var query = - from ManagementObject mo in managementQuery - orderby Convert.ToString(mo["DriveLetter"]) - select new - { - Caption = Convert.ToString(mo["Caption"]), - Name = Convert.ToString(mo["Name"]), - DeviceID = Convert.ToString(mo["DeviceID"]), - DriveType = Convert.ToUInt32(mo["DriveType"]), - DriveLetter = Convert.ToString(mo["DriveLetter"]), - FileSystem = Convert.ToString(mo["FileSystem"]) - }; - - // grab the fields - foreach (var item in query) + // ReSharper disable once UnusedVariable + var success = GetDiskFreeSpaceEx( + item.DeviceID, + out var freeBytesAvailable, + out var totalNumberOfBytes, + out var _); + + var device = new StorageDevice { - try - { - // ReSharper disable once UnusedVariable - bool success = GetDiskFreeSpaceEx( - item.DeviceID, - out ulong freeBytesAvailable, - out ulong totalNumberOfBytes, - out ulong _); - - StorageDevice device = new StorageDevice - { - Caption = item.Caption, - Name = item.Name, - DeviceId = item.DeviceID, - DriveLetter = item.DriveLetter, - FileSystem = item.FileSystem, - Capacity = (uint)totalNumberOfBytes, - FreeSpace = (uint)freeBytesAvailable - }; - - switch (item.DriveType) - { - case (uint)System.IO.DriveType.Removable: - device.DriveType = System.IO.DriveType.Removable; - break; - - case (uint)System.IO.DriveType.Fixed: - device.DriveType = System.IO.DriveType.Fixed; - break; - - case (uint)System.IO.DriveType.Network: - device.DriveType = System.IO.DriveType.Network; - break; - - case (uint)System.IO.DriveType.CDRom: - device.DriveType = System.IO.DriveType.CDRom; - break; - - default: - device.DriveType = System.IO.DriveType.Unknown; - break; - } - - if (!string.IsNullOrEmpty(device.Caption) && (!device.Caption.StartsWith(@"\\?\") || isIncludeNonMountedStorage)) - { - storageDevices.Add(device); - } - } - catch (Exception ex) + Caption = item.Caption, + Name = item.Name, + DeviceId = item.DeviceID, + DriveLetter = item.DriveLetter, + FileSystem = item.FileSystem, + Capacity = (uint)totalNumberOfBytes, + FreeSpace = (uint)freeBytesAvailable, + DriveType = item.DriveType switch { - Log.Warn(ex, "A storage device failed to enumerate."); + (uint)System.IO.DriveType.Removable => System.IO.DriveType.Removable, + (uint)System.IO.DriveType.Fixed => System.IO.DriveType.Fixed, + (uint)System.IO.DriveType.Network => System.IO.DriveType.Network, + (uint)System.IO.DriveType.CDRom => System.IO.DriveType.CDRom, + _ => System.IO.DriveType.Unknown } + }; + + if (!string.IsNullOrEmpty(device.Caption) + && (!device.Caption.StartsWith(@"\\?\") || isIncludeNonMountedStorage)) + { + storageDevices.Add(device); } } + catch (Exception ex) + { + Log.Warn(ex, @"A storage device failed to enumerate."); + } } return storageDevices; @@ -239,24 +216,15 @@ orderby Convert.ToString(mo["DriveLetter"]) #region DllImport - [DllImport("kernel32.dll", SetLastError = true)] - static extern bool GetVolumeNameForVolumeMountPoint( - string lpszFileName, - [Out] StringBuilder lpszVollpszVolumePathName, - int cchBufferLength); + [DllImport(@"kernel32.dll", SetLastError = true)] + private static extern bool GetVolumeNameForVolumeMountPoint(string lpszFileName, [Out] StringBuilder lpszVolLpszVolumePathName, int cchBufferLength); - [DllImport("kernel32.dll", SetLastError = true)] - private static extern bool GetVolumePathName( - string lpszVolumeMountPoint, - [Out] StringBuilder lpszVolumeName, - int cchBufferLength); + [DllImport(@"kernel32.dll", SetLastError = true)] + private static extern bool GetVolumePathName(string lpszVolumeMountPoint, [Out] StringBuilder lpszVolumeName, int cchBufferLength); - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [DllImport(@"kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, - out ulong lpFreeBytesAvailable, - out ulong lpTotalNumberOfBytes, - out ulong lpTotalNumberOfFreeBytes); + private static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, out ulong lpFreeBytesAvailable, out ulong lpTotalNumberOfBytes, out ulong lpTotalNumberOfFreeBytes); #endregion } diff --git a/Elucidate/Elucidate/HelperClasses/Util.cs b/Elucidate/Elucidate/HelperClasses/Util.cs index 7e52b71..ef54465 100644 --- a/Elucidate/Elucidate/HelperClasses/Util.cs +++ b/Elucidate/Elucidate/HelperClasses/Util.cs @@ -57,7 +57,7 @@ public static void CreateFullDirectoryPath(string path) return; } - string dir = Path.GetDirectoryName(path); + var dir = Path.GetDirectoryName(path); try { @@ -83,7 +83,7 @@ public static string FormatSnapRaidCommandArgs(string command, out string appPat // Find the meanings @ http://snapraid.sourceforge.net/manual.html // status|smart|up|down|diff|sync|scrub|fix|check|list|dup|pool|devices|touch|rehash - StringBuilder args = new StringBuilder(); + var args = new StringBuilder(); args.Append(' '); @@ -94,10 +94,17 @@ public static string FormatSnapRaidCommandArgs(string command, out string appPat if (Properties.Settings.Default.FindByNameInSync) { - args.Append("-N "); + switch (command) + { + case @"sync": + case @"check": + case @"fix": + args.Append("-N "); + break; + } } - args.AppendFormat("-c \"{0}\" {1}", Properties.Settings.Default.ConfigFileLocation, command); + args.AppendFormat("-c \"{0}\" ", Properties.Settings.Default.ConfigFileLocation).Append(command); return args.ToString(); } @@ -109,35 +116,33 @@ public static double RoundUpToDecimalPlace(double numToRound, int decimalPlace) return numToRound; // return original number if 0 decimal places requested } - string strX = $"1{new string('0', decimalPlace)}"; - int intX = Convert.ToInt32(strX); + var strX = $"1{new string('0', decimalPlace)}"; + var intX = Convert.ToInt32(strX); return Math.Ceiling(numToRound * intX) / intX; } public static string ComputeSha1Hash(string rawData) { // Create a SHA1 - using (SHA1 sha1Hash = SHA1.Create()) - { - // ComputeHash - returns byte array - byte[] bytes = sha1Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData)); - - // Convert byte array to a string - StringBuilder builder = new StringBuilder(); - foreach (byte bt in bytes) - { - builder.Append(bt.ToString("x2")); - } + using SHA1 sha1Hash = SHA1.Create(); + // ComputeHash - returns byte array + var bytes = sha1Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData)); - return builder.ToString(); + // Convert byte array to a string + var builder = new StringBuilder(); + foreach (var bt in bytes) + { + builder.Append(bt.ToString("x2")); } + + return builder.ToString(); } public static bool IsExecutableRunning(string exePath) { - string path = exePath; + var path = exePath; - string fileName = Path.GetFileName(path); + var fileName = Path.GetFileName(path); // Get the process that is already running as per the exe file name. @@ -146,7 +151,7 @@ public static bool IsExecutableRunning(string exePath) return false; } - Process[] processName = Process.GetProcessesByName(fileName.Substring(0, fileName.LastIndexOf('.'))); + var processName = Process.GetProcessesByName(fileName.Substring(0, fileName.LastIndexOf('.'))); return processName.Length > 0; } @@ -156,7 +161,7 @@ private static void RunElevatedProcess(string fileName, string args = "") { Process process = null; - ProcessStartInfo processStartInfo = new ProcessStartInfo { FileName = fileName }; + var processStartInfo = new ProcessStartInfo { FileName = fileName }; if (Environment.OSVersion.Version.Major >= 6) // Windows Vista or higher { @@ -205,9 +210,10 @@ private static ulong DirSize(DirectoryInfo dir) { try { - return dir.EnumerateFiles().AsParallel().Sum(fi => (ulong)fi.Length) + return dir.EnumerateFiles().AsParallel().Sum(static fi => (ulong)fi.Length) + dir.EnumerateDirectories() - .Where(d => (d.Attributes & System.IO.FileAttributes.System) == 0 && (d.Attributes & System.IO.FileAttributes.Hidden) == 0) + .Where(static d => (d.Attributes & System.IO.FileAttributes.System) == 0 + && (d.Attributes & System.IO.FileAttributes.Hidden) == 0) .AsParallel() .Sum(DirSize); } @@ -229,14 +235,14 @@ public static void SourcePathFreeBytesAvailable( out ulong pathUsedBytes, out ulong rootBytesNotCoveredByPath) { - string fullPath = StorageUtil.NormalizePath(Path.GetFullPath(path)); + var fullPath = StorageUtil.NormalizePath(Path.GetFullPath(path)); - string rootPath = StorageUtil.NormalizePath(StorageUtil.GetPathRoot(path)); + var rootPath = StorageUtil.NormalizePath(StorageUtil.GetPathRoot(path)); // ReSharper disable once UnusedVariable - GetDiskFreeSpaceExW(rootPath, out freeBytesAvailable, out ulong totalBytes, out ulong num3); + GetDiskFreeSpaceExW(rootPath, out freeBytesAvailable, out var totalBytes, out var num3); - ulong driveUsedBytes = totalBytes - freeBytesAvailable; + var driveUsedBytes = totalBytes - freeBytesAvailable; rootBytesNotCoveredByPath = 0; @@ -244,13 +250,13 @@ public static void SourcePathFreeBytesAvailable( if (rootPath == fullPath) { - Log.Trace("Nothing more to do, so get values for the series"); + Log.Trace(@"Nothing more to do, so get values for the series"); pathUsedBytes = driveUsedBytes; } else { - Log.Debug("Need to perform some calculations of Path usage. TotalBytes[{0}]", totalBytes); + Log.Debug(@"Need to perform some calculations of Path usage. TotalBytes[{0}]", totalBytes); pathUsedBytes = DirSize(new DirectoryInfo(path)); @@ -265,14 +271,11 @@ public static void SourcePathFreeBytesAvailable( internal static class Enumerator { - public static ulong Sum(this IEnumerable source, Func selector) - { - return source.Select(selector).Sum(); - } + public static ulong Sum(this IEnumerable source, Func selector) => source.Select(selector).Sum(); private static ulong Sum(this IEnumerable source) { - return source.Aggregate(0UL, (current, number) => current + number); + return source.Aggregate(0UL, static (current, number) => current + number); } } diff --git a/Elucidate/Elucidate/HelperClasses/WindowLocation.cs b/Elucidate/Elucidate/HelperClasses/WindowLocation.cs index 9bcc8f5..71e8f02 100644 --- a/Elucidate/Elucidate/HelperClasses/WindowLocation.cs +++ b/Elucidate/Elucidate/HelperClasses/WindowLocation.cs @@ -15,19 +15,19 @@ public static void GeometryFromString(string thisWindowGeometry, Form formIn) { return; } - string[] numbers = thisWindowGeometry.Split('|'); - string windowString = numbers[4]; + var numbers = thisWindowGeometry.Split('|'); + var windowString = numbers[4]; switch (windowString) { - case "Normal": + case @"Normal": { - Point windowPoint = new Point(int.Parse(numbers[0], CultureInfo.InvariantCulture), + var windowPoint = new Point(int.Parse(numbers[0], CultureInfo.InvariantCulture), int.Parse(numbers[1], CultureInfo.InvariantCulture)); - Size windowSize = new Size(int.Parse(numbers[2], CultureInfo.InvariantCulture), + var windowSize = new Size(int.Parse(numbers[2], CultureInfo.InvariantCulture), int.Parse(numbers[3], CultureInfo.InvariantCulture)); - bool locOkay = GeometryIsBizarreLocation(windowPoint, windowSize); - bool sizeOkay = GeometryIsBizarreSize(windowSize); + var locOkay = GeometryIsBizarreLocation(windowPoint, windowSize); + var sizeOkay = GeometryIsBizarreSize(windowSize); if (locOkay && sizeOkay) { @@ -43,7 +43,7 @@ public static void GeometryFromString(string thisWindowGeometry, Form formIn) } break; - case "Maximized": + case @"Maximized": formIn.Location = new Point(100, 100); formIn.StartPosition = FormStartPosition.Manual; formIn.WindowState = FormWindowState.Maximized; @@ -73,11 +73,9 @@ private static bool GeometryIsBizarreLocation(Point loc, Size size) return locOkay; } - private static bool GeometryIsBizarreSize(Size size) - { - return (size.Height <= Screen.PrimaryScreen.WorkingArea.Height && - size.Width <= Screen.PrimaryScreen.WorkingArea.Width); - } + private static bool GeometryIsBizarreSize(Size size) => + (size.Height <= Screen.PrimaryScreen.WorkingArea.Height && + size.Width <= Screen.PrimaryScreen.WorkingArea.Width); public static string GeometryToString(Form mainForm) { diff --git a/Elucidate/Elucidate/Objects/Constants.cs b/Elucidate/Elucidate/Objects/Constants.cs index 5fbae3b..a24180e 100644 --- a/Elucidate/Elucidate/Objects/Constants.cs +++ b/Elucidate/Elucidate/Objects/Constants.cs @@ -2,13 +2,13 @@ { public static class Constants { - public const int MinBlockSize = 32; - public const int MaxBlockSize = 16384; - public const int DefaultBlockSize = 256; + public const int MIN_BLOCK_SIZE = 32; + public const int MAX_BLOCK_SIZE = 16384; + public const int DEFAULT_BLOCK_SIZE = 256; - public const int MinAutoSave = 10; - public const int MaxAutoSave = short.MaxValue; - public const int DefaultAutoSave = 250; + public const int MIN_AUTO_SAVE = 10; + public const int MAX_AUTO_SAVE = short.MaxValue; + public const int DEFAULT_AUTO_SAVE = 250; } diff --git a/Elucidate/Elucidate/Objects/CoveragePath.cs b/Elucidate/Elucidate/Objects/CoveragePath.cs index 73671c9..1c85892 100644 --- a/Elucidate/Elucidate/Objects/CoveragePath.cs +++ b/Elucidate/Elucidate/Objects/CoveragePath.cs @@ -44,13 +44,11 @@ public string DirectoryPath { get { - switch (PathType) - { - case PathTypeEnum.Parity: - return Path.GetDirectoryName(FullPath); - default: - return FullPath; - } + return PathType switch + { + PathTypeEnum.Parity => Path.GetDirectoryName(FullPath), + _ => FullPath + }; } } } diff --git a/Elucidate/Elucidate/Program.cs b/Elucidate/Elucidate/Program.cs index f3d46b7..b186d11 100644 --- a/Elucidate/Elucidate/Program.cs +++ b/Elucidate/Elucidate/Program.cs @@ -65,7 +65,7 @@ private static void Main() ExceptionlessClient.Default.Configuration.SetVersion(Assembly.GetExecutingAssembly().GetName().Version); - AppDomain.CurrentDomain.UnhandledException += (sender, e) => LogUnhandledException(e.ExceptionObject); + AppDomain.CurrentDomain.UnhandledException += static (_, e) => LogUnhandledException(e.ExceptionObject); //if (FileUtil.IsDirectoryCompressed(Path.GetDirectoryName(Properties.Settings.Default.ConfigFileLocation))) //{ // FileUtil.SetDirectoryAsCompressed(Path.GetDirectoryName(Properties.Settings.Default.ConfigFileLocation)); @@ -84,8 +84,8 @@ private static void Main() } try { - Log.Info("====================================================================="); - Log.Info("File Re-opened: Ver :" + Assembly.GetExecutingAssembly().GetName().Version); + Log.Info(@"====================================================================="); + Log.Info(@"File Re-opened: Ver :" + Assembly.GetExecutingAssembly().GetName().Version); CheckAndRunSingleApp(); } catch (Exception ex) @@ -95,30 +95,28 @@ private static void Main() } finally { - Log.Info("File Closing"); - Log.Info("====================================================================="); + Log.Info(@"File Closing"); + Log.Info(@"====================================================================="); } } private static void CheckAndRunSingleApp() { - string mutexName = $"{Path.GetFileName(Application.ExecutablePath)} [{Environment.UserName}]"; + var mutexName = $"{Path.GetFileName(Application.ExecutablePath)} [{Environment.UserName}]"; // ReSharper disable once UnusedVariable - using (Mutex appUserMutex = new Mutex(true, mutexName, out bool grantedOwnership)) + using var appUserMutex = new Mutex(true, mutexName, out var grantedOwnership); + if (grantedOwnership) { - if (grantedOwnership) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new ElucidateForm()); - } - else - { - KryptonMessageBox.Show($@"{mutexName} is already running", mutexName, MessageBoxButtons.OK, MessageBoxIcon.Stop); - Log.Error($@"{mutexName} is already running"); - } + Application.Run(new ElucidateForm()); + } + else + { + KryptonMessageBox.Show($@"{mutexName} is already running", mutexName, MessageBoxButtons.OK, MessageBoxIcon.Stop); + Log.Error($@"{mutexName} is already running"); } } @@ -127,7 +125,7 @@ private static void LogUnhandledException(object exceptionObject) try { Log.Fatal("Unhandled exception.\r\n{0}", exceptionObject); - string cs = Assembly.GetExecutingAssembly().GetName().Name; + var cs = Assembly.GetExecutingAssembly().GetName().Name; try { if (!EventLog.SourceExists(cs)) diff --git a/Elucidate/Elucidate/Properties/AssemblyInfo.cs b/Elucidate/Elucidate/Properties/AssemblyInfo.cs index b4a6f8d..26db9bd 100644 --- a/Elucidate/Elucidate/Properties/AssemblyInfo.cs +++ b/Elucidate/Elucidate/Properties/AssemblyInfo.cs @@ -56,21 +56,21 @@ // Build Number - Increment // Revision - Day // -[assembly: AssemblyVersion("2021.4.1030.4")] -[assembly: AssemblyFileVersion("21.4.1030.4")] +[assembly: AssemblyVersion("2021.12.29.9")] +[assembly: AssemblyFileVersion("21.12.29.9")] [assembly: NeutralResourcesLanguage("en-US")] // TODO: Add more relevant hints here -[assembly: Dependency("System", LoadHint.Always)] -[assembly: Dependency("System.Drawing", LoadHint.Always)] -[assembly: Dependency("System.IO", LoadHint.Always)] -[assembly: Dependency("System.Windows.Forms", LoadHint.Always)] -[assembly: Dependency("System.Xml", LoadHint.Always)] - -[assembly: Dependency("Alphaleonis.Win32.Filesystem", LoadHint.Always)] -[assembly: Dependency("CommandLine", LoadHint.Always)] -[assembly: Dependency("Krypton.Toolkit", LoadHint.Always)] -[assembly: Dependency("Krypton.Navigator", LoadHint.Always)] -[assembly: Dependency("Exceptionless", LoadHint.Always)] -[assembly: Dependency("Exceptionless.Nlog", LoadHint.Always)] -[assembly: Dependency("Exceptionless.Windows", LoadHint.Always)] -[assembly: Dependency("NLog", LoadHint.Always)] +[assembly: Dependency(@"System", LoadHint.Always)] +[assembly: Dependency(@"System.Drawing", LoadHint.Always)] +[assembly: Dependency(@"System.IO", LoadHint.Always)] +[assembly: Dependency(@"System.Windows.Forms", LoadHint.Always)] +[assembly: Dependency(@"System.Xml", LoadHint.Always)] + +[assembly: Dependency(@"Alphaleonis.Win32.Filesystem", LoadHint.Always)] +[assembly: Dependency(@"CommandLine", LoadHint.Always)] +[assembly: Dependency(@"Krypton.Toolkit", LoadHint.Always)] +[assembly: Dependency(@"Krypton.Navigator", LoadHint.Always)] +[assembly: Dependency(@"Exceptionless", LoadHint.Always)] +[assembly: Dependency(@"Exceptionless.Nlog", LoadHint.Always)] +[assembly: Dependency(@"Exceptionless.Windows", LoadHint.Always)] +[assembly: Dependency(@"NLog", LoadHint.Always)] diff --git a/Elucidate/Elucidate/Shared/BufferedTreeView.cs b/Elucidate/Elucidate/Shared/BufferedTreeView.cs index 9411ab2..4149b41 100644 --- a/Elucidate/Elucidate/Shared/BufferedTreeView.cs +++ b/Elucidate/Elucidate/Shared/BufferedTreeView.cs @@ -8,7 +8,7 @@ public class BufferedTreeView : TreeView { protected override void OnHandleCreated(EventArgs e) { - SendMessage(this.Handle, TVM_SETEXTENDEDSTYLE, (IntPtr)TVS_EX_DOUBLEBUFFER, (IntPtr)TVS_EX_DOUBLEBUFFER); + SendMessage(Handle, TVM_SETEXTENDEDSTYLE, (IntPtr)TVS_EX_DOUBLEBUFFER, (IntPtr)TVS_EX_DOUBLEBUFFER); base.OnHandleCreated(e); } diff --git a/Elucidate/Elucidate/Shared/FolderSelectDialog.cs b/Elucidate/Elucidate/Shared/FolderSelectDialog.cs index 43c38c1..ec0f533 100644 --- a/Elucidate/Elucidate/Shared/FolderSelectDialog.cs +++ b/Elucidate/Elucidate/Shared/FolderSelectDialog.cs @@ -66,13 +66,13 @@ private struct ShowDialogResult private static ShowDialogResult ShowXpDialog(IntPtr ownerHandle, string initialDirectory, string title) { - FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog + var folderBrowserDialog = new FolderBrowserDialog { Description = title, SelectedPath = initialDirectory, ShowNewFolderButton = true }; - ShowDialogResult dialogResult = new ShowDialogResult(); + var dialogResult = new ShowDialogResult(); if (folderBrowserDialog.ShowDialog(new WindowWrapper(ownerHandle)) == DialogResult.OK) { dialogResult.Result = true; @@ -105,7 +105,7 @@ private static class VistaDialog public static ShowDialogResult Show(IntPtr ownerHandle, string initialDirectory, string title, string targetDirectory) { - OpenFileDialog openFileDialog = new OpenFileDialog + var openFileDialog = new OpenFileDialog { AddExtension = false, CheckFileExists = false, @@ -119,9 +119,9 @@ public static ShowDialogResult Show(IntPtr ownerHandle, string initialDirectory, ValidateNames = true }; - object iFileDialog = CreateVistaDialogMethodInfo.Invoke(openFileDialog, new object[] { }); + object iFileDialog = CreateVistaDialogMethodInfo.Invoke(openFileDialog, Array.Empty()); OnBeforeVistaDialogMethodInfo.Invoke(openFileDialog, new[] { iFileDialog }); - SetOptionsMethodInfo.Invoke(iFileDialog, new object[] { (uint)GetOptionsMethodInfo.Invoke(openFileDialog, new object[] { }) | FosPickFoldersBitFlag }); + SetOptionsMethodInfo.Invoke(iFileDialog, new object[] { (uint)GetOptionsMethodInfo.Invoke(openFileDialog, Array.Empty()) | FosPickFoldersBitFlag }); object[] adviseParametersWithOutputConnectionToken = new[] { VistaDialogEventsConstructorInfo.Invoke(new object[] { openFileDialog }), 0U }; AdviseMethodInfo.Invoke(iFileDialog, adviseParametersWithOutputConnectionToken); diff --git a/Elucidate/Elucidate/Shared/MessageBoxExtForm.Designer.cs b/Elucidate/Elucidate/Shared/MessageBoxExtForm.Designer.cs deleted file mode 100644 index 74e95dc..0000000 --- a/Elucidate/Elucidate/Shared/MessageBoxExtForm.Designer.cs +++ /dev/null @@ -1,258 +0,0 @@ -using System.ComponentModel; -using System.Windows.Forms; - -namespace Elucidate.Shared -{ - partial class MessageBoxExtForm - { - /// - /// Required designer variable. - /// - private IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.panel2 = new System.Windows.Forms.Panel(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.boxIcon = new System.Windows.Forms.PictureBox(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.lblTask = new System.Windows.Forms.Label(); - this.lblInformation = new System.Windows.Forms.Label(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.btnCancel = new System.Windows.Forms.Button(); - this.btnAbort = new System.Windows.Forms.Button(); - this.btnRetry = new System.Windows.Forms.Button(); - this.btnIgnore = new System.Windows.Forms.Button(); - this.btnYes = new System.Windows.Forms.Button(); - this.btnNo = new System.Windows.Forms.Button(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel2.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.boxIcon)).BeginInit(); - this.tableLayoutPanel2.SuspendLayout(); - this.flowLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // panel2 - // - this.panel2.Controls.Add(this.flowLayoutPanel1); - this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel2.Location = new System.Drawing.Point(0, 130); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(572, 41); - this.panel2.TabIndex = 1; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.boxIcon, 0, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(572, 130); - this.tableLayoutPanel1.TabIndex = 2; - // - // boxIcon - // - this.boxIcon.Location = new System.Drawing.Point(3, 3); - this.boxIcon.Name = "boxIcon"; - this.boxIcon.Size = new System.Drawing.Size(56, 56); - this.boxIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.boxIcon.TabIndex = 0; - this.boxIcon.TabStop = false; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel2.Controls.Add(this.lblTask, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.lblInformation, 0, 1); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(65, 3); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 2; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 35.08772F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 64.91228F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(504, 124); - this.tableLayoutPanel2.TabIndex = 1; - // - // lblTask - // - this.lblTask.AutoSize = true; - this.lblTask.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblTask.Font = new System.Drawing.Font("Tahoma", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblTask.ForeColor = System.Drawing.SystemColors.Highlight; - this.lblTask.Location = new System.Drawing.Point(3, 0); - this.lblTask.Name = "lblTask"; - this.lblTask.Size = new System.Drawing.Size(498, 43); - this.lblTask.TabIndex = 0; - this.lblTask.Text = "label1"; - this.lblTask.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblInformation - // - this.lblInformation.AutoSize = true; - this.lblInformation.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblInformation.Location = new System.Drawing.Point(3, 43); - this.lblInformation.Name = "lblInformation"; - this.lblInformation.Size = new System.Drawing.Size(498, 81); - this.lblInformation.TabIndex = 1; - this.lblInformation.Text = "label2"; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.Controls.Add(this.btnCancel); - this.flowLayoutPanel1.Controls.Add(this.btnOK); - this.flowLayoutPanel1.Controls.Add(this.btnNo); - this.flowLayoutPanel1.Controls.Add(this.btnYes); - this.flowLayoutPanel1.Controls.Add(this.btnIgnore); - this.flowLayoutPanel1.Controls.Add(this.btnRetry); - this.flowLayoutPanel1.Controls.Add(this.btnAbort); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 6, 0, 0); - this.flowLayoutPanel1.Size = new System.Drawing.Size(572, 41); - this.flowLayoutPanel1.TabIndex = 0; - // - // btnCancel - // - this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Location = new System.Drawing.Point(494, 9); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.Size = new System.Drawing.Size(75, 23); - this.btnCancel.TabIndex = 0; - this.btnCancel.Text = "Cancel"; - this.btnCancel.UseVisualStyleBackColor = true; - // - // btnAbort - // - this.btnAbort.DialogResult = System.Windows.Forms.DialogResult.Abort; - this.btnAbort.Location = new System.Drawing.Point(8, 9); - this.btnAbort.Name = "btnAbort"; - this.btnAbort.Size = new System.Drawing.Size(75, 23); - this.btnAbort.TabIndex = 1; - this.btnAbort.Text = "Abort"; - this.btnAbort.UseVisualStyleBackColor = true; - // - // btnRetry - // - this.btnRetry.DialogResult = System.Windows.Forms.DialogResult.Retry; - this.btnRetry.Location = new System.Drawing.Point(89, 9); - this.btnRetry.Name = "btnRetry"; - this.btnRetry.Size = new System.Drawing.Size(75, 23); - this.btnRetry.TabIndex = 2; - this.btnRetry.Text = "Retry"; - this.btnRetry.UseVisualStyleBackColor = true; - // - // btnIgnore - // - this.btnIgnore.DialogResult = System.Windows.Forms.DialogResult.Ignore; - this.btnIgnore.Location = new System.Drawing.Point(170, 9); - this.btnIgnore.Name = "btnIgnore"; - this.btnIgnore.Size = new System.Drawing.Size(75, 23); - this.btnIgnore.TabIndex = 3; - this.btnIgnore.Text = "Ignore"; - this.btnIgnore.UseVisualStyleBackColor = true; - // - // btnYes - // - this.btnYes.DialogResult = System.Windows.Forms.DialogResult.Yes; - this.btnYes.Location = new System.Drawing.Point(251, 9); - this.btnYes.Name = "btnYes"; - this.btnYes.Size = new System.Drawing.Size(75, 23); - this.btnYes.TabIndex = 4; - this.btnYes.Text = "Yes"; - this.btnYes.UseVisualStyleBackColor = true; - // - // btnNo - // - this.btnNo.DialogResult = System.Windows.Forms.DialogResult.No; - this.btnNo.Location = new System.Drawing.Point(332, 9); - this.btnNo.Name = "btnNo"; - this.btnNo.Size = new System.Drawing.Size(75, 23); - this.btnNo.TabIndex = 5; - this.btnNo.Text = "No"; - this.btnNo.UseVisualStyleBackColor = true; - // - // btnOK - // - this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; - this.btnOK.Location = new System.Drawing.Point(413, 9); - this.btnOK.Name = "btnOK"; - this.btnOK.Size = new System.Drawing.Size(75, 23); - this.btnOK.TabIndex = 6; - this.btnOK.Text = "OK"; - this.btnOK.UseVisualStyleBackColor = true; - // - // MessageBoxExtForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(572, 171); - this.ControlBox = false; - this.Controls.Add(this.tableLayoutPanel1); - this.Controls.Add(this.panel2); - this.DoubleBuffered = true; - this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "MessageBoxExtForm"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.Text = "MessageBoxExtForm"; - this.panel2.ResumeLayout(false); - this.tableLayoutPanel1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.boxIcon)).EndInit(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.flowLayoutPanel1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private Panel panel2; - private TableLayoutPanel tableLayoutPanel1; - private PictureBox boxIcon; - private TableLayoutPanel tableLayoutPanel2; - private Label lblTask; - private Label lblInformation; - private FlowLayoutPanel flowLayoutPanel1; - private Button btnCancel; - private Button btnOK; - private Button btnNo; - private Button btnYes; - private Button btnIgnore; - private Button btnRetry; - private Button btnAbort; - } -} \ No newline at end of file diff --git a/Elucidate/Elucidate/Shared/MessageBoxExtForm.cs b/Elucidate/Elucidate/Shared/MessageBoxExtForm.cs deleted file mode 100644 index b7fec6a..0000000 --- a/Elucidate/Elucidate/Shared/MessageBoxExtForm.cs +++ /dev/null @@ -1,206 +0,0 @@ -using System.Drawing; -using System.Windows.Forms; - -// ReSharper disable UnusedMember.Global -// ReSharper disable RedundantCast -// ReSharper disable MemberCanBePrivate.Global -namespace Elucidate.Shared -{ - /// - /// Class of MessageBox - /// - public static class MessageBoxExt - { - public static DialogResult Show(IWin32Window owner, string text) - { - string caption = string.Empty; - return Show(owner, text, caption); - } - - public static DialogResult Show(IWin32Window owner, string text, string caption) - { - const MessageBoxButtons BUTTONS = MessageBoxButtons.OK; - return Show(owner, text, caption, BUTTONS); - } - - public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons) - { - const MessageBoxIcon ICON = MessageBoxIcon.None; - return Show(owner, text, caption, buttons, ICON); - } - - public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) - { - const MessageBoxDefaultButton DEFAULT_BUTTON = MessageBoxDefaultButton.Button1; - return Show(owner, text, caption, buttons, icon, DEFAULT_BUTTON); - } - - private static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) - { - MessageBoxExtForm form = new MessageBoxExtForm(Application.ProductName, caption, text); - - form.SetButtons(buttons); - form.SetIcon(icon); - form.SetDefaultButton(defaultButton); - form.TopMost = true; - return form.ShowDialog(owner); - } - } - - internal partial class MessageBoxExtForm : Form - { - private MessageBoxButtons mMessageBoxButtons; - - public MessageBoxExtForm(string caption, string task, string information) - { - InitializeComponent(); - base.Text = caption; - lblTask.Text = task; - lblInformation.Text = information; - StartPosition = FormStartPosition.CenterParent; - } - - - internal void SetButtons(MessageBoxButtons buttons) - { - mMessageBoxButtons = buttons; - - btnAbort.Visible = false; - btnCancel.Visible = false; - btnIgnore.Visible = false; - btnNo.Visible = false; - btnOK.Visible = false; - btnRetry.Visible = false; - btnYes.Visible = false; - - switch (buttons) - { - case MessageBoxButtons.AbortRetryIgnore: - btnAbort.Visible = true; - btnRetry.Visible = true; - btnIgnore.Visible = true; - break; - - case MessageBoxButtons.OKCancel: - btnOK.Visible = true; - btnCancel.Visible = true; - break; - - case MessageBoxButtons.RetryCancel: - btnRetry.Visible = true; - btnCancel.Visible = true; - break; - - case MessageBoxButtons.YesNo: - btnYes.Visible = true; - btnNo.Visible = true; - break; - - case MessageBoxButtons.YesNoCancel: - btnYes.Visible = true; - btnNo.Visible = true; - btnCancel.Visible = true; - break; - - default: - //case MessageBoxButtons.OK: - btnOK.Visible = true; - break; - } - } - - internal void SetIcon(MessageBoxIcon icon) - { - Icon iconToUse; - switch (icon) - { - default: - // case MessageBoxIcon.None: - iconToUse = null; - boxIcon.Visible = false; - break; - case MessageBoxIcon.Hand: - iconToUse = SystemIcons.Hand; - break; - case MessageBoxIcon.Question: - iconToUse = SystemIcons.Question; - break; - case MessageBoxIcon.Exclamation: - iconToUse = SystemIcons.Exclamation; - break; - case MessageBoxIcon.Asterisk: - iconToUse = SystemIcons.Asterisk; - break; - } - if (iconToUse != null) - { - boxIcon.Image = new Icon(iconToUse, 48, 48).ToBitmap(); - } - } - - internal void SetDefaultButton(MessageBoxDefaultButton defaultButton) - { - switch (defaultButton) - { - case MessageBoxDefaultButton.Button1: - switch (mMessageBoxButtons) - { - case MessageBoxButtons.AbortRetryIgnore: - btnAbort.Focus(); - break; - case MessageBoxButtons.OKCancel: - btnOK.Focus(); - break; - case MessageBoxButtons.RetryCancel: - btnRetry.Focus(); - break; - case MessageBoxButtons.YesNo: - btnYes.Focus(); - break; - case MessageBoxButtons.YesNoCancel: - btnYes.Focus(); - break; - case MessageBoxButtons.OK: - btnOK.Focus(); - break; - } - break; - case MessageBoxDefaultButton.Button2: - switch (mMessageBoxButtons) - { - case MessageBoxButtons.AbortRetryIgnore: - btnRetry.Focus(); - break; - case MessageBoxButtons.OKCancel: - btnCancel.Focus(); - break; - case MessageBoxButtons.RetryCancel: - btnCancel.Focus(); - break; - case MessageBoxButtons.YesNo: - btnNo.Focus(); - break; - case MessageBoxButtons.YesNoCancel: - btnNo.Focus(); - break; - } - break; - case MessageBoxDefaultButton.Button3: - switch (mMessageBoxButtons) - { - case MessageBoxButtons.AbortRetryIgnore: - btnIgnore.Focus(); - break; - case MessageBoxButtons.YesNoCancel: - btnCancel.Focus(); - break; - } - break; - } - } - - } -} -// ReSharper restore MemberCanBePrivate.Global -// ReSharper restore RedundantCast -// ReSharper restore UnusedMember.Global diff --git a/Elucidate/Elucidate/Shared/MessageBoxExtForm.resx b/Elucidate/Elucidate/Shared/MessageBoxExtForm.resx deleted file mode 100644 index 1af7de1..0000000 --- a/Elucidate/Elucidate/Shared/MessageBoxExtForm.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Elucidate/Elucidate/Shared/NumericUpDownPowerOfTwo.cs b/Elucidate/Elucidate/Shared/NumericUpDownPowerOfTwo.cs index f673df2..0556490 100644 --- a/Elucidate/Elucidate/Shared/NumericUpDownPowerOfTwo.cs +++ b/Elucidate/Elucidate/Shared/NumericUpDownPowerOfTwo.cs @@ -10,7 +10,7 @@ public override void UpButton() try { base.UpButton(); - Value = Value * 2; + Value *= 2; } catch (ArgumentOutOfRangeException) { @@ -22,7 +22,7 @@ public override void DownButton() try { base.DownButton(); - Value = Value / 2; + Value /= 2; } catch (ArgumentOutOfRangeException) { diff --git a/Elucidate/Elucidate/Shared/TextOverProgressBar.cs b/Elucidate/Elucidate/Shared/TextOverProgressBar.cs index 2a35727..4c17b38 100644 --- a/Elucidate/Elucidate/Shared/TextOverProgressBar.cs +++ b/Elucidate/Elucidate/Shared/TextOverProgressBar.cs @@ -21,12 +21,15 @@ namespace Elucidate.Shared /// public class TextOverProgressBar : Windows7ProgressBar { - private readonly Timer marqueeTimer = new Timer(); + private readonly Timer marqueeTimer = new(); public TextOverProgressBar() { - SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | - ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor, true); + SetStyle(ControlStyles.AllPaintingInWmPaint + | ControlStyles.UserPaint + | ControlStyles.OptimizedDoubleBuffer + | ControlStyles.ResizeRedraw + | ControlStyles.SupportsTransparentBackColor, true); marqueeTimer.Interval = 1000; marqueeTimer.Tick += AnimateTimer_OnTick; marqueeTimer.Enabled = (Style == ProgressBarStyle.Marquee); @@ -43,7 +46,7 @@ public TextOverProgressBar() [DefaultValue(typeof(string), "ControlText")] public string DisplayText { - get { return Text; } + get => Text; set { if (Text != value) @@ -61,27 +64,19 @@ public string DisplayText public new ProgressBarState State { - get { return base.State; } + get => base.State; set { if (base.State != value) { base.State = value; - Color newColor; - switch (value) + Color newColor = value switch { - case ProgressBarState.Normal: - newColor = Color.LimeGreen; - break; - case ProgressBarState.Pause: - newColor = Color.FromArgb(210, 200, 0); - break; - case ProgressBarState.Error: - newColor = Color.Red; - break; - default: - throw new ArgumentOutOfRangeException("value"); - } + ProgressBarState.Normal => Color.LimeGreen, + ProgressBarState.Pause => Color.FromArgb(210, 200, 0), + ProgressBarState.Error => Color.Red, + _ => throw new ArgumentOutOfRangeException(nameof(State)) + }; ForeColor = Color.FromArgb(Enabled ? 255 : 128, newColor); } } @@ -94,10 +89,7 @@ public string DisplayText [DefaultValue(ProgressBarStyle.Blocks)] public new ProgressBarStyle Style { - get - { - return base.Style; - } + get => base.Style; set { if (base.Style == value) @@ -112,24 +104,22 @@ public string DisplayText private void PaintMarquee(PaintEventArgs e) { - float stepWidthPixel = (float)Width / Maximum; - int localValue = (int)(Value * stepWidthPixel); + var stepWidthPixel = (float)Width / Maximum; + var localValue = (int)(Value * stepWidthPixel); stepWidthPixel *= Step; stepWidthPixel = Math.Max(stepWidthPixel, 5); - int left = Math.Max(Math.Min(localValue + 2, (int)(localValue + stepWidthPixel)), 2); - Rectangle rec = new Rectangle(left, 2, (int)stepWidthPixel * 2, Height); + var left = Math.Max(Math.Min(localValue + 2, (int)(localValue + stepWidthPixel)), 2); + var rec = new Rectangle(left, 2, (int)stepWidthPixel * 2, Height); rec.Height -= 3; // Create a linear gradient brush - using (LinearGradientBrush rgBrush = new LinearGradientBrush(rec, Color.Transparent, ForeColor, 0.0f, true)) - { - // Set sigma bell shape - rgBrush.SetSigmaBellShape(0.5f, 1.0f); - // Set blend triangular shape - rgBrush.SetBlendTriangularShape(0.5f, 1.0f); - // Fill rectangle again - e.Graphics.FillRectangle(rgBrush, rec); - } + using var rgBrush = new LinearGradientBrush(rec, Color.Transparent, ForeColor, 0.0f, true); + // Set sigma bell shape + rgBrush.SetSigmaBellShape(0.5f, 1.0f); + // Set blend triangular shape + rgBrush.SetBlendTriangularShape(0.5f, 1.0f); + // Fill rectangle again + e.Graphics.FillRectangle(rgBrush, rec); } @@ -141,7 +131,7 @@ private void AnimateTimer_OnTick(object sender, EventArgs e) } if (Style == ProgressBarStyle.Marquee) { - int localValue = Value; + var localValue = Value; if (State != ProgressBarState.Pause) { localValue += Step; @@ -170,7 +160,7 @@ private void AnimateTimer_OnTick(object sender, EventArgs e) /// public static GraphicsPath GetRoundedRect(RectangleF baseRect, float radiusX, float radiusY) { - GraphicsPath gp = new GraphicsPath(); + var gp = new GraphicsPath(); gp.StartFigure(); if (radiusX <= 0.0F || radiusY <= 0.0F) @@ -180,7 +170,7 @@ public static GraphicsPath GetRoundedRect(RectangleF baseRect, float radiusX, fl else { //arcs work with diameters (radius * 2) - PointF d = new PointF(Math.Min(radiusX * 2, baseRect.Width), Math.Min(radiusY * 2, baseRect.Height)); + var d = new PointF(Math.Min(radiusX * 2, baseRect.Width), Math.Min(radiusY * 2, baseRect.Height)); gp.AddArc(baseRect.X, baseRect.Y, d.X, d.Y, 180, 90); gp.AddArc(baseRect.Right - d.X, baseRect.Y, d.X, d.Y, 270, 90); gp.AddArc(baseRect.Right - d.X, baseRect.Bottom - d.Y, d.X, d.Y, 0, 90); @@ -202,20 +192,16 @@ protected void NoRendererSupport(PaintEventArgs e, Rectangle rec) } private void DrawBackground(Graphics g, Rectangle rect) { - using (GraphicsPath backgroundPath = GetRoundedRect(rect, 2, 2)) - { - using (Brush backBrush = new SolidBrush(BackColor)) - { - g.FillPath(backBrush, backgroundPath); - } - } + using GraphicsPath backgroundPath = GetRoundedRect(rect, 2, 2); + using Brush backBrush = new SolidBrush(BackColor); + g.FillPath(backBrush, backgroundPath); } private readonly Color black30 = Color.FromArgb(30, Color.Black); private readonly Color black20 = Color.FromArgb(20, Color.Black); private readonly Color white128 = Color.FromArgb(128, Color.White); private void DrawBarHighlight(Graphics g, Rectangle rect) { - Rectangle tr = new Rectangle(rect.Left + 1, rect.Top + 1, rect.Width - 1, 6); + var tr = new Rectangle(rect.Left + 1, rect.Top + 1, rect.Width - 1, 6); using (GraphicsPath tp = GetRoundedRect(tr, 2, 2)) { g.SetClip(tp); @@ -226,38 +212,34 @@ private void DrawBarHighlight(Graphics g, Rectangle rect) g.ResetClip(); } - Rectangle br = new Rectangle(rect.Left + 1, rect.Bottom - 8, rect.Width - 1, 6); - using (GraphicsPath bp = GetRoundedRect(br, 2, 2)) + var br = new Rectangle(rect.Left + 1, rect.Bottom - 8, rect.Width - 1, 6); + using GraphicsPath bp = GetRoundedRect(br, 2, 2); + g.SetClip(bp); + using (Brush bg = new LinearGradientBrush(br, Color.Transparent, black20, LinearGradientMode.Vertical)) { - g.SetClip(bp); - using (Brush bg = new LinearGradientBrush(br, Color.Transparent, black20, LinearGradientMode.Vertical)) - { - g.FillPath(bg, bp); - } - g.ResetClip(); + g.FillPath(bg, bp); } + g.ResetClip(); } private void DrawBackgroundShadows(Graphics g, Rectangle rect) { - Rectangle lr = new Rectangle(rect.Left + 2, rect.Top + 2, 10, rect.Height - 5); + var lr = new Rectangle(rect.Left + 2, rect.Top + 2, 10, rect.Height - 5); using (Brush lg = new LinearGradientBrush(lr, black30, Color.Transparent, LinearGradientMode.Horizontal)) { lr.X--; g.FillRectangle(lg, lr); } - Rectangle rr = new Rectangle(rect.Right - 12, rect.Top + 2, 10, rect.Height - 5); - using (Brush rg = new LinearGradientBrush(rr, Color.Transparent, black20, LinearGradientMode.Horizontal)) - { - g.FillRectangle(rg, rr); - } + var rr = new Rectangle(rect.Right - 12, rect.Top + 2, 10, rect.Height - 5); + using Brush rg = new LinearGradientBrush(rr, Color.Transparent, black20, LinearGradientMode.Horizontal); + g.FillRectangle(rg, rr); } #endregion protected override void OnPaint(PaintEventArgs e) { - Rectangle rec = new Rectangle(0, 0, Width, Height); + var rec = new Rectangle(0, 0, Width, Height); if (ProgressBarRenderer.IsSupported) { @@ -271,7 +253,7 @@ protected override void OnPaint(PaintEventArgs e) { case ProgressBarStyle.Blocks: case ProgressBarStyle.Continuous: - using (LinearGradientBrush brush = new LinearGradientBrush(rec, BackColor, ForeColor, + using (var brush = new LinearGradientBrush(rec, BackColor, ForeColor, LinearGradientMode.Vertical)) { e.Graphics.FillRectangle(brush, 1, 1, (int)(rec.Width * ((double)Value / Maximum)) - 3, rec.Height - 3); @@ -281,23 +263,18 @@ protected override void OnPaint(PaintEventArgs e) PaintMarquee(e); break; default: - throw new ArgumentOutOfRangeException(); + throw new ArgumentOutOfRangeException(nameof(Style)); } - using (SolidBrush sb = new SolidBrush(TextColor)) + using var sb = new SolidBrush(TextColor); + using var sf = new StringFormat(StringFormatFlags.NoWrap) { - using (StringFormat sf = new StringFormat(StringFormatFlags.NoWrap) - { - Alignment = TextAlignment, - LineAlignment = StringAlignment.Center, - Trimming = StringTrimming.EllipsisWord - } - ) - { - rec.Inflate(-5, -2); - e.Graphics.DrawString(Text, Font, sb, rec, sf); - } - } + Alignment = TextAlignment, + LineAlignment = StringAlignment.Center, + Trimming = StringTrimming.EllipsisWord + }; + rec.Inflate(-5, -2); + e.Graphics.DrawString(Text, Font, sb, rec, sf); } diff --git a/Elucidate/Elucidate/Shared/WaitCursor.cs b/Elucidate/Elucidate/Shared/WaitCursor.cs index 73cd023..8121e1b 100644 --- a/Elucidate/Elucidate/Shared/WaitCursor.cs +++ b/Elucidate/Elucidate/Shared/WaitCursor.cs @@ -91,7 +91,7 @@ public WaitCursor(Control target, Cursor curs) throw new ArgumentNullException(nameof(curs)); } - this.targetControl = target; + targetControl = target; if (targetControl != null) { previousCursor = targetControl.Cursor; @@ -127,6 +127,7 @@ private void targetControl_HandleDestroyed(object sender, EventArgs e) public void Dispose() { Dispose(true); + GC.SuppressFinalize(this); } //Change the Mouse Pointer back to the previous diff --git a/Elucidate/Elucidate/TabPages/CommonTab.cs b/Elucidate/Elucidate/TabPages/CommonTab.cs index 3c17a30..d6b72e9 100644 --- a/Elucidate/Elucidate/TabPages/CommonTab.cs +++ b/Elucidate/Elucidate/TabPages/CommonTab.cs @@ -46,14 +46,14 @@ internal partial class CommonTab : UserControl { private static readonly Logger Log = LogManager.GetCurrentClassLogger(); - private RunControl _liveRunLogControl; + private RunControl liveRunLogControl; public RunControl RunLogControl { set { - _liveRunLogControl = value; - _liveRunLogControl.TaskCompleted += liveRunLogControl1_RunWorkerCompleted; + liveRunLogControl = value; + liveRunLogControl.TaskCompleted += liveRunLogControl1_RunWorkerCompleted; } } @@ -61,8 +61,8 @@ public CommonTab() { InitializeComponent(); // Force the output of the help for each verb - Parser parser = new Parser(with => with.HelpWriter = null); - HelpText helpVerb = new HelpText + var parser = new Parser(with => with.HelpWriter = null); + var helpVerb = new HelpText { AddDashesToOption = true, AddEnumValuesToHelpText = true, @@ -101,10 +101,10 @@ public void PerformArgs(string[] args) if (args.Any()) { // https://github.com/commandlineparser/commandline - ParserResult optsResult = Parser.Default.ParseArguments(args); - optsResult.WithParsed(DisplayStdOptions); + var optsResult = Parser.Default.ParseArguments(args); + optsResult.WithParsed(DisplayStdOptions); optsResult.WithNotParsed(DisplayErrors); - ParserResult parserResult = Parser.Default.ParseArguments(args); + var parserResult = Parser.Default.ParseArguments(args); parserResult.WithNotParsed(DisplayErrors); // Order is important as commands "Can" be chained" // See http://www.snapraid.it/manual#4.1 Scrubbing for an indication of order @@ -135,17 +135,17 @@ private void DisplayAndCall(T verb, EventHandler clickCall) private void DisplayStdOptions(TO sv) { - string commandLineRead = string.Join(" ", Environment.GetCommandLineArgs()); + var commandLineRead = string.Join(" ", Environment.GetCommandLineArgs()); Log.Error(@"CommandLine Read: [{0}]", commandLineRead); - string commandLine = Parser.Default.FormatCommandLine(sv); + var commandLine = Parser.Default.FormatCommandLine(sv); if (!string.IsNullOrWhiteSpace(commandLine)) { Log.Info(@"CommandLine options Interpreted: [{0}]", commandLine); - _liveRunLogControl.txtAddCommands.Text = commandLine; - _liveRunLogControl.checkBoxCommandLineOptions.Checked = true; + liveRunLogControl.txtAddCommands.Text = commandLine; + liveRunLogControl.checkBoxCommandLineOptions.Checked = true; if ((sv as StdOptions).Verbose) { - _liveRunLogControl.checkBoxDisplayOutput.Checked = true; + liveRunLogControl.checkBoxDisplayOutput.Checked = true; } } } @@ -154,20 +154,20 @@ private void DisplayStdOptions(TO sv) private void btnStatus_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Status); + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Status); } private void Diff_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Diff); + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Diff); } private void Check_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.checkBoxDisplayOutput.Checked = true; - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Check); + liveRunLogControl.checkBoxDisplayOutput.Checked = true; + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Check); KryptonMessageBox.Show(this, @"Switch to Recover tab to see the 'recoverable files' being populated", @"Recovery may be available"); } @@ -175,8 +175,8 @@ private void Check_Click(object sender, EventArgs e) private void btnCheckForMissing_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.checkBoxDisplayOutput.Checked = true; - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.CheckForMissing); + liveRunLogControl.checkBoxDisplayOutput.Checked = true; + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.CheckForMissing); KryptonMessageBox.Show(this, @"Switch to Recover tab to see the 'recoverable files' being populated", @"Recovery may be available"); } @@ -184,31 +184,31 @@ private void btnCheckForMissing_Click(object sender, EventArgs e) private void Sync_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Sync); + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Sync); } private void Scrub_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Scrub); + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Scrub); } private void Fix_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Fix); + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Fix); } private void DupFinder_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Dup); + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.Dup); } private void ForceFullSync_Click(object sender, EventArgs e) { SetCommonButtonsEnabledState(false); - _liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.ForceFullSync); + liveRunLogControl.StartSnapRaidProcess(RunControl.CommandType.ForceFullSync); } #endregion Button Clicks @@ -219,10 +219,10 @@ private void DisplayErrors(IEnumerable errs) Log.Error(err.Tag); } - StringWriter writer = new StringWriter(); + var writer = new StringWriter(); { // Force the output of the help for each verb - Parser parser = new Parser(with => with.HelpWriter = writer); + var parser = new Parser(with => with.HelpWriter = writer); parser.ParseArguments(new[] { @"--help" }); Log.Info(writer.ToString()); diff --git a/Elucidate/Elucidate/TabPages/Recover.cs b/Elucidate/Elucidate/TabPages/Recover.cs index 4b54976..a43521a 100644 --- a/Elucidate/Elucidate/TabPages/Recover.cs +++ b/Elucidate/Elucidate/TabPages/Recover.cs @@ -54,7 +54,7 @@ public RunControl RunLogControl } } - private readonly Stack batchPaths = new Stack(); + private readonly Stack batchPaths = new (); public Recover() { @@ -99,7 +99,7 @@ private void LiveRunLogControl_TaskCompleted(object sender, EventArgs e) private void SetButtonsEnabledState(bool isEnabled) { - void local() + void Local() { lock (treeView1) { @@ -111,7 +111,7 @@ void local() } else { - bool countOfFilesRecoverable = CountFilesRecoverable(treeView1) > 0; + var countOfFilesRecoverable = CountFilesRecoverable(treeView1) > 0; btnRecoverSelectedFiles.Enabled = countOfFilesRecoverable; btnSelectAllFiles.Enabled = countOfFilesRecoverable; btnClearFiles.Enabled = treeView1.Nodes.Count > 0; @@ -121,11 +121,11 @@ void local() if (InvokeRequired) { - Invoke(new Action(local)); + Invoke(new Action(Local)); } else { - local(); + Local(); } } @@ -164,7 +164,7 @@ private void FindCheckedNodes(List checkedNodes, TreeNodeCollection no // Return a lst of the checked TreeView nodes. private List CheckedNodes(TreeView trv) { - List checkedNodes = new List(); + var checkedNodes = new List(); FindCheckedNodes(checkedNodes, trv.Nodes); return checkedNodes; } @@ -172,7 +172,7 @@ private List CheckedNodes(TreeView trv) // Return the count of all recoverable files private int CountFilesRecoverable(TreeView trv) { - List foundNodes = new List(); + var foundNodes = new List(); FindRecoverableNodes(foundNodes, trv.Nodes); return foundNodes.Count; } @@ -181,19 +181,19 @@ private int CountFilesRecoverable(TreeView trv) // ReSharper disable once UnusedMember.Local private int CountFilesChecked(TreeView trv) { - List foundNodes = new List(); + var foundNodes = new List(); FindCheckedNodes(foundNodes, trv.Nodes); return foundNodes.Count; } - private static Regex recoverable = new Regex( + private static readonly Regex Recoverable = new ( @"(?.*\d\d:\d\d:\d\d.\d\d\d\d).*\[recoverable\s(?.*)\].*", RegexOptions.Compiled | RegexOptions.Singleline); - private static Regex damaged = new Regex( + private static readonly Regex Damaged = new ( @"(?.*\d\d:\d\d:\d\d.\d\d\d\d).*\[damaged\s(?.*)\].*", RegexOptions.Compiled | RegexOptions.Singleline); // 2020-07-04 12:29:48.2953 [ 8] INFO: Elucidate.Controls.LiveRunLogControl: StdOut[damaged stderr.log] - private static Regex missing = new Regex( + private static readonly Regex Missing = new ( @"(?.*\d\d:\d\d:\d\d.\d\d\d\d).*Missing\sfile\s'(?.*)'.*", RegexOptions.Compiled | RegexOptions.Singleline); @@ -203,18 +203,18 @@ private void timerTreeViewFill_Tick(object sender, EventArgs e) { lock (this) { - while (LiveLog.LogQueueRecover.TryDequeue(out string log)) + while (LiveLog.LogQueueRecover.TryDequeue(out var log)) { - bool matchedMissing = false; + var matchedMissing = false; // use regex to parse log line and get the FilePath - Match matches = recoverable.Match(log); + Match matches = Recoverable.Match(log); if (!matches.Success) { - matches = damaged.Match(log); + matches = Damaged.Match(log); } if (!matches.Success) { - matches = missing.Match(log); + matches = Missing.Match(log); matchedMissing = true; } @@ -238,7 +238,7 @@ private void timerTreeViewFill_Tick(object sender, EventArgs e) return; // nothing to do, path is an empty string } - string filePath = groupFilePath.Value; + var filePath = groupFilePath.Value; filePath = filePath.Trim(new char[] { '"' }); if (!matchedMissing) { @@ -255,7 +255,7 @@ private void timerTreeViewFill_Tick(object sender, EventArgs e) } } - private static Regex recovered = new Regex( + private static readonly Regex Recovered = new ( @"(?.*\d\d:\d\d:\d\d.\d\d\d\d).*\[recovered\s(?.*)\].*", RegexOptions.Compiled | RegexOptions.Singleline); private void timerTreeViewRecover_Tick(object sender, EventArgs e) @@ -266,10 +266,10 @@ private void timerTreeViewRecover_Tick(object sender, EventArgs e) lock (this) { //read out of the file until the EOF - while (LiveLog.LogQueueRecover.TryDequeue(out string log)) + while (LiveLog.LogQueueRecover.TryDequeue(out var log)) { // use regex to parse log line and get the FilePath - Match matches = recovered.Match(log); + Match matches = Recovered.Match(log); if (!matches.Success) { // nothing to do, the string did not match regex but it contained "[recovered ", odd @@ -288,10 +288,10 @@ private void timerTreeViewRecover_Tick(object sender, EventArgs e) return; // nothing to do, path is an empty string } - string filePath = groupFilePath.Value; + var filePath = groupFilePath.Value; filePath = filePath.Trim(new char[] { '"' }); - TreeNode[] node = treeView1.Nodes.Find($"/{filePath}", false); + var node = treeView1.Nodes.Find($"/{filePath}", false); if (node.Length <= 0) { node = treeView1.Nodes.Find(filePath, false); @@ -335,17 +335,17 @@ private void SetChildrenChecked(TreeNode treeNode, bool checkedState) } } - private void SetNodeColor(TreeNode treeNode) + private static void SetNodeColor(TreeNode treeNode) { treeNode.BackColor = treeNode.Checked ? Color.Aqua : Color.Empty; } - private void ToggleNodeCheckbox(TreeNode treeNode) + private static void ToggleNodeCheckbox(TreeNode treeNode) { treeNode.Checked = !treeNode.Checked; } - private void UncheckAll(TreeView treeView) + private static void UncheckAll(TreeView treeView) { foreach (TreeNode node in treeView.Nodes) { @@ -353,7 +353,7 @@ private void UncheckAll(TreeView treeView) } } - private void CheckAll(TreeView treeView) + private static void CheckAll(TreeView treeView) { foreach (TreeNode node in treeView.Nodes) { @@ -368,7 +368,7 @@ private void btnRecoverSelectedFiles_Click(object sender, EventArgs e) SetButtonsEnabledState(false); // Get the checked nodes eligible to be recovered - List checkedNodes = CheckedNodes(treeView1); + var checkedNodes = CheckedNodes(treeView1); if (checkedNodes.Count == 0) { diff --git a/Elucidate/Elucidate/wyDay.Controls/Windows7ProgressBar.cs b/Elucidate/Elucidate/wyDay.Controls/Windows7ProgressBar.cs index bee0b53..0709352 100644 --- a/Elucidate/Elucidate/wyDay.Controls/Windows7ProgressBar.cs +++ b/Elucidate/Elucidate/wyDay.Controls/Windows7ProgressBar.cs @@ -16,19 +16,17 @@ namespace Elucidate.wyDay.Controls [ToolboxBitmap(typeof(ProgressBar))] public class Windows7ProgressBar : ProgressBar { - bool showInTaskbar; - private ProgressBarState m_State = ProgressBarState.Normal; - ContainerControl ownerForm; + private bool showInTaskbar; + private ProgressBarState mState = ProgressBarState.Normal; + private ContainerControl ownerForm; public Windows7ProgressBar() { } - public Windows7ProgressBar(ContainerControl parentControl) - { - ContainerControl = parentControl; - } + public Windows7ProgressBar(ContainerControl parentControl) => ContainerControl = parentControl; + public ContainerControl ContainerControl { - get { return ownerForm; } + get => ownerForm; set { ownerForm = value; @@ -45,12 +43,7 @@ public override ISite Site { // Runs at design time, ensures designer initializes ContainerControl base.Site = value; - if (value == null) - { - return; - } - IDesignerHost service = value.GetService(typeof(IDesignerHost)) as IDesignerHost; - if (service == null) + if (value?.GetService(typeof(IDesignerHost)) is not IDesignerHost service) { return; } @@ -60,16 +53,16 @@ public override ISite Site } } - void Windows7ProgressBar_Shown(object sender, System.EventArgs e) + private void Windows7ProgressBar_Shown(object sender, System.EventArgs e) { if (ShowInTaskbar) { if (Style != ProgressBarStyle.Marquee) { - SetValueInTB(); + SetValueInTb(); } - SetStateInTB(); + SetStateInTb(); } ((Form)ownerForm).Shown -= Windows7ProgressBar_Shown; @@ -83,10 +76,7 @@ void Windows7ProgressBar_Shown(object sender, System.EventArgs e) [DefaultValue(false)] public bool ShowInTaskbar { - get - { - return showInTaskbar; - } + get => showInTaskbar; set { if (showInTaskbar != value) @@ -98,10 +88,10 @@ public bool ShowInTaskbar { if (Style != ProgressBarStyle.Marquee) { - SetValueInTB(); + SetValueInTb(); } - SetStateInTB(); + SetStateInTb(); } } } @@ -114,16 +104,13 @@ public bool ShowInTaskbar /// The position within the range of the progress bar. The default is 0. public new int Value { - get - { - return base.Value; - } + get => base.Value; set { base.Value = value; // send signal to the taskbar. - SetValueInTB(); + SetValueInTb(); } } @@ -133,10 +120,7 @@ public bool ShowInTaskbar /// One of the ProgressBarStyle values. The default is ProgressBarStyle.Blocks public new ProgressBarStyle Style { - get - { - return base.Style; - } + get => base.Style; set { base.Style = value; @@ -144,7 +128,7 @@ public bool ShowInTaskbar // set the style of the progress bar if (showInTaskbar && ownerForm != null) { - SetStateInTB(); + SetStateInTb(); } } } @@ -156,12 +140,12 @@ public bool ShowInTaskbar [DefaultValue(ProgressBarState.Normal)] public ProgressBarState State { - get { return m_State; } + get => mState; set { - m_State = value; + mState = value; - bool wasMarquee = Style == ProgressBarStyle.Marquee; + var wasMarquee = Style == ProgressBarStyle.Marquee; if (wasMarquee) // sets the state to normal (and implicity calls SetStateInTB() ) @@ -176,12 +160,12 @@ public ProgressBarState State if (wasMarquee) // the Taskbar PB value needs to be reset { - SetValueInTB(); + SetValueInTb(); } else // there wasn't a marquee, thus we need to update the taskbar { - SetStateInTB(); + SetStateInTb(); } } } @@ -195,7 +179,7 @@ public ProgressBarState State base.Increment(value); // send signal to the taskbar. - SetValueInTB(); + SetValueInTb(); } /// @@ -206,21 +190,21 @@ public ProgressBarState State base.PerformStep(); // send signal to the taskbar. - SetValueInTB(); + SetValueInTb(); } - private void SetValueInTB() + private void SetValueInTb() { if (showInTaskbar) { - ulong maximum = (ulong)(Maximum - Minimum); - ulong progress = (ulong)(Value - Minimum); + var maximum = (ulong)(Maximum - Minimum); + var progress = (ulong)(Value - Minimum); Windows7Taskbar.SetProgressValue(ownerForm.Handle, progress, maximum); } } - private void SetStateInTB() + private void SetStateInTb() { if (ownerForm == null) { @@ -237,11 +221,11 @@ private void SetStateInTB() { thmState = ThumbnailProgressState.Indeterminate; } - else if (m_State == ProgressBarState.Error) + else if (mState == ProgressBarState.Error) { thmState = ThumbnailProgressState.Error; } - else if (m_State == ProgressBarState.Pause) + else if (mState == ProgressBarState.Pause) { thmState = ThumbnailProgressState.Paused; } diff --git a/Elucidate/Elucidate/wyDay.Controls/Windows7Taskbar.cs b/Elucidate/Elucidate/wyDay.Controls/Windows7Taskbar.cs index 671f404..73036ba 100644 --- a/Elucidate/Elucidate/wyDay.Controls/Windows7Taskbar.cs +++ b/Elucidate/Elucidate/wyDay.Controls/Windows7Taskbar.cs @@ -32,16 +32,11 @@ internal static ITaskbarList3 TaskbarList } } - static readonly OperatingSystem osInfo = Environment.OSVersion; + private static readonly OperatingSystem OsInfo = Environment.OSVersion; - internal static bool Windows7OrGreater - { - get - { - return (osInfo.Version.Major == 6 && osInfo.Version.Minor >= 1) - || (osInfo.Version.Major > 6); - } - } + internal static bool Windows7OrGreater => + (OsInfo.Version.Major == 6 && OsInfo.Version.Minor >= 1) + || (OsInfo.Version.Major > 6); /// /// Sets the progress state of the specified window's diff --git a/Elucidate/MountedFolderSupportLibrary/MountedFolderSupportLibrary.csproj b/Elucidate/MountedFolderSupportLibrary/MountedFolderSupportLibrary.csproj index ad10faa..766bda2 100644 --- a/Elucidate/MountedFolderSupportLibrary/MountedFolderSupportLibrary.csproj +++ b/Elucidate/MountedFolderSupportLibrary/MountedFolderSupportLibrary.csproj @@ -1,9 +1,7 @@ - netstandard2.0 - AnyCPU;x64;x86 - False + net48 True False False @@ -12,8 +10,8 @@ SettingsVersion None AssemblyVersionAttribute - 2018.9.28.29 - 18.9.28.29 + 2021.12.29.30 + 21.12.29.30 From da43179be25ca93adbadd13e8664b0d11fe65210 Mon Sep 17 00:00:00 2001 From: Smurf-iv Date: Wed, 29 Dec 2021 14:46:54 +0000 Subject: [PATCH 2/2] - Make sure forms have the same icon - Set `app.manifest` to deal with high dpi --- Elucidate/Elucidate.sln | 10 + .../Elucidate/Controls/RunControl.Designer.cs | 16 +- Elucidate/Elucidate/Elucidate.csproj | 3 +- .../Elucidate/Forms/CalculateBlockSize.cs | 2 + .../Elucidate/Forms/ElucidateForm.Designer.cs | 14 - Elucidate/Elucidate/Forms/ElucidateForm.cs | 4 + Elucidate/Elucidate/Forms/ElucidateForm.resx | 273 +----------------- Elucidate/Elucidate/Forms/LiveLog.Designer.cs | 2 - Elucidate/Elucidate/Forms/LiveLog.cs | 1 + Elucidate/Elucidate/Forms/LiveLog.resx | 257 ----------------- .../Elucidate/Forms/Settings.Designer.cs | 15 +- Elucidate/Elucidate/Forms/Settings.cs | 3 + Elucidate/Elucidate/Forms/Settings.resx | 266 +---------------- .../Elucidate/Properties/AssemblyInfo.cs | 5 +- .../Properties/Resources.Designer.cs | 7 + Elucidate/Elucidate/Properties/Resources.resx | 3 + Elucidate/Elucidate/app.manifest | 18 +- 17 files changed, 61 insertions(+), 838 deletions(-) diff --git a/Elucidate/Elucidate.sln b/Elucidate/Elucidate.sln index f8d939a..931d0e5 100644 --- a/Elucidate/Elucidate.sln +++ b/Elucidate/Elucidate.sln @@ -79,4 +79,14 @@ Global BuildVersion_StartDate = 2000/1/1 SolutionGuid = {39E6A612-AC12-4D63-BE2A-60EA16940A8A} EndGlobalSection + GlobalSection(AutomaticVersions) = postSolution + UpdateAssemblyVersion = True + UpdateAssemblyFileVersion = True + UpdateAssemblyInfoVersion = False + AssemblyVersionSettings = YearStamp.MonthStamp.DayStamp.Increment + AssemblyFileVersionSettings = ShortYearStamp.MonthStamp.DayStamp.Increment + UpdatePackageVersion = False + AssemblyInfoVersionType = SettingsVersion + InheritWinAppVersionFrom = None + EndGlobalSection EndGlobal diff --git a/Elucidate/Elucidate/Controls/RunControl.Designer.cs b/Elucidate/Elucidate/Controls/RunControl.Designer.cs index bce6855..e3b7059 100644 --- a/Elucidate/Elucidate/Controls/RunControl.Designer.cs +++ b/Elucidate/Elucidate/Controls/RunControl.Designer.cs @@ -77,17 +77,14 @@ private void InitializeComponent() // tsStartTime // this.tsStartTime.Dock = System.Windows.Forms.DockStyle.Fill; - this.tsStartTime.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.tsStartTime.Location = new System.Drawing.Point(0, 4); this.tsStartTime.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0); this.tsStartTime.MinimumSize = new System.Drawing.Size(170, 22); this.tsStartTime.Name = "tsStartTime"; this.tsStartTime.Size = new System.Drawing.Size(205, 30); this.tsStartTime.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.tsStartTime.StateCommon.ShortText.ImageStyle = Krypton.Toolkit.PaletteImageStyle.Inherit; this.tsStartTime.StateCommon.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; this.tsStartTime.StateCommon.ShortText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Near; - this.tsStartTime.StateCommon.ShortText.Trim = Krypton.Toolkit.PaletteTextTrim.Inherit; this.tsStartTime.TabIndex = 0; this.tsStartTime.TabStop = false; this.tsStartTime.Values.Text = "2000-01-01 00:00:00Z"; @@ -111,15 +108,12 @@ private void InitializeComponent() // runWithoutCaptureMenuItem // this.runWithoutCaptureMenuItem.Dock = System.Windows.Forms.DockStyle.Fill; - this.runWithoutCaptureMenuItem.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.runWithoutCaptureMenuItem.Location = new System.Drawing.Point(497, 0); this.runWithoutCaptureMenuItem.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.runWithoutCaptureMenuItem.MinimumSize = new System.Drawing.Size(122, 22); this.runWithoutCaptureMenuItem.Name = "runWithoutCaptureMenuItem"; this.runWithoutCaptureMenuItem.Size = new System.Drawing.Size(199, 34); this.runWithoutCaptureMenuItem.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.runWithoutCaptureMenuItem.StateCommon.ShortText.ImageStyle = Krypton.Toolkit.PaletteImageStyle.Inherit; - this.runWithoutCaptureMenuItem.StateCommon.ShortText.Trim = Krypton.Toolkit.PaletteTextTrim.Inherit; this.runWithoutCaptureMenuItem.TabIndex = 3; this.runWithoutCaptureMenuItem.Values.Text = "Run without capture"; this.runWithoutCaptureMenuItem.Visible = false; @@ -129,16 +123,13 @@ private void InitializeComponent() this.checkBoxDisplayOutput.Checked = true; this.checkBoxDisplayOutput.CheckState = System.Windows.Forms.CheckState.Checked; this.checkBoxDisplayOutput.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBoxDisplayOutput.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.checkBoxDisplayOutput.Location = new System.Drawing.Point(337, 0); this.checkBoxDisplayOutput.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.checkBoxDisplayOutput.MinimumSize = new System.Drawing.Size(86, 22); this.checkBoxDisplayOutput.Name = "checkBoxDisplayOutput"; this.checkBoxDisplayOutput.Size = new System.Drawing.Size(152, 34); this.checkBoxDisplayOutput.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBoxDisplayOutput.StateCommon.ShortText.ImageStyle = Krypton.Toolkit.PaletteImageStyle.Inherit; this.checkBoxDisplayOutput.StateCommon.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; - this.checkBoxDisplayOutput.StateCommon.ShortText.Trim = Krypton.Toolkit.PaletteTextTrim.Inherit; this.checkBoxDisplayOutput.TabIndex = 2; this.checkBoxDisplayOutput.Values.Text = "Display Output"; this.checkBoxDisplayOutput.MouseLeave += new System.EventHandler(this.checkBoxDisplayOutput_MouseLeave); @@ -147,6 +138,7 @@ private void InitializeComponent() // comboBoxProcessStatus // this.comboBoxProcessStatus.Dock = System.Windows.Forms.DockStyle.Fill; + this.comboBoxProcessStatus.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; this.comboBoxProcessStatus.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxProcessStatus.DropDownWidth = 120; this.comboBoxProcessStatus.FormattingEnabled = true; @@ -164,8 +156,6 @@ private void InitializeComponent() this.comboBoxProcessStatus.StateCommon.ComboBox.Content.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.comboBoxProcessStatus.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; this.comboBoxProcessStatus.StateCommon.Item.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.comboBoxProcessStatus.StateCommon.Item.Content.ShortText.ImageStyle = Krypton.Toolkit.PaletteImageStyle.Inherit; - this.comboBoxProcessStatus.StateCommon.Item.Content.ShortText.Trim = Krypton.Toolkit.PaletteTextTrim.Inherit; this.comboBoxProcessStatus.TabIndex = 1; this.comboBoxProcessStatus.Text = "Stopped"; this.comboBoxProcessStatus.SelectedIndexChanged += new System.EventHandler(this.comboBoxProcessStatus_SelectedIndexChanged); @@ -179,7 +169,6 @@ private void InitializeComponent() this.txtAddCommands.Name = "txtAddCommands"; this.txtAddCommands.Size = new System.Drawing.Size(502, 26); this.txtAddCommands.StateCommon.Content.Font = new System.Drawing.Font("Lucida Console", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.txtAddCommands.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Inherit; this.txtAddCommands.TabIndex = 1; this.txtAddCommands.ToolTipValues.Description = "Start with a single + to remove the default"; this.txtAddCommands.ToolTipValues.EnableToolTips = true; @@ -212,14 +201,11 @@ private void InitializeComponent() // checkBoxCommandLineOptions // this.checkBoxCommandLineOptions.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBoxCommandLineOptions.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.checkBoxCommandLineOptions.Location = new System.Drawing.Point(5, 5); this.checkBoxCommandLineOptions.Margin = new System.Windows.Forms.Padding(4); this.checkBoxCommandLineOptions.Name = "checkBoxCommandLineOptions"; this.checkBoxCommandLineOptions.Size = new System.Drawing.Size(338, 27); this.checkBoxCommandLineOptions.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBoxCommandLineOptions.StateCommon.ShortText.ImageStyle = Krypton.Toolkit.PaletteImageStyle.Inherit; - this.checkBoxCommandLineOptions.StateCommon.ShortText.Trim = Krypton.Toolkit.PaletteTextTrim.Inherit; this.checkBoxCommandLineOptions.TabIndex = 0; this.checkBoxCommandLineOptions.ToolTipValues.Description = "Will be unchecked after command, so the next command does not include this by acc" + "ident"; diff --git a/Elucidate/Elucidate/Elucidate.csproj b/Elucidate/Elucidate/Elucidate.csproj index ad61cc6..fca7d09 100644 --- a/Elucidate/Elucidate/Elucidate.csproj +++ b/Elucidate/Elucidate/Elucidate.csproj @@ -10,7 +10,7 @@ AnyCPU Elucidate.ico true - en + en-GB 5 preview preview @@ -24,7 +24,6 @@ PreserveNewest - diff --git a/Elucidate/Elucidate/Forms/CalculateBlockSize.cs b/Elucidate/Elucidate/Forms/CalculateBlockSize.cs index 7afad5f..9e10150 100644 --- a/Elucidate/Elucidate/Forms/CalculateBlockSize.cs +++ b/Elucidate/Elucidate/Forms/CalculateBlockSize.cs @@ -45,6 +45,8 @@ public partial class CalculateBlockSize : KryptonForm public CalculateBlockSize() { ParityTargets = new List(2); + Icon = Properties.Resources.ElucidateIco; + InitializeComponent(); var available = new ComputerInfo().TotalPhysicalMemory; const decimal testValue = 1UL << 30; // Should be 1 GBytes diff --git a/Elucidate/Elucidate/Forms/ElucidateForm.Designer.cs b/Elucidate/Elucidate/Forms/ElucidateForm.Designer.cs index 1d13553..fe2c18f 100644 --- a/Elucidate/Elucidate/Forms/ElucidateForm.Designer.cs +++ b/Elucidate/Elucidate/Forms/ElucidateForm.Designer.cs @@ -44,7 +44,6 @@ private void InitializeComponent() this.tabSchedulePage = new Krypton.Navigator.KryptonPage(); this.tpSchedule = new Elucidate.TabPages.Schedule(); this.tabCommonOperations = new Krypton.Navigator.KryptonPage(); - this.tpCoverage = new Elucidate.Controls.ProtectedDrivesDisplay(); this.logPanel = new Krypton.Toolkit.KryptonPanel(); this.commonTab = new Elucidate.TabPages.CommonTab(); this.tabControl = new Krypton.Navigator.KryptonNavigator(); @@ -96,7 +95,6 @@ private void InitializeComponent() this.tabCoveragePage.Padding = new System.Windows.Forms.Padding(4); this.tabCoveragePage.Size = new System.Drawing.Size(1179, 631); this.tabCoveragePage.Text = " Coverage "; - this.tabCoveragePage.ToolTipStyle = Krypton.Toolkit.LabelStyle.ToolTip; this.tabCoveragePage.ToolTipTitle = "Page ToolTip"; this.tabCoveragePage.UniqueName = "83F1AC53801E4FDCCBA828F2D020A11A"; // @@ -122,7 +120,6 @@ private void InitializeComponent() this.tabSchedulePage.Padding = new System.Windows.Forms.Padding(4); this.tabSchedulePage.Size = new System.Drawing.Size(1179, 558); this.tabSchedulePage.Text = "Schedule"; - this.tabSchedulePage.ToolTipStyle = Krypton.Toolkit.LabelStyle.ToolTip; this.tabSchedulePage.ToolTipTitle = "Page ToolTip"; this.tabSchedulePage.UniqueName = "D08ABA17CB8242C412B34C6B2FB9731D"; // @@ -148,7 +145,6 @@ private void InitializeComponent() this.tabCommonOperations.Name = "tabCommonOperations"; this.tabCommonOperations.Size = new System.Drawing.Size(1179, 310); this.tabCommonOperations.Text = " Common SnapRaid "; - this.tabCommonOperations.ToolTipStyle = Krypton.Toolkit.LabelStyle.ToolTip; this.tabCommonOperations.ToolTipTitle = "Page ToolTip"; this.tabCommonOperations.UniqueName = "C7A4A748B4E3458CC28B53AD5B684A5E"; // @@ -179,10 +175,6 @@ private void InitializeComponent() this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tabControl.Group.GroupBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelClient; - this.tabControl.Group.GroupBorderStyle = Krypton.Toolkit.PaletteBorderStyle.ControlClient; - this.tabControl.Header.HeaderStyleBar = Krypton.Toolkit.HeaderStyle.Secondary; - this.tabControl.Header.HeaderStylePrimary = Krypton.Toolkit.HeaderStyle.Primary; - this.tabControl.Header.HeaderStyleSecondary = Krypton.Toolkit.HeaderStyle.Secondary; this.tabControl.Location = new System.Drawing.Point(0, 0); this.tabControl.Margin = new System.Windows.Forms.Padding(0); this.tabControl.Name = "tabControl"; @@ -193,12 +185,9 @@ private void InitializeComponent() this.tabCoveragePage, this.tabSchedulePage, this.tabRecoverFiles}); - this.tabControl.Panel.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelClient; this.tabControl.SelectedIndex = 0; this.tabControl.Size = new System.Drawing.Size(1181, 346); this.tabControl.StateCommon.Tab.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.tabControl.StateCommon.Tab.Content.ShortText.ImageStyle = Krypton.Toolkit.PaletteImageStyle.Inherit; - this.tabControl.StateCommon.Tab.Content.ShortText.Trim = Krypton.Toolkit.PaletteTextTrim.Inherit; this.tabControl.TabIndex = 4; this.tabControl.SelectedPageChanged += new System.EventHandler(this.tabControl_SelectedPageChanged); // @@ -214,7 +203,6 @@ private void InitializeComponent() this.tabLogs.Padding = new System.Windows.Forms.Padding(4); this.tabLogs.Size = new System.Drawing.Size(1179, 631); this.tabLogs.Text = "Log History"; - this.tabLogs.ToolTipStyle = Krypton.Toolkit.LabelStyle.ToolTip; this.tabLogs.ToolTipTitle = "Page ToolTip"; this.tabLogs.UniqueName = "2D998176807546A076BCA98AEA36EF48"; // @@ -242,7 +230,6 @@ private void InitializeComponent() this.tabRecoverFiles.Padding = new System.Windows.Forms.Padding(4); this.tabRecoverFiles.Size = new System.Drawing.Size(1179, 310); this.tabRecoverFiles.Text = "Recover Files"; - this.tabRecoverFiles.ToolTipStyle = Krypton.Toolkit.LabelStyle.ToolTip; this.tabRecoverFiles.ToolTipTitle = "Page ToolTip"; this.tabRecoverFiles.UniqueName = "B4F3B50AB11048A05B80EE8A2A5EDC3A"; // @@ -388,7 +375,6 @@ private void InitializeComponent() this.Controls.Add(this.menuStrip1); this.DoubleBuffered = true; this.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.KeyPreview = true; this.MainMenuStrip = this.menuStrip1; this.Margin = new System.Windows.Forms.Padding(4); diff --git a/Elucidate/Elucidate/Forms/ElucidateForm.cs b/Elucidate/Elucidate/Forms/ElucidateForm.cs index 14094ee..45077ca 100644 --- a/Elucidate/Elucidate/Forms/ElucidateForm.cs +++ b/Elucidate/Elucidate/Forms/ElucidateForm.cs @@ -53,6 +53,10 @@ public sealed partial class ElucidateForm : KryptonForm public ElucidateForm() { + // For some reason the designer keeps removing the following !! + tpCoverage = new Controls.ProtectedDrivesDisplay(); + Icon = Properties.Resources.ElucidateIco; + InitializeComponent(); if (Properties.Settings.Default.UpdateRequired) diff --git a/Elucidate/Elucidate/Forms/ElucidateForm.resx b/Elucidate/Elucidate/Forms/ElucidateForm.resx index 85355d5..dd4b605 100644 --- a/Elucidate/Elucidate/Forms/ElucidateForm.resx +++ b/Elucidate/Elucidate/Forms/ElucidateForm.resx @@ -117,273 +117,18 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + 132, 15 - - + + 17, 17 - - + + 229, 15 - - + + + 57 - - - - - AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA - AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT//+K0///itP//4rT//+K0/wAAAAAAAAAAAAAAAAAA - AAD/4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/i - tP//4rT//+K0///itP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP+Nh4Q6jYeEY//itP//4rT//+K0///itP8AAAAAAAAAAAAAAAD/4rT//+K0///i - tP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAA/+K0///i - tP//4rT//+K0/wAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP+mnpr5t6+q+v/itP//4rT//+K0///itP+Nh4RmjYeEDAAA - AAD/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT/HBYSGwAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/i - tP//4rT//+K0///itP+Nh4RDjYeE0f/itP//4rT//+K0///itP/Kvrb/yLyz///itP//4rT//+K0///i - tP+2raf6koyJ6Y2HhGz/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8UEQ08AAAAAAAAAAAAAAAA/+K0///i - tP//4rT//+K0///itP//4rT//+K0/42HhICqoZ352s/I/v/itP//4rT//+K0///itP9sY1n/RT0z///i - tP//4rT//+K0///itP/Nwbr/39PL/7mvqvr/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAKiIcYv/itP//4rT//+K0///itP8lHxn/HxkU///itP//4rT//+K0///itP//4rT/Eg4MPAAA - AAAAAAAA/+K0///itP//4rT//+K0///itP//4rT//+K0/8C2sPzYz8n/hHty///itP//4rT//+K0///i - tP8WDgb/FQ4G///itP//4rT//+K0///itP8zKyP/lot+/9/Vzf//4rT//+K0///itP//4rT/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAALCMd5//itP//4rT//+K0///itP8bFxL/GhUR/xgTEP//4rT//+K0///i - tP//4rT/EQ0Lzf///wEAAAAAAAAAAP/itP//4rT//+K0///itP//4rT/wLaw/c3DvP9ORj//GhQN///i - tP//4rT//+K0///itP9DOTD/Rjs0///itP//4rT//+K0///itP8VDQX/GxML/29jWf//4rT//+K0///i - tP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///itP//4rT//+K0///itP8eGBT/GhUR///i - tP//4rT//+K0///itP//4rT/CQcF/woHA/8KBwP/CgcD///itP//4rT//+K0///itP//4rT/0MbA/z44 - MP8VDQX/FA0F///itP//4rT//+K0///itP8/NCv/PjMq///itP//4rT//+K0///itP8sIxz/FQ4F///i - tP//4rT//+K0///itP+Ri4iOAAAAAAAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT//+K0///itP8SDgr/EAwH/xMOBf8mHxf/MCkg///itP//4rT//+K0///i - tP//4rT/TUQ8/w8KA/8XEAj/Qjgw///itP//4rT//+K0///itP8rIxz/KSMb///itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT//+K0///itP/Bt7D6jYeELgAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0/w8MCf8WEw//EAsG/xEMBf8hGg3/JB4R/x4Z - E///4rT//+K0///itP+JfXT/EwwG/xYOBv9FOjL/ST40///itP//4rT//+K0///itP8OCwf/DgsH///i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT/Fg4G/4qAdv/e1M3/qKGctwAAAAAAAAAAAAAAAAAA - AAAwJyAPMScg/0E2Lv8xKCL/LiYg/ywkHf8oIRv/Jh4Z/yAZFf8SDwz/DwwJ/w8MCf8cGBP/Eg0G/xIM - Bf8gGQz/IRoO/xkUDv8bFxL/pZ6Y/9TKxv8rJBv/DwsE/zYtJf9QRTz/MCgf/yMcFv8LCQb/Ew8L/xwY - Ef8jHRf/KiMa/yQgGP8gGxX/Ew8L/w8MCv8tJR//OTAo/zwzLP82LCX/FQ0F/yUeF//SyMH/yr+4/I2H - hBEAAAAAAAAAAAAAAAAwJyAPMScg/0Q6Mv80KyX/LiYg/ywkHf8oIRv/Jh4Z/yAZFf8TDwz/DwwI/xEM - Cf8jHRb/FA8J/xMOBv8fGAr/IBgL/xQQCv8jIBv/0MbA/5KIfv8OCAH/HRUO/1ZLQ/82LST/JB0X/wsJ - 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 - EP8hHBb/JyMd/yMeGf8bGBL/ERAJ/xURDP8bFAz/Z1xR/93V0P/l3NP/p52V/w4KBf8mIRj/Ukk7/yMc - D//F//gBAAAAAAAAAAAwJyAPMScg/0E2Lv8xKCL/LSUf/ysjHP8oIRv/Jh4Z/yAZFf8WEQ7/FRAN/xMM - B/82LiP/HhgS/xgSC/8sJRj/MSsf/y8sKf81My//NDIu/y4rKP8jIR7/GBcT/zMwK//EvLT/2NDL/9DI - wP9za2H/KSMZ/x4YD/8dGA//HhgQ/x4YEP8eGA//IRkP/2tjWf/Fv7j/39nT/9/a1P9qZFz/EA0H/w4L - Bv9RTEP/TUQ2/yAZDP/F//gBAAAAAAAAAAAwJyAPMCcg/zMpIf8uJR//Mysl/0Y/Of9JRD7/RT85/0lE - P/8wKyj/FREO/xIMB/8xKB//GhUP/xUPCf8mIBP/Licc/y4rKP81My//ODYy/zMyL/8qKCX/IiAc/xkZ - Ff8WFRH/amZg/9HJwf/b1c//4t/Y/87Hvv+9t7D/qqae/7iyqv/OyMD/49zU/97Y0f/g2tP/qKOa/yYi - Hf8SEAr/Eg8J/z89OP9OSD3/TEQ2/xsUB//F//gBxf/4AQAAAAAwJyADMCcg8C8mH/8uJR//PTcx/y0o - Iv8cGBL/HBcR/x0YE/8zLin/OjYy/xIMBv8sIxz/GBMM/xMOCP8jHBD/KiUa/ysoJP82My7/OTg0/zg3 - M/8zMi//Kykm/yQiH/8fHhr/HBsW/xwcF/9RUEv/jYuE/8jDu//Lxb3/8evi/9XPyP/Lx77/q6ii/2to - Yv8pKSL/HBoV/xgWEP8WFQ//Q0A7/1hUTP9BOy//R0Aw/xsVCP/F//gBxf/4AQAAAAAAAAAAMCcgGy8m - H5MuJR//IhwW/zAoIP9CNy7/PzQr/y8nIf8bFhH/GRQP/xIMBv8mHRb/FRAK/xINBv8gGg3/KSIV/zEr - H/8+OS7/Ojgz/z08N/87Ojb/NjUy/zAvLP8rLCj/KSom/yorJv8rLSj/LTAq/y8yLf8wNC//MTUw/zE0 - L/8wNC7/LzEr/ystKP8nKCP/JyYg/zs8Nv9TU03/TkpE/0M9Mv9CPDD/PDQm/xsVCP/F//gBxf/4AQAA - AAAAAAAAAAAAAAAAAAAuJR/2OjAo/0g8Mf9CNyz/PzQr/0M3Lv8kHRn/GRQQ/xALBv8bFQ3/Ew4H/xIM - Bv8fGAv/JB0R/y4oHP85NCj/NjUx/z49Of9APzv/QEE9/0JBPP9CQj3/QkQ+/0NFP/9ER0H/R0pF/0lM - R/9QVlH/T1dR/0dMRv9FS0T/Q0dB/0FDPf9MTkj/UlVO/0FCO/9CQTn/RUE3/0VBNf9DPTL/KyUX/xwW - CfbF//gCxf/4AQAAAAAAAAAAAAAAAAAAAAAuJR/nKyId/zAoH/80KyL/Mykh/yoiG/8YEw//HBYS/xcR - B/8RDAX/EAsF/xEMBv8dFgr/IRoO/yslGv80LiL/NDIu/z08Of9DQz//SkpG/1NSSv9VVU3/V1dP/1lb - U/9aXlb/XGBZ/15kXP9pdW3/a3Zu/2BnX/9gZl7/XWNb/1peVv9XWlH/UVNL/01NRf9KSUD/S0c8/0dD - OP9BPDD/IhsP/x0YC9DF//gCxf/4AgAAAAAAAAAAAAAAAAAAAAAuJR+3KCEb/x8ZE/8eGBP/GxUR/xkT - D/8ZFBD/HBYS/BoTBtwaEwb/MSca/0A3LP9QRC//VEoz/19UQP9mXEn/WldO/2NhWv9pZ2D/bWtg/25u - Y/9ycmf/dHZr/3d8cf94f3T/fIR4/32HfP+QoJn/kKGb/3+Kf/9+iX7/fIV6/3h/dP9zeG3/bG9l/2do - Xf9jYlX/XVtO/1RQRf8yLSH/HxoO/yIeEWnF//gExf/4AgAAAAAAAAAAAAAAAAAAAAAuJR8/LCQe/yoi - G/8lHhj/IhsW/yEbFv8fGRX/HBYSpSMcEBkZEga5GRIG/xoTB/8bFAf/GxUI/xsVCP8dFwr/HxkN/yEc - D/8jIBP/JyUY/ysqHv8vMST/NTgs/zo+M/8+RTn/Qks//0ZQRf9id2z/Y3ht/0pVSf9IUkf/Rk9E/0JK - Pv8+RDj/OT4y/zM2Kv8vMCP/Kyoe/yclGP8lIxbPKikdacX/+AfF//gExf/4AgAAAAAAAAAAAAAAAAAA - AAAAAAAALCQeSCsjHKUoIRvMJh4ZvSMcF5kfGRVyHBYSCQAAAAAhGxITFQ8F8BYQBv8WEAb/FhEH/xgT - Cf8YFAr/GxcN/x0aEP8zOC9ixf/4FhwhHv8kLCj/Ljgz/zlEQP9EUk3/TVtX/1RlYP92ko3/d5OO/1pr - Z/9WaGP/UF9b/0hWUv8+S0f/Mz86/ykzL/8iKSb/xf/4HcX/+BbF//gQxf/4C8X/+AjF//gFxf/4AwAA - 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 - +APF//gFxf/4B8X/+ArF//gPxf/4FMX/+Bo3RUGCKDEt5is1Mf8xPjr/OkpG/0NVUf98n5n/faGb/0pe - Wv9FV1P/PU1I/zVDP/8vOzf/Ljo23VJoY2XF//ggxf/4GsX/+BPF//gOxf/4CsX/+AfF//gFxf/4AgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMX/ - +AHF//gBxf/4AsX/+ALF//gExf/4BcX/+AjF//gMxf/4EMX/+BbF//gcxf/4IsX/+CnF//gwxf/4NsX/ - +D7F//iFxf/4hsX/+EPF//hAxf/4OsX/+DTF//guxf/4KMX/+CLF//gbxf/4FcX/+BDF//gMxf/4CMX/ - +AXF//gExf/4AuHAPAGAf6dS4cIcIYAfp1LhhgAhhh+nUuGGAGAHD6dS4Q8IYAEPp1LgDwgAAA+nUuAD - gAAAD6dSwAGAAAAPp1LAAMAAAA+nUoAAAAAAD6dSgAAAAAAHp1KAAAAAAAenUoAAAAAAA6dSgAAAAAAD - p1KAAAAAAAOnUoAAAAAAAadSgAAAAAADp1KAAAAAAAOnUoAAAAAAA6dSgAAAAAADp1KAAAAAAAOnUoAA - AAAAA6dSgAAAAAADp1KAAAAAAAOnUoAAAAAAA6dSgAAAAAADp1KAAAAAAAOnUoAAAAAAAadSgAAAAAAB - p1KAAAAAAACnUoAAAAAAAKdSwAAAAAAAp1LwAAAAAACnUvAAAAAAAKdS8AAAAAAAp1LwAAAAAACnUvgI - AAAAAKdS//wAAAAAp1L//AAAAACnUv/8AAAAAKdS//wAAAAAp1L//AAAAACnUv/8AAAAAKdS//wAAAAA - p1L//AAAAACnUv/+AAAAAKdS//4AAAAAp1L//gAAAACnUigAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0qgAAAAD/4rRV/+K0///itP//4rTG/+K0///i - tP//4rQ5AAAAAP/itFX/4rT//+K0///itMb/4rT//+K0///itKoAAAAA/+K0///itP//4rT//+K0///i - tP//4rSO/+K0OQAAAAAAAAAAAAAAAAAAAAAAAAAA/+K0///itP//4rSqAAAAAP/itMb/4rT//+K0xv/i - tBz/4rT//+K0///itOP/4rSq/+K0xv/itP//4rT//+K0Vf/itP//4rT//+K0qgAAAAD/4rT//+K0///i - tMb/4rRV/+K0///itP//4rSqAAAAAAAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itKr/4rQ5/+K0///i - tP//4rRxAAAAAP/itMb/4rT//+K0///itMb/4rT//+K0///itKoAAAAA/+K0///itP/bxqbTmZKOjP/i - tP//4rT/6dGrtY2HhA7/4rRV/+K0///itP//4rRVAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K04//i - tOP/4rT/modsmgAAAAAAAAAA/+K0Vf/itP//4rT//+K0Vf/itP//4rT/4cqnuY2HhGz/4rT//+K0/+nS - sf7Atq79/+K0///itP/izKvtmJGOrcOym4X/4rT//+K0///itFUAAAAAAAAAAAAAAAAqIhwW/+K0///i - tP/mzKL/tZ9////itP//4rT/yrOO1E9FNzcAAAAA/+K0qv/itP//4rT//+K0///itP+nn5vFvLKr/f/i - tP//4rT/xK6M/z01LP//4rT//+K0/93Gpf+3rKP/2Mi1/f/itP//4rT//+K0VQAAAAAAAAAAAAAAACsi - HHz/4rT//+K0/7Sffv8cFxL/mIZr///itP//4rT/YFRDvQAAAAD/4rQ5/+K0///itP//4rT/486y/q+l - n/5SSkP//+K0///itP+7pIP/NSsj///itP//4rT/tJ59/zcvJf+3ppH//+K0///itP//4rRVAAAAAAAA - AAAwJyAFMCcgr//itP//4rT/zbWQ/2daSP//4rT//+K0/+TKof9COSz/DwsF/xURC///4rT//+K0///i - tP/Csp7/Jh8Y/x4WDv//4rT//+K0/7ymhP83LSX//+K0///itP/Qt5L/aFlE///itP//4rT/38mp5ZuU - kEYAAAAAAAAAADAnIAUwJyCv/+K0///itP//4rT//+K0///itP//4rT/Rj0w/xENCP8XEQj/Jh8U/5uI - bP//4rT/5Mul/1RJPf8fFw//QTYt///itP//4rT/sZ18/xcTDf//4rT//+K0///itP//4rT//+K0/5eD - Zv+8rp3+sKmjsAAAAAAAAAAAMCcgBTAnIK88Miv/Lych/yojHP8mHxn/GxUS/xANCf8UEAz/FhEL/xYQ - B/8gGQz/GRUP/4F6df+JgHr/GBIL/0I5MP81LCT/FxIN/xMPC/8aFQ//IBoT/x4ZEv8bFhH/GBQQ/y4n - IP87Miv/JBsU/09IQf/Ivrb+g315KAAAAAAwJyAFMCcgr0I4Mf8yKSP/KyMc/yYeGf8bFRL/EA0J/xkT - D/8cFxD/GBII/x8XCv8iHhn/p5+a/0c/N/8iGhP/QDcu/x4ZEv8TEAv/FhEM/xMOCf8TDgn/FA8K/xkU - Dv8eGRT/GBQQ/zoxKf84Lyf/IRwW/7CnoP+IgHmOAAAAADAnIAUwJyCvSkE5/zYuJ/8rIx3/Jh8Z/xwV - Ev8RDQn/GxYQ/ychGf8dFg3/IRkM/zs3Mf+/t7H/IBkR/zgvJ/8rJBz/FBAL/xcUDP8UDwr/GRQL/x0Y - DP8dFw3/GBIL/xkVD/8UEw3/KCEb/0I4MP8XEAj/lo2G/5WMgq0aEwYDMCcgBTAnIK9QSED/OTEr/ywk - Hv8mHhn/HBYS/xENCv8dGBL/Licf/yMcE/8nIBL/R0M9/8K6tP8bFQ3/NCwj/ychGv8UEAv/FBEL/xoV - Df8eFgj/JxcK/x4VCP8iHA//FREL/xUUDv8hGxX/NCwj/xoSC/+If3f/0se/qgAAAAAwJyAFMCcgr1VL - Rf87My3/LCUe/yYfGf8cFhP/Eg4L/yAaFP8zLCT/KSEY/zAoG/9KRUD/urOu/yAaEv8oIRr/JyEa/xIP - C/8TEQv/HxsQ/yAVCP84Ggv/GREH/yEcD/8VEgz/ExEM/yIdF/8zKiP/GBIK/46Dev/IvrWqAAAAADAn - IAUwJyCvU0pE/zoyLP8sJB3/Jh4Z/xwWEv8SDgv/IBoU/zQtJP8rIxr/Ni4h/z05Nf+xqqb/Mysk/yUf - F/8tJh//FREM/xQTDP8fGhD/JhwN/zYcC/8lGQv/Ix4S/xERDP8QDgr/KyQd/zEpIP8cFQ7/p5uS/6Oa - kKoAAAAAMCcgBTAnIK9NRD3/Ni4o/yskHf8mHxn/HBYT/xQPDP8hHBT/NC0k/yskG/84MST/KSUi/5GL - h/92b2r/HBYQ/zErI/8kHhj/EQ4J/xgUDf8jHxX/KSMa/yQgFf8XFw//EhEM/xoWEf8zKyP/Ix0W/0E5 - MP/Qxr7/OzMnqgAAAAAwJyAFMCcgr0c+N/80LCX/KyMd/yYeGf8cFhL/FA8M/yAbFP8zLCT/KyQb/zky - Jv8qJyT/V1NO/7WtqP81Lif/KyUd/zwyLP8dGBL/EA4J/xYVEf8cGhj/FhUQ/xUTDv8ZFRD/Misk/zMr - JP8WEQv/hntz/8rBuP8bFAeqAAAAADAnIAUwJyCvQTcw/zAoIv8qIxz/Jh8Z/xwWEv8UEA3/IRoT/zEq - If8oIRj/OTIl/y4rKP8mIyD/oZqU/5eOiP8bFQ7/Ny8o/0U8NP8wKSP/GxcS/xkWEf8bFxL/KCIb/z82 - Lf9GPTX/GxYQ/0xDOv/SyL//XVRG/yQdEaoAAAAAMCcgBTAnIK8+Myz/Lych/yojHP8mHhn/HBYS/xQQ - Df8gGRP/Licf/yQeFv82LyP/MC0q/ysoJf9APDj/tKym/3lwZ/8eGBD/Ligh/0lBOf9COTL/RTw0/0lB - Of9FPTX/KyUf/xoWEP9KQTj/x721/4N6cv83LyL/JR4RqgAAAAAwJyAFMCcgrzsxKv8uJiD/KiIb/yYf - Gf8cFhL/FBAN/x8YEf8oIRr/HxoR/zErH/8xLiv/MjAt/yUjH/80MSz/squk/66knP9LRDz/Ix4W/xsY - Ef8iHRf/HxoU/xgUDf89NzD/e3Jq/9LLxP+MhHz/GhYQ/0c/M/9YZ1yqAAAAADAnIAUwJyCvNCoj/zAo - Iv89NjD/OzUv/zQvK/8bFhP/HRYP/yMcFf8cFQ3/LCYa/zAtKv82NDD/Liwp/yEfHP8xLyr/eXVv/8jB - uf+rpp7/j4mA/396cv+Jg3v/nZaN/8K7tP/Dvrb/Uk5I/xsYEv85NS//TUU5/1RjWKrE//gBMCcgATAn - IHEuJR/nMisl/ywmH/8oIRr/JSAa/y0pJP8aEwz/HRcQ/xcSCf8nIRX/MC0m/zk3Mf84NzP/MS8s/yYl - If8hIBz/LCwn/19fWf+Vk4z/qKWe/5yZkv+Ih4D/RkU//yIhG/8lJR//PTo1/0tGPP9COy3/U2NYqsX/ - +AEAAAAAMCcgBi4lH3QwJyH9QDUr/0A1K/8zKiP/GxYR/xUPCf8XEQr/FhAH/yMcEP8yLSH/ODUv/z08 - OP89PTn/Ozo2/zk7Nf87PTf/PUA6/0JFQP9FS0X/P0M9/zxAOv87PTf/QkQ9/0FCO/9HRTz/Qz4z/zYw - I/9UY1inxP/4AQAAAAAAAAAALiUfSCsiHfIrIxv/KyMc/yAZFP8aFRH+FhAG9xgSCf8lHhP/MCgY/z83 - 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 - rEEAAKxBgACsQYAArEH4AKxB+ACsQfgArEE= - \ No newline at end of file diff --git a/Elucidate/Elucidate/Forms/LiveLog.Designer.cs b/Elucidate/Elucidate/Forms/LiveLog.Designer.cs index a1801a1..d7c052a 100644 --- a/Elucidate/Elucidate/Forms/LiveLog.Designer.cs +++ b/Elucidate/Elucidate/Forms/LiveLog.Designer.cs @@ -28,7 +28,6 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LiveLog)); this.rtbLiveLog = new System.Windows.Forms.ListBox(); this.SuspendLayout(); // @@ -54,7 +53,6 @@ private void InitializeComponent() this.Controls.Add(this.rtbLiveLog); this.DoubleBuffered = true; this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MinimumSize = new System.Drawing.Size(930, 500); this.Name = "LiveLog"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; diff --git a/Elucidate/Elucidate/Forms/LiveLog.cs b/Elucidate/Elucidate/Forms/LiveLog.cs index ceb4de9..b893254 100644 --- a/Elucidate/Elucidate/Forms/LiveLog.cs +++ b/Elucidate/Elucidate/Forms/LiveLog.cs @@ -38,6 +38,7 @@ public partial class LiveLog : KryptonForm public LiveLog() { + Icon = Properties.Resources.ElucidateIco; InitializeComponent(); ListBoxLog ??= new ListBoxLog(rtbLiveLog); WindowLocation.GeometryFromString(Properties.Settings.Default.LogWindowLocation, this); diff --git a/Elucidate/Elucidate/Forms/LiveLog.resx b/Elucidate/Elucidate/Forms/LiveLog.resx index 006ba9b..1af7de1 100644 --- a/Elucidate/Elucidate/Forms/LiveLog.resx +++ b/Elucidate/Elucidate/Forms/LiveLog.resx @@ -117,261 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA - AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT//+K0///itP//4rT//+K0/wAAAAAAAAAAAAAAAAAA - AAD/4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/i - tP//4rT//+K0///itP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP+Nh4Q6jYeEY//itP//4rT//+K0///itP8AAAAAAAAAAAAAAAD/4rT//+K0///i - tP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAA/+K0///i - tP//4rT//+K0/wAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP+mnpr5t6+q+v/itP//4rT//+K0///itP+Nh4RmjYeEDAAA - AAD/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT/HBYSGwAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/i - tP//4rT//+K0///itP+Nh4RDjYeE0f/itP//4rT//+K0///itP/Kvrb/yLyz///itP//4rT//+K0///i - tP+2raf6koyJ6Y2HhGz/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8UEQ08AAAAAAAAAAAAAAAA/+K0///i - tP//4rT//+K0///itP//4rT//+K0/42HhICqoZ352s/I/v/itP//4rT//+K0///itP9sY1n/RT0z///i - tP//4rT//+K0///itP/Nwbr/39PL/7mvqvr/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAKiIcYv/itP//4rT//+K0///itP8lHxn/HxkU///itP//4rT//+K0///itP//4rT/Eg4MPAAA - AAAAAAAA/+K0///itP//4rT//+K0///itP//4rT//+K0/8C2sPzYz8n/hHty///itP//4rT//+K0///i - tP8WDgb/FQ4G///itP//4rT//+K0///itP8zKyP/lot+/9/Vzf//4rT//+K0///itP//4rT/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAALCMd5//itP//4rT//+K0///itP8bFxL/GhUR/xgTEP//4rT//+K0///i - tP//4rT/EQ0Lzf///wEAAAAAAAAAAP/itP//4rT//+K0///itP//4rT/wLaw/c3DvP9ORj//GhQN///i - tP//4rT//+K0///itP9DOTD/Rjs0///itP//4rT//+K0///itP8VDQX/GxML/29jWf//4rT//+K0///i - tP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///itP//4rT//+K0///itP8eGBT/GhUR///i - tP//4rT//+K0///itP//4rT/CQcF/woHA/8KBwP/CgcD///itP//4rT//+K0///itP//4rT/0MbA/z44 - MP8VDQX/FA0F///itP//4rT//+K0///itP8/NCv/PjMq///itP//4rT//+K0///itP8sIxz/FQ4F///i - tP//4rT//+K0///itP+Ri4iOAAAAAAAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT//+K0///itP8SDgr/EAwH/xMOBf8mHxf/MCkg///itP//4rT//+K0///i - tP//4rT/TUQ8/w8KA/8XEAj/Qjgw///itP//4rT//+K0///itP8rIxz/KSMb///itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT//+K0///itP/Bt7D6jYeELgAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0/w8MCf8WEw//EAsG/xEMBf8hGg3/JB4R/x4Z - E///4rT//+K0///itP+JfXT/EwwG/xYOBv9FOjL/ST40///itP//4rT//+K0///itP8OCwf/DgsH///i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT/Fg4G/4qAdv/e1M3/qKGctwAAAAAAAAAAAAAAAAAA - AAAwJyAPMScg/0E2Lv8xKCL/LiYg/ywkHf8oIRv/Jh4Z/yAZFf8SDwz/DwwJ/w8MCf8cGBP/Eg0G/xIM - Bf8gGQz/IRoO/xkUDv8bFxL/pZ6Y/9TKxv8rJBv/DwsE/zYtJf9QRTz/MCgf/yMcFv8LCQb/Ew8L/xwY - Ef8jHRf/KiMa/yQgGP8gGxX/Ew8L/w8MCv8tJR//OTAo/zwzLP82LCX/FQ0F/yUeF//SyMH/yr+4/I2H - hBEAAAAAAAAAAAAAAAAwJyAPMScg/0Q6Mv80KyX/LiYg/ywkHf8oIRv/Jh4Z/yAZFf8TDwz/DwwI/xEM - Cf8jHRb/FA8J/xMOBv8fGAr/IBgL/xQQCv8jIBv/0MbA/5KIfv8OCAH/HRUO/1ZLQ/82LST/JB0X/wsJ - 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 - EP8hHBb/JyMd/yMeGf8bGBL/ERAJ/xURDP8bFAz/Z1xR/93V0P/l3NP/p52V/w4KBf8mIRj/Ukk7/yMc - D//F//gBAAAAAAAAAAAwJyAPMScg/0E2Lv8xKCL/LSUf/ysjHP8oIRv/Jh4Z/yAZFf8WEQ7/FRAN/xMM - B/82LiP/HhgS/xgSC/8sJRj/MSsf/y8sKf81My//NDIu/y4rKP8jIR7/GBcT/zMwK//EvLT/2NDL/9DI - wP9za2H/KSMZ/x4YD/8dGA//HhgQ/x4YEP8eGA//IRkP/2tjWf/Fv7j/39nT/9/a1P9qZFz/EA0H/w4L - Bv9RTEP/TUQ2/yAZDP/F//gBAAAAAAAAAAAwJyAPMCcg/zMpIf8uJR//Mysl/0Y/Of9JRD7/RT85/0lE - P/8wKyj/FREO/xIMB/8xKB//GhUP/xUPCf8mIBP/Licc/y4rKP81My//ODYy/zMyL/8qKCX/IiAc/xkZ - Ff8WFRH/amZg/9HJwf/b1c//4t/Y/87Hvv+9t7D/qqae/7iyqv/OyMD/49zU/97Y0f/g2tP/qKOa/yYi - Hf8SEAr/Eg8J/z89OP9OSD3/TEQ2/xsUB//F//gBxf/4AQAAAAAwJyADMCcg8C8mH/8uJR//PTcx/y0o - Iv8cGBL/HBcR/x0YE/8zLin/OjYy/xIMBv8sIxz/GBMM/xMOCP8jHBD/KiUa/ysoJP82My7/OTg0/zg3 - M/8zMi//Kykm/yQiH/8fHhr/HBsW/xwcF/9RUEv/jYuE/8jDu//Lxb3/8evi/9XPyP/Lx77/q6ii/2to - Yv8pKSL/HBoV/xgWEP8WFQ//Q0A7/1hUTP9BOy//R0Aw/xsVCP/F//gBxf/4AQAAAAAAAAAAMCcgGy8m - H5MuJR//IhwW/zAoIP9CNy7/PzQr/y8nIf8bFhH/GRQP/xIMBv8mHRb/FRAK/xINBv8gGg3/KSIV/zEr - H/8+OS7/Ojgz/z08N/87Ojb/NjUy/zAvLP8rLCj/KSom/yorJv8rLSj/LTAq/y8yLf8wNC//MTUw/zE0 - L/8wNC7/LzEr/ystKP8nKCP/JyYg/zs8Nv9TU03/TkpE/0M9Mv9CPDD/PDQm/xsVCP/F//gBxf/4AQAA - AAAAAAAAAAAAAAAAAAAuJR/2OjAo/0g8Mf9CNyz/PzQr/0M3Lv8kHRn/GRQQ/xALBv8bFQ3/Ew4H/xIM - Bv8fGAv/JB0R/y4oHP85NCj/NjUx/z49Of9APzv/QEE9/0JBPP9CQj3/QkQ+/0NFP/9ER0H/R0pF/0lM - R/9QVlH/T1dR/0dMRv9FS0T/Q0dB/0FDPf9MTkj/UlVO/0FCO/9CQTn/RUE3/0VBNf9DPTL/KyUX/xwW - CfbF//gCxf/4AQAAAAAAAAAAAAAAAAAAAAAuJR/nKyId/zAoH/80KyL/Mykh/yoiG/8YEw//HBYS/xcR - B/8RDAX/EAsF/xEMBv8dFgr/IRoO/yslGv80LiL/NDIu/z08Of9DQz//SkpG/1NSSv9VVU3/V1dP/1lb - U/9aXlb/XGBZ/15kXP9pdW3/a3Zu/2BnX/9gZl7/XWNb/1peVv9XWlH/UVNL/01NRf9KSUD/S0c8/0dD - OP9BPDD/IhsP/x0YC9DF//gCxf/4AgAAAAAAAAAAAAAAAAAAAAAuJR+3KCEb/x8ZE/8eGBP/GxUR/xkT - D/8ZFBD/HBYS/BoTBtwaEwb/MSca/0A3LP9QRC//VEoz/19UQP9mXEn/WldO/2NhWv9pZ2D/bWtg/25u - Y/9ycmf/dHZr/3d8cf94f3T/fIR4/32HfP+QoJn/kKGb/3+Kf/9+iX7/fIV6/3h/dP9zeG3/bG9l/2do - Xf9jYlX/XVtO/1RQRf8yLSH/HxoO/yIeEWnF//gExf/4AgAAAAAAAAAAAAAAAAAAAAAuJR8/LCQe/yoi - G/8lHhj/IhsW/yEbFv8fGRX/HBYSpSMcEBkZEga5GRIG/xoTB/8bFAf/GxUI/xsVCP8dFwr/HxkN/yEc - D/8jIBP/JyUY/ysqHv8vMST/NTgs/zo+M/8+RTn/Qks//0ZQRf9id2z/Y3ht/0pVSf9IUkf/Rk9E/0JK - Pv8+RDj/OT4y/zM2Kv8vMCP/Kyoe/yclGP8lIxbPKikdacX/+AfF//gExf/4AgAAAAAAAAAAAAAAAAAA - AAAAAAAALCQeSCsjHKUoIRvMJh4ZvSMcF5kfGRVyHBYSCQAAAAAhGxITFQ8F8BYQBv8WEAb/FhEH/xgT - Cf8YFAr/GxcN/x0aEP8zOC9ixf/4FhwhHv8kLCj/Ljgz/zlEQP9EUk3/TVtX/1RlYP92ko3/d5OO/1pr - Z/9WaGP/UF9b/0hWUv8+S0f/Mz86/ykzL/8iKSb/xf/4HcX/+BbF//gQxf/4C8X/+AjF//gFxf/4AwAA - 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 - +APF//gFxf/4B8X/+ArF//gPxf/4FMX/+Bo3RUGCKDEt5is1Mf8xPjr/OkpG/0NVUf98n5n/faGb/0pe - Wv9FV1P/PU1I/zVDP/8vOzf/Ljo23VJoY2XF//ggxf/4GsX/+BPF//gOxf/4CsX/+AfF//gFxf/4AgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMX/ - +AHF//gBxf/4AsX/+ALF//gExf/4BcX/+AjF//gMxf/4EMX/+BbF//gcxf/4IsX/+CnF//gwxf/4NsX/ - +D7F//iFxf/4hsX/+EPF//hAxf/4OsX/+DTF//guxf/4KMX/+CLF//gbxf/4FcX/+BDF//gMxf/4CMX/ - +AXF//gExf/4AuHAPAGAf6dS4cIcIYAfp1LhhgAhhh+nUuGGAGAHD6dS4Q8IYAEPp1LgDwgAAA+nUuAD - gAAAD6dSwAGAAAAPp1LAAMAAAA+nUoAAAAAAD6dSgAAAAAAHp1KAAAAAAAenUoAAAAAAA6dSgAAAAAAD - p1KAAAAAAAOnUoAAAAAAAadSgAAAAAADp1KAAAAAAAOnUoAAAAAAA6dSgAAAAAADp1KAAAAAAAOnUoAA - AAAAA6dSgAAAAAADp1KAAAAAAAOnUoAAAAAAA6dSgAAAAAADp1KAAAAAAAOnUoAAAAAAAadSgAAAAAAB - p1KAAAAAAACnUoAAAAAAAKdSwAAAAAAAp1LwAAAAAACnUvAAAAAAAKdS8AAAAAAAp1LwAAAAAACnUvgI - AAAAAKdS//wAAAAAp1L//AAAAACnUv/8AAAAAKdS//wAAAAAp1L//AAAAACnUv/8AAAAAKdS//wAAAAA - p1L//AAAAACnUv/+AAAAAKdS//4AAAAAp1L//gAAAACnUigAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0qgAAAAD/4rRV/+K0///itP//4rTG/+K0///i - tP//4rQ5AAAAAP/itFX/4rT//+K0///itMb/4rT//+K0///itKoAAAAA/+K0///itP//4rT//+K0///i - tP//4rSO/+K0OQAAAAAAAAAAAAAAAAAAAAAAAAAA/+K0///itP//4rSqAAAAAP/itMb/4rT//+K0xv/i - tBz/4rT//+K0///itOP/4rSq/+K0xv/itP//4rT//+K0Vf/itP//4rT//+K0qgAAAAD/4rT//+K0///i - tMb/4rRV/+K0///itP//4rSqAAAAAAAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itKr/4rQ5/+K0///i - tP//4rRxAAAAAP/itMb/4rT//+K0///itMb/4rT//+K0///itKoAAAAA/+K0///itP/bxqbTmZKOjP/i - tP//4rT/6dGrtY2HhA7/4rRV/+K0///itP//4rRVAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K04//i - tOP/4rT/modsmgAAAAAAAAAA/+K0Vf/itP//4rT//+K0Vf/itP//4rT/4cqnuY2HhGz/4rT//+K0/+nS - sf7Atq79/+K0///itP/izKvtmJGOrcOym4X/4rT//+K0///itFUAAAAAAAAAAAAAAAAqIhwW/+K0///i - tP/mzKL/tZ9////itP//4rT/yrOO1E9FNzcAAAAA/+K0qv/itP//4rT//+K0///itP+nn5vFvLKr/f/i - tP//4rT/xK6M/z01LP//4rT//+K0/93Gpf+3rKP/2Mi1/f/itP//4rT//+K0VQAAAAAAAAAAAAAAACsi - HHz/4rT//+K0/7Sffv8cFxL/mIZr///itP//4rT/YFRDvQAAAAD/4rQ5/+K0///itP//4rT/486y/q+l - n/5SSkP//+K0///itP+7pIP/NSsj///itP//4rT/tJ59/zcvJf+3ppH//+K0///itP//4rRVAAAAAAAA - AAAwJyAFMCcgr//itP//4rT/zbWQ/2daSP//4rT//+K0/+TKof9COSz/DwsF/xURC///4rT//+K0///i - tP/Csp7/Jh8Y/x4WDv//4rT//+K0/7ymhP83LSX//+K0///itP/Qt5L/aFlE///itP//4rT/38mp5ZuU - kEYAAAAAAAAAADAnIAUwJyCv/+K0///itP//4rT//+K0///itP//4rT/Rj0w/xENCP8XEQj/Jh8U/5uI - bP//4rT/5Mul/1RJPf8fFw//QTYt///itP//4rT/sZ18/xcTDf//4rT//+K0///itP//4rT//+K0/5eD - Zv+8rp3+sKmjsAAAAAAAAAAAMCcgBTAnIK88Miv/Lych/yojHP8mHxn/GxUS/xANCf8UEAz/FhEL/xYQ - B/8gGQz/GRUP/4F6df+JgHr/GBIL/0I5MP81LCT/FxIN/xMPC/8aFQ//IBoT/x4ZEv8bFhH/GBQQ/y4n - IP87Miv/JBsU/09IQf/Ivrb+g315KAAAAAAwJyAFMCcgr0I4Mf8yKSP/KyMc/yYeGf8bFRL/EA0J/xkT - D/8cFxD/GBII/x8XCv8iHhn/p5+a/0c/N/8iGhP/QDcu/x4ZEv8TEAv/FhEM/xMOCf8TDgn/FA8K/xkU - Dv8eGRT/GBQQ/zoxKf84Lyf/IRwW/7CnoP+IgHmOAAAAADAnIAUwJyCvSkE5/zYuJ/8rIx3/Jh8Z/xwV - Ev8RDQn/GxYQ/ychGf8dFg3/IRkM/zs3Mf+/t7H/IBkR/zgvJ/8rJBz/FBAL/xcUDP8UDwr/GRQL/x0Y - DP8dFw3/GBIL/xkVD/8UEw3/KCEb/0I4MP8XEAj/lo2G/5WMgq0aEwYDMCcgBTAnIK9QSED/OTEr/ywk - Hv8mHhn/HBYS/xENCv8dGBL/Licf/yMcE/8nIBL/R0M9/8K6tP8bFQ3/NCwj/ychGv8UEAv/FBEL/xoV - Df8eFgj/JxcK/x4VCP8iHA//FREL/xUUDv8hGxX/NCwj/xoSC/+If3f/0se/qgAAAAAwJyAFMCcgr1VL - Rf87My3/LCUe/yYfGf8cFhP/Eg4L/yAaFP8zLCT/KSEY/zAoG/9KRUD/urOu/yAaEv8oIRr/JyEa/xIP - C/8TEQv/HxsQ/yAVCP84Ggv/GREH/yEcD/8VEgz/ExEM/yIdF/8zKiP/GBIK/46Dev/IvrWqAAAAADAn - IAUwJyCvU0pE/zoyLP8sJB3/Jh4Z/xwWEv8SDgv/IBoU/zQtJP8rIxr/Ni4h/z05Nf+xqqb/Mysk/yUf - F/8tJh//FREM/xQTDP8fGhD/JhwN/zYcC/8lGQv/Ix4S/xERDP8QDgr/KyQd/zEpIP8cFQ7/p5uS/6Oa - kKoAAAAAMCcgBTAnIK9NRD3/Ni4o/yskHf8mHxn/HBYT/xQPDP8hHBT/NC0k/yskG/84MST/KSUi/5GL - h/92b2r/HBYQ/zErI/8kHhj/EQ4J/xgUDf8jHxX/KSMa/yQgFf8XFw//EhEM/xoWEf8zKyP/Ix0W/0E5 - MP/Qxr7/OzMnqgAAAAAwJyAFMCcgr0c+N/80LCX/KyMd/yYeGf8cFhL/FA8M/yAbFP8zLCT/KyQb/zky - Jv8qJyT/V1NO/7WtqP81Lif/KyUd/zwyLP8dGBL/EA4J/xYVEf8cGhj/FhUQ/xUTDv8ZFRD/Misk/zMr - JP8WEQv/hntz/8rBuP8bFAeqAAAAADAnIAUwJyCvQTcw/zAoIv8qIxz/Jh8Z/xwWEv8UEA3/IRoT/zEq - If8oIRj/OTIl/y4rKP8mIyD/oZqU/5eOiP8bFQ7/Ny8o/0U8NP8wKSP/GxcS/xkWEf8bFxL/KCIb/z82 - Lf9GPTX/GxYQ/0xDOv/SyL//XVRG/yQdEaoAAAAAMCcgBTAnIK8+Myz/Lych/yojHP8mHhn/HBYS/xQQ - Df8gGRP/Licf/yQeFv82LyP/MC0q/ysoJf9APDj/tKym/3lwZ/8eGBD/Ligh/0lBOf9COTL/RTw0/0lB - Of9FPTX/KyUf/xoWEP9KQTj/x721/4N6cv83LyL/JR4RqgAAAAAwJyAFMCcgrzsxKv8uJiD/KiIb/yYf - Gf8cFhL/FBAN/x8YEf8oIRr/HxoR/zErH/8xLiv/MjAt/yUjH/80MSz/squk/66knP9LRDz/Ix4W/xsY - Ef8iHRf/HxoU/xgUDf89NzD/e3Jq/9LLxP+MhHz/GhYQ/0c/M/9YZ1yqAAAAADAnIAUwJyCvNCoj/zAo - Iv89NjD/OzUv/zQvK/8bFhP/HRYP/yMcFf8cFQ3/LCYa/zAtKv82NDD/Liwp/yEfHP8xLyr/eXVv/8jB - uf+rpp7/j4mA/396cv+Jg3v/nZaN/8K7tP/Dvrb/Uk5I/xsYEv85NS//TUU5/1RjWKrE//gBMCcgATAn - IHEuJR/nMisl/ywmH/8oIRr/JSAa/y0pJP8aEwz/HRcQ/xcSCf8nIRX/MC0m/zk3Mf84NzP/MS8s/yYl - If8hIBz/LCwn/19fWf+Vk4z/qKWe/5yZkv+Ih4D/RkU//yIhG/8lJR//PTo1/0tGPP9COy3/U2NYqsX/ - +AEAAAAAMCcgBi4lH3QwJyH9QDUr/0A1K/8zKiP/GxYR/xUPCf8XEQr/FhAH/yMcEP8yLSH/ODUv/z08 - OP89PTn/Ozo2/zk7Nf87PTf/PUA6/0JFQP9FS0X/P0M9/zxAOv87PTf/QkQ9/0FCO/9HRTz/Qz4z/zYw - I/9UY1inxP/4AQAAAAAAAAAALiUfSCsiHfIrIxv/KyMc/yAZFP8aFRH+FhAG9xgSCf8lHhP/MCgY/z83 - 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 - rEEAAKxBgACsQYAArEH4AKxB+ACsQfgArEE= - - \ No newline at end of file diff --git a/Elucidate/Elucidate/Forms/Settings.Designer.cs b/Elucidate/Elucidate/Forms/Settings.Designer.cs index 31022fa..3a7636c 100644 --- a/Elucidate/Elucidate/Forms/Settings.Designer.cs +++ b/Elucidate/Elucidate/Forms/Settings.Designer.cs @@ -64,7 +64,6 @@ private void InitializeComponent() this.SnapShotsMenu = new System.Windows.Forms.ContextMenuStrip(this.components); this.editNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.grpSnapShotSources = new Krypton.Toolkit.KryptonGroupBox(); - this.snapShotSources = new Elucidate.Controls.ProtectedDrivesDisplay(); this.splitContainer1 = new Krypton.Toolkit.KryptonSplitContainer(); this.driveAndDirTreeView = new Elucidate.Shared.BufferedTreeView(); this.groupBox3 = new Krypton.Toolkit.KryptonGroupBox(); @@ -336,7 +335,6 @@ private void InitializeComponent() // // labelParity6 // - this.labelParity6.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.labelParity6.Location = new System.Drawing.Point(6, 144); this.labelParity6.Name = "labelParity6"; this.labelParity6.Size = new System.Drawing.Size(66, 24); @@ -353,7 +351,6 @@ private void InitializeComponent() // // labelParity5 // - this.labelParity5.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.labelParity5.Location = new System.Drawing.Point(6, 116); this.labelParity5.Name = "labelParity5"; this.labelParity5.Size = new System.Drawing.Size(66, 24); @@ -370,7 +367,6 @@ private void InitializeComponent() // // labelParity4 // - this.labelParity4.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.labelParity4.Location = new System.Drawing.Point(6, 88); this.labelParity4.Name = "labelParity4"; this.labelParity4.Size = new System.Drawing.Size(66, 24); @@ -426,7 +422,6 @@ private void InitializeComponent() // // labelParity2 // - this.labelParity2.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.labelParity2.Location = new System.Drawing.Point(6, 33); this.labelParity2.Name = "labelParity2"; this.labelParity2.Size = new System.Drawing.Size(66, 24); @@ -481,7 +476,6 @@ private void InitializeComponent() // // labelParity1 // - this.labelParity1.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.labelParity1.Location = new System.Drawing.Point(6, 5); this.labelParity1.Name = "labelParity1"; this.labelParity1.Size = new System.Drawing.Size(66, 24); @@ -710,7 +704,6 @@ private void InitializeComponent() // // label6 // - this.label6.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.label6.Location = new System.Drawing.Point(7, 32); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(103, 24); @@ -751,7 +744,6 @@ private void InitializeComponent() // // label4 // - this.label4.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.label4.Location = new System.Drawing.Point(7, 5); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(105, 24); @@ -896,7 +888,6 @@ private void InitializeComponent() // // label1 // - this.label1.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.label1.Location = new System.Drawing.Point(3, 37); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(157, 24); @@ -918,7 +909,6 @@ private void InitializeComponent() // // label2 // - this.label2.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; this.label2.Location = new System.Drawing.Point(24, 5); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(109, 24); @@ -944,7 +934,7 @@ private void InitializeComponent() // // helpProvider1 // - this.helpProvider1.HelpNamespace = "https://github.com/BlueBlock/Elucidatewikipage?title=Settings"; + this.helpProvider1.HelpNamespace = "https://github.com/Smurf-IV/Elucidate/blob/master/docs/Settings.md"; // // kryptonPanel1 // @@ -964,10 +954,8 @@ private void InitializeComponent() this.Controls.Add(this.kryptonPanel1); this.DoubleBuffered = true; this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HelpButton = true; this.helpProvider1.SetHelpKeyword(this, "d"); this.helpProvider1.SetHelpNavigator(this, System.Windows.Forms.HelpNavigator.Topic); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimizeBox = false; this.MinimumSize = new System.Drawing.Size(951, 749); @@ -975,6 +963,7 @@ private void InitializeComponent() this.helpProvider1.SetShowHelp(this, true); this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; this.Text = "Settings to control SnapRAID"; + this.TextExtra = "Use F1 on fields for help"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Settings_FormClosing); this.Load += new System.EventHandler(this.Settings_Load); this.Shown += new System.EventHandler(this.Settings_Shown); diff --git a/Elucidate/Elucidate/Forms/Settings.cs b/Elucidate/Elucidate/Forms/Settings.cs index 2f06656..b896f4c 100644 --- a/Elucidate/Elucidate/Forms/Settings.cs +++ b/Elucidate/Elucidate/Forms/Settings.cs @@ -70,6 +70,9 @@ private bool UnsavedChangesMade public Settings() { + // For some reason the designer keeps removing the following !! + snapShotSources = new Controls.ProtectedDrivesDisplay(); + Icon = Properties.Resources.ElucidateIco; InitializeComponent(); snapShotSources.driveGrid.DragDrop += snapShotSourcesTreeView_DragDrop; diff --git a/Elucidate/Elucidate/Forms/Settings.resx b/Elucidate/Elucidate/Forms/Settings.resx index 2cb3cf4..40dc0a9 100644 --- a/Elucidate/Elucidate/Forms/Settings.resx +++ b/Elucidate/Elucidate/Forms/Settings.resx @@ -128,7 +128,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACS - KQAAAk1TRnQBSQFMAgEBCwEAAUQBBgFEAQYBEgEAARIBAAT/AREBAAj/AUIBTQE2BwABNgMAASgDAAFI + KQAAAk1TRnQBSQFMAgEBCwEAAUwBBgFMAQYBEgEAARIBAAT/AREBAAj/AUIBTQE2BwABNgMAASgDAAFI AwABNgMAAQEBAAEQBQABYAEePAAB9wFeARABQgGMATEBqQE9AeIBVQHiAVUBwgFVAYsBMQGMATEBzgE5 AbUBVgFaAWsQAAHWAV4B7wFFAYwBPQH3AV4BWgFrAYwBPQGtAT0B1gFaMAABWgFrAdYBWgHWAVoBGAFj ATkBZwFaAWscAAHWAVoBcwFOAVIBSgGQAVYBCwFzAQoBcwHgAVkBUAFKAVICSgEpAe8BPQEYAWMIAAEY @@ -317,6 +317,9 @@ 674, 13 + + 9, 16 + 134, 18 @@ -332,267 +335,10 @@ As a rule of thumb, with 4GB or more memory use the default 256 (Or lower), with Block Size must be a power of 2 with a minimum value of 32 and a maximum value of 16384(16KB). https://sourceforge.net/p/snapraid/discussion/1677233/thread/927d6038/#c1f6 - - 9, 16 + + True True - - - - AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA - AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT//+K0///itP//4rT//+K0/wAAAAAAAAAAAAAAAAAA - AAD/4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/i - tP//4rT//+K0///itP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAAAAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8AAAAAAAAAAP/i - tP//4rT//+K0///itP+Nh4Q6jYeEY//itP//4rT//+K0///itP8AAAAAAAAAAAAAAAD/4rT//+K0///i - tP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///itP8AAAAA/+K0///i - tP//4rT//+K0/wAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/itP//4rT//+K0///i - tP8AAAAAAAAAAP/itP//4rT//+K0///itP+mnpr5t6+q+v/itP//4rT//+K0///itP+Nh4RmjYeEDAAA - AAD/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT/HBYSGwAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itP//4rT/AAAAAP/i - tP//4rT//+K0///itP+Nh4RDjYeE0f/itP//4rT//+K0///itP/Kvrb/yLyz///itP//4rT//+K0///i - tP+2raf6koyJ6Y2HhGz/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0///itP8UEQ08AAAAAAAAAAAAAAAA/+K0///i - tP//4rT//+K0///itP//4rT//+K0/42HhICqoZ352s/I/v/itP//4rT//+K0///itP9sY1n/RT0z///i - tP//4rT//+K0///itP/Nwbr/39PL/7mvqvr/4rT//+K0///itP//4rT/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAKiIcYv/itP//4rT//+K0///itP8lHxn/HxkU///itP//4rT//+K0///itP//4rT/Eg4MPAAA - AAAAAAAA/+K0///itP//4rT//+K0///itP//4rT//+K0/8C2sPzYz8n/hHty///itP//4rT//+K0///i - tP8WDgb/FQ4G///itP//4rT//+K0///itP8zKyP/lot+/9/Vzf//4rT//+K0///itP//4rT/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAALCMd5//itP//4rT//+K0///itP8bFxL/GhUR/xgTEP//4rT//+K0///i - tP//4rT/EQ0Lzf///wEAAAAAAAAAAP/itP//4rT//+K0///itP//4rT/wLaw/c3DvP9ORj//GhQN///i - tP//4rT//+K0///itP9DOTD/Rjs0///itP//4rT//+K0///itP8VDQX/GxML/29jWf//4rT//+K0///i - tP//4rT/AAAAAAAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///itP//4rT//+K0///itP8eGBT/GhUR///i - tP//4rT//+K0///itP//4rT/CQcF/woHA/8KBwP/CgcD///itP//4rT//+K0///itP//4rT/0MbA/z44 - MP8VDQX/FA0F///itP//4rT//+K0///itP8/NCv/PjMq///itP//4rT//+K0///itP8sIxz/FQ4F///i - tP//4rT//+K0///itP+Ri4iOAAAAAAAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT//+K0///itP8SDgr/EAwH/xMOBf8mHxf/MCkg///itP//4rT//+K0///i - tP//4rT/TUQ8/w8KA/8XEAj/Qjgw///itP//4rT//+K0///itP8rIxz/KSMb///itP//4rT//+K0///i - tP//4rT//+K0///itP//4rT//+K0///itP/Bt7D6jYeELgAAAAAAAAAAAAAAAAAAAAAwJyAPMScg///i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT//+K0/w8MCf8WEw//EAsG/xEMBf8hGg3/JB4R/x4Z - E///4rT//+K0///itP+JfXT/EwwG/xYOBv9FOjL/ST40///itP//4rT//+K0///itP8OCwf/DgsH///i - tP//4rT//+K0///itP//4rT//+K0///itP//4rT/Fg4G/4qAdv/e1M3/qKGctwAAAAAAAAAAAAAAAAAA - AAAwJyAPMScg/0E2Lv8xKCL/LiYg/ywkHf8oIRv/Jh4Z/yAZFf8SDwz/DwwJ/w8MCf8cGBP/Eg0G/xIM - Bf8gGQz/IRoO/xkUDv8bFxL/pZ6Y/9TKxv8rJBv/DwsE/zYtJf9QRTz/MCgf/yMcFv8LCQb/Ew8L/xwY - Ef8jHRf/KiMa/yQgGP8gGxX/Ew8L/w8MCv8tJR//OTAo/zwzLP82LCX/FQ0F/yUeF//SyMH/yr+4/I2H - hBEAAAAAAAAAAAAAAAAwJyAPMScg/0Q6Mv80KyX/LiYg/ywkHf8oIRv/Jh4Z/yAZFf8TDwz/DwwI/xEM - Cf8jHRb/FA8J/xMOBv8fGAr/IBgL/xQQCv8jIBv/0MbA/5KIfv8OCAH/HRUO/1ZLQ/82LST/JB0X/wsJ - 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 - EP8hHBb/JyMd/yMeGf8bGBL/ERAJ/xURDP8bFAz/Z1xR/93V0P/l3NP/p52V/w4KBf8mIRj/Ukk7/yMc - D//F//gBAAAAAAAAAAAwJyAPMScg/0E2Lv8xKCL/LSUf/ysjHP8oIRv/Jh4Z/yAZFf8WEQ7/FRAN/xMM - B/82LiP/HhgS/xgSC/8sJRj/MSsf/y8sKf81My//NDIu/y4rKP8jIR7/GBcT/zMwK//EvLT/2NDL/9DI - wP9za2H/KSMZ/x4YD/8dGA//HhgQ/x4YEP8eGA//IRkP/2tjWf/Fv7j/39nT/9/a1P9qZFz/EA0H/w4L - Bv9RTEP/TUQ2/yAZDP/F//gBAAAAAAAAAAAwJyAPMCcg/zMpIf8uJR//Mysl/0Y/Of9JRD7/RT85/0lE - P/8wKyj/FREO/xIMB/8xKB//GhUP/xUPCf8mIBP/Licc/y4rKP81My//ODYy/zMyL/8qKCX/IiAc/xkZ - Ff8WFRH/amZg/9HJwf/b1c//4t/Y/87Hvv+9t7D/qqae/7iyqv/OyMD/49zU/97Y0f/g2tP/qKOa/yYi - Hf8SEAr/Eg8J/z89OP9OSD3/TEQ2/xsUB//F//gBxf/4AQAAAAAwJyADMCcg8C8mH/8uJR//PTcx/y0o - Iv8cGBL/HBcR/x0YE/8zLin/OjYy/xIMBv8sIxz/GBMM/xMOCP8jHBD/KiUa/ysoJP82My7/OTg0/zg3 - M/8zMi//Kykm/yQiH/8fHhr/HBsW/xwcF/9RUEv/jYuE/8jDu//Lxb3/8evi/9XPyP/Lx77/q6ii/2to - Yv8pKSL/HBoV/xgWEP8WFQ//Q0A7/1hUTP9BOy//R0Aw/xsVCP/F//gBxf/4AQAAAAAAAAAAMCcgGy8m - H5MuJR//IhwW/zAoIP9CNy7/PzQr/y8nIf8bFhH/GRQP/xIMBv8mHRb/FRAK/xINBv8gGg3/KSIV/zEr - H/8+OS7/Ojgz/z08N/87Ojb/NjUy/zAvLP8rLCj/KSom/yorJv8rLSj/LTAq/y8yLf8wNC//MTUw/zE0 - L/8wNC7/LzEr/ystKP8nKCP/JyYg/zs8Nv9TU03/TkpE/0M9Mv9CPDD/PDQm/xsVCP/F//gBxf/4AQAA - AAAAAAAAAAAAAAAAAAAuJR/2OjAo/0g8Mf9CNyz/PzQr/0M3Lv8kHRn/GRQQ/xALBv8bFQ3/Ew4H/xIM - Bv8fGAv/JB0R/y4oHP85NCj/NjUx/z49Of9APzv/QEE9/0JBPP9CQj3/QkQ+/0NFP/9ER0H/R0pF/0lM - R/9QVlH/T1dR/0dMRv9FS0T/Q0dB/0FDPf9MTkj/UlVO/0FCO/9CQTn/RUE3/0VBNf9DPTL/KyUX/xwW - CfbF//gCxf/4AQAAAAAAAAAAAAAAAAAAAAAuJR/nKyId/zAoH/80KyL/Mykh/yoiG/8YEw//HBYS/xcR - B/8RDAX/EAsF/xEMBv8dFgr/IRoO/yslGv80LiL/NDIu/z08Of9DQz//SkpG/1NSSv9VVU3/V1dP/1lb - U/9aXlb/XGBZ/15kXP9pdW3/a3Zu/2BnX/9gZl7/XWNb/1peVv9XWlH/UVNL/01NRf9KSUD/S0c8/0dD - OP9BPDD/IhsP/x0YC9DF//gCxf/4AgAAAAAAAAAAAAAAAAAAAAAuJR+3KCEb/x8ZE/8eGBP/GxUR/xkT - D/8ZFBD/HBYS/BoTBtwaEwb/MSca/0A3LP9QRC//VEoz/19UQP9mXEn/WldO/2NhWv9pZ2D/bWtg/25u - Y/9ycmf/dHZr/3d8cf94f3T/fIR4/32HfP+QoJn/kKGb/3+Kf/9+iX7/fIV6/3h/dP9zeG3/bG9l/2do - Xf9jYlX/XVtO/1RQRf8yLSH/HxoO/yIeEWnF//gExf/4AgAAAAAAAAAAAAAAAAAAAAAuJR8/LCQe/yoi - G/8lHhj/IhsW/yEbFv8fGRX/HBYSpSMcEBkZEga5GRIG/xoTB/8bFAf/GxUI/xsVCP8dFwr/HxkN/yEc - D/8jIBP/JyUY/ysqHv8vMST/NTgs/zo+M/8+RTn/Qks//0ZQRf9id2z/Y3ht/0pVSf9IUkf/Rk9E/0JK - Pv8+RDj/OT4y/zM2Kv8vMCP/Kyoe/yclGP8lIxbPKikdacX/+AfF//gExf/4AgAAAAAAAAAAAAAAAAAA - AAAAAAAALCQeSCsjHKUoIRvMJh4ZvSMcF5kfGRVyHBYSCQAAAAAhGxITFQ8F8BYQBv8WEAb/FhEH/xgT - Cf8YFAr/GxcN/x0aEP8zOC9ixf/4FhwhHv8kLCj/Ljgz/zlEQP9EUk3/TVtX/1RlYP92ko3/d5OO/1pr - Z/9WaGP/UF9b/0hWUv8+S0f/Mz86/ykzL/8iKSb/xf/4HcX/+BbF//gQxf/4C8X/+AjF//gFxf/4AwAA - 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 - +APF//gFxf/4B8X/+ArF//gPxf/4FMX/+Bo3RUGCKDEt5is1Mf8xPjr/OkpG/0NVUf98n5n/faGb/0pe - Wv9FV1P/PU1I/zVDP/8vOzf/Ljo23VJoY2XF//ggxf/4GsX/+BPF//gOxf/4CsX/+AfF//gFxf/4AgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMX/ - +AHF//gBxf/4AsX/+ALF//gExf/4BcX/+AjF//gMxf/4EMX/+BbF//gcxf/4IsX/+CnF//gwxf/4NsX/ - +D7F//iFxf/4hsX/+EPF//hAxf/4OsX/+DTF//guxf/4KMX/+CLF//gbxf/4FcX/+BDF//gMxf/4CMX/ - +AXF//gExf/4AuHAPAGAf6dS4cIcIYAfp1LhhgAhhh+nUuGGAGAHD6dS4Q8IYAEPp1LgDwgAAA+nUuAD - gAAAD6dSwAGAAAAPp1LAAMAAAA+nUoAAAAAAD6dSgAAAAAAHp1KAAAAAAAenUoAAAAAAA6dSgAAAAAAD - p1KAAAAAAAOnUoAAAAAAAadSgAAAAAADp1KAAAAAAAOnUoAAAAAAA6dSgAAAAAADp1KAAAAAAAOnUoAA - AAAAA6dSgAAAAAADp1KAAAAAAAOnUoAAAAAAA6dSgAAAAAADp1KAAAAAAAOnUoAAAAAAAadSgAAAAAAB - p1KAAAAAAACnUoAAAAAAAKdSwAAAAAAAp1LwAAAAAACnUvAAAAAAAKdS8AAAAAAAp1LwAAAAAACnUvgI - AAAAAKdS//wAAAAAp1L//AAAAACnUv/8AAAAAKdS//wAAAAAp1L//AAAAACnUv/8AAAAAKdS//wAAAAA - p1L//AAAAACnUv/+AAAAAKdS//4AAAAAp1L//gAAAACnUigAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K0qgAAAAD/4rRV/+K0///itP//4rTG/+K0///i - tP//4rQ5AAAAAP/itFX/4rT//+K0///itMb/4rT//+K0///itKoAAAAA/+K0///itP//4rT//+K0///i - tP//4rSO/+K0OQAAAAAAAAAAAAAAAAAAAAAAAAAA/+K0///itP//4rSqAAAAAP/itMb/4rT//+K0xv/i - tBz/4rT//+K0///itOP/4rSq/+K0xv/itP//4rT//+K0Vf/itP//4rT//+K0qgAAAAD/4rT//+K0///i - tMb/4rRV/+K0///itP//4rSqAAAAAAAAAAAAAAAAAAAAAAAAAAD/4rT//+K0///itKr/4rQ5/+K0///i - tP//4rRxAAAAAP/itMb/4rT//+K0///itMb/4rT//+K0///itKoAAAAA/+K0///itP/bxqbTmZKOjP/i - tP//4rT/6dGrtY2HhA7/4rRV/+K0///itP//4rRVAAAAAAAAAAAAAAAAAAAAAP/itP//4rT//+K04//i - tOP/4rT/modsmgAAAAAAAAAA/+K0Vf/itP//4rT//+K0Vf/itP//4rT/4cqnuY2HhGz/4rT//+K0/+nS - sf7Atq79/+K0///itP/izKvtmJGOrcOym4X/4rT//+K0///itFUAAAAAAAAAAAAAAAAqIhwW/+K0///i - tP/mzKL/tZ9////itP//4rT/yrOO1E9FNzcAAAAA/+K0qv/itP//4rT//+K0///itP+nn5vFvLKr/f/i - tP//4rT/xK6M/z01LP//4rT//+K0/93Gpf+3rKP/2Mi1/f/itP//4rT//+K0VQAAAAAAAAAAAAAAACsi - HHz/4rT//+K0/7Sffv8cFxL/mIZr///itP//4rT/YFRDvQAAAAD/4rQ5/+K0///itP//4rT/486y/q+l - n/5SSkP//+K0///itP+7pIP/NSsj///itP//4rT/tJ59/zcvJf+3ppH//+K0///itP//4rRVAAAAAAAA - AAAwJyAFMCcgr//itP//4rT/zbWQ/2daSP//4rT//+K0/+TKof9COSz/DwsF/xURC///4rT//+K0///i - tP/Csp7/Jh8Y/x4WDv//4rT//+K0/7ymhP83LSX//+K0///itP/Qt5L/aFlE///itP//4rT/38mp5ZuU - kEYAAAAAAAAAADAnIAUwJyCv/+K0///itP//4rT//+K0///itP//4rT/Rj0w/xENCP8XEQj/Jh8U/5uI - bP//4rT/5Mul/1RJPf8fFw//QTYt///itP//4rT/sZ18/xcTDf//4rT//+K0///itP//4rT//+K0/5eD - Zv+8rp3+sKmjsAAAAAAAAAAAMCcgBTAnIK88Miv/Lych/yojHP8mHxn/GxUS/xANCf8UEAz/FhEL/xYQ - B/8gGQz/GRUP/4F6df+JgHr/GBIL/0I5MP81LCT/FxIN/xMPC/8aFQ//IBoT/x4ZEv8bFhH/GBQQ/y4n - IP87Miv/JBsU/09IQf/Ivrb+g315KAAAAAAwJyAFMCcgr0I4Mf8yKSP/KyMc/yYeGf8bFRL/EA0J/xkT - D/8cFxD/GBII/x8XCv8iHhn/p5+a/0c/N/8iGhP/QDcu/x4ZEv8TEAv/FhEM/xMOCf8TDgn/FA8K/xkU - Dv8eGRT/GBQQ/zoxKf84Lyf/IRwW/7CnoP+IgHmOAAAAADAnIAUwJyCvSkE5/zYuJ/8rIx3/Jh8Z/xwV - Ev8RDQn/GxYQ/ychGf8dFg3/IRkM/zs3Mf+/t7H/IBkR/zgvJ/8rJBz/FBAL/xcUDP8UDwr/GRQL/x0Y - DP8dFw3/GBIL/xkVD/8UEw3/KCEb/0I4MP8XEAj/lo2G/5WMgq0aEwYDMCcgBTAnIK9QSED/OTEr/ywk - Hv8mHhn/HBYS/xENCv8dGBL/Licf/yMcE/8nIBL/R0M9/8K6tP8bFQ3/NCwj/ychGv8UEAv/FBEL/xoV - Df8eFgj/JxcK/x4VCP8iHA//FREL/xUUDv8hGxX/NCwj/xoSC/+If3f/0se/qgAAAAAwJyAFMCcgr1VL - Rf87My3/LCUe/yYfGf8cFhP/Eg4L/yAaFP8zLCT/KSEY/zAoG/9KRUD/urOu/yAaEv8oIRr/JyEa/xIP - C/8TEQv/HxsQ/yAVCP84Ggv/GREH/yEcD/8VEgz/ExEM/yIdF/8zKiP/GBIK/46Dev/IvrWqAAAAADAn - IAUwJyCvU0pE/zoyLP8sJB3/Jh4Z/xwWEv8SDgv/IBoU/zQtJP8rIxr/Ni4h/z05Nf+xqqb/Mysk/yUf - F/8tJh//FREM/xQTDP8fGhD/JhwN/zYcC/8lGQv/Ix4S/xERDP8QDgr/KyQd/zEpIP8cFQ7/p5uS/6Oa - kKoAAAAAMCcgBTAnIK9NRD3/Ni4o/yskHf8mHxn/HBYT/xQPDP8hHBT/NC0k/yskG/84MST/KSUi/5GL - h/92b2r/HBYQ/zErI/8kHhj/EQ4J/xgUDf8jHxX/KSMa/yQgFf8XFw//EhEM/xoWEf8zKyP/Ix0W/0E5 - MP/Qxr7/OzMnqgAAAAAwJyAFMCcgr0c+N/80LCX/KyMd/yYeGf8cFhL/FA8M/yAbFP8zLCT/KyQb/zky - Jv8qJyT/V1NO/7WtqP81Lif/KyUd/zwyLP8dGBL/EA4J/xYVEf8cGhj/FhUQ/xUTDv8ZFRD/Misk/zMr - JP8WEQv/hntz/8rBuP8bFAeqAAAAADAnIAUwJyCvQTcw/zAoIv8qIxz/Jh8Z/xwWEv8UEA3/IRoT/zEq - If8oIRj/OTIl/y4rKP8mIyD/oZqU/5eOiP8bFQ7/Ny8o/0U8NP8wKSP/GxcS/xkWEf8bFxL/KCIb/z82 - Lf9GPTX/GxYQ/0xDOv/SyL//XVRG/yQdEaoAAAAAMCcgBTAnIK8+Myz/Lych/yojHP8mHhn/HBYS/xQQ - Df8gGRP/Licf/yQeFv82LyP/MC0q/ysoJf9APDj/tKym/3lwZ/8eGBD/Ligh/0lBOf9COTL/RTw0/0lB - Of9FPTX/KyUf/xoWEP9KQTj/x721/4N6cv83LyL/JR4RqgAAAAAwJyAFMCcgrzsxKv8uJiD/KiIb/yYf - Gf8cFhL/FBAN/x8YEf8oIRr/HxoR/zErH/8xLiv/MjAt/yUjH/80MSz/squk/66knP9LRDz/Ix4W/xsY - Ef8iHRf/HxoU/xgUDf89NzD/e3Jq/9LLxP+MhHz/GhYQ/0c/M/9YZ1yqAAAAADAnIAUwJyCvNCoj/zAo - Iv89NjD/OzUv/zQvK/8bFhP/HRYP/yMcFf8cFQ3/LCYa/zAtKv82NDD/Liwp/yEfHP8xLyr/eXVv/8jB - uf+rpp7/j4mA/396cv+Jg3v/nZaN/8K7tP/Dvrb/Uk5I/xsYEv85NS//TUU5/1RjWKrE//gBMCcgATAn - IHEuJR/nMisl/ywmH/8oIRr/JSAa/y0pJP8aEwz/HRcQ/xcSCf8nIRX/MC0m/zk3Mf84NzP/MS8s/yYl - If8hIBz/LCwn/19fWf+Vk4z/qKWe/5yZkv+Ih4D/RkU//yIhG/8lJR//PTo1/0tGPP9COy3/U2NYqsX/ - +AEAAAAAMCcgBi4lH3QwJyH9QDUr/0A1K/8zKiP/GxYR/xUPCf8XEQr/FhAH/yMcEP8yLSH/ODUv/z08 - OP89PTn/Ozo2/zk7Nf87PTf/PUA6/0JFQP9FS0X/P0M9/zxAOv87PTf/QkQ9/0FCO/9HRTz/Qz4z/zYw - I/9UY1inxP/4AQAAAAAAAAAALiUfSCsiHfIrIxv/KyMc/yAZFP8aFRH+FhAG9xgSCf8lHhP/MCgY/z83 - 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 - rEEAAKxBgACsQYAArEH4AKxB+ACsQfgArEE= - - \ No newline at end of file diff --git a/Elucidate/Elucidate/Properties/AssemblyInfo.cs b/Elucidate/Elucidate/Properties/AssemblyInfo.cs index 26db9bd..7aff6ed 100644 --- a/Elucidate/Elucidate/Properties/AssemblyInfo.cs +++ b/Elucidate/Elucidate/Properties/AssemblyInfo.cs @@ -56,9 +56,8 @@ // Build Number - Increment // Revision - Day // -[assembly: AssemblyVersion("2021.12.29.9")] -[assembly: AssemblyFileVersion("21.12.29.9")] -[assembly: NeutralResourcesLanguage("en-US")] +[assembly: AssemblyVersion("2021.12.29.10")] +[assembly: AssemblyFileVersion("21.12.29.10")] // TODO: Add more relevant hints here [assembly: Dependency(@"System", LoadHint.Always)] [assembly: Dependency(@"System.Drawing", LoadHint.Always)] diff --git a/Elucidate/Elucidate/Properties/Resources.Designer.cs b/Elucidate/Elucidate/Properties/Resources.Designer.cs index 46b1a4d..651b41b 100644 --- a/Elucidate/Elucidate/Properties/Resources.Designer.cs +++ b/Elucidate/Elucidate/Properties/Resources.Designer.cs @@ -69,6 +69,13 @@ internal static System.Drawing.Bitmap cam_48 { return ((System.Drawing.Bitmap)(obj)); } } + + internal static System.Drawing.Icon ElucidateIco { + get { + object obj = ResourceManager.GetObject("ElucidateIco", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } /// /// Looks up a localized resource of type System.Drawing.Bitmap. diff --git a/Elucidate/Elucidate/Properties/Resources.resx b/Elucidate/Elucidate/Properties/Resources.resx index 957ecb6..f74d9fa 100644 --- a/Elucidate/Elucidate/Properties/Resources.resx +++ b/Elucidate/Elucidate/Properties/Resources.resx @@ -136,6 +136,9 @@ ..\Resources\camera_48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Elucidate.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\cam_48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Elucidate/Elucidate/app.manifest b/Elucidate/Elucidate/app.manifest index 9f921f6..34bf9e4 100644 --- a/Elucidate/Elucidate/app.manifest +++ b/Elucidate/Elucidate/app.manifest @@ -51,14 +51,16 @@ - + also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. + Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation --> + + + + true + true + + +