From fd778e2fd278c16b9b6de061174a0a2e89c9891e Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sat, 7 Mar 2026 10:05:13 -0500 Subject: [PATCH] fix: preserve ActionClone across plate switches SetPlate unconditionally reset the action to ActionSelect, clearing the clone pattern when switching plates. Add SurvivesPlateChange virtual property to Action base class so actions can opt in to persisting across plate changes. Co-Authored-By: Claude Opus 4.6 --- OpenNest/Actions/Action.cs | 2 ++ OpenNest/Actions/ActionClone.cs | 2 ++ OpenNest/Controls/PlateView.cs | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/OpenNest/Actions/Action.cs b/OpenNest/Actions/Action.cs index 2df37da..5914fec 100644 --- a/OpenNest/Actions/Action.cs +++ b/OpenNest/Actions/Action.cs @@ -11,6 +11,8 @@ namespace OpenNest.Actions this.plateView = plateView; } + public virtual bool SurvivesPlateChange => false; + public abstract void DisconnectEvents(); public abstract void CancelAction(); diff --git a/OpenNest/Actions/ActionClone.cs b/OpenNest/Actions/ActionClone.cs index a0d4837..e3dc7bf 100644 --- a/OpenNest/Actions/ActionClone.cs +++ b/OpenNest/Actions/ActionClone.cs @@ -98,6 +98,8 @@ namespace OpenNest.Actions plateView.Invalidate(); } + public override bool SurvivesPlateChange => true; + public override void DisconnectEvents() { plateView.KeyDown -= plateView_KeyDown; diff --git a/OpenNest/Controls/PlateView.cs b/OpenNest/Controls/PlateView.cs index b8de140..819f39f 100644 --- a/OpenNest/Controls/PlateView.cs +++ b/OpenNest/Controls/PlateView.cs @@ -127,7 +127,8 @@ namespace OpenNest.Controls foreach (var part in plate.Parts) parts.Add(LayoutPart.Create(part, this)); - SetAction(typeof(ActionSelect)); + if (currentAction == null || !currentAction.SurvivesPlateChange) + SetAction(typeof(ActionSelect)); } public string Status