diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index f18270896..6abd5f088 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -269,7 +269,7 @@ namespace MatterHackers.MatterControl private void onExportGcodeFileSelected(SaveFileDialogParams saveParams) { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { ExportGcodeCommandLineUtility(saveParams.FileName); } @@ -319,7 +319,7 @@ namespace MatterHackers.MatterControl private void onExportX3gFileSelected(SaveFileDialogParams saveParams) { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { x3gPathAndFilenameToSave = saveParams.FileName; string extension = Path.GetExtension(x3gPathAndFilenameToSave); @@ -466,7 +466,7 @@ namespace MatterHackers.MatterControl { try { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { string filePathToSave = saveParams.FileName; if (filePathToSave != null && filePathToSave != "") @@ -518,7 +518,7 @@ namespace MatterHackers.MatterControl { try { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { string filePathToSave = saveParams.FileName; if (filePathToSave != null && filePathToSave != "") diff --git a/EeProm/EePromMarlinSettings.cs b/EeProm/EePromMarlinSettings.cs index c4d97b158..94f631ca3 100644 --- a/EeProm/EePromMarlinSettings.cs +++ b/EeProm/EePromMarlinSettings.cs @@ -27,9 +27,13 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ +using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.MatterControl.PrinterCommunication; using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; namespace MatterHackers.MatterControl.EeProm { @@ -78,7 +82,7 @@ namespace MatterHackers.MatterControl.EeProm if ((token != " ") && ((token == "M92") || (mode == "M92"))) { foundSetting = true; - if(mode != "M92") + if (mode != "M92") { foundFirstM92E = false; } @@ -272,10 +276,10 @@ namespace MatterHackers.MatterControl.EeProm //String l get { return se; } - set { if (se.Equals(value)) - return; - se = value; - changed = true; + set { if (se.Equals(value)) + return; + se = value; + changed = true; } } @@ -309,6 +313,67 @@ namespace MatterHackers.MatterControl.EeProm set { if (ax.Equals(value)) return; ax = value; changed = true; } } + internal void Import(string fileName) + { + // read all the lines + string[] allLines = File.ReadAllLines(fileName); + // find all the descriptions we can + foreach (string line in allLines) + { + if (line.Contains("|")) + { + string[] descriptionValue = line.Split('|'); + if (descriptionValue.Length == 2) + { + SetSetting(descriptionValue[0], descriptionValue[1]); + } + } + } + changed = true; + } + + + void SetSetting(string keyToSet, string valueToSetTo) + { + valueToSetTo = valueToSetTo.Replace("\"", "").Trim(); + + List lines = new List(); + FieldInfo[] fields; + fields = this.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance); + foreach (FieldInfo field in fields) + { + List possibleNames = new List(); + possibleNames.Add(field.Name); + + if (possibleNames.Contains(keyToSet)) + { + string name = field.Name; + object value = field.GetValue(this); + switch (field.FieldType.Name) + { + case "Int32": + field.SetValue(this, (int)double.Parse(valueToSetTo)); + break; + + case "Double": + field.SetValue(this, double.Parse(valueToSetTo)); + break; + + case "Boolean": + field.SetValue(this, bool.Parse(valueToSetTo)); + break; + + case "String": + field.SetValue(this, valueToSetTo.Replace("\\n", "\n")); + break; + + default: + throw new NotImplementedException("unknown type"); + } + } + } + } + public string AY { get { return ay; } @@ -345,6 +410,31 @@ namespace MatterHackers.MatterControl.EeProm set { if (avs.Equals(value)) return; avs = value; changed = true; } } + internal void Export(string fileName) + { + using (var sw = new StreamWriter(fileName)) + { + FieldInfo[] fields; + fields = this.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance); + foreach (FieldInfo field in fields) + { + string name = field.Name; + object value = field.GetValue(this); + switch (field.FieldType.Name) + { + case "Int32": + case "Double": + case "Boolean": + case "FMatrix3x3": + case "String": + // all these setting just output correctly with ToString() so we don't have to do anything special. + sw.WriteLine("{0}|{1}".FormatWith(name, value)); + break; + } + } + } + } + public string AVT { get { return avt; } diff --git a/EeProm/EePromMarlinWindow.cs b/EeProm/EePromMarlinWindow.cs index 3ba66d1ff..92e06ec97 100644 --- a/EeProm/EePromMarlinWindow.cs +++ b/EeProm/EePromMarlinWindow.cs @@ -73,10 +73,6 @@ namespace MatterHackers.MatterControl.EeProm private MHNumberEdit maxXYJerk; private MHNumberEdit maxZJerk; - private Button buttonAbort; - private Button buttonSetToFactorySettings; - private Button buttonSave; - private event EventHandler unregisterEvents; private TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); @@ -89,7 +85,7 @@ namespace MatterHackers.MatterControl.EeProm : base(700, 480) { AlwaysOnTopOfMain = true; - Title = LocalizedString.Get("Marlin Firmware EEPROM Settings"); + Title = "Marlin Firmware EEPROM Settings".Localize(); currentEePromSettings = new EePromMarlinSettings(); currentEePromSettings.eventAdded += SetUiToPrinterSettings; @@ -114,48 +110,54 @@ namespace MatterHackers.MatterControl.EeProm topButtonBar.Margin = new BorderDouble(0, 3); - CreateMainButton(ref buttonSetToFactorySettings, topButtonBar, "Reset to Factory Defaults"); - buttonSetToFactorySettings.Click += SetToFactorySettings; + Button buttonSetToFactorySettings = textImageButtonFactory.Generate("Reset to Factory Defaults".Localize()); + topButtonBar.AddChild(buttonSetToFactorySettings); + + buttonSetToFactorySettings.Click += (sender, e) => + { + currentEePromSettings.SetPrinterToFactorySettings(); + currentEePromSettings.Update(); + }; mainContainer.AddChild(topButtonBar); } - topToBottom.AddChild(Create4FieldSet("Steps per mm:", + topToBottom.AddChild(Create4FieldSet("Steps per mm:".Localize(), "X:", ref stepsPerMmX, "Y:", ref stepsPerMmY, "Z:", ref stepsPerMmZ, "E:", ref stepsPerMmE)); - topToBottom.AddChild(Create4FieldSet("Maximum feedrates [mm/s]:", + topToBottom.AddChild(Create4FieldSet("Maximum feedrates [mm/s]:".Localize(), "X:", ref maxFeedrateMmPerSX, "Y:", ref maxFeedrateMmPerSY, "Z:", ref maxFeedrateMmPerSZ, "E:", ref maxFeedrateMmPerSE)); - topToBottom.AddChild(Create4FieldSet("Maximum Acceleration [mm/s²]:", + topToBottom.AddChild(Create4FieldSet("Maximum Acceleration [mm/s²]:".Localize(), "X:", ref maxAccelerationMmPerSSqrdX, "Y:", ref maxAccelerationMmPerSSqrdY, "Z:", ref maxAccelerationMmPerSSqrdZ, "E:", ref maxAccelerationMmPerSSqrdE)); - topToBottom.AddChild(CreateField("Acceleration:", ref acceleration)); - topToBottom.AddChild(CreateField("Retract Acceleration:", ref retractAcceleration)); + topToBottom.AddChild(CreateField("Acceleration:".Localize(), ref acceleration)); + topToBottom.AddChild(CreateField("Retract Acceleration:".Localize(), ref retractAcceleration)); - topToBottom.AddChild(Create3FieldSet("PID settings:", + topToBottom.AddChild(Create3FieldSet("PID settings:".Localize(), "P:", ref pidP, "I:", ref pidI, "D:", ref pidD)); - topToBottom.AddChild(Create3FieldSet("Homing Offset:", + topToBottom.AddChild(Create3FieldSet("Homing Offset:".Localize(), "X:", ref homingOffsetX, "Y:", ref homingOffsetY, "Z:", ref homingOffsetZ)); - topToBottom.AddChild(CreateField("Min feedrate [mm/s]:", ref minFeedrate)); - topToBottom.AddChild(CreateField("Min travel feedrate [mm/s]:", ref minTravelFeedrate)); - topToBottom.AddChild(CreateField("Minimum segment time [ms]:", ref minSegmentTime)); - topToBottom.AddChild(CreateField("Maximum X-Y jerk [mm/s]:", ref maxXYJerk)); - topToBottom.AddChild(CreateField("Maximum Z jerk [mm/s]:", ref maxZJerk)); + topToBottom.AddChild(CreateField("Min feedrate [mm/s]:".Localize(), ref minFeedrate)); + topToBottom.AddChild(CreateField("Min travel feedrate [mm/s]:".Localize(), ref minTravelFeedrate)); + topToBottom.AddChild(CreateField("Minimum segment time [ms]:".Localize(), ref minSegmentTime)); + topToBottom.AddChild(CreateField("Maximum X-Y jerk [mm/s]:".Localize(), ref maxXYJerk)); + topToBottom.AddChild(CreateField("Maximum Z jerk [mm/s]:".Localize(), ref maxZJerk)); GuiWidget topBottomSpacer = new GuiWidget(1, 1); topBottomSpacer.VAnchor = VAnchor.ParentBottomTop; @@ -170,12 +172,80 @@ namespace MatterHackers.MatterControl.EeProm bottomButtonBar.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; bottomButtonBar.Margin = new BorderDouble(0, 3); - CreateMainButton(ref buttonSave, bottomButtonBar, "Save to EEProm"); - buttonSave.Click += buttonSave_Click; + Button buttonSave = textImageButtonFactory.Generate("Save to EEProm".Localize()); + bottomButtonBar.AddChild(buttonSave); + buttonSave.Click += (sender, e) => + { + UiThread.RunOnIdle(() => + { + SaveSettingsToActive(); + currentEePromSettings.SaveToEeProm(); + Close(); + }); + }; CreateSpacer(bottomButtonBar); - CreateMainButton(ref buttonAbort, bottomButtonBar, "Close"); + // put in the import button +#if true + { + Button buttonImport = textImageButtonFactory.Generate("Import".Localize() + "..."); + buttonImport.Margin = new BorderDouble(0, 3) * TextWidget.GlobalPointSizeScaleRatio; + buttonImport.Click += (sender, e) => + { + UiThread.RunOnIdle(() => + { + FileDialog.OpenFileDialog( + new OpenFileDialogParams("EEPROM Settings" + "|*.ini") + { + ActionButtonLabel = "Import EEPROM Settings".Localize(), + Title = "Import EEPROM".Localize(), + }, + (openParams) => + { + if (!string.IsNullOrEmpty(openParams.FileName)) + { + currentEePromSettings.Import(openParams.FileName); + SetUiToPrinterSettings(null, null); + } + }); + }); + }; + bottomButtonBar.AddChild(buttonImport); + } + + // put in the export button + { + Button buttonExport = textImageButtonFactory.Generate("Export".Localize() + "..."); + buttonExport.Margin = new BorderDouble(0, 3) * TextWidget.GlobalPointSizeScaleRatio; + buttonExport.Click += (sender, e) => + { + UiThread.RunOnIdle(() => + { + string defaultFileNameNoPath = "eeprom_settings.ini"; + FileDialog.SaveFileDialog( + new SaveFileDialogParams("EEPROM Settings" + "|*.ini") + { + ActionButtonLabel = "Export EEPROM Settings".Localize(), + Title = "Export EEPROM".Localize(), + FileName = defaultFileNameNoPath + }, + (saveParams) => + { + if (!string.IsNullOrEmpty(saveParams.FileName) + && saveParams.FileName != defaultFileNameNoPath) + { + currentEePromSettings.Export(saveParams.FileName); + } + }); + }); + }; + bottomButtonBar.AddChild(buttonExport); + } +#endif + + Button buttonAbort = textImageButtonFactory.Generate("Close".Localize()); + bottomButtonBar.AddChild(buttonAbort); buttonAbort.Click += buttonAbort_Click; mainContainer.AddChild(bottomButtonBar); @@ -256,7 +326,7 @@ namespace MatterHackers.MatterControl.EeProm row.Margin = new BorderDouble(3); row.HAnchor = Agg.UI.HAnchor.ParentLeftRight; - TextWidget labelWidget = new TextWidget(LocalizedString.Get(label), textColor: ActiveTheme.Instance.PrimaryTextColor); + TextWidget labelWidget = new TextWidget(label, textColor: ActiveTheme.Instance.PrimaryTextColor); labelWidget.VAnchor = VAnchor.ParentCenter; maxWidthOfLeftStuff = Math.Max(maxWidthOfLeftStuff, labelWidget.Width); GuiWidget holder = new GuiWidget(labelWidget.Width, labelWidget.Height); @@ -311,18 +381,6 @@ namespace MatterHackers.MatterControl.EeProm buttonBar.AddChild(spacer); } - private void CreateMainButton(ref Button button, FlowLayoutWidget buttonBar, string text) - { - button = textImageButtonFactory.Generate(LocalizedString.Get(text)); - buttonBar.AddChild(button); - } - - private void SetToFactorySettings(object sender, EventArgs e) - { - currentEePromSettings.SetPrinterToFactorySettings(); - currentEePromSettings.Update(); - } - private void buttonAbort_Click(object sender, EventArgs e) { UiThread.RunOnIdle(Close); @@ -367,18 +425,6 @@ namespace MatterHackers.MatterControl.EeProm homingOffsetZ.Text = currentEePromSettings.hoz; } - private void buttonSave_Click(object sender, EventArgs e) - { - UiThread.RunOnIdle(DoButtonSave_Click); - } - - private void DoButtonSave_Click() - { - SaveSettingsToActive(); - currentEePromSettings.SaveToEeProm(); - Close(); - } - private void SaveSettingsToActive() { currentEePromSettings.SX = stepsPerMmX.Text; diff --git a/EeProm/EePromRepetierStorage.cs b/EeProm/EePromRepetierStorage.cs index fbf24e18e..6af900e3f 100644 --- a/EeProm/EePromRepetierStorage.cs +++ b/EeProm/EePromRepetierStorage.cs @@ -105,19 +105,17 @@ namespace MatterHackers.MatterControl.EeProm internal void Export(string fileName) { - FileStream fs = new FileStream(fileName, FileMode.Create); - StreamWriter sw = new System.IO.StreamWriter(fs); - - lock (eePromSettingsList) + using (var sw = new StreamWriter(fileName)) { - foreach (EePromRepetierParameter p in eePromSettingsList.Values) + lock (eePromSettingsList) { - string data = "{0}|{1}".FormatWith(p.description, p.value); - sw.WriteLine(data); + foreach (EePromRepetierParameter p in eePromSettingsList.Values) + { + string data = "{0}|{1}".FormatWith(p.description, p.value); + sw.WriteLine(data); + } } } - - sw.Close(); } internal void Import(string fileName) diff --git a/EeProm/EePromRepetierWindow.cs b/EeProm/EePromRepetierWindow.cs index f318eb9a5..7a6a515cd 100644 --- a/EeProm/EePromRepetierWindow.cs +++ b/EeProm/EePromRepetierWindow.cs @@ -128,7 +128,7 @@ namespace MatterHackers.MatterControl.EeProm }, (openParams) => { - if (openParams.FileName != null) + if (!string.IsNullOrEmpty(openParams.FileName)) { currentEePromSettings.Import(openParams.FileName); RebuildUi(); @@ -156,7 +156,7 @@ namespace MatterHackers.MatterControl.EeProm }, (saveParams) => { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { currentEePromSettings.Export(saveParams.FileName); } diff --git a/PrinterControls/TerminalWindow/TerminalWidget.cs b/PrinterControls/TerminalWindow/TerminalWidget.cs index db9c90179..4fce4ab08 100644 --- a/PrinterControls/TerminalWindow/TerminalWidget.cs +++ b/PrinterControls/TerminalWindow/TerminalWidget.cs @@ -227,7 +227,7 @@ namespace MatterHackers.MatterControl private void onExportLogFileSelected(SaveFileDialogParams saveParams) { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { string filePathToSave = saveParams.FileName; if (filePathToSave != null && filePathToSave != "") diff --git a/Queue/OptionsMenu/QueueOptionsMenu.cs b/Queue/OptionsMenu/QueueOptionsMenu.cs index 57d715c4d..98f0d08e3 100644 --- a/Queue/OptionsMenu/QueueOptionsMenu.cs +++ b/Queue/OptionsMenu/QueueOptionsMenu.cs @@ -147,7 +147,7 @@ namespace MatterHackers.MatterControl.PrintQueue }, (saveParams) => { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { PartsSheet currentPartsInQueue = new PartsSheet(parts, saveParams.FileName); diff --git a/SlicerConfiguration/ActiveSliceSettings.cs b/SlicerConfiguration/ActiveSliceSettings.cs index eb185715a..4362c502c 100644 --- a/SlicerConfiguration/ActiveSliceSettings.cs +++ b/SlicerConfiguration/ActiveSliceSettings.cs @@ -806,7 +806,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private void onExportFileSelected(SaveFileDialogParams saveParams) { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { GenerateConfigFile(saveParams.FileName); } diff --git a/SlicerConfiguration/SlicePresetsWindow/SlicePresetDetailWidget.cs b/SlicerConfiguration/SlicePresetsWindow/SlicePresetDetailWidget.cs index 9758fd8fb..7de4a1b73 100644 --- a/SlicerConfiguration/SlicePresetsWindow/SlicePresetDetailWidget.cs +++ b/SlicerConfiguration/SlicePresetsWindow/SlicePresetDetailWidget.cs @@ -1020,7 +1020,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private void onSaveFileSelected(SaveFileDialogParams saveParams) { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { GenerateConfigFile(saveParams.FileName); } diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 1ca18756e..f0beead4d 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 1ca18756e0d6f9c673f3c46b7fa4a2fa2538f5c3 +Subproject commit f0beead4d9ace9120d92c398145e3a23349e9388 diff --git a/Utilities/ProjectFileHandler.cs b/Utilities/ProjectFileHandler.cs index 511d02292..a3c2a68b0 100644 --- a/Utilities/ProjectFileHandler.cs +++ b/Utilities/ProjectFileHandler.cs @@ -150,7 +150,7 @@ namespace MatterHackers.MatterControl private void onSaveFileSelected(SaveFileDialogParams saveParams) { - if (saveParams.FileName != null) + if (!string.IsNullOrEmpty(saveParams.FileName)) { ExportToProjectArchive(saveParams.FileName); }