void InsertRangeCore(int index, List <RleItem <T> > rangeItems, IRleCollectionValueConverter <T> valueConverter) { int count = rangeItems[rangeItems.Count - 1].EndIndex + 1; int firstItemIndex = InsertIndexRange(index, count); int lastItemIndex = firstItemIndex - 1; if (valueConverter == null) { foreach (RleItem <T> item in rangeItems) { lastItemIndex++; items.Insert(lastItemIndex, new RleItem <T>(item.Value, item.StartIndex + index, item.EndIndex + index)); } } else { foreach (RleItem <T> item in rangeItems) { lastItemIndex++; items.Insert(lastItemIndex, new RleItem <T>(valueConverter.Convert(item.Value), item.StartIndex + index, item.EndIndex + index)); } } TryMergeWithNext(lastItemIndex); TryMergeWithPrevious(firstItemIndex); }
public UndoableRleCollectionInsertRangeHistoryItem(IDocumentModel documentModel, RleCollection <T> collection, int index, IRleCollection <T> range, IRleCollectionValueConverter <T> valueConverter) : base(documentModel.MainPart) { this.collection = collection; this.index = index; this.newRange = range; this.valueConverter = valueConverter; }
public void Insert(int index, IRleCollection <T> range, IRleCollectionValueConverter <T> valueConverter) { Guard.ArgumentNotNull(range, "range"); CheckIndexAndCount(index, range.Length); UndoableRleCollectionInsertRangeHistoryItem <T> historyItem = new UndoableRleCollectionInsertRangeHistoryItem <T>(DocumentModel, innerCollection, index, range, valueConverter); History.Add(historyItem); historyItem.Execute(); }
public void SetRange(int startIndex, IRleCollection <T> range, IRleCollectionValueConverter <T> valueConverter) { Guard.ArgumentNotNull(range, "range"); CheckRangeIndexes(startIndex, startIndex + range.Length - 1); UndoableRleCollectionSetRangeHistoryItem <T> historyItem = new UndoableRleCollectionSetRangeHistoryItem <T>(DocumentModel, innerCollection, startIndex, range, valueConverter); History.Add(historyItem); historyItem.Execute(); }
public void Insert(int index, IRleCollection <T> range, IRleCollectionValueConverter <T> valueConverter) { Guard.ArgumentNotNull(range, "range"); CheckIndexAndCount(index, range.Length); InsertRangeCore(index, range.Implementation.items, valueConverter); }
public void SetRange(int startIndex, IRleCollection <T> range, IRleCollectionValueConverter <T> valueConverter) { Guard.ArgumentNotNull(range, "range"); CheckRangeIndexes(startIndex, startIndex + range.Length - 1); SetRangeCore(startIndex, range.Implementation.items, valueConverter); }