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 AddBrushStopCommand : IUndoRedoCommand { private JobModel _jobModel; private SegmentModel _segment; private SegmentModel _createdNewSegment; private BrushStopModel _brushStopModelToAdd; private int _index; public AddBrushStopCommand(JobModel job, SegmentModel segment, BrushStopModel addedbrush) { _jobModel = job; _segment = segment; _index = _jobModel.GroupingSegments.IndexOf(_segment); _brushStopModelToAdd = addedbrush; _createdNewSegment = null; } public void Execute() { if (_segment == null) return; //SolidColor if (_segment.BrushStops.Count == 0) { _brushStopModelToAdd.Position = BrushStopModel.PositionStatus.FirstColor; _segment.BrushStops.Add(_brushStopModelToAdd); } //Add Second BrushStop else if (_segment.BrushStops.Count == 1)// add gradient { BrushStopModel currentBrushStop = _segment.BrushStops[0]; _segment.CreateGradientBrushes(_segment.BrushStops[0], _brushStopModelToAdd); _segment.RaiseSegmentBrushChanged(); } else //Create new Segment and Add BrushStop { _createdNewSegment = _segment.Clone(); var length = _segment.Length / 2; _createdNewSegment.Length = length; _segment.Length = length; _createdNewSegment.SegmentIndex = _segment.SegmentIndex + 1; _createdNewSegment.CreateGradientBrushes(_brushStopModelToAdd.Clone(), _segment.SecondBrushStop); _createdNewSegment.RaiseSegmentBrushChanged(); _segment.AddOrReplaceSecondBrush(_brushStopModelToAdd); _segment.UpdateMiddleColorBrush(); _segment.RaiseSegmentBrushChanged(); _segment.ArrangeBrushStopsIndexes(); _createdNewSegment.ArrangeBrushStopsIndexes(); _jobModel.Segments.Add(_createdNewSegment); if ((_index+1) < _jobModel.GroupingSegments.Count()) { _jobModel.GroupingSegments.Insert(_index + 1, _createdNewSegment); } else _jobModel.GroupingSegments.Add(_createdNewSegment); _jobModel.ArrangeSegmentsIndixes(); } } public void UnExecute() { if (_segment == null) return; if (_createdNewSegment != null) { BrushStopModel secondbrush = _createdNewSegment.SecondBrushStop; _segment.AddOrReplaceSecondBrush(secondbrush); _segment.UpdateMiddleColorBrush(); _segment.RaiseSegmentBrushChanged(); _segment.ArrangeBrushStopsIndexes(); _jobModel.Segments.Remove(_createdNewSegment); _jobModel.GroupingSegments.Remove(_createdNewSegment); _jobModel.ArrangeSegmentsIndixes(); } else if(_segment.IsGradient) { BrushStopModel firstbrush = _segment.FirstBrushStop; _segment.BrushStops.Clear(); _segment.BrushStops.Add(firstbrush); _segment.ArrangeBrushStopsIndexes(); } else if(_segment.BrushStops.Count == 1) { _segment.BrushStops.Clear(); } } } }