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 RemoveSegmentsCommand : IUndoRedoCommand { private JobModel _jobModel; private Dictionary _removedSegmentsDict; public RemoveSegmentsCommand(JobModel job ) { _jobModel = job; _removedSegmentsDict = _jobModel.GroupingSegments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where(x => x.Segment.IsSelected).ToDictionary(i => i.Index, i => i.Segment); ; } public void Execute() { foreach (var obj in _removedSegmentsDict) { if (obj.Value is SegmentModel innerSegment) { _jobModel.Segments.Remove(innerSegment); } else if (obj.Value is SegmentsGroupModel group) { _jobModel.SegmentsGroups.Remove(group); foreach (var segm in group.Segments) { _jobModel.Segments.Remove(segm); } } _jobModel.GroupingSegments.Remove(obj.Value); } _jobModel.ArrangeSegmentsIndixes(); } public void UnExecute() { foreach (var obj in _removedSegmentsDict) { if (obj.Value is SegmentModel innerSegment) { _jobModel.Segments.Add(innerSegment); } else if (obj.Value is SegmentsGroupModel group) { _jobModel.SegmentsGroups.Add(group); foreach (var segm in group.Segments) { _jobModel.Segments.Add(segm); } } if (_jobModel.GroupingSegments.Count <= obj.Key) _jobModel.GroupingSegments.Add(obj.Value); else { _jobModel.GroupingSegments.Insert(obj.Key, obj.Value); } } _jobModel.ArrangeSegmentsIndixes(); } } }