From da68f336a4ed6416516feededec1b9a0ae8d98b1 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Wed, 16 Mar 2016 13:57:01 -0700 Subject: [PATCH 1/6] Prevent null reference error, prepopulate with part file name --- CustomWidgets/ExportPrintItemWindow.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index 6abd5f088..3dc2e80ec 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -141,6 +141,7 @@ namespace MatterHackers.MatterControl exportButton.Click += new EventHandler((object sender, EventArgs e) => { SaveFileDialogParams saveParams = new SaveFileDialogParams(plugin.getExtensionFilter(), title: plugin.getButtonText()); + saveParams.FileName = printItemWrapper.Name; saveParams.Title = "MatterControl: Export File"; saveParams.ActionButtonLabel = "Export"; FileDialog.SaveFileDialog(saveParams, delegate(SaveFileDialogParams saveParam) From 2acf4a44d5d4e53e98c37113cbb78108fb3e97f6 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 17 Mar 2016 08:57:58 -0700 Subject: [PATCH 2/6] Fix whitespace variance --- CustomWidgets/ExportPrintItemWindow.cs | 94 +++++++++++++------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index 3dc2e80ec..0339f8893 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -128,57 +128,57 @@ namespace MatterHackers.MatterControl }); middleRowContainer.AddChild(exportGCode); - PluginFinder exportPluginFinder = new PluginFinder(); - - foreach (ExportGcodePlugin plugin in exportPluginFinder.Plugins) - { - //Create export button for each Plugin found + PluginFinder exportPluginFinder = new PluginFinder(); - string exportButtonText = plugin.getButtonText().Localize(); - Button exportButton = textImageButtonFactory.Generate(exportButtonText); - exportButton.HAnchor = HAnchor.ParentLeft; - exportButton.Cursor = Cursors.Hand; - exportButton.Click += new EventHandler((object sender, EventArgs e) => - { - SaveFileDialogParams saveParams = new SaveFileDialogParams(plugin.getExtensionFilter(), title: plugin.getButtonText()); + foreach (ExportGcodePlugin plugin in exportPluginFinder.Plugins) + { + //Create export button for each Plugin found + + string exportButtonText = plugin.getButtonText().Localize(); + Button exportButton = textImageButtonFactory.Generate(exportButtonText); + exportButton.HAnchor = HAnchor.ParentLeft; + exportButton.Cursor = Cursors.Hand; + exportButton.Click += new EventHandler((object sender, EventArgs e) => + { + SaveFileDialogParams saveParams = new SaveFileDialogParams(plugin.getExtensionFilter(), title: plugin.getButtonText()); saveParams.FileName = printItemWrapper.Name; - saveParams.Title = "MatterControl: Export File"; - saveParams.ActionButtonLabel = "Export"; - FileDialog.SaveFileDialog(saveParams, delegate(SaveFileDialogParams saveParam) - { - string extension = Path.GetExtension(saveParam.FileName); - if (extension == "") - { - saveParam.FileName += plugin.getFileExtension(); - } + saveParams.Title = "MatterControl: Export File"; + saveParams.ActionButtonLabel = "Export"; + FileDialog.SaveFileDialog(saveParams, delegate (SaveFileDialogParams saveParam) + { + string extension = Path.GetExtension(saveParam.FileName); + if (extension == "") + { + saveParam.FileName += plugin.getFileExtension(); + } - if (partIsGCode) - { - Close(); - plugin.generate(printItemWrapper.FileLocation, saveParam.FileName); - } - else - { - Close(); - SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper); - printItemWrapper.SlicingDone += new EventHandler((object slicingCompleteSender, EventArgs slicingEventArgs) => - { - PrintItemWrapper sliceItem = (PrintItemWrapper)slicingCompleteSender; - if (File.Exists(sliceItem.GetGCodePathAndFileName())) - { - plugin.generate(sliceItem.GetGCodePathAndFileName(), saveParam.FileName); - } - });//End SlicingDone Event handler - } - });//End SaveFileDialog delegate + if (partIsGCode) + { + Close(); + plugin.generate(printItemWrapper.FileLocation, saveParam.FileName); + } + else + { + Close(); + SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper); + printItemWrapper.SlicingDone += new EventHandler((object slicingCompleteSender, EventArgs slicingEventArgs) => + { + PrintItemWrapper sliceItem = (PrintItemWrapper)slicingCompleteSender; + if (File.Exists(sliceItem.GetGCodePathAndFileName())) + { + plugin.generate(sliceItem.GetGCodePathAndFileName(), saveParam.FileName); + } + });//End SlicingDone Event handler + } + });//End SaveFileDialog delegate - });//End Click Event handler - middleRowContainer.AddChild(exportButton); + });//End Click Event handler + middleRowContainer.AddChild(exportButton); - } + } - //bool showExportX3GButton = ActivePrinterProfile.Instance.ActivePrinter.DriverType == "X3G"; - bool showExportX3GButton = false; + //bool showExportX3GButton = ActivePrinterProfile.Instance.ActivePrinter.DriverType == "X3G"; + bool showExportX3GButton = false; if (showExportX3GButton) { string exportAsX3GText = "Export as X3G".Localize(); @@ -272,7 +272,7 @@ namespace MatterHackers.MatterControl { if (!string.IsNullOrEmpty(saveParams.FileName)) { - ExportGcodeCommandLineUtility(saveParams.FileName); + ExportGcodeCommandLineUtility(saveParams.FileName); } } @@ -429,7 +429,7 @@ namespace MatterHackers.MatterControl public override void OnClosed(EventArgs e) { - printItemWrapper.SlicingDone -= sliceItem_Done; + printItemWrapper.SlicingDone -= sliceItem_Done; if (unregisterEvents != null) { unregisterEvents(this, null); From 698eaca3ae4feac45c7b4a005e1f0964502f448b Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 17 Mar 2016 09:40:44 -0700 Subject: [PATCH 3/6] Remove deprecated X3G Export implementation --- CustomWidgets/ExportPrintItemWindow.cs | 52 -------------------------- 1 file changed, 52 deletions(-) diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index 0339f8893..3a448bc85 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -174,22 +174,6 @@ namespace MatterHackers.MatterControl });//End Click Event handler middleRowContainer.AddChild(exportButton); - - } - - //bool showExportX3GButton = ActivePrinterProfile.Instance.ActivePrinter.DriverType == "X3G"; - bool showExportX3GButton = false; - if (showExportX3GButton) - { - string exportAsX3GText = "Export as X3G".Localize(); - Button exportAsX3G = textImageButtonFactory.Generate(exportAsX3GText); - exportAsX3G.HAnchor = HAnchor.ParentLeft; - exportAsX3G.Cursor = Cursors.Hand; - exportAsX3G.Click += new EventHandler((object sender, EventArgs e) => - { - UiThread.RunOnIdle(ExportX3G_Click); - }); - middleRowContainer.AddChild(exportAsX3G); } } @@ -309,42 +293,6 @@ namespace MatterHackers.MatterControl } } - private void ExportX3G_Click() - { - SaveFileDialogParams saveParams = new SaveFileDialogParams("Export X3G|*.x3g", title: "Export X3G"); - saveParams.Title = "MatterControl: Export File"; - saveParams.ActionButtonLabel = "Export"; - - FileDialog.SaveFileDialog(saveParams, onExportX3gFileSelected); - } - - private void onExportX3gFileSelected(SaveFileDialogParams saveParams) - { - if (!string.IsNullOrEmpty(saveParams.FileName)) - { - x3gPathAndFilenameToSave = saveParams.FileName; - string extension = Path.GetExtension(x3gPathAndFilenameToSave); - if (extension == "") - { - File.Delete(gcodePathAndFilenameToSave); - x3gPathAndFilenameToSave += ".x3g"; - } - - string saveExtension = Path.GetExtension(printItemWrapper.FileLocation).ToUpper(); - if (MeshFileIo.ValidFileExtensions().Contains(saveExtension)) - { - Close(); - SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper); - printItemWrapper.SlicingDone += x3gItemSlice_Complete; - } - else if (partIsGCode) - { - Close(); - generateX3GfromGcode(printItemWrapper.FileLocation, x3gPathAndFilenameToSave); - } - } - } - private void SaveGCodeToNewLocation(string source, string dest) { try From 156c5e3b4060e9e779476b64923eb8daeafb2fbb Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 17 Mar 2016 10:14:29 -0700 Subject: [PATCH 4/6] Fix hang after X3G Export -> SaveFileDialog selection - Close the export window before invoking the save dialog - Execute FileDialog.SaveFileDialog via RunOnIdle --- CustomWidgets/ExportPrintItemWindow.cs | 67 +++++++++++++++----------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index 3a448bc85..a9c73ede0 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -135,44 +135,57 @@ namespace MatterHackers.MatterControl //Create export button for each Plugin found string exportButtonText = plugin.getButtonText().Localize(); + Button exportButton = textImageButtonFactory.Generate(exportButtonText); exportButton.HAnchor = HAnchor.ParentLeft; exportButton.Cursor = Cursors.Hand; exportButton.Click += new EventHandler((object sender, EventArgs e) => { - SaveFileDialogParams saveParams = new SaveFileDialogParams(plugin.getExtensionFilter(), title: plugin.getButtonText()); - saveParams.FileName = printItemWrapper.Name; - saveParams.Title = "MatterControl: Export File"; - saveParams.ActionButtonLabel = "Export"; - FileDialog.SaveFileDialog(saveParams, delegate (SaveFileDialogParams saveParam) + UiThread.RunOnIdle(() => { - string extension = Path.GetExtension(saveParam.FileName); - if (extension == "") - { - saveParam.FileName += plugin.getFileExtension(); - } + // Close the export window + Close(); - if (partIsGCode) - { - Close(); - plugin.generate(printItemWrapper.FileLocation, saveParam.FileName); - } - else - { - Close(); - SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper); - printItemWrapper.SlicingDone += new EventHandler((object slicingCompleteSender, EventArgs slicingEventArgs) => + // Open a SaveFileDialog. If Save is clicked, slice the part if needed and pass the plugin the + // path to the gcode file and the target save path + FileDialog.SaveFileDialog( + new SaveFileDialogParams(plugin.getExtensionFilter()) { - PrintItemWrapper sliceItem = (PrintItemWrapper)slicingCompleteSender; - if (File.Exists(sliceItem.GetGCodePathAndFileName())) + Title = "MatterControl: Export File", + FileName = printItemWrapper.Name, + ActionButtonLabel = "Export" + }, + (SaveFileDialogParams saveParam) => + { + string extension = Path.GetExtension(saveParam.FileName); + if (extension == "") { - plugin.generate(sliceItem.GetGCodePathAndFileName(), saveParam.FileName); + saveParam.FileName += plugin.getFileExtension(); } - });//End SlicingDone Event handler - } - });//End SaveFileDialog delegate - });//End Click Event handler + if (partIsGCode) + { + plugin.generate(printItemWrapper.FileLocation, saveParam.FileName); + } + else + { + SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper); + + printItemWrapper.SlicingDone += (printItem, eventArgs) => + { + PrintItemWrapper sliceItem = (PrintItemWrapper)printItem; + if (File.Exists(sliceItem.GetGCodePathAndFileName())) + { + plugin.generate(sliceItem.GetGCodePathAndFileName(), saveParam.FileName); + } + }; //End SlicingDone Event handler + } + + //End SaveFileDialog callback + }); + }); + };//End Click Event handler + middleRowContainer.AddChild(exportButton); } } From 39bf251220db22551f35c111ec3f7d9de9354487 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 17 Mar 2016 10:19:08 -0700 Subject: [PATCH 5/6] Remove EventHandler wrapper --- CustomWidgets/ExportPrintItemWindow.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index a9c73ede0..f82eb0939 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -139,7 +139,7 @@ namespace MatterHackers.MatterControl Button exportButton = textImageButtonFactory.Generate(exportButtonText); exportButton.HAnchor = HAnchor.ParentLeft; exportButton.Cursor = Cursors.Hand; - exportButton.Click += new EventHandler((object sender, EventArgs e) => + exportButton.Click += (object sender, EventArgs e) => { UiThread.RunOnIdle(() => { From 4c78b9e00cb66911bbf340b91adc88494d1b2e39 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 17 Mar 2016 10:29:29 -0700 Subject: [PATCH 6/6] Use correct casing for public members, fix whitespace --- CustomWidgets/ExportPrintItemWindow.cs | 16 +++++------ Queue/OptionsMenu/ExportGcodePlugin.cs | 39 ++++++++++++-------------- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index f82eb0939..c3782a6fc 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -134,7 +134,7 @@ namespace MatterHackers.MatterControl { //Create export button for each Plugin found - string exportButtonText = plugin.getButtonText().Localize(); + string exportButtonText = plugin.GetButtonText().Localize(); Button exportButton = textImageButtonFactory.Generate(exportButtonText); exportButton.HAnchor = HAnchor.ParentLeft; @@ -149,7 +149,7 @@ namespace MatterHackers.MatterControl // Open a SaveFileDialog. If Save is clicked, slice the part if needed and pass the plugin the // path to the gcode file and the target save path FileDialog.SaveFileDialog( - new SaveFileDialogParams(plugin.getExtensionFilter()) + new SaveFileDialogParams(plugin.GetExtensionFilter()) { Title = "MatterControl: Export File", FileName = printItemWrapper.Name, @@ -160,12 +160,12 @@ namespace MatterHackers.MatterControl string extension = Path.GetExtension(saveParam.FileName); if (extension == "") { - saveParam.FileName += plugin.getFileExtension(); + saveParam.FileName += plugin.GetFileExtension(); } if (partIsGCode) { - plugin.generate(printItemWrapper.FileLocation, saveParam.FileName); + plugin.Generate(printItemWrapper.FileLocation, saveParam.FileName); } else { @@ -176,15 +176,13 @@ namespace MatterHackers.MatterControl PrintItemWrapper sliceItem = (PrintItemWrapper)printItem; if (File.Exists(sliceItem.GetGCodePathAndFileName())) { - plugin.generate(sliceItem.GetGCodePathAndFileName(), saveParam.FileName); + plugin.Generate(sliceItem.GetGCodePathAndFileName(), saveParam.FileName); } - }; //End SlicingDone Event handler + }; } - - //End SaveFileDialog callback }); }); - };//End Click Event handler + }; // End exportButton Click handler middleRowContainer.AddChild(exportButton); } diff --git a/Queue/OptionsMenu/ExportGcodePlugin.cs b/Queue/OptionsMenu/ExportGcodePlugin.cs index d04711072..ab2f73881 100644 --- a/Queue/OptionsMenu/ExportGcodePlugin.cs +++ b/Queue/OptionsMenu/ExportGcodePlugin.cs @@ -7,28 +7,25 @@ using System.Threading.Tasks; namespace MatterHackers.MatterControl.Queue.OptionsMenu { - public class ExportGcodePlugin : MatterControlPlugin - { + public class ExportGcodePlugin : MatterControlPlugin + { + public virtual string GetButtonText() + { + return ""; + } - public virtual string getButtonText() - { - return ""; - } + public virtual string GetFileExtension() + { + return ""; + } - public virtual string getFileExtension() - { - return ""; - } + public virtual string GetExtensionFilter() + { + return ""; + } - public virtual string getExtensionFilter() - { - return ""; - } - - public virtual void generate(string gcodeInputPath, string x3gOutputPath) - { - - } - - } + public virtual void Generate(string gcodeInputPath, string x3gOutputPath) + { + } + } }