using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.PPC.Jobs.Models; namespace Tango.PPC.Jobs.UndoRedoCommands { public class PasteSegmentsCommand : IUndoRedoCommand { private JobModel _jobModel; public List SegmentsToCopy { get; set; } public int _selectedIndex; public PasteSegmentsCommand(JobModel jobModel) { _jobModel = jobModel; SegmentsToCopy = new List(_jobModel.SegmentsToCopy); // _selectedIndex = _jobModel.GroupingSegments.OrderBy(x => x.SegmentIndex).ToList().FindIndex(x => x.IsSelected); _selectedIndex = _jobModel.IndexToPasteCopySegments; } public void Execute() { if (SegmentsToCopy.Count == 0) { return; } // SegmentsToCopy.ForEach(x => x.RaiseSegmentBrushChanged()); if (_selectedIndex == -1 || _selectedIndex == (_jobModel.GroupingSegments.Count) - 1) { foreach (var newSegmentModel in SegmentsToCopy) { if(newSegmentModel is SegmentModel innerSegment) { _jobModel.GroupingSegments.Add(innerSegment); _jobModel.Segments.Add(innerSegment); } else if(newSegmentModel is SegmentsGroupModel group) { _jobModel.GroupingSegments.Add(group); _jobModel.SegmentsGroups.Add(group); foreach (var segment in group.Segments) { _jobModel.Segments.Add(segment); } } } } else { int selctedIndex = _selectedIndex; foreach (var newSegmentModel in SegmentsToCopy) { selctedIndex++; if (newSegmentModel is SegmentModel innerSegment) { _jobModel.GroupingSegments.Insert(selctedIndex, innerSegment); _jobModel.Segments.Add(innerSegment); } else if (newSegmentModel is SegmentsGroupModel group) { _jobModel.GroupingSegments.Insert(selctedIndex, group); _jobModel.SegmentsGroups.Add(group); foreach (var segment in group.Segments) { _jobModel.Segments.Add(segment); } } } } _jobModel.GroupingSegments.ToList().ForEach(x => x.IsSelected = false); _jobModel.ArrangeSegmentsIndixes(); _jobModel.SegmentsToCopy.Clear(); } public void UnExecute() { foreach (var segment in SegmentsToCopy) { _jobModel.GroupingSegments.Remove(segment); if (segment is SegmentModel innerSegment) { _jobModel.Segments.Remove(innerSegment); } else if (segment is SegmentsGroupModel group) { _jobModel.SegmentsGroups.Remove(group); foreach (var insegment in group.Segments) { _jobModel.Segments.Remove(insegment); } } } _jobModel.ArrangeSegmentsIndixes(); _jobModel.SegmentsToCopy = new List(SegmentsToCopy); } } }