From 6f19fe18229cf48e5f129d747f86a4ff340837a1 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sun, 5 Apr 2026 13:34:18 -0400 Subject: [PATCH] feat: add context menu to delete drawings from the drawing list Adds a right-click "Delete" option on the drawings tab that removes the selected drawing and all its placed parts from every plate. Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest/Controls/DrawingListBox.cs | 20 +++++++++++++++++++- OpenNest/Forms/EditNestForm.cs | 27 +++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/OpenNest/Controls/DrawingListBox.cs b/OpenNest/Controls/DrawingListBox.cs index 4bf0909..60a180c 100644 --- a/OpenNest/Controls/DrawingListBox.cs +++ b/OpenNest/Controls/DrawingListBox.cs @@ -1,4 +1,5 @@ -using System.Drawing; +using System; +using System.Drawing; using System.Windows.Forms; namespace OpenNest.Controls @@ -22,8 +23,25 @@ namespace OpenNest.Controls imageSize = new Size(ItemHeight, ItemHeight - 10); nameFont = new Font(Font.FontFamily, 10, FontStyle.Bold); + + var menu = new ContextMenuStrip(); + var deleteItem = new ToolStripMenuItem("Delete"); + deleteItem.Click += (s, e) => + { + if (SelectedItem is Drawing drawing) + DeleteRequested?.Invoke(this, drawing); + }; + menu.Opening += (s, e) => + { + if (SelectedItem == null) + e.Cancel = true; + }; + menu.Items.Add(deleteItem); + ContextMenuStrip = menu; } + public event EventHandler DeleteRequested; + public Units Units { get; set; } public bool HideDepletedParts { get; set; } diff --git a/OpenNest/Forms/EditNestForm.cs b/OpenNest/Forms/EditNestForm.cs index f0eedc0..26d4484 100644 --- a/OpenNest/Forms/EditNestForm.cs +++ b/OpenNest/Forms/EditNestForm.cs @@ -225,6 +225,7 @@ namespace OpenNest.Forms Text = Nest.Name; drawingListBox1.Units = Nest.Units; + drawingListBox1.DeleteRequested += drawingListBox1_DeleteRequested; } public string LastSavePath { get; private set; } @@ -1026,6 +1027,32 @@ namespace OpenNest.Forms } } + private void drawingListBox1_DeleteRequested(object sender, Drawing drawing) + { + var result = MessageBox.Show( + $"Delete drawing '{drawing.Name}' and all its parts from every plate?", + "Delete Drawing", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning, + MessageBoxDefaultButton.Button2); + + if (result != DialogResult.Yes) + return; + + foreach (var plate in Nest.Plates) + { + for (var i = plate.Parts.Count - 1; i >= 0; i--) + { + if (plate.Parts[i].BaseDrawing == drawing) + plate.Parts.RemoveAt(i); + } + } + + Nest.Drawings.Remove(drawing); + UpdateDrawingList(); + PlateView.Invalidate(); + } + private void drawingListBox1_Click(object sender, EventArgs e) { addPart = true;