///<summary> /// OffsetIndices ///</summary> ///<param name="index"></param> ///<param name="count"></param> public void OffsetIndices(int index, int count) { for (int i=0; i<_Ranges.Count; i++) { SelectedRange range = _Ranges[i]; if (range.EndIndex >= index) { if (range.StartIndex < index) { SelectedRange range2 = new SelectedRange(index, range.EndIndex); range.EndIndex = index - 1; _Ranges.Insert(++i, range2); } OffsetRanges(i, count); CoalesceRanges(); break; } } ValidateRanges(); }
///<summary> /// RemoveItem ///</summary> ///<param name="index"></param> ///<param name="range"></param> ///<returns></returns> public void RemoveItem(int index, SelectedRange range) { if (range.StartIndex == index) { range.StartIndex++; if (range.StartIndex > range.EndIndex) _Ranges.Remove(range); } else if (range.EndIndex == index) { range.EndIndex--; if (range.StartIndex > range.EndIndex) _Ranges.Remove(range); } else if (range.Contains(index) == true) { int i = _Ranges.IndexOf(range); int endIndex = range.EndIndex; range.EndIndex = index - 1; _Ranges.Insert(i + 1, new SelectedRange(index + 1, endIndex)); } ValidateRanges(); }
private void AddItem(SelectedRange range, int i, int index) { if (range.StartIndex - 1 == index) { range.StartIndex--; } else if (range.EndIndex + 1 == index) { range.EndIndex++; if (i + 1 < _Ranges.Count) { if (_Ranges[i + 1].StartIndex == index + 1) { _Ranges[i].EndIndex = _Ranges[i + 1].EndIndex; _Ranges.RemoveAt(i + 1); } } } else if (range.Contains(index) == false) { SelectedRange selRange = new SelectedRange(index, index); _Ranges.Insert(i, selRange); } ValidateRanges(); }
///<summary> ///</summary> ///<param name="startIndex"></param> ///<param name="endIndex"></param> public void AddRange(int startIndex, int endIndex) { for (int i = 0; i < _Ranges.Count; i++) { SelectedRange range = _Ranges[i]; if (endIndex == range.StartIndex - 1) { range.StartIndex = startIndex; if (i > 0) { if (_Ranges[i - 1].EndIndex + 1 == startIndex) { _Ranges[i - 1].EndIndex = range.EndIndex; _Ranges.RemoveAt(i); } } CoalesceRanges(); ValidateRanges(); return; } if (startIndex == range.EndIndex + 1) { range.EndIndex = endIndex; if (i + 1 < _Ranges.Count) { if (_Ranges[i + 1].StartIndex - 1 == endIndex) { range.EndIndex = _Ranges[i + 1].EndIndex; _Ranges.RemoveAt(i + 1); } } CoalesceRanges(); ValidateRanges(); return; } } SelectedRange selRange = null; for (int i = 0; i < _Ranges.Count; i++) { SelectedRange range = _Ranges[i]; if (range.StartIndex > startIndex) { selRange = new SelectedRange(startIndex, endIndex); _Ranges.Insert(i, selRange); break; } } if (selRange == null) { selRange = new SelectedRange(startIndex, endIndex); _Ranges.Add(selRange); } CoalesceRanges(); }
///<summary> /// FindRange ///</summary> ///<param name="index"></param> ///<param name="selRange"></param> ///<returns></returns> public bool FindRange(int index, out SelectedRange selRange) { foreach (SelectedRange range in _Ranges) { if (range.Contains(index) == true) { selRange = range; return (true); } } selRange = null; return (false); }