public EquationRow(EquationContainer parent) : base(parent) { TextEquation textEq = new TextEquation(this); ActiveChild = textEq; AddChild(textEq); CalculateSize(); }
public RowAction(ISupportsUndo executor, EquationBase equation, TextEquation equationAfter, int index, int caretIndex) : base(executor) { Index = index; Equation = equation; CaretIndex = caretIndex; EquationAfter = equationAfter; }
public DecoratedCharacter(EquationContainer parent, TextEquation previous, CharacterDecorationType cdt, Position position, string sign) : base(parent) { this.Previous = previous; this.charFt = textManager.GetFormattedText(previous.Text[previous.CaretIndex - 1].ToString(), previous.GetFormats()[previous.CaretIndex - 1]); previous.ConsumeKey(System.Windows.Input.Key.Back); Height = FontSize; decorations.Add(new CharacterDecorationInfo() { DecorationType = cdt, Position = position, UnicodeString = sign }); Width = charFt.Width; }
public void Merge(TextEquation secondText) { SetCaretIndex(textData.Length); foreach (var v in secondText.decorations) { v.Index = v.Index + textData.Length; decorations.Add(v); } //secondText.decorations.Clear(); textData.Append(secondText.textData.ToString()); formats.AddRange(secondText.formats); modes.AddRange(secondText.modes); FormatText(); }
public override EquationBase Split(EquationContainer newParent) { TextEquation newText = new TextEquation(newParent); int itemCount = textData.Length - caretIndex; newText.textData.Append(textData.ToString(caretIndex, itemCount)); textData.Remove(caretIndex, itemCount); newText.formats.AddRange(formats.GetRange(caretIndex, itemCount)); formats.RemoveRange(caretIndex, itemCount); newText.modes.AddRange(modes.GetRange(caretIndex, itemCount)); modes.RemoveRange(caretIndex, itemCount); var list = (from d in decorations where d.Index >= caretIndex select d).ToList(); foreach (var v in list) { decorations.Remove(v); v.Index = v.Index - caretIndex; newText.decorations.Add(v); } SetCaretIndex(textData.Length); FormatText(); newText.FormatText(); return newText; }
public override CopyDataObject Copy(bool removeSelection) { if (SelectedItems != 0) { int startIndex = SelectedItems > 0 ? SelectionStartIndex : SelectionStartIndex + SelectedItems; int count = (SelectedItems > 0 ? SelectionStartIndex + SelectedItems : SelectionStartIndex) - startIndex; string firstText = ((TextEquation)childEquations[startIndex]).GetSelectedText(); string lastText = ((TextEquation)childEquations[startIndex + count]).GetSelectedText(); int[] firstFormats = ((TextEquation)childEquations[startIndex]).GetSelectedFormats(); EditorMode[] firstModes = ((TextEquation)childEquations[startIndex]).GetSelectedModes(); CharacterDecorationInfo[] firstDecorations = ((TextEquation)childEquations[startIndex]).GetSelectedDecorations(); int[] lastFormats = ((TextEquation)childEquations[startIndex + count]).GetSelectedFormats(); EditorMode[] lastModes = ((TextEquation)childEquations[startIndex + count]).GetSelectedModes(); CharacterDecorationInfo[] lastDecorations = ((TextEquation)childEquations[startIndex + count]).GetSelectedDecorations(); TextEquation firstEquation = new TextEquation(this); TextEquation lastEquation = new TextEquation(this); firstEquation.ConsumeFormattedText(firstText, firstFormats, firstModes, firstDecorations, false); lastEquation.ConsumeFormattedText(lastText, lastFormats, lastModes, lastDecorations, false); List<EquationBase> equations = new List<EquationBase>(); equations.Add(firstEquation); for (int i = startIndex + 1; i < startIndex + count; i++) { equations.Add(childEquations[i]); } equations.Add(lastEquation); double left = 0; foreach (EquationBase eb in equations) { eb.Left = 1 + left; left += eb.Width; } double maxUpperHalf = 0; double maxBottomHalf = 0; foreach (EquationBase eb in childEquations) { if (eb.RefY > maxUpperHalf) { maxUpperHalf = eb.RefY; } if (eb.Height - eb.RefY > maxBottomHalf) { maxBottomHalf = eb.Height - eb.RefY; } } double width = 0; foreach (EquationBase eb in equations) { eb.Top = 1 + maxUpperHalf - eb.RefY; width += eb.Width; } Rect rect = GetSelectionBounds(); RenderTargetBitmap bitmap = new RenderTargetBitmap((int)(Math.Ceiling(width + 2)), (int)(Math.Ceiling(maxUpperHalf + maxBottomHalf + 2)), 96, 96, PixelFormats.Default); DrawingVisual dv = new DrawingVisual(); IsSelecting = false; using (DrawingContext dc = dv.RenderOpen()) { dc.DrawRectangle(Brushes.White, null, new Rect(0, 0, bitmap.Width, bitmap.Height)); foreach (EquationBase eb in equations) { eb.DrawEquation(dc); } } IsSelecting = true; bitmap.Render(dv); XElement thisElement = new XElement(GetType().Name); XElement children = new XElement("ChildEquations"); foreach (EquationBase eb in equations) { eb.SelectAll(); children.Add(eb.Serialize()); } thisElement.Add(children); //data.SetText(GetSelectedText()); foreach (EquationBase eb in equations) { eb.DeSelect(); } Left = Left; Top = Top; if (removeSelection) { RemoveSelection(true); } return new CopyDataObject { Image = bitmap, Text = null, XElement = thisElement }; } else { return base.Copy(removeSelection); } }