diff --git a/Library/Providers/MatterControl/SqliteLibraryContainer.cs b/Library/Providers/MatterControl/SqliteLibraryContainer.cs index 143f599af..492a94824 100644 --- a/Library/Providers/MatterControl/SqliteLibraryContainer.cs +++ b/Library/Providers/MatterControl/SqliteLibraryContainer.cs @@ -101,7 +101,7 @@ namespace MatterHackers.MatterControl.Library }); this.ChildContainers = childContainers.Concat( - zipFiles.Select(f => new LocalZipContainerLink(f.FileLocation, f.Name))).OrderBy(d => d.Name).ToList(); + zipFiles.Select(f => new LocalLibraryZipContainerLink(f.Id, f.FileLocation, f.Name))).OrderBy(d => d.Name).ToList(); // PrintItems projected onto FileSystemFileItem this.Items = nonZipFiles.Select(printItem => @@ -189,8 +189,12 @@ namespace MatterHackers.MatterControl.Library { sqlItem.PrintItem.Delete(); } - - this.Items.Remove(item); + else if (item is LocalLibraryZipContainerLink link) + { + string sql = $"SELECT * FROM PrintItem WHERE ID = @id"; + var container = Datastore.Instance.dbSQLite.Query(sql, link.RowID).FirstOrDefault(); + container?.Delete(); + } } this.ReloadContent(); diff --git a/Library/Providers/Zip/LocalZipContainerLink.cs b/Library/Providers/Zip/LocalZipContainerLink.cs index 99ae1c1fe..7b82f0c95 100644 --- a/Library/Providers/Zip/LocalZipContainerLink.cs +++ b/Library/Providers/Zip/LocalZipContainerLink.cs @@ -36,6 +36,16 @@ using MatterHackers.Agg.Platform; namespace MatterHackers.MatterControl.Library { + public class LocalLibraryZipContainerLink : LocalZipContainerLink + { + public int RowID { get; } + public LocalLibraryZipContainerLink(int id, string filePath, string nameOverride = null) + : base (filePath, nameOverride) + { + this.RowID = id; + } + } + public class LocalZipContainerLink : FileSystemItem, ILibraryContainerLink { private static ImageBuffer thumbnail; @@ -49,7 +59,7 @@ namespace MatterHackers.MatterControl.Library public Stream ZipStream { get; set; } - public override bool IsProtected { get; } = true; + public override bool IsProtected { get; } = false; public LocalZipContainerLink(string filePath, string nameOverride = null) : base(filePath) diff --git a/PrinterControls/ControlWidgets/MacroControls.cs b/PrinterControls/ControlWidgets/MacroControls.cs index be5be29da..8b11f99c3 100644 --- a/PrinterControls/ControlWidgets/MacroControls.cs +++ b/PrinterControls/ControlWidgets/MacroControls.cs @@ -41,14 +41,19 @@ namespace MatterHackers.MatterControl.PrinterControls public class MacroControls : FlowLeftRightWithWrapping { private EventHandler unregisterEvents; - PrinterConfig printer; - ThemeConfig theme; + private PrinterConfig printer; + private ThemeConfig theme; private MacroControls(PrinterConfig printer, ThemeConfig theme) { this.printer = printer; this.theme = theme; - Rebuild(); + this.Rebuild(); + + printer.Settings.MacrosChanged.RegisterEvent((s, e) => + { + UiThread.RunOnIdle(() => Rebuild()); + }, ref unregisterEvents); ActiveSliceSettings.ActiveProfileModified.RegisterEvent((s, e) => { @@ -62,7 +67,7 @@ namespace MatterHackers.MatterControl.PrinterControls base.OnClosed(e); } - void Rebuild() + private void Rebuild() { addedChildren.Clear(); diff --git a/PrinterControls/MacroDetailPage.cs b/PrinterControls/MacroDetailPage.cs index 1c76bcd4a..cb868fbd9 100644 --- a/PrinterControls/MacroDetailPage.cs +++ b/PrinterControls/MacroDetailPage.cs @@ -107,8 +107,8 @@ namespace MatterHackers.MatterControl contentRow.AddChild(container); - var addMacroButton = theme.CreateDialogButton("Save".Localize()); - addMacroButton.Click += (s, e) => + var saveMacroButton = theme.CreateDialogButton("Save".Localize()); + saveMacroButton.Click += (s, e) => { UiThread.RunOnIdle(() => { @@ -121,15 +121,17 @@ namespace MatterHackers.MatterControl if (!printerSettings.Macros.Contains(gcodeMacro)) { printerSettings.Macros.Add(gcodeMacro); - printerSettings.Save(); } + printerSettings.NotifyMacrosChanged(); + printerSettings.Save(); + this.DialogWindow.ChangeToPage(new MacroListPage(printerSettings)); } }); }; - this.AddPageAction(addMacroButton); + this.AddPageAction(saveMacroButton); // Define field validation var validationMethods = new ValidationMethods(); diff --git a/PrinterControls/MacroListPage.cs b/PrinterControls/MacroListPage.cs index 9baf905f0..65a411db0 100644 --- a/PrinterControls/MacroListPage.cs +++ b/PrinterControls/MacroListPage.cs @@ -106,6 +106,7 @@ namespace MatterHackers.MatterControl { printerSettings.Macros.Remove(localMacroReference); printerSettings.Save(); + printerSettings.NotifyMacrosChanged(); this.RebuildList(printerSettings); }; macroRow.AddChild(removeLink); diff --git a/SlicerConfiguration/Settings/PrinterSettings.cs b/SlicerConfiguration/Settings/PrinterSettings.cs index caa3498ae..946029d36 100644 --- a/SlicerConfiguration/Settings/PrinterSettings.cs +++ b/SlicerConfiguration/Settings/PrinterSettings.cs @@ -60,6 +60,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration [JsonIgnore] public RootedObjectEventHandler PrintLevelingEnabledChanged = new RootedObjectEventHandler(); + public RootedObjectEventHandler MacrosChanged = new RootedObjectEventHandler(); + public static PrinterSettings Empty { get; } public int DocumentVersion { get; set; } = LatestVersion; @@ -119,6 +121,11 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } + internal void NotifyMacrosChanged() + { + this.MacrosChanged.CallEvents(this, null); + } + /// /// Move conflicting user overrides to the temporary staging area, allowing presets values to take effect ///