/// ------------------------------------------------------------------------------------ public bool TryUpdate(SegmentChange newChange) { if (NewRange == newChange.OriginalRange && newChange.Type == SegmentChangeType.EndBoundaryMoved) { NewRange = newChange.NewRange; return(true); } if (newChange.Type == SegmentChangeType.Addition && Type == SegmentChangeType.AnnotationAdded && newChange.NewRange == OriginalRange) { _type = SegmentChangeType.Addition; Action <SegmentChange> originalUndoAction = UndoAction; UndoAction = c => { originalUndoAction(c); newChange.UndoAction(c); }; return(true); } if (newChange.Type == SegmentChangeType.AnnotationDeleted && Type == SegmentChangeType.AnnotationDeleted && newChange.NewRange == OriginalRange) { Action <SegmentChange> originalUndoAction = UndoAction; UndoAction = c => { originalUndoAction(c); newChange.UndoAction(c); }; return(true); } if (newChange.Type == SegmentChangeType.Addition && Type == SegmentChangeType.AnnotationDeleted && newChange.NewRange.Start == OriginalRange.Start) { Action <SegmentChange> originalUndoAction = UndoAction; UndoAction = c => { originalUndoAction(c); newChange.UndoAction(c); }; return(true); } return(false); }
/// ------------------------------------------------------------------------------------ public SegmentChange(SegmentChangeType type, TimeRange originalRange, TimeRange newRange, Action <SegmentChange> undoAction) { _type = type; _originalRange = originalRange; NewRange = newRange; UndoAction = undoAction; }