/// <summary> /// Called when lines were inserted in ScrollLinesHost. /// </summary> /// <param name="insertAt">Index of the first inserted line.</param> /// <param name="count">The count.</param> protected override void OnLinesInserted(int insertAt, int count) { if (distances != null) { DistancesUtil.OnInserted(distances, ScrollLinesHost, insertAt, count); } }
/// <summary> /// Sets the nested lines. /// </summary> /// <param name="index">The index.</param> /// <param name="nestedLines">The nested lines. If parameter is null the line will be converted to a normal (not nested) line with default line size.</param> public void SetNestedLines(int index, IEditableLineSizeHost nestedLines) { if (nestedLines != null) { lineSizes[index] = -2; // -1 indicates default value, -2 indicates nested. lineNested[index] = (LineSizeCollection)nestedLines; } else { lineSizes[index] = -1; // -1 indicates default value, -2 indicates nested. lineNested.Remove(index); } if (IsSuspendUpdates) { return; } if (distances != null) { DistancesUtil.DistancesLineSizeChanged(distances, this, index, index); } if (LineSizeChanged != null) { LineSizeChanged(this, new RangeChangedEventArgs(index, index)); } }
/// <summary> /// Sets the line size for a range. /// </summary> /// <param name="from">From.</param> /// <param name="to">To.</param> /// <param name="size">The size.</param> public void SetRange(int from, int to, double size) { /*if (lineNested.Count > 0) * { * for (int n = from; n <= to; n++) * { * if (lineNested.ContainsKey(n)) * throw new InvalidOperationException("Cannot change size of a nested LineSizeCollection."); * } * }*/ int count; double savevalue = GetRange(from, out count); lineSizes.SetRange(from, to - from + 1, size); if (IsSuspendUpdates) { return; } // DistancesLineHiddenChanged checks both hidden state and sizes together ... if (distances != null) { DistancesUtil.DistancesLineHiddenChanged(distances, this, from, to); } if (LineSizeChanged != null) { LineSizeChanged(this, new RangeChangedEventArgs(from, to, savevalue, size)); } }
/// <summary> /// Inserts lines in the collection and raises the <see cref="LinesInserted"/> event. /// </summary> /// <param name="insertAtLine">The index of the first line to insert.</param> /// <param name="count">The count.</param> /// <param name="movelines">A container with saved state from a preceeding <see cref="RemoveLines"/> call when lines should be moved. When it is null empty lines with default size are inserted.</param> public void InsertLines(int insertAtLine, int count, IEditableLineSizeHost movelines) { var moveLines = (LineSizeCollection)movelines; lineSizes.Insert(insertAtLine, count, moveLines == null ? null : moveLines.lineSizes); lineHidden.Insert(insertAtLine, count, moveLines == null ? null : moveLines.lineHidden); Dictionary <int, LineSizeCollection> _lineNested = lineNested; lineNested = new Dictionary <int, LineSizeCollection>(); foreach (KeyValuePair <int, LineSizeCollection> entry in _lineNested) { if (entry.Key >= insertAtLine) { lineNested.Add(entry.Key + count, entry.Value); } else { lineNested.Add(entry.Key, entry.Value); } } if (moveLines != null) { foreach (KeyValuePair <int, LineSizeCollection> entry in moveLines.lineNested) { lineNested.Add(entry.Key + insertAtLine, entry.Value); } } lineCount += count; if (IsSuspendUpdates) { return; } if (distances != null) { DistancesUtil.OnInserted(distances, this, insertAtLine, count); } if (LinesInserted != null) { LinesInserted(this, new LinesInsertedEventArgs(insertAtLine, count)); } }
/// <summary> /// Sets the hidden state for a range of lines. /// </summary> /// <param name="from">From.</param> /// <param name="to">To.</param> /// <param name="hide">if set to <c>true</c> hide the lines.</param> public void SetHidden(int from, int to, bool hide) { lineHidden.SetRange(from, to - from + 1, hide); if (IsSuspendUpdates) { return; } // DistancesLineHiddenChanged checks both hidden state and sizes together ... if (distances != null) { DistancesUtil.DistancesLineHiddenChanged(distances, this, from, to); } if (LineHiddenChanged != null) { LineHiddenChanged(this, new HiddenRangeChangedEventArgs(from, to, hide)); } }