Convert static SettingChanged event to instance based

issue: MatterHackers/MCCentral#4551
This commit is contained in:
Lars Brubaker 2018-11-12 17:20:59 -08:00
parent b38abfaad4
commit 6405dad7ac
23 changed files with 111 additions and 87 deletions

View file

@ -148,7 +148,7 @@ namespace MatterHackers.MatterControl.ActionBar
this.Closed += (s, e) => runningInterval.Continue = false;
var settingsRow = temperatureRow.DescendantsAndSelf<SliceSettingsRow>().FirstOrDefault();
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent)
{
@ -178,8 +178,10 @@ namespace MatterHackers.MatterControl.ActionBar
settingsRow.UpdateStyle();
}
};
}, ref unregisterEvents);
}
}
printer.Settings.SettingChanged += SettingChanged;
printer.Disposed -= SettingChanged;
container.AddChild(graph);

View file

@ -294,7 +294,8 @@ namespace MatterHackers.MatterControl.ActionBar
valueField.Name = "Temperature Input";
var settingsRow = temperatureRow.DescendantsAndSelf<SliceSettingsRow>().FirstOrDefault();
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent)
{
@ -325,8 +326,10 @@ namespace MatterHackers.MatterControl.ActionBar
settingsRow.UpdateStyle();
}
};
}, ref unregisterEvents);
}
}
printer.Settings.SettingChanged += SettingChanged;
printer.Disposed -= SettingChanged;
container.AddChild(graph);

View file

@ -1244,17 +1244,6 @@ namespace MatterHackers.MatterControl
isVisible: (sceneItem) => sceneItem.Children.Any((i) => i is IPathObject),
iconCollector: (theme) => AggContext.StaticData.LoadIcon("noun_55060.png", theme.InvertIcons));
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
{
if (e is StringEventArgs stringArg
&& SettingsOrganizer.SettingsData.TryGetValue(stringArg.Data, out SliceSettingData settingsData)
&& settingsData.ReloadUiWhenChanged)
{
UiThread.RunOnIdle(ReloadAll);
}
}, ref unregisterEvents);
this.InitializeLibrary();
HashSet<IObject3DEditor> mappedEditors;

View file

@ -906,8 +906,8 @@ namespace MatterHackers.MatterControl
this.Settings = settings;
this.Settings.printer = this;
// TODO: ActiveSliceSettings is not our Settings! Move SettingsChanged to instance rather than static
PrinterSettings.SettingChanged.RegisterEvent(Printer_SettingChanged, ref unregisterEvents);
this.Settings.SettingChanged += Printer_SettingChanged;
this.Disposed -= Printer_SettingChanged;
void PrintFinished(object s, EventArgs e)
{
@ -1055,6 +1055,22 @@ namespace MatterHackers.MatterControl
}
this.Connection.CommunicationStateChanged += CommunicationStateChanged;
this.Disposed += (s, e) => this.Connection.CommunicationStateChanged -= CommunicationStateChanged;
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringArg
&& SettingsOrganizer.SettingsData.TryGetValue(stringArg.Data, out SliceSettingData settingsData)
&& settingsData.ReloadUiWhenChanged)
{
UiThread.RunOnIdle(ApplicationController.Instance.ReloadAll);
}
// clean up profile manager InventoryTreeView
ProfileManager.SettingsChanged(s, e);
}
this.Settings.SettingChanged += Printer_SettingChanged;
this.Disposed += (s, e) => this.Settings.SettingChanged -= Printer_SettingChanged;
}
public PrinterViewState ViewState { get; }

View file

@ -149,6 +149,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
rootColumn.AddChild(materialsNode);
// need to be hooked up to every existing PrinterConfig and every new PrinterConfig
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
{
string settingsName = (e as StringEventArgs)?.Data;
@ -157,11 +158,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
InventoryTreeView.CreatePrinterProfilesTree(printersNode, theme);
this.Invalidate();
}
}, ref unregisterEvents);
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
{
string settingsName = (e as StringEventArgs)?.Data;
if (settingsName == SettingsKey.printer_name)
{
InventoryTreeView.CreatePrinterProfilesTree(printersNode, theme);

View file

@ -77,7 +77,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// make sure we have good settings
PrinterSettings.SettingChanged.RegisterEvent(Printer_SettingChanged, ref unregisterEvents);
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
Printer_SettingChanged(this, null);
this.gridSizeMm = printer.Settings.GetValue<Vector2>(SettingsKey.bed_size);

View file

@ -96,7 +96,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
var firstSection = this.Children<SectionWidget>().First();
firstSection.BorderColor = Color.Transparent; // Disable top border on first item to produce a more flat, dark top edge
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent)
{
@ -105,7 +105,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
printer.Bed.GCodeRenderer?.Clear3DGCode();
}
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
printer.Bed.LoadedGCodeChanged += Bed_LoadedGCodeChanged;
printer.Bed.RendererOptions.PropertyChanged += RendererOptions_PropertyChanged;

View file

@ -43,7 +43,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private EventHandler unregisterEvents;
private ThemeConfig theme;
public GCodeDetailsView(GCodeFile gCodeMemoryFile, PrinterConfig printerConfig, ThemeConfig theme)
public GCodeDetailsView(GCodeFile gCodeMemoryFile, PrinterConfig printer, ThemeConfig theme)
: base(FlowDirection.TopToBottom)
{
this.theme = theme;
@ -52,19 +52,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
AddSetting("Print Time".Localize(), gCodeMemoryFile.EstimatedPrintTime());
// show the filament used
AddSetting("Filament Length".Localize(), gCodeMemoryFile.FilamentUsed(printerConfig));
AddSetting("Filament Length".Localize(), gCodeMemoryFile.FilamentUsed(printer));
AddSetting("Filament Volume".Localize(), gCodeMemoryFile.FilamentVolume(printerConfig));
AddSetting("Filament Volume".Localize(), gCodeMemoryFile.FilamentVolume(printer));
// Cost info is only displayed when available - conditionalCostPanel is invisible when cost <= 0
TextWidget costTextWidget = AddSetting("Estimated Cost".Localize(), gCodeMemoryFile.EstimatedCost(printerConfig));
TextWidget costTextWidget = AddSetting("Estimated Cost".Localize(), gCodeMemoryFile.EstimatedCost(printer));
TextWidget massTextWidget = AddSetting("Estimated Mass".Localize(), gCodeMemoryFile.EstimatedMass(printerConfig));
TextWidget massTextWidget = AddSetting("Estimated Mass".Localize(), gCodeMemoryFile.EstimatedMass(printer));
var conditionalCostContainer = costTextWidget.Parent;
conditionalCostContainer.Visible = gCodeMemoryFile.TotalCost(printerConfig) > 0;
conditionalCostContainer.Visible = gCodeMemoryFile.TotalCost(printer) > 0;
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent)
{
@ -72,16 +72,18 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|| stringEvent.Data == SettingsKey.filament_diameter
|| stringEvent.Data == SettingsKey.filament_density)
{
massTextWidget.Text = gCodeMemoryFile.EstimatedMass(printerConfig);
conditionalCostContainer.Visible = gCodeMemoryFile.TotalCost(printerConfig) > 0;
massTextWidget.Text = gCodeMemoryFile.EstimatedMass(printer);
conditionalCostContainer.Visible = gCodeMemoryFile.TotalCost(printer) > 0;
if (gCodeMemoryFile.TotalCost(printerConfig) > 0)
if (gCodeMemoryFile.TotalCost(printer) > 0)
{
costTextWidget.Text = gCodeMemoryFile.EstimatedCost(printerConfig);
costTextWidget.Text = gCodeMemoryFile.EstimatedCost(printer);
}
}
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
}
TextWidget AddSetting(string title, string value)

View file

@ -392,7 +392,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
SetLinkButtonsVisibility(s, new StringEventArgs("Unknown"));
}, ref unregisterEvents);
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
var activePrinter = ApplicationController.Instance.ActivePrinter;
@ -402,7 +402,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
printerTab.Text = activePrinter.Settings.GetValue(SettingsKey.printer_name);
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
ApplicationController.Instance.OpenPrintersChanged += OpenPrinters_Changed;
@ -572,14 +574,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ApplicationController.Instance.ClosePrinter(printer);
};
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
string settingsName = (e as StringEventArgs)?.Data;
if (settingsName != null && settingsName == SettingsKey.printer_name)
{
printerTab.Title = printer.Settings.GetValue(SettingsKey.printer_name);
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
// Add printer into fixed position
if (tabControl.AllTabs.Any())

View file

@ -86,7 +86,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
printer.Connection.CommunicationStateChanged += CommunicationStateChanged;
this.Closed += (s, e) => printer.Connection.CommunicationStateChanged -= CommunicationStateChanged;
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent
&& (stringEvent.Data == SettingsKey.z_probe_z_offset
@ -99,7 +99,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
SetButtonStates();
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
SetButtonStates();
}

View file

@ -183,7 +183,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Padding = theme.TextButtonPadding.Clone(right: 5)
});
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent)
{
@ -200,8 +200,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
}
},
ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
}
public override void OnClosed(EventArgs e)

View file

@ -45,13 +45,15 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
public BabyStepsStream(PrinterConfig printer, GCodeStream internalStream, double startingMaxLength = 1)
: base(printer, internalStream)
{
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if ((e as StringEventArgs)?.Data == SettingsKey.baby_step_z_offset)
{
OffsetChanged();
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
printer.Disposed -= Printer_SettingChanged;
maxLengthStream = new MaxLengthStream(printer, internalStream, startingMaxLength);
offsetStream = new OffsetStream(maxLengthStream, printer, new Vector3(0, 0, printer.Settings.GetValue<double>(SettingsKey.baby_step_z_offset)));

View file

@ -178,7 +178,7 @@ namespace MatterHackers.MatterControl.PrinterControls
settingsRow.AddChild(extrusionValue);
}
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
var eventArgs = e as StringEventArgs;
if (eventArgs?.Data == SettingsKey.extrusion_ratio)
@ -193,7 +193,10 @@ namespace MatterHackers.MatterControl.PrinterControls
feedRateRatioSlider.Value = feedrateRatio;
feedRateValue.ActuallNumberEdit.Value = Math.Round(feedrateRatio, 2);
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
}
public static SectionWidget CreateSection(PrinterConfig printer, ThemeConfig theme)

View file

@ -263,13 +263,16 @@ namespace MatterHackers.MatterControl.PrinterControls
this.HAnchor = HAnchor.Fit;
this.VAnchor = VAnchor.Fit | VAnchor.Center;
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if ((e as StringEventArgs)?.Data == SettingsKey.baby_step_z_offset)
{
OffsetStreamChanged(null, null);
}
}, ref unregisterEvents);
}
printerSettings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
zOffsetStreamContainer = new FlowLayoutWidget(FlowDirection.LeftToRight)
{

View file

@ -208,7 +208,8 @@ namespace MatterHackers.MatterControl
this.PerformLayout();
PrinterSettings.SettingChanged.RegisterEvent(Printer_SettingChanged, ref unregisterEvents);
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
}
internal void SetEnabledLevels(bool enableBabysteppingMode, bool enableEControls)

View file

@ -84,7 +84,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
this.AddChild(pullDownContainer);
printer.Settings.MaterialPresetChanged += ActiveSliceSettings_MaterialPresetChanged;
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent
&& (stringEvent.Data == SettingsKey.default_material_presets
@ -92,7 +92,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
{
RebuildDropDownList();
}
}, ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
}
public FlowLayoutWidget GetPulldownContainer()
@ -365,7 +367,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
{
if (settingBeforeChange[keyName] != printer.Settings.GetValue(keyName))
{
PrinterSettings.OnSettingChanged(printer.Settings, keyName);
printer.Settings.OnSettingChanged(keyName);
}
}
});

View file

@ -61,7 +61,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
public static int LatestVersion { get; } = 201606271;
// TODO: Change to instance based, revise listeners and register to expect specific printer settings
public static RootedObjectEventHandler SettingChanged = new RootedObjectEventHandler();
public EventHandler SettingChanged;
public event EventHandler MaterialPresetChanged;
@ -70,9 +70,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
MaterialPresetChanged?.Invoke(null, null);
}
public static void OnSettingChanged(PrinterSettings settings, string slicerConfigName)
public void OnSettingChanged(string slicerConfigName)
{
SettingChanged.CallEvents(settings, new StringEventArgs(slicerConfigName));
SettingChanged?.Invoke(this, new StringEventArgs(slicerConfigName));
}
public event EventHandler PrintLevelingEnabledChanged;
@ -1423,7 +1423,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
persistenceLayer[settingsKey] = settingsValue;
Save();
PrinterSettings.OnSettingChanged(this, settingsKey);
this.OnSettingChanged(settingsKey);
}
public string ToJson()
@ -1466,7 +1466,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
Save();
PrinterSettings.OnSettingChanged(this, settingsKey);
this.OnSettingChanged(settingsKey);
}
}
}

View file

@ -49,8 +49,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
public static ProfileManager Instance { get; private set; }
private static EventHandler unregisterEvents;
public const string ProfileExtension = ".printer";
public const string ConfigFileExtension = ".slice";
public const string ProfileDocExtension = ".profiles";
@ -59,7 +57,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
static ProfileManager()
{
PrinterSettings.SettingChanged.RegisterEvent(SettingsChanged, ref unregisterEvents);
ReloadActiveUser();
}
@ -189,7 +186,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
return loadedInstance;
}
internal static void SettingsChanged(object sender, EventArgs e)
public static void SettingsChanged(object sender, EventArgs e)
{
var printer = (sender as PrinterSettings)?.printer;

View file

@ -319,7 +319,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
};
PrinterSettings.SettingChanged.RegisterEvent((s, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringEvent)
{
@ -336,8 +336,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
}
}
},
ref unregisterEvents);
}
printer.Settings.SettingChanged += Printer_SettingChanged;
this.Closed -= Printer_SettingChanged;
}
this.PerformLayout();

View file

@ -93,9 +93,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
uiField.Content.VAnchor = VAnchor.Center;
totalContent.AddChild(uiField.Content);
EventHandler localUnregisterEvents = null;
PrinterSettings.SettingChanged.RegisterEvent((sender, e) =>
void Printer_SettingChanged(object s, EventArgs e)
{
if (e is StringEventArgs stringArgs
&& stringArgs.Data == settingData.SlicerConfigName)
@ -119,12 +117,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
selectableOptions.SelectedLabel = "Custom";
}
}
}, ref localUnregisterEvents);
totalContent.Closed += (s, e) =>
{
localUnregisterEvents?.Invoke(s, null);
};
}
printer.Settings.SettingChanged += Printer_SettingChanged;
printer.Disposed -= Printer_SettingChanged;
this.Content = totalContent;
}

View file

@ -20,7 +20,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
testRunner.AddAndSelectPrinter("Airwolf 3D", "HD");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should exist after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should exist after add");
testRunner.SwitchToPrinterSettings();

View file

@ -25,7 +25,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator())
{
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should be defined after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should be defined after add");
testRunner.SelectSliceSettingsField("Printer", "end_gcode");
@ -90,7 +90,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator("Pulse", "A-134"))
{
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should be defined after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should be defined after add");
testRunner.ClickByName("Finish Setup Button");
@ -285,7 +285,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
{
using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator())
{
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should be defined after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should be defined after add");
testRunner.OpenPrintPopupMenu();
testRunner.ClickByName("Layer(s) To Pause Field");
@ -326,7 +326,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
{
using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator())
{
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should exist after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should exist after add");
var printer = ApplicationController.Instance.ActivePrinters.First();
printer.Settings.SetValue(SettingsKey.recover_is_enabled, "1");
@ -404,7 +404,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator())
{
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should be defined after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should be defined after add");
testRunner.AddItemToBedplate();
@ -502,7 +502,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
// Then validate that they are picked up
using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator())
{
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should be defined after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should be defined after add");
testRunner.AddItemToBedplate();
@ -627,7 +627,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
{
var resetEvent = new AutoResetEvent(false);
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should exist after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should exist after add");
testRunner.AddItemToBedplate();

View file

@ -81,7 +81,7 @@ namespace MatterHackers.MatterControl.Tests.Automation
{
using (var emulator = testRunner.LaunchAndConnectToPrinterEmulator())
{
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count, "One printer should exist after add");
Assert.AreEqual(1, ApplicationController.Instance.ActivePrinters.Count(), "One printer should exist after add");
var printer = ApplicationController.Instance.ActivePrinters.First();
printer.Settings.SetValue(SettingsKey.cancel_gcode, "G28 ; Cancel GCode");