diff --git a/ActionBar/PrintActionRow.cs b/ActionBar/PrintActionRow.cs index 662caca2f..8b61f4462 100644 --- a/ActionBar/PrintActionRow.cs +++ b/ActionBar/PrintActionRow.cs @@ -187,7 +187,7 @@ namespace MatterHackers.MatterControl.ActionBar PrintItemWrapper partToPrint = sender as PrintItemWrapper; if (partToPrint != null) { - partToPrint.SlicingDone -= new EventHandler(partToPrint_SliceDone); + partToPrint.SlicingDone.UnregisterEvent(partToPrint_SliceDone, ref unregisterEvents); string gcodePathAndFileName = partToPrint.GetGCodePathAndFileName(); if (gcodePathAndFileName != "") { @@ -254,7 +254,7 @@ namespace MatterHackers.MatterControl.ActionBar PrinterCommunication.Instance.CommunicationState = PrinterCommunication.CommunicationStates.PreparingToPrint; PrintItemWrapper partToPrint = PrinterCommunication.Instance.ActivePrintItem; SlicingQueue.Instance.QueuePartForSlicing(partToPrint); - partToPrint.SlicingDone += new EventHandler(partToPrint_SliceDone); + partToPrint.SlicingDone.RegisterEvent(partToPrint_SliceDone, ref unregisterEvents); } else diff --git a/ActionBar/PrintStatusRow.cs b/ActionBar/PrintStatusRow.cs index f588628fb..e681a7724 100644 --- a/ActionBar/PrintStatusRow.cs +++ b/ActionBar/PrintStatusRow.cs @@ -115,7 +115,7 @@ namespace MatterHackers.MatterControl.ActionBar // first we have to remove any link to an old part (the part currently in the view) if (activePrintPreviewImage.PrintItem != null) { - activePrintPreviewImage.PrintItem.SlicingOutputMessage -= PrintItem_SlicingOutputMessage; + activePrintPreviewImage.PrintItem.SlicingOutputMessage.UnregisterEvent(PrintItem_SlicingOutputMessage, ref unregisterEvents); } activePrintPreviewImage.PrintItem = PrinterCommunication.Instance.ActivePrintItem; @@ -123,7 +123,7 @@ namespace MatterHackers.MatterControl.ActionBar // then hook up our new part if (activePrintPreviewImage.PrintItem != null) { - activePrintPreviewImage.PrintItem.SlicingOutputMessage += PrintItem_SlicingOutputMessage; + activePrintPreviewImage.PrintItem.SlicingOutputMessage.RegisterEvent(PrintItem_SlicingOutputMessage, ref unregisterEvents); } activePrintPreviewImage.Invalidate(); diff --git a/ApplicationView/CompactSlidePanel.cs b/ApplicationView/CompactSlidePanel.cs index 767619c47..eaf08eb2c 100644 --- a/ApplicationView/CompactSlidePanel.cs +++ b/ApplicationView/CompactSlidePanel.cs @@ -78,12 +78,6 @@ namespace MatterHackers.MatterControl : base(2) { this.queueDataView = queueDataView; - AddElements(); - } - - public void AddElements() - { - ActivePrinterProfile.Instance.ActivePrinterChanged.RegisterEvent(LoadSettingsOnPrinterChanged, ref unregisterEvents); // do the front panel stuff { @@ -253,8 +247,6 @@ namespace MatterHackers.MatterControl advancedControls.AddTab(new SimpleTextTabWidget(new TabPage(configurationControls, configurationLabel), 14, ActiveTheme.Instance.PrimaryTextColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); - - return advancedControls; } @@ -291,11 +283,5 @@ namespace MatterHackers.MatterControl sliceSettingsUiState = new SliceSettingsWidget.UiState(sliceSettingsWidget); UiThread.RunOnIdle(DoChangePanel); } - - public void LoadSettingsOnPrinterChanged(object sender, EventArgs e) - { - ActiveSliceSettings.Instance.LoadAllSettings(); - ApplicationWidget.Instance.ReloadBackPanel(); - } } } diff --git a/ApplicationView/MainApplicationWidget.cs b/ApplicationView/MainApplicationWidget.cs index 94d512a70..4aa53235d 100644 --- a/ApplicationView/MainApplicationWidget.cs +++ b/ApplicationView/MainApplicationWidget.cs @@ -126,10 +126,5 @@ namespace MatterHackers.MatterControl { ReloadPanelTrigger.CallEvents(this, null); } - - void OnReloadBackPanel(EventArgs e) - { - ReloadPanelTrigger.CallEvents(this, e); - } } } diff --git a/ApplicationView/WidescreenPanel.cs b/ApplicationView/WidescreenPanel.cs index db936c1e1..13b88af0d 100644 --- a/ApplicationView/WidescreenPanel.cs +++ b/ApplicationView/WidescreenPanel.cs @@ -55,7 +55,6 @@ namespace MatterHackers.MatterControl { MainScreenTabView mainScreenTabView; - TabControl advancedControlsTabControl; SliceSettingsWidget sliceSettingsWidget; TabControl advancedControls; public TabPage AboutTabPage; @@ -160,10 +159,8 @@ namespace MatterHackers.MatterControl void DoChangePanel(object state) { // remove the advance control and replace it with new ones built for the selected printer - int advancedControlsWidgetIndex = ColumnThree.GetChildIndex(this.advancedControlsTabControl); - ColumnThree.RemoveChild(advancedControlsWidgetIndex); - this.advancedControlsTabControl = CreateNewAdvancedControlsTab(sliceSettingsUiState); - ColumnThree.AddChild(this.advancedControlsTabControl, advancedControlsWidgetIndex); + ColumnThree.RemoveAllChildren(); + ColumnThree.AddChild(CreateNewAdvancedControlsTab(sliceSettingsUiState)); ColumnThree.Width = 590; RestoreUiState(); @@ -325,8 +322,8 @@ namespace MatterHackers.MatterControl void LoadColumnThree() { - advancedControlsTabControl = CreateNewAdvancedControlsTab(new SliceSettingsWidget.UiState()); - ColumnThree.AddChild(advancedControlsTabControl); + RemoveAllChildren(); + ColumnThree.AddChild(CreateNewAdvancedControlsTab(new SliceSettingsWidget.UiState())); ColumnThree.Width = 590; //Ordering here matters - must go after children are added } diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index 3f62099af..85154a8b4 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -162,7 +162,7 @@ namespace MatterHackers.MatterControl { Close(); SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper); - printItemWrapper.SlicingDone += new EventHandler(sliceItem_Done); + printItemWrapper.SlicingDone.RegisterEvent(sliceItem_Done, ref unregisterEvents); } else if (partIsGCode) { @@ -247,18 +247,12 @@ namespace MatterHackers.MatterControl } } - void sliceItem_Done(object sender, EventArgs e) { PrintItemWrapper sliceItem = (PrintItemWrapper)sender; - sliceItem.SlicingDone -= new EventHandler(sliceItem_Done); + printItemWrapper.SlicingDone.UnregisterEvent(sliceItem_Done, ref unregisterEvents); SaveGCodeToNewLocation(sliceItem.GCodePathAndFileName, pathAndFilenameToSave); } - - public void CloseOnIdle() - { - UiThread.RunOnIdle((state) => { Close(); }); - } } } diff --git a/CustomWidgets/PartThumbnailWidget.cs b/CustomWidgets/PartThumbnailWidget.cs index af88bab0d..ca2847075 100644 --- a/CustomWidgets/PartThumbnailWidget.cs +++ b/CustomWidgets/PartThumbnailWidget.cs @@ -62,13 +62,13 @@ namespace MatterHackers.MatterControl { if (printItem != null) { - printItem.FileHasChanged -= item_FileHasChanged; + printItem.FileHasChanged.UnregisterEvent(item_FileHasChanged, ref unregisterEvents); } printItem = value; thumbNailHasBeenRequested = false; if (printItem != null) { - printItem.FileHasChanged += item_FileHasChanged; + printItem.FileHasChanged.RegisterEvent(item_FileHasChanged, ref unregisterEvents); } } } @@ -151,7 +151,7 @@ namespace MatterHackers.MatterControl } if (printItem != null) { - printItem.FileHasChanged -= item_FileHasChanged; + printItem.FileHasChanged.UnregisterEvent(item_FileHasChanged, ref unregisterEvents); } base.OnClosed(e); } diff --git a/PartPreviewWindow/GcodeViewBasic.cs b/PartPreviewWindow/GcodeViewBasic.cs index b67c1a991..5ff9572dd 100644 --- a/PartPreviewWindow/GcodeViewBasic.cs +++ b/PartPreviewWindow/GcodeViewBasic.cs @@ -63,6 +63,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow GetSizeFunction bedSizeFunction; GetSizeFunction bedCenterFunction; + EventHandler unregisterEvents; bool widgetHasCloseButton; public delegate Vector2 GetSizeFunction(); @@ -152,8 +153,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } // we only hook these up to make sure we can regenerate the gcode when we want - printItem.SlicingOutputMessage += sliceItem_SlicingOutputMessage; - printItem.SlicingDone += new EventHandler(sliceItem_Done); + printItem.SlicingOutputMessage.RegisterEvent(sliceItem_SlicingOutputMessage, ref unregisterEvents); + printItem.SlicingDone.RegisterEvent(sliceItem_Done, ref unregisterEvents); } else { @@ -610,10 +611,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } parent.KeyDown -= Parent_KeyDown; + if (unregisterEvents != null) + { + unregisterEvents(this, null); + } + if (printItem != null) { - printItem.SlicingOutputMessage -= sliceItem_SlicingOutputMessage; - printItem.SlicingDone -= new EventHandler(sliceItem_Done); + printItem.SlicingOutputMessage.UnregisterEvent(sliceItem_SlicingOutputMessage, ref unregisterEvents); + printItem.SlicingDone.UnregisterEvent(sliceItem_Done, ref unregisterEvents); if (startedSliceFromGenerateButton && printItem.CurrentlySlicing) { SlicingQueue.Instance.CancelCurrentSlicing(); @@ -655,8 +661,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // We can add this while we have it open (when we are done loading). // So we need to make sure we only have it added once. This will be ok to run when // not added or when added and will ensure we only have one hook. - printItem.SlicingOutputMessage -= sliceItem_SlicingOutputMessage; - printItem.SlicingDone -= sliceItem_Done; + printItem.SlicingOutputMessage.UnregisterEvent(sliceItem_SlicingOutputMessage, ref unregisterEvents); + printItem.SlicingDone.UnregisterEvent(sliceItem_Done, ref unregisterEvents); UiThread.RunOnIdle(CreateAndAddChildren); startedSliceFromGenerateButton = false; diff --git a/PrintLibrary/LibraryDataView.cs b/PrintLibrary/LibraryDataView.cs index caf2fce64..8f65d92ac 100644 --- a/PrintLibrary/LibraryDataView.cs +++ b/PrintLibrary/LibraryDataView.cs @@ -219,6 +219,15 @@ namespace MatterHackers.MatterControl.PrintLibrary LibraryData.Instance.OrderChanged.RegisterEvent(LibraryOrderChanged, ref unregisterEvents); } + public override void OnClosed(EventArgs e) + { + if (unregisterEvents != null) + { + unregisterEvents(this, null); + } + base.OnClosed(e); + } + void ItemAddedToLibrary(object sender, EventArgs e) { IndexArgs addedIndexArgs = e as IndexArgs; diff --git a/PrintQueue/OptionsMenue/ExportToFolderProcess.cs b/PrintQueue/OptionsMenue/ExportToFolderProcess.cs index b691e6216..f17a72b08 100644 --- a/PrintQueue/OptionsMenue/ExportToFolderProcess.cs +++ b/PrintQueue/OptionsMenue/ExportToFolderProcess.cs @@ -88,6 +88,7 @@ namespace MatterHackers.MatterControl.PrintQueue itemCountBeingWorkedOn = 0; } + EventHandler unregisterEvents; public void Start() { if (QueueData.Instance.Count > 0) @@ -105,8 +106,8 @@ namespace MatterHackers.MatterControl.PrintQueue if (Path.GetExtension(part.FileLocation).ToUpper() == ".STL") { SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper); - printItemWrapper.SlicingDone += new EventHandler(sliceItem_Done); - printItemWrapper.SlicingOutputMessage += printItemWrapper_SlicingOutputMessage; + printItemWrapper.SlicingDone.RegisterEvent(sliceItem_Done, ref unregisterEvents); + printItemWrapper.SlicingOutputMessage.RegisterEvent(printItemWrapper_SlicingOutputMessage, ref unregisterEvents); } else if (Path.GetExtension(part.FileLocation).ToUpper() == ".GCODE") { @@ -129,8 +130,8 @@ namespace MatterHackers.MatterControl.PrintQueue { PrintItemWrapper sliceItem = (PrintItemWrapper)sender; - sliceItem.SlicingDone -= new EventHandler(sliceItem_Done); - sliceItem.SlicingOutputMessage -= printItemWrapper_SlicingOutputMessage; + sliceItem.SlicingDone.UnregisterEvent(sliceItem_Done, ref unregisterEvents); + sliceItem.SlicingOutputMessage.UnregisterEvent(printItemWrapper_SlicingOutputMessage, ref unregisterEvents); if (File.Exists(sliceItem.FileLocation)) { savedGCodeFileNames.Add(sliceItem.GCodePathAndFileName); diff --git a/PrintQueue/PrintItemWrapper.cs b/PrintQueue/PrintItemWrapper.cs index 31c740869..23987e6cb 100644 --- a/PrintQueue/PrintItemWrapper.cs +++ b/PrintQueue/PrintItemWrapper.cs @@ -46,19 +46,13 @@ namespace MatterHackers.MatterControl.PrintQueue { public class PrintItemWrapper { - public event EventHandler SlicingOutputMessage; - public event EventHandler SlicingDone; - public event EventHandler FileHasChanged; + public RootedObjectEventHandler SlicingOutputMessage = new RootedObjectEventHandler(); + public RootedObjectEventHandler SlicingDone = new RootedObjectEventHandler(); + public RootedObjectEventHandler FileHasChanged = new RootedObjectEventHandler(); public PrintItem PrintItem { get; set; } - //public event EventHandler PreparationStatusChanged; - - //public enum GcodeStatuses { Prepared, Slicing, NotPrepared, SliceFailed }; - //GcodeStatuses gcodeStatus = GcodeStatuses.NotPrepared; - //String gcodeProcessingMessage; String fileType; - //String gcodePathAndFileName; int stlFileHashCode; long writeTime = 0; @@ -71,10 +65,6 @@ namespace MatterHackers.MatterControl.PrintQueue { this.PrintItem = printItem; this.fileType = Path.GetExtension(printItem.FileLocation).ToUpper(); - //if (this.fileType == ".GCODE") - //{ - //gcodeStatus = GcodeStatuses.Prepared; - //} } public PrintItemWrapper(int printItemId) @@ -124,10 +114,7 @@ namespace MatterHackers.MatterControl.PrintQueue OnSlicingOutputMessage(new StringEventArgs(message)); - if (SlicingDone != null) - { - SlicingDone(this, null); - } + SlicingDone.CallEvents(this, null); } } } @@ -138,7 +125,7 @@ namespace MatterHackers.MatterControl.PrintQueue StringEventArgs message = e as StringEventArgs; if (SlicingOutputMessage != null) { - SlicingOutputMessage(this, message); + SlicingOutputMessage.CallEvents(this, message); } } @@ -266,7 +253,7 @@ namespace MatterHackers.MatterControl.PrintQueue { if (FileHasChanged != null) { - FileHasChanged(this, null); + FileHasChanged.CallEvents(this, null); } } } diff --git a/PrintQueue/QueueRowItem.cs b/PrintQueue/QueueRowItem.cs index 5a6e7b6c9..23afa61f0 100644 --- a/PrintQueue/QueueRowItem.cs +++ b/PrintQueue/QueueRowItem.cs @@ -300,7 +300,7 @@ namespace MatterHackers.MatterControl.PrintQueue public override void OnClosed(EventArgs e) { - PrintItemWrapper.SlicingOutputMessage -= PrintItem_SlicingOutputMessage; + PrintItemWrapper.SlicingOutputMessage.UnregisterEvent(PrintItem_SlicingOutputMessage, ref unregisterEvents); if (unregisterEvents != null) { unregisterEvents(this, null); @@ -313,7 +313,7 @@ namespace MatterHackers.MatterControl.PrintQueue { ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents); - PrintItemWrapper.SlicingOutputMessage += PrintItem_SlicingOutputMessage; + PrintItemWrapper.SlicingOutputMessage.RegisterEvent(PrintItem_SlicingOutputMessage, ref unregisterEvents); MouseEnterBounds += new EventHandler(PrintQueueItem_MouseEnterBounds); MouseLeaveBounds += new EventHandler(PrintQueueItem_MouseLeaveBounds); diff --git a/SlicerConfiguration/SliceSettingsWidget.cs b/SlicerConfiguration/SliceSettingsWidget.cs index 90cfaed10..d87d9a13f 100644 --- a/SlicerConfiguration/SliceSettingsWidget.cs +++ b/SlicerConfiguration/SliceSettingsWidget.cs @@ -75,54 +75,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration CheckBox showAllDetails; public SliceSettingsWidget(UiState uiState) - { - AddControls(uiState); - } - - public bool ShowingHelp - { - get { return showHelpBox.Checked; } - } - - public string UserLevel - { - get - { - if (showAllDetails.Checked) - { - return "Advanced"; - } - - return "Beginner"; - } - } - - public void CurrentlyActiveCategory(out int index, out string name) - { - index = categoryTabs.SelectedTabIndex; - name = categoryTabs.SelectedTabName; - } - - public void CurrentlyActiveGroup(out int index, out string name) - { - index = 0; - name = ""; - - TabPage currentPage = categoryTabs.GetActivePage(); - TabControl currentGroup = null; - - if (currentPage.Children.Count > 0) - { - currentGroup = currentPage.Children[0] as TabControl; - } - if (currentGroup != null) - { - index = currentGroup.SelectedTabIndex; - name = currentGroup.SelectedTabName; - } - } - - void AddControls(UiState uiState) { int minSettingNameWidth = 220; buttonFactory.FixedHeight = 20; @@ -133,8 +85,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration showHelpBox = new CheckBox(0, 0, LocalizedString.Get("Show Help"), textSize: 10); showHelpBox.Checked = UserSettings.Instance.get(SliceSettingsShowHelpEntry) == "true"; - showAllDetails = new CheckBox(0, 0,LocalizedString.Get("Show All Settings"), textSize:10); - showAllDetails.Checked = UserSettings.Instance.get(SliceSettingsLevelEntry) == "Advanced"; + showAllDetails = new CheckBox(0, 0, LocalizedString.Get("Show All Settings"), textSize: 10); + showAllDetails.Checked = UserSettings.Instance.get(SliceSettingsLevelEntry) == "Advanced"; FlowLayoutWidget pageTopToBottomLayout = new FlowLayoutWidget(FlowDirection.TopToBottom, vAnchor: Agg.UI.VAnchor.ParentTop); pageTopToBottomLayout.AnchorAll(); @@ -144,14 +96,14 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsControlBar = new SettingsControlBar(); pageTopToBottomLayout.AddChild(settingsControlBar); - noConnectionMessageContainer = new GroupBox(LocalizedString.Get("No Printer Selected")); + noConnectionMessageContainer = new GroupBox(LocalizedString.Get("No Printer Selected")); noConnectionMessageContainer.Margin = new BorderDouble(top: 10); noConnectionMessageContainer.TextColor = ActiveTheme.Instance.PrimaryTextColor; noConnectionMessageContainer.BorderColor = ActiveTheme.Instance.PrimaryTextColor; noConnectionMessageContainer.HAnchor = Agg.UI.HAnchor.ParentLeftRight; noConnectionMessageContainer.Height = 80; - TextWidget noConnectionMessage = new TextWidget(LocalizedString.Get("No printer is currently selected. Select printer to edit slice settings.")); + TextWidget noConnectionMessage = new TextWidget(LocalizedString.Get("No printer is currently selected. Select printer to edit slice settings.")); noConnectionMessage.Margin = new BorderDouble(5); noConnectionMessage.TextColor = ActiveTheme.Instance.PrimaryTextColor; noConnectionMessage.VAnchor = VAnchor.ParentCenter; @@ -167,8 +119,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration for (int categoryIndex = 0; categoryIndex < SliceSettingsOrganizer.Instance.UserLevels[UserLevel].CategoriesList.Count; categoryIndex++) { OrganizerCategory category = SliceSettingsOrganizer.Instance.UserLevels[UserLevel].CategoriesList[categoryIndex]; - string categoryPageLabel = LocalizedString.Get (category.Name); - TabPage categoryPage = new TabPage(categoryPageLabel); + string categoryPageLabel = LocalizedString.Get(category.Name); + TabPage categoryPage = new TabPage(categoryPageLabel); SimpleTextTabWidget textTabWidget = new SimpleTextTabWidget(categoryPage, 16, ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), ActiveTheme.Instance.TabLabelUnselected, new RGBA_Bytes()); categoryPage.AnchorAll(); @@ -233,7 +185,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration showHelpBox.Cursor = Cursors.Hand; showHelpBox.CheckedStateChanged += new CheckBox.CheckedStateChangedEventHandler(RebuildSlicerSettings); - categoryTabs.TabBar.AddChild(showHelpBox); + categoryTabs.TabBar.AddChild(showHelpBox); } pageTopToBottomLayout.AddChild(categoryTabs); @@ -246,6 +198,49 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } + public bool ShowingHelp + { + get { return showHelpBox.Checked; } + } + + public string UserLevel + { + get + { + if (showAllDetails.Checked) + { + return "Advanced"; + } + + return "Beginner"; + } + } + + public void CurrentlyActiveCategory(out int index, out string name) + { + index = categoryTabs.SelectedTabIndex; + name = categoryTabs.SelectedTabName; + } + + public void CurrentlyActiveGroup(out int index, out string name) + { + index = 0; + name = ""; + + TabPage currentPage = categoryTabs.GetActivePage(); + TabControl currentGroup = null; + + if (currentPage.Children.Count > 0) + { + currentGroup = currentPage.Children[0] as TabControl; + } + if (currentGroup != null) + { + index = currentGroup.SelectedTabIndex; + name = currentGroup.SelectedTabName; + } + } + void RebuildSlicerSettings(object sender, EventArgs e) { UserSettings.Instance.set(SliceSettingsShowHelpEntry, showHelpBox.Checked.ToString().ToLower()); @@ -279,7 +274,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private void AddHandlers() { PrinterCommunication.Instance.ConnectionStateChanged.RegisterEvent(onPrinterStatusChanged, ref unregisterEvents); - ActivePrinterProfile.Instance.ActivePrinterChanged.RegisterEvent(onPrinterStatusChanged, ref unregisterEvents); + ActivePrinterProfile.Instance.ActivePrinterChanged.RegisterEvent(APP_onPrinterStatusChanged, ref unregisterEvents); PrinterCommunication.Instance.EnableChanged.RegisterEvent(onPrinterStatusChanged, ref unregisterEvents); } @@ -299,6 +294,12 @@ namespace MatterHackers.MatterControl.SlicerConfiguration this.Invalidate(); } + private void APP_onPrinterStatusChanged(object sender, EventArgs e) + { + SetVisibleControls(); + this.Invalidate(); + } + private void SetVisibleControls() { if (ActivePrinterProfile.Instance.ActivePrinter != null)