From be27c5403b0d0d7903bac94ec13aa980efd92b9b Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 9 Jun 2016 09:23:23 -0700 Subject: [PATCH] Rebuild PrinterSelector data on printer name changed - Add Rebuild method to PrinterSelector - Hook settings change in PrinterSelector and rebuild on name change - Issues #880, #894 - Use initializer syntax --- ActionBar/PrinterActionRow.cs | 22 ++++--- ActionBar/PrinterSelector.cs | 60 +++++++++++++++---- .../Settings/ActiveSliceSettings.cs | 1 - 3 files changed, 58 insertions(+), 25 deletions(-) diff --git a/ActionBar/PrinterActionRow.cs b/ActionBar/PrinterActionRow.cs index e2903e847..f3dd8692b 100644 --- a/ActionBar/PrinterActionRow.cs +++ b/ActionBar/PrinterActionRow.cs @@ -35,6 +35,7 @@ using MatterHackers.MatterControl.PrinterCommunication; using MatterHackers.MatterControl.PrinterControls.PrinterConnections; using MatterHackers.MatterControl.SlicerConfiguration; using System; +using System.Linq; using System.Threading.Tasks; namespace MatterHackers.MatterControl.ActionBar @@ -133,19 +134,17 @@ namespace MatterHackers.MatterControl.ActionBar { HAnchor = HAnchor.ParentLeftRight, }; - printerSelector = new PrinterSelector(); - printerSelector.HAnchor = HAnchor.ParentLeftRight; - printerSelector.Cursor = Cursors.Hand; + + int rightMarginForWideScreenMode = ApplicationController.Instance.WidescreenMode ? 6 : 0; + printerSelector = new PrinterSelector() + { + HAnchor = HAnchor.ParentLeftRight, + Cursor = Cursors.Hand, + Margin = new BorderDouble(0, 6, rightMarginForWideScreenMode, 3) + }; printerSelector.AddPrinter += (s, e) => WizardWindow.Show(); - if (ApplicationController.Instance.WidescreenMode) - { - printerSelector.Margin = new BorderDouble(0, 6, 0, 3); - } - else - { - printerSelector.Margin = new BorderDouble(0, 6, 6, 3); - } printerSelectorAndEditButton.AddChild(printerSelector); + Button editButton = TextImageButtonFactory.GetThemedEditButton(); editButton.VAnchor = VAnchor.ParentCenter; editButton.Click += UiNavigation.GoToEditPrinter_Click; @@ -153,7 +152,6 @@ namespace MatterHackers.MatterControl.ActionBar this.AddChild(printerSelectorAndEditButton); this.AddChild(resetConnectionButton); - //this.AddChild(CreateOptionsMenu()); } protected override void AddHandlers() diff --git a/ActionBar/PrinterSelector.cs b/ActionBar/PrinterSelector.cs index 86449950c..d96daf290 100644 --- a/ActionBar/PrinterSelector.cs +++ b/ActionBar/PrinterSelector.cs @@ -37,6 +37,7 @@ using MatterHackers.MatterControl.PrinterControls.PrinterConnections; using MatterHackers.MatterControl.SlicerConfiguration; using MatterHackers.VectorMath; using System; +using System.Linq; namespace MatterHackers.MatterControl { @@ -44,21 +45,16 @@ namespace MatterHackers.MatterControl { public event EventHandler AddPrinter; + private EventHandler unregisterEvents; + public PrinterSelector() : base("Printers".Localize() + "... ", useLeftIcons: true) { - //Add the menu items to the menu itself - foreach (var printer in ActiveSliceSettings.ProfileData.Profiles) - { - this.AddItem(printer.Name, printer.Id.ToString()); - } + Rebuild(); - if (ActiveSliceSettings.Instance != null) - { - this.SelectedValue = ActiveSliceSettings.Instance.ID; - } - - ImageBuffer plusImage = StaticData.Instance.LoadIcon("icon_plus.png", 32, 32); - this.AddItem(plusImage, "Add New Printer...", "new"); + this.AddItem( + StaticData.Instance.LoadIcon("icon_plus.png", 32, 32), + "Add New Printer...", + "new"); this.SelectionChanged += (s, e) => { @@ -75,6 +71,46 @@ namespace MatterHackers.MatterControl ActiveSliceSettings.SwitchToProfile(printerID); } }; + + SliceSettingsWidget.SettingChanged.RegisterEvent(SettingChanged, ref unregisterEvents); + } + + public void Rebuild() + { + this.MenuItems.Clear(); + + //Add the menu items to the menu itself + foreach (var printer in ActiveSliceSettings.ProfileData.Profiles) + { + this.AddItem(printer.Name, printer.Id.ToString()); + } + + if (ActiveSliceSettings.Instance != null) + { + this.SelectedValue = ActiveSliceSettings.Instance.ID; + this.mainControlText.Text = ActiveSliceSettings.Instance.Name(); + } + } + + private void SettingChanged(object sender, EventArgs e) + { + string settingsName = (e as StringEventArgs)?.Data; + if (settingsName != null && settingsName == "MatterControl.PrinterName") + { + var profileInfo = ActiveSliceSettings.ProfileData.Profiles.Where(p => p.Id == ActiveSliceSettings.Instance.ID).FirstOrDefault(); + if (profileInfo != null) + { + profileInfo.Name = ActiveSliceSettings.Instance.Name(); + } + + Rebuild(); + } + } + + public override void OnClosed(EventArgs e) + { + unregisterEvents?.Invoke(this, null); + base.OnClosed(e); } } } \ No newline at end of file diff --git a/SlicerConfiguration/Settings/ActiveSliceSettings.cs b/SlicerConfiguration/Settings/ActiveSliceSettings.cs index 8517f243c..f34c44fdb 100644 --- a/SlicerConfiguration/Settings/ActiveSliceSettings.cs +++ b/SlicerConfiguration/Settings/ActiveSliceSettings.cs @@ -248,7 +248,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - internal static void AcquireNewProfile(string make, string model, string printerName) { string guid = Guid.NewGuid().ToString();