diff --git a/OpenNest/Controls/PlateView.cs b/OpenNest/Controls/PlateView.cs index b39368a..f236ad8 100644 --- a/OpenNest/Controls/PlateView.cs +++ b/OpenNest/Controls/PlateView.cs @@ -32,9 +32,8 @@ namespace OpenNest.Controls private CutOffSettings cutOffSettings = new CutOffSettings(); private SelectionManager selection; private CutOffHandler cutOffHandler; + private PreviewManager previewManager; protected List parts; - private List stationaryParts = new List(); - private List activeParts = new List(); private Point middleMouseDownPoint; private Box activeWorkArea; private List debugRemnants; @@ -70,6 +69,7 @@ namespace OpenNest.Controls internal SelectionManager Selection => selection; internal CutOffHandler CutOffs => cutOffHandler; internal ActionManager Actions => actionManager; + internal PreviewManager Previews => previewManager; public event EventHandler> PartAdded; public event EventHandler> PartRemoved; @@ -94,6 +94,7 @@ namespace OpenNest.Controls parts = new List(); selection = new SelectionManager(this); cutOffHandler = new CutOffHandler(this); + previewManager = new PreviewManager(this); redrawTimer = new Timer() { @@ -158,14 +159,9 @@ namespace OpenNest.Controls internal List LayoutParts => parts; - internal IReadOnlyList PreviewParts => - activeParts.Count > 0 ? activeParts : stationaryParts; - - internal Brush PreviewBrush => - activeParts.Count > 0 ? ColorScheme.ActivePreviewPartBrush : ColorScheme.PreviewPartBrush; - - internal Pen PreviewPen => - activeParts.Count > 0 ? ColorScheme.ActivePreviewPartPen : ColorScheme.PreviewPartPen; + internal IReadOnlyList PreviewParts => previewManager.PreviewParts; + internal Brush PreviewBrush => previewManager.PreviewBrush; + internal Pen PreviewPen => previewManager.PreviewPen; internal RectangleF GetViewBounds() => new RectangleF(-origin.X, -origin.Y, Width, Height); @@ -213,8 +209,7 @@ namespace OpenNest.Controls plate.PartAdded -= plate_PartAdded; plate.PartRemoved -= plate_PartRemoved; parts.Clear(); - stationaryParts.Clear(); - activeParts.Clear(); + previewManager.Clear(); selection.Clear(); } @@ -537,8 +532,7 @@ namespace OpenNest.Controls public override void Refresh() { parts.ForEach(p => p.Update(this)); - stationaryParts.ForEach(p => p.Update(this)); - activeParts.ForEach(p => p.Update(this)); + previewManager.Update(); Invalidate(); } @@ -566,51 +560,10 @@ namespace OpenNest.Controls Plate.Parts.Add(part); } - public void SetStationaryParts(List parts) - { - stationaryParts.Clear(); - activeParts.Clear(); - - if (parts != null) - { - foreach (var part in parts) - stationaryParts.Add(LayoutPart.Create(part, this)); - } - - Invalidate(); - } - - public void SetActiveParts(List parts) - { - activeParts.Clear(); - - if (parts != null) - { - foreach (var part in parts) - activeParts.Add(LayoutPart.Create(part, this)); - } - - Invalidate(); - } - - public void ClearPreviewParts() - { - stationaryParts.Clear(); - activeParts.Clear(); - Invalidate(); - } - - public void AcceptPreviewParts(List parts) - { - if (parts != null) - { - foreach (var part in parts) - Plate.Parts.Add(part); - } - - stationaryParts.Clear(); - activeParts.Clear(); - } + public void SetStationaryParts(List parts) => previewManager.SetStationaryParts(parts); + public void SetActiveParts(List parts) => previewManager.SetActiveParts(parts); + public void ClearPreviewParts() => previewManager.ClearPreviewParts(); + public void AcceptPreviewParts(List parts) => previewManager.AcceptPreviewParts(parts); public async void FillWithProgress(List groupParts, Box workArea) { @@ -751,8 +704,7 @@ namespace OpenNest.Controls { base.UpdateMatrix(); parts.ForEach(p => p.Update(this)); - stationaryParts.ForEach(p => p.Update(this)); - activeParts.ForEach(p => p.Update(this)); + previewManager.Update(); } } } diff --git a/OpenNest/Controls/PreviewManager.cs b/OpenNest/Controls/PreviewManager.cs new file mode 100644 index 0000000..e6dc9ed --- /dev/null +++ b/OpenNest/Controls/PreviewManager.cs @@ -0,0 +1,84 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace OpenNest.Controls +{ + internal class PreviewManager + { + private readonly PlateView view; + private readonly List stationaryParts = new List(); + private readonly List activeParts = new List(); + + public PreviewManager(PlateView view) + { + this.view = view; + } + + public IReadOnlyList PreviewParts => + activeParts.Count > 0 ? activeParts : stationaryParts; + + public Brush PreviewBrush => + activeParts.Count > 0 ? view.ColorScheme.ActivePreviewPartBrush : view.ColorScheme.PreviewPartBrush; + + public Pen PreviewPen => + activeParts.Count > 0 ? view.ColorScheme.ActivePreviewPartPen : view.ColorScheme.PreviewPartPen; + + public void SetStationaryParts(List parts) + { + stationaryParts.Clear(); + activeParts.Clear(); + + if (parts != null) + { + foreach (var part in parts) + stationaryParts.Add(LayoutPart.Create(part, view)); + } + + view.Invalidate(); + } + + public void SetActiveParts(List parts) + { + activeParts.Clear(); + + if (parts != null) + { + foreach (var part in parts) + activeParts.Add(LayoutPart.Create(part, view)); + } + + view.Invalidate(); + } + + public void ClearPreviewParts() + { + stationaryParts.Clear(); + activeParts.Clear(); + view.Invalidate(); + } + + public void AcceptPreviewParts(List parts) + { + if (parts != null) + { + foreach (var part in parts) + view.Plate.Parts.Add(part); + } + + stationaryParts.Clear(); + activeParts.Clear(); + } + + public void Update() + { + stationaryParts.ForEach(p => p.Update(view)); + activeParts.ForEach(p => p.Update(view)); + } + + public void Clear() + { + stationaryParts.Clear(); + activeParts.Clear(); + } + } +}