mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-27 03:51:05 -04:00
feat(ui): add Open in CAD Converter to drawing context menu
Lets a single drawing be opened and edited in the CAD converter directly from the drawing list, reusing the existing apply-back logic from the Edit Drawings button (now shared via EditDrawingsInConverter). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
adc12e175d
commit
ca09c33c38
2 files changed
+29
-3
No files matched your search
@@ -36,6 +36,13 @@ namespace OpenNest.Controls
|
||||
SaveToLibraryRequested?.Invoke(this, drawing);
|
||||
};
|
||||
var saveToLibrarySeparator = new ToolStripSeparator();
|
||||
var openInConverterItem = new ToolStripMenuItem("Open in CAD Converter...");
|
||||
openInConverterItem.Click += (s, e) =>
|
||||
{
|
||||
if (SelectedItem is Drawing drawing)
|
||||
OpenInConverterRequested?.Invoke(this, drawing);
|
||||
};
|
||||
var openInConverterSeparator = new ToolStripSeparator();
|
||||
menu.ShowItemToolTips = true;
|
||||
menu.Opening += (s, e) =>
|
||||
{
|
||||
@@ -49,9 +56,12 @@ namespace OpenNest.Controls
|
||||
saveToLibraryItem.Visible = saveToLibrarySeparator.Visible = SaveToLibraryRequested != null;
|
||||
saveToLibraryItem.Enabled = SaveToLibraryUnavailableReason == null;
|
||||
saveToLibraryItem.ToolTipText = SaveToLibraryUnavailableReason ?? "";
|
||||
openInConverterItem.Visible = openInConverterSeparator.Visible = OpenInConverterRequested != null;
|
||||
};
|
||||
menu.Items.Add(saveToLibraryItem);
|
||||
menu.Items.Add(saveToLibrarySeparator);
|
||||
menu.Items.Add(openInConverterItem);
|
||||
menu.Items.Add(openInConverterSeparator);
|
||||
menu.Items.Add(deleteItem);
|
||||
ContextMenuStrip = menu;
|
||||
}
|
||||
@@ -64,6 +74,9 @@ namespace OpenNest.Controls
|
||||
/// <summary>Why Save to Drawing Library is disabled, shown as its tooltip; null enables it.</summary>
|
||||
public string SaveToLibraryUnavailableReason { get; set; }
|
||||
|
||||
/// <summary>Raised when Open in CAD Converter is chosen for the selected drawing.</summary>
|
||||
public event EventHandler<Drawing> OpenInConverterRequested;
|
||||
|
||||
/// <summary>
|
||||
/// Raised when the left button is pressed on a drawing's row.
|
||||
/// </summary>
|
||||
|
||||
@@ -440,6 +440,7 @@ namespace OpenNest.Forms
|
||||
drawingListBox1.Units = Nest.Units;
|
||||
drawingListBox1.DeleteRequested += drawingListBox1_DeleteRequested;
|
||||
drawingListBox1.SaveToLibraryRequested += drawingListBox1_SaveToLibraryRequested;
|
||||
drawingListBox1.OpenInConverterRequested += drawingListBox1_OpenInConverterRequested;
|
||||
drawingListBox1.DrawingPickedUp += drawingListBox1_DrawingPickedUp;
|
||||
drawingListBox1.DrawingDropped += drawingListBox1_DrawingDropped;
|
||||
Activated += (_, _) => UpdateDrawingLibraryCommand();
|
||||
@@ -1285,15 +1286,27 @@ namespace OpenNest.Forms
|
||||
if (Nest.Drawings.Count == 0)
|
||||
return;
|
||||
|
||||
EditDrawingsInConverter(Nest.Drawings);
|
||||
}
|
||||
|
||||
private void drawingListBox1_OpenInConverterRequested(object sender, Drawing drawing)
|
||||
{
|
||||
EditDrawingsInConverter(new[] { drawing });
|
||||
}
|
||||
|
||||
private void EditDrawingsInConverter(IEnumerable<Drawing> drawings)
|
||||
{
|
||||
var editedDrawings = drawings.ToList();
|
||||
|
||||
// Capture before loading the editor: its conversion can mutate programs in place.
|
||||
var snapshot = DrawingProgramSnapshot.Capture(
|
||||
Nest.Drawings,
|
||||
editedDrawings,
|
||||
program => NestWriter.GetProgramText(program) + "\0" + NestWriter.GetSubProgramsText(program)
|
||||
);
|
||||
var converter = new CadConverterForm();
|
||||
// LoadDrawings can edit live programs even when the dialog is canceled.
|
||||
PlateView.InvalidateOverlapCheck();
|
||||
converter.LoadDrawings(Nest.Drawings);
|
||||
converter.LoadDrawings(editedDrawings);
|
||||
|
||||
if (converter.ShowDialog() != DialogResult.OK)
|
||||
return;
|
||||
@@ -1302,7 +1315,7 @@ namespace OpenNest.Forms
|
||||
var newByName = newDrawings.ToDictionary(d => d.Name);
|
||||
|
||||
// Update existing drawings in-place so parts keep their BaseDrawing references
|
||||
foreach (var existing in Nest.Drawings.ToList())
|
||||
foreach (var existing in editedDrawings)
|
||||
{
|
||||
if (newByName.TryGetValue(existing.Name, out var updated))
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user