Esempio n. 1
0
 public EquationRow(EquationContainer parent)
     : base(parent)
 {
     TextEquation textEq = new TextEquation(this);
     ActiveChild = textEq;
     AddChild(textEq);
     CalculateSize();
 }
Esempio n. 2
0
 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;
 }
Esempio n. 4
0
 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();
 }
Esempio n. 5
0
 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;
 }
Esempio n. 6
0
 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);
     }
 }