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 ReverseCommand : IUndoRedoCommand { private JobModel _jobModel; private List _indexes; public ReverseCommand(JobModel job) { _jobModel = job; _indexes = _jobModel.GroupingSegments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where( x=>x.Segment.IsSelected ).Select(t=> t.Index).ToList(); } public void Execute() { if (_indexes.Count == 0) return; //for (int index = 0, endIndex = _indexes.Count -1; index < _indexes.Count && index < endIndex; index++, endIndex--) //{ // int firstIndexToSwap = _indexes[index]; // int lastIndexToSwap = _indexes[endIndex]; // _jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap); //} for (int index = 0; index < _indexes.Count && index < _jobModel.GroupingSegments.Count; index++) { if(_jobModel.GroupingSegments[_indexes[index]] is SegmentModel segmentModel) { if(segmentModel.IsGradient) { segmentModel.SwapBrushStops(); } } else if(_jobModel.GroupingSegments[_indexes[index]] is SegmentsGroupModel group) { foreach( var segment in group.Segments) { if (segment.IsGradient) { segment.SwapBrushStops(); } } } } _jobModel.GroupingSegments.ToList().ForEach(x => x.IsSelected = false); _jobModel.ArrangeSegmentsIndixes(); } public void UnExecute() { if (_indexes.Count == 0) return; //for (int index = 0, endIndex = _indexes.Count - 1; index < _indexes.Count && index < endIndex; index++, endIndex--) //{ // int firstIndexToSwap = _indexes[index]; // int lastIndexToSwap = _indexes[endIndex]; // _jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap); //} for (int index = 0; index < _indexes.Count && index < _jobModel.GroupingSegments.Count; index++) { if (_jobModel.GroupingSegments[_indexes[index]] is SegmentModel segmentModel) { if (segmentModel.IsGradient) { segmentModel.SwapBrushStops(); } } else if (_jobModel.GroupingSegments[_indexes[index]] is SegmentsGroupModel group) { foreach (var segment in group.Segments) { if (segment.IsGradient) { segment.SwapBrushStops(); } } } } _jobModel.ArrangeSegmentsIndixes(); } } }