diff --git a/MatterControlLib/PrinterCommunication/PrinterConnection.cs b/MatterControlLib/PrinterCommunication/PrinterConnection.cs index 3f0b91b71..d1372c9c6 100644 --- a/MatterControlLib/PrinterCommunication/PrinterConnection.cs +++ b/MatterControlLib/PrinterCommunication/PrinterConnection.cs @@ -1016,8 +1016,19 @@ namespace MatterHackers.MatterControl.PrinterCommunication QueueLine("M30 {0}".FormatWith(fileName.ToLower())); } + /// + /// Disable the currently acive printer connection and job if it is being actively controled by MC + /// If we are observing an SD card print, do nothing. + /// public void Disable() { + if(this.CommunicationState == CommunicationStates.PrintingFromSd + || (this.PrinterIsPaused && this.PrePauseCommunicationState == CommunicationStates.PrintingFromSd)) + { + // don't turn off anything if we are prnting from sd + return; + } + if (this.IsConnected) { // Make sure we send this without waiting for the printer to respond. We want to try and turn off the heaters. diff --git a/MatterControlLib/RootSystemWindow.cs b/MatterControlLib/RootSystemWindow.cs index 167d46547..73de34afd 100644 --- a/MatterControlLib/RootSystemWindow.cs +++ b/MatterControlLib/RootSystemWindow.cs @@ -225,19 +225,32 @@ namespace MatterHackers.MatterControl string message = null; if (!ApplicationController.Instance.ApplicationExiting - && !exitDialogOpen - && ApplicationController.Instance.ActivePrinter.Connection.PrinterIsPrinting) + && !exitDialogOpen) { - if (ApplicationController.Instance.ActivePrinter.Connection.CommunicationState != CommunicationStates.PrintingFromSd) + int printingCount = 0; + int sdPrinting = 0; + foreach (var printer in ApplicationController.Instance.ActivePrinters) + { + if (printer.Connection.PrinterIsPrinting) + { + if (printer.Connection.CommunicationState == CommunicationStates.PrintingFromSd) + { + sdPrinting++; + } + printingCount++; + } + } + + if (sdPrinting > 0) + { + caption = "Exit while printing".Localize(); + message = "Are you sure you want to exit while a print is running from SD Card?\n\nNote: If you exit, it is recommended you wait until the print is completed before running MatterControl again.".Localize(); + } + else if (printingCount > 0) { caption = "Abort Print".Localize(); message = "Are you sure you want to abort the current print and close MatterControl?".Localize(); } - else - { - caption = "Exit while printing".Localize(); - message = "Are you sure you want exit while a print is running from SD Card?\n\nNote: If you exit, it is recommended you wait until the print is completed before running MatterControl again.".Localize(); - } } #if !__ANDROID__ else if (PartsSheet.IsSaving()) @@ -268,17 +281,10 @@ namespace MatterHackers.MatterControl ApplicationController.Instance.ApplicationExiting = true; ApplicationController.Instance.Shutdown(); - // Always call PrinterConnection.Disable on exit unless PrintingFromSd - PrinterConnection printerConnection = ApplicationController.Instance.ActivePrinter.Connection; - switch (printerConnection.CommunicationState) + foreach (var printer in ApplicationController.Instance.ActivePrinters) { - case CommunicationStates.PrintingFromSd: - case CommunicationStates.Paused when printerConnection.PrePauseCommunicationState == CommunicationStates.PrintingFromSd: - break; - - default: - printerConnection.Disable(); - break; + // the will shutdown any active (and non-sd) prints that are running + printer.Connection.Disable(); } this.CloseOnIdle(); @@ -298,10 +304,12 @@ namespace MatterHackers.MatterControl { var application = ApplicationController.Instance; // Save changes before close - if (application.ActivePrinter != null - && application.ActivePrinter != PrinterConfig.EmptyPrinter) + foreach (var printer in ApplicationController.Instance.ActivePrinters) { - await application.Tasks.Execute("Saving Print Bed".Localize() + "...", application.ActivePrinter.Bed.SaveChanges); + if (printer != PrinterConfig.EmptyPrinter) + { + await application.Tasks.Execute("Saving Print Bed".Localize() + "...", printer.Bed.SaveChanges); + } } foreach (var workspace in application.Workspaces) @@ -321,14 +329,15 @@ namespace MatterHackers.MatterControl public override void OnClosed(EventArgs e) { + UserSettings.Instance.Fields.StartCountDurringExit = UserSettings.Instance.Fields.StartCount; - if (ApplicationController.Instance.ActivePrinter.Connection.CommunicationState != CommunicationStates.PrintingFromSd) + foreach (var printer in ApplicationController.Instance.ActivePrinters) { - ApplicationController.Instance.ActivePrinter.Connection.Disable(); + printer.Connection.Disable(); + //Close connection to the local datastore + printer.Connection.HaltConnectionThread(); } - //Close connection to the local datastore - ApplicationController.Instance.ActivePrinter.Connection.HaltConnectionThread(); ApplicationController.Instance.OnApplicationClosed(); Datastore.Instance.Exit();