From 88652e2c9ae5475036726ec933ee443f70163ff4 Mon Sep 17 00:00:00 2001 From: Nifty255 Date: Sat, 2 Apr 2016 17:22:45 +0900 Subject: [PATCH] v1.0.4 - Minor UI improvements. - Changed File IO to use the OS's path separator instead of hardcoded backslashes. --- Kerbal Config Editor/KCE README.txt | 6 ++- Kerbal Config Editor/Kerbal Config Editor.exe | Bin 255488 -> 236032 bytes README.md | 6 ++- .../Kerbal Config Editor.csproj | 7 +-- Source/Kerbal Config Editor/Program.cs | 8 +-- .../ProgramForm.Designer.cs | 49 +++++++----------- Source/Kerbal Config Editor/ProgramForm.cs | 34 ++++++++++-- Source/Kerbal Config Editor/ProgramForm.resx | 34 ------------ .../Properties/AssemblyInfo.cs | 4 +- Source/Kerbal Config Editor/README.txt | 6 ++- 10 files changed, 73 insertions(+), 81 deletions(-) diff --git a/Kerbal Config Editor/KCE README.txt b/Kerbal Config Editor/KCE README.txt index 08c09ac..70052fe 100644 --- a/Kerbal Config Editor/KCE README.txt +++ b/Kerbal Config Editor/KCE README.txt @@ -1,5 +1,5 @@ Kerbal Config Editor -v1.0.3 Release +v1.0.4 Release Kerbal Config Editor (KCE) is an easy to use tool designed to allow modders of Kerbal Space Program to easily and quickly alter or even create KSP Config Files. @@ -35,6 +35,10 @@ Kerbal Config Editor allows users and modders to easily read, edit, and even cre CHANGELOG: +v1.0.4: +- Minor UI improvements. +- Changed File IO to use the OS's path separator instead of hardcoded backslashes. + v1.0.3: - The Open and Save file dialogs now begin at the install path of the program. diff --git a/Kerbal Config Editor/Kerbal Config Editor.exe b/Kerbal Config Editor/Kerbal Config Editor.exe index c0eea1c11afbb7fbf30be839c79ead44898241d6..de33de2eda2149e622f377664eb403b16726fa99 100644 GIT binary patch delta 27631 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 Al>h($ diff --git a/README.md b/README.md index 08c09ac..70052fe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ Kerbal Config Editor -v1.0.3 Release +v1.0.4 Release Kerbal Config Editor (KCE) is an easy to use tool designed to allow modders of Kerbal Space Program to easily and quickly alter or even create KSP Config Files. @@ -35,6 +35,10 @@ Kerbal Config Editor allows users and modders to easily read, edit, and even cre CHANGELOG: +v1.0.4: +- Minor UI improvements. +- Changed File IO to use the OS's path separator instead of hardcoded backslashes. + v1.0.3: - The Open and Save file dialogs now begin at the install path of the program. diff --git a/Source/Kerbal Config Editor/Kerbal Config Editor.csproj b/Source/Kerbal Config Editor/Kerbal Config Editor.csproj index bb7f08b..e979879 100644 --- a/Source/Kerbal Config Editor/Kerbal Config Editor.csproj +++ b/Source/Kerbal Config Editor/Kerbal Config Editor.csproj @@ -38,8 +38,9 @@ true - - ..\..\..\..\KSP Test Folder\0.90\KSP_Data\Managed\Assembly-CSharp.dll + + False + ..\..\..\..\..\KSP Test Folder\1.0\KSP_Data\Managed\Assembly-CSharp.dll @@ -53,7 +54,7 @@ False - ..\..\..\..\KSP Test Folder\0.90\KSP_Data\Managed\UnityEngine.dll + ..\..\..\..\..\KSP Test Folder\1.0\KSP_Data\Managed\UnityEngine.dll diff --git a/Source/Kerbal Config Editor/Program.cs b/Source/Kerbal Config Editor/Program.cs index 9831ead..65fabaa 100644 --- a/Source/Kerbal Config Editor/Program.cs +++ b/Source/Kerbal Config Editor/Program.cs @@ -18,7 +18,7 @@ static void Main() { // Validate correct install. #if (!DEBUG) - if (!File.Exists(Directory.GetCurrentDirectory() + "\\KSP.exe")) + if (!File.Exists(Directory.GetCurrentDirectory() + "\\KSP.exe".Replace('\\', Path.DirectorySeparatorChar))) { System.Windows.Forms.MessageBox.Show("Error: This program must be installed in your KSP install directory.", "Error 404: KSP Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error); return; @@ -26,9 +26,9 @@ static void Main() #endif // Create Autosave folder if it doesn't exist. - if (!Directory.Exists(Directory.GetCurrentDirectory() + "\\KCE_Data\\Autosave")) + if (!Directory.Exists(Directory.GetCurrentDirectory() + "\\KCE_Data\\Autosave".Replace('\\', Path.DirectorySeparatorChar))) { - Directory.CreateDirectory(Directory.GetCurrentDirectory() + "\\KCE_Data\\Autosave"); + Directory.CreateDirectory(Directory.GetCurrentDirectory() + "\\KCE_Data\\Autosave".Replace('\\', Path.DirectorySeparatorChar)); } // Set the Assembly Handler. @@ -59,7 +59,7 @@ private static Assembly ResolveAssembly(object sender, ResolveEventArgs args) if (strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(",")) == args.Name.Substring(0, args.Name.IndexOf(","))) { // Build the path of the assembly from where it has to be loaded. - strTempAssmbPath = Directory.GetCurrentDirectory() + "\\KSP_Data\\Managed\\" + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll"; + strTempAssmbPath = Directory.GetCurrentDirectory() + "\\KSP_Data\\Managed\\".Replace('\\', Path.DirectorySeparatorChar) + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll"; break; } diff --git a/Source/Kerbal Config Editor/ProgramForm.Designer.cs b/Source/Kerbal Config Editor/ProgramForm.Designer.cs index f0e6b92..57c9287 100644 --- a/Source/Kerbal Config Editor/ProgramForm.Designer.cs +++ b/Source/Kerbal Config Editor/ProgramForm.Designer.cs @@ -65,9 +65,8 @@ private void InitializeComponent() this.mainStatusStrip = new System.Windows.Forms.StatusStrip(); this.toolStripProgressLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripProgressBar = new System.Windows.Forms.ToolStripProgressBar(); - this.toolStripSavedLabel = new System.Windows.Forms.ToolStripStatusLabel(); - this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.printPreviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripValsSavedLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripFileSavedLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.mainLayoutPanel.SuspendLayout(); this.mainMenuStrip.SuspendLayout(); this.buttonTablePanel.SuspendLayout(); @@ -284,7 +283,7 @@ private void InitializeComponent() this.valuesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.valuesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.valuesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.valuesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 32F)); + this.valuesTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 38F)); this.valuesTable.Location = new System.Drawing.Point(3, 109); this.valuesTable.Name = "valuesTable"; this.valuesTable.RowCount = 1; @@ -390,14 +389,14 @@ private void InitializeComponent() this.openConfigDialog.DefaultExt = "cfg"; this.openConfigDialog.FileName = "config.cfg"; this.openConfigDialog.Filter = "KSP Files|*.cfg;*.sfs|KSP Config Files|*.cfg|KSP Save Files|*.sfs"; - this.openConfigDialog.InitialDirectory = Directory.GetCurrentDirectory(); + this.openConfigDialog.InitialDirectory = "C:\\Windows\\system32"; // // saveConfigDialog // this.saveConfigDialog.DefaultExt = "cfg"; this.saveConfigDialog.FileName = "config.cfg"; this.saveConfigDialog.Filter = "KSP Files|*.cfg;*.sfs|KSP Config Files|*.cfg|KSP Save Files|*.sfs"; - this.saveConfigDialog.InitialDirectory = Directory.GetCurrentDirectory(); + this.saveConfigDialog.InitialDirectory = "C:\\Windows\\system32"; // // cheatTablePanel // @@ -420,7 +419,8 @@ private void InitializeComponent() this.mainStatusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripProgressLabel, this.toolStripProgressBar, - this.toolStripSavedLabel}); + this.toolStripValsSavedLabel, + this.toolStripFileSavedLabel}); this.mainStatusStrip.Location = new System.Drawing.Point(0, 340); this.mainStatusStrip.Name = "mainStatusStrip"; this.mainStatusStrip.Size = new System.Drawing.Size(784, 22); @@ -440,29 +440,19 @@ private void InitializeComponent() this.toolStripProgressBar.Size = new System.Drawing.Size(100, 16); this.toolStripProgressBar.Visible = false; // - // toolStripSavedLabel + // toolStripValsSavedLabel // - this.toolStripSavedLabel.Name = "toolStripSavedLabel"; - this.toolStripSavedLabel.Size = new System.Drawing.Size(78, 17); - this.toolStripSavedLabel.Text = "Values Saved!"; - this.toolStripSavedLabel.Visible = false; + this.toolStripValsSavedLabel.Name = "toolStripValsSavedLabel"; + this.toolStripValsSavedLabel.Size = new System.Drawing.Size(77, 17); + this.toolStripValsSavedLabel.Text = "Values Saved!"; + this.toolStripValsSavedLabel.Visible = false; // - // printToolStripMenuItem + // toolStripFileSavedLabel // - this.printToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripMenuItem.Image"))); - this.printToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; - this.printToolStripMenuItem.Name = "printToolStripMenuItem"; - this.printToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P))); - this.printToolStripMenuItem.Size = new System.Drawing.Size(32, 19); - this.printToolStripMenuItem.Text = "&Print"; - // - // printPreviewToolStripMenuItem - // - this.printPreviewToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printPreviewToolStripMenuItem.Image"))); - this.printPreviewToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; - this.printPreviewToolStripMenuItem.Name = "printPreviewToolStripMenuItem"; - this.printPreviewToolStripMenuItem.Size = new System.Drawing.Size(32, 19); - this.printPreviewToolStripMenuItem.Text = "Print Pre&view"; + this.toolStripFileSavedLabel.Name = "toolStripFileSavedLabel"; + this.toolStripFileSavedLabel.Size = new System.Drawing.Size(62, 17); + this.toolStripFileSavedLabel.Text = "File Saved!"; + this.toolStripFileSavedLabel.Visible = false; // // ProgramForm // @@ -527,11 +517,10 @@ private void InitializeComponent() private ToolStripProgressBar toolStripProgressBar; private Label noValsLabel; private Button saveValuesButton; - private ToolStripStatusLabel toolStripSavedLabel; + private ToolStripStatusLabel toolStripValsSavedLabel; private ToolStripMenuItem helpToolStripMenuItem; - private ToolStripMenuItem printToolStripMenuItem; - private ToolStripMenuItem printPreviewToolStripMenuItem; private ToolStripMenuItem aboutToolStripMenuItem; + private ToolStripStatusLabel toolStripFileSavedLabel; } } diff --git a/Source/Kerbal Config Editor/ProgramForm.cs b/Source/Kerbal Config Editor/ProgramForm.cs index 6e09ad8..29b643f 100644 --- a/Source/Kerbal Config Editor/ProgramForm.cs +++ b/Source/Kerbal Config Editor/ProgramForm.cs @@ -41,7 +41,7 @@ public partial class ProgramForm : Form private static int cfgIncrement = 0; // The path used to check for and save autosaved files. - private string autosavePath = Directory.GetCurrentDirectory() + "\\KCE_Data\\Autosave\\autosave.cfg"; + private string autosavePath = Directory.GetCurrentDirectory() + "\\KCE_Data\\Autosave\\autosave.cfg".Replace('\\', Path.DirectorySeparatorChar); #endregion #region Form @@ -54,6 +54,8 @@ public ProgramForm() { // Initialize the form. InitializeComponent(); + openConfigDialog.InitialDirectory = Directory.GetCurrentDirectory(); + saveConfigDialog.InitialDirectory = Directory.GetCurrentDirectory(); } /// @@ -261,6 +263,9 @@ private void saveToolStripMenuItem_Click(object sender, EventArgs e) // If the code reaches this point without success, then the user // canceled and there are still unsaved changes. changesUnsaved = !success; + + // Show the File Saved status label for 3 seconds. + FileSaved(); } } @@ -303,6 +308,9 @@ private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) // there are still unsaved changes. changesUnsaved = !success; currentIsNew = changesUnsaved; + + // Show the File Saved status label for 3 seconds. + FileSaved(); } } else @@ -571,7 +579,7 @@ private void saveValuesButton_Click(object sender, EventArgs e) foreach(Component c in valuesTable.Controls) { // If c's type is of TextBox, - if (c.GetType() == typeof(TextBox)) + if (c.GetType().ToString() == typeof(TextBox).ToString()) { // Cast it into a text box. TextBox field = (TextBox)c; @@ -612,6 +620,9 @@ private void saveValuesButton_Click(object sender, EventArgs e) } } + // Sets valuesUnsaved to false, since the user just saved them. + valuesUnsaved = false; + // Call ValuesSaved, which shows the status bar indicator for a short time. ValuesSaved(); } @@ -622,11 +633,24 @@ private void saveValuesButton_Click(object sender, EventArgs e) private async void ValuesSaved() { // Set Visible to true. - toolStripSavedLabel.Visible = true; + toolStripValsSavedLabel.Visible = true; + // Wait 3 seconds. + await Task.Delay(3000); + // Set Visible to false. + toolStripValsSavedLabel.Visible = false; + } + + /// + /// Shows the "File Saved" status bar indicator for 3 seconds (3000 milliseconds), and then hide it. + /// + private async void FileSaved() + { + // Set Visible to true. + toolStripFileSavedLabel.Visible = true; // Wait 3 seconds. await Task.Delay(3000); // Set Visible to false. - toolStripSavedLabel.Visible = false; + toolStripFileSavedLabel.Visible = false; } /// @@ -855,7 +879,7 @@ private void FinishOpeningFile() saveAsToolStripMenuItem.Enabled = true; // Change the form's title to reflect the file's name and location. - this.Text = "Kerbal Config Editor - " + openConfigDialog.FileName.Substring(0, 10) + "..." + openConfigDialog.FileName.Substring(openConfigDialog.FileName.LastIndexOf('\\') + 1); + this.Text = "Kerbal Config Editor - " + openConfigDialog.FileName.Substring(0, 10) + "..." + openConfigDialog.FileName.Substring(openConfigDialog.FileName.LastIndexOf(Path.DirectorySeparatorChar) + 1); // Start opening the UI up for interaction again. toolStripProgressBar.Value = 100; diff --git a/Source/Kerbal Config Editor/ProgramForm.resx b/Source/Kerbal Config Editor/ProgramForm.resx index 5e5b455..9d28218 100644 --- a/Source/Kerbal Config Editor/ProgramForm.resx +++ b/Source/Kerbal Config Editor/ProgramForm.resx @@ -120,9 +120,6 @@ 17, 17 - - 17, 17 - @@ -176,37 +173,6 @@ 155, 18 - - 155, 18 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIpSURBVDhPtZL/T1JRGMb5p1itrVZbbRpqZbawnBENV1I0 - jGlByTSyJTXJwq2oKZQb1KAv6JCYWSxvBrkkZUq4CeQEiRABFeLL072Xa0zRra31bO8v57zP5znnPYf1 - X+TxhWF6O7VtGYcnwbSWijKPOLzYrPSvLPwLS3huGUMlT7o9wGD9grVUBj+icdid03S9tDmgNxNwTgVQ - J+rA8XNtWwM+uuZATMwxmQVRycuJFNyzIRitDlScugKzjSgFRGJJaIwEsrk8AsHIhnSL/Ssck37UNipQ - I5DjtuYV7uksRYhr2kebhx2eP6nrycFIEh5fBA/1Nvru8q5+PDaOovK0rABwfwugWzcErfkzHhjsePL6 - E7q1VrTdNUDcrgGvSYlDZHN5XTNOnL8BVe8AJAoNDtZfLgDu9L1BPJmikzcrk81hlRwodZJwdBXziwnI - OrVoaOkiT8C8hKLHBPO7CbywOaE1jeC+bhAd6meQdvZC1KoG/5IS3MZ2HObLUHZSggvkWq3wOvbWiAqA - VpWeyStVfCUNf3AZ4zNhfHCFMEDMgye+hYr6FrDLzxQAUuVTpr0ocn74mchg5vsKRt1RcHp2Qv9+kZ78 - UcE17KkWFgHNN/uQzgBkGKLJPBZiecyGchjzrmFwPIF++xJUbDbUQzEacIArLpopSRSP4CUN1Obf1Abz - uqob5KjiXwWH/GVl5HPt5zZh37GL2H1EiF1VZ7GDI6CNW5r/TSzWbwHYL0mKJ5czAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGCSURBVDhPnZK9S0JRGMb9F1xb2gqaq6mhwCGDtvYIIyLI - cJOE1paoIYpMKUjFRDH87lpoakGlIZF9DA2hZJEQhJXl1xPn3HPV29WQfvBwOfA+P95zuDJ39A6/4wyl - YOOSMHvOcHGThuwvSKEVRvsR+pQqWD3R1pK98DUbl7Jm5hA8SfESd6S5xH5wycalrO4E0D8yWQuriLH6 - E2xcSqlcoRJBxCpiTO5TNi4m/ZgDF4nDsOulsfujyGRzUsmWM8YqdcggKbveS3A88bEkslRye58RSzZt - IVarY/FFaPmlwp+fUaESYRNW5Vm3BPmpBpZNvppACDmTLbS6FbGAPFAj5OGI4PALOK/yZfIlAlk4j7n5 - xdaCarWKj0KRXmE2+UklJEJZZ/RCPTPdWvBdLOP1rYD41QNcgRiVkKJQ1mjGsa2VNxeQb2OWDC7sh47p - ddQLeoyOTSFiVAAFvVhChsmv2k6Uvd3Icx1UolMNiDdpl4nhLiohW/xb0tMph2JwCJxjAz9A30JI8zYA - tAAAAABJRU5ErkJggg== - - 58 diff --git a/Source/Kerbal Config Editor/Properties/AssemblyInfo.cs b/Source/Kerbal Config Editor/Properties/AssemblyInfo.cs index 3f5d706..01a9d02 100644 --- a/Source/Kerbal Config Editor/Properties/AssemblyInfo.cs +++ b/Source/Kerbal Config Editor/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.3.0")] -[assembly: AssemblyFileVersion("1.0.3.0")] +[assembly: AssemblyVersion("1.0.4.0")] +[assembly: AssemblyFileVersion("1.0.4.0")] diff --git a/Source/Kerbal Config Editor/README.txt b/Source/Kerbal Config Editor/README.txt index 08c09ac..70052fe 100644 --- a/Source/Kerbal Config Editor/README.txt +++ b/Source/Kerbal Config Editor/README.txt @@ -1,5 +1,5 @@ Kerbal Config Editor -v1.0.3 Release +v1.0.4 Release Kerbal Config Editor (KCE) is an easy to use tool designed to allow modders of Kerbal Space Program to easily and quickly alter or even create KSP Config Files. @@ -35,6 +35,10 @@ Kerbal Config Editor allows users and modders to easily read, edit, and even cre CHANGELOG: +v1.0.4: +- Minor UI improvements. +- Changed File IO to use the OS's path separator instead of hardcoded backslashes. + v1.0.3: - The Open and Save file dialogs now begin at the install path of the program.