public TextAction(ISupportsUndo executor, int index, string text, int[] formats, EditorMode[] modes, CharacterDecorationInfo[] decorations) : base(executor) { Index = index; Text = text; Formats = formats; Modes = modes; Decorations = decorations; }
//void DrawDecorations(DrawingContext dc, List<CharacterDecorationInfo> decorationList, FormattedText ft, int index, double hCenter) //{ // double offset = FontSize * .05; // //character metrics // double topPixel = ft.Height + ft.OverhangAfter - ft.Extent; //ft.Baseline - ft.Extent + descent; // double descent = ft.Height - ft.Baseline + ft.OverhangAfter; // double halfCharWidth = ft.GetFullWidth() / 2; // double right = hCenter + halfCharWidth + offset; // double left = hCenter - halfCharWidth - offset; // double top = Top + topPixel - offset; // double bottom = Top + ft.Baseline + descent + offset; //} //private void DrawTopDecorations(DrawingContext dc, FormattedText ft, List<CharacterDecorationInfo> cdiList, double center, int formatId) //{ // var topDecorations = (from x in cdiList where x.Position == Position.Top select x).ToList(); // if (topDecorations.Count > 0) // { // double top = Top + ft.Height + ft.OverhangAfter - ft.Extent - FontSize * .1; // foreach (var d in topDecorations) // { // string text = d.UnicodeString; // var sign = textManager.GetFormattedText(text, textManager.GetFormatIdForNewStyle(formatId, FontStyles.Normal)); // sign.DrawTextBottomCenterAligned(dc, new Point(center, top)); // top -= sign.Extent + FontSize * .08; // } // } //} //private void DrawBottomDecorations(DrawingContext dc, FormattedText ft, List<CharacterDecorationInfo> cdiList, double hCenter, int formatId) //{ // var bottomDecorations = (from x in cdiList where x.Position == Position.Bottom select x).ToList(); // if (bottomDecorations.Count > 0) // { // double bottom = Top + ft.Height + ft.OverhangAfter + FontSize * .2; // foreach (var d in bottomDecorations) // { // string text = d.UnicodeString; // var sign = textManager.GetFormattedText(text, textManager.GetFormatIdForNewStyle(formatId, FontStyles.Normal)); // sign.DrawTextBottomCenterAligned(dc, new Point(hCenter, bottom)); // bottom += sign.Extent + FontSize * .08; // } // } //} //private void DrawLeftDecorations(DrawingContext dc, List<CharacterDecorationInfo> cdiList, double left, int formatId) //{ // var leftDecorations = (from x in cdiList where x.Position == Position.TopLeft select x).ToList(); // if (leftDecorations.Count > 0) // { // string s = ""; // foreach (var d in leftDecorations) // { // s = s + d.UnicodeString; // } // var formattedText = textManager.GetFormattedText(s, textManager.GetFormatIdForNewStyle(formatId, FontStyles.Normal)); // formattedText.DrawTextRightAligned(dc, new Point(left, Top)); // } //} //private void DrawRightDecorations(DrawingContext dc, List<CharacterDecorationInfo> cdiList, double right, int formatId) //{ // var rightDecorations = (from x in cdiList where x.Position == Position.TopRight select x).ToList(); // if (rightDecorations.Count > 0) // { // string s = ""; // foreach (var d in rightDecorations) // { // s = s + d.UnicodeString; // } // dc.DrawText(textManager.GetFormattedText(s, textManager.GetFormatIdForNewStyle(formatId, FontStyles.Normal)), new Point(right, Top)); // } //} ////index = index of the decorated character in this.textData //private void DrawFaceDecorations(DrawingContext dc, FormattedText charText, List<CharacterDecorationInfo> cdiList, double hCenter) //{ // var decorations = (from x in cdiList where x.Position == Position.Over select x).ToList(); // if (decorations.Count > 0) // { // double offset = FontSize * .05; // double top = Top + charText.Height + charText.OverhangAfter - charText.Extent; //ft.Baseline - ft.Extent + descent; // double bottom = top + charText.Extent; //charText.Height - charText.Baseline + charText.OverhangAfter; // double vCenter = top + charText.Extent / 2; // double left = hCenter - charText.GetFullWidth() / 2 - offset; // double right = hCenter + charText.GetFullWidth() / 2 + offset; // Pen pen = PenManager.GetPen(FontSize * .035); // foreach (var d in decorations) // { // switch (d.DecorationType) // { // case CharacterDecorationType.Cross: // dc.DrawLine(pen, new Point(left, top), new Point(right, bottom)); // dc.DrawLine(pen, new Point(left, bottom), new Point(right, top)); // break; // case CharacterDecorationType.LeftCross: // dc.DrawLine(pen, new Point(left, top), new Point(right, bottom)); // break; // case CharacterDecorationType.RightCross: // dc.DrawLine(pen, new Point(left, bottom), new Point(right, top)); // break; // case CharacterDecorationType.LeftUprightCross: // dc.DrawLine(pen, new Point(hCenter - FontSize * .08, top - FontSize * 0.04), new Point(hCenter + FontSize * .08, bottom + FontSize * 0.04)); // break; // case CharacterDecorationType.RightUprightCross: // dc.DrawLine(pen, new Point(hCenter + FontSize * .08, top - FontSize * 0.04), new Point(hCenter - FontSize * .08, bottom + FontSize * 0.04)); // break; // case CharacterDecorationType.StrikeThrough: // dc.DrawLine(pen, new Point(left, vCenter), new Point(right, vCenter)); // break; // case CharacterDecorationType.DoubleStrikeThrough: // dc.DrawLine(pen, new Point(left, vCenter - FontSize * .05), new Point(right, vCenter - FontSize * .05)); // dc.DrawLine(pen, new Point(left, vCenter + FontSize * .05), new Point(right, vCenter + FontSize * .05)); // break; // case CharacterDecorationType.VStrikeThrough: // dc.DrawLine(pen, new Point(hCenter, top - FontSize * .05), new Point(hCenter, bottom + FontSize * .05)); // break; // case CharacterDecorationType.VDoubleStrikeThrough: // dc.DrawLine(pen, new Point(hCenter - FontSize * .05, top - FontSize * .05), new Point(hCenter - FontSize * .05, bottom + FontSize * .05)); // dc.DrawLine(pen, new Point(hCenter + FontSize * .05, top - FontSize * .05), new Point(hCenter + FontSize * .05, bottom + FontSize * .05)); // break; // } // } // } //} public void AddDecoration(CharacterDecorationInfo cdi) { //if (cdi.DecorationType == CharacterDecorationType.None) //{ // decorations.RemoveAll(x => x.Index == caretIndex - 1); //} //else if (!char.IsWhiteSpace(textData[caretIndex - 1])) //{ // cdi.Index = caretIndex - 1; // decorations.Add(cdi); //} //FormatText(); }
public TextRemoveAction(ISupportsUndo executor, int index, string text, int selectionStartIndex, int selectionCout, int parentSelectionStartIndex, int[] formats, EditorMode[] modes, CharacterDecorationInfo[] decorations) : base(executor) { Index = index; Text = text; Formats = formats; Modes = modes; Decorations = decorations; SelectionStartIndex = selectionStartIndex; SelectionCount = selectionCout; ParentSelectionStartIndex = parentSelectionStartIndex; }
void RemoveDecoration(CharacterDecorationInfo cdi) { decorations.Remove(cdi); UndoManager.AddUndoAction(new DecorationAction(this, new[] { cdi }) { UndoFlag = false }); }
public override void ConsumeFormattedText(string text, int[] formats, EditorMode[] modes, CharacterDecorationInfo[] decorations, bool addUndo) { //this.decorations.AddRange(decorations); textData.Insert(caretIndex, text); this.formats.InsertRange(caretIndex, formats); this.modes.InsertRange(caretIndex, modes); if (decorations != null) { foreach (var d in decorations) { d.Index = d.Index + caretIndex; } this.decorations.AddRange(decorations); } if (addUndo) { UndoManager.AddUndoAction(new TextAction(this, caretIndex, text, formats, modes, decorations ?? new CharacterDecorationInfo[0]) { UndoFlag = false }); } SetCaretIndex(caretIndex + text.Length); FormatText(); }
public override void DeSerialize(XElement xElement) { textData.Append(xElement.Element("Text").Value); try { string[] formatStrings = xElement.Element("Formats").Value.Split(','); string[] modeStrings = xElement.Element("Modes").Value.Split(','); for (int i = 0; i < formatStrings.Length; i++) { formats.Add(int.Parse(formatStrings[i])); modes.Add((EditorMode)Enum.Parse(typeof(EditorMode), modeStrings[i])); } var decos = xElement.Elements().FirstOrDefault(x => x.Name == "Decorations"); if (decos != null) { var children = decos.Elements("d").ToList(); for (int i = 0; i < children.Count; i++) { string[] list = children[i].Value.Split(','); var d = new CharacterDecorationInfo(); d.DecorationType = (CharacterDecorationType)Enum.Parse(typeof(CharacterDecorationType), list[0]); d.Index = int.Parse(list[1]); d.Position = (Position)Enum.Parse(typeof(Position), list[2]); d.UnicodeString = list[3]; decorations.Add(d); } } } catch { formats.Clear(); modes.Clear(); decorations.Clear(); int formatId = textManager.GetFormatId(FontSize, fontType, FontStyles.Normal, FontWeights.Normal, Brushes.Black, false); for (int i = 0; i < textData.Length; i++) { formats.Add(formatId); modes.Add(Editor.EditorMode.Math); } } FormatText(); }
public override void Paste(XElement xElement) { if (xElement.Name.LocalName == GetType().Name) { //textData.Insert(caretIndex, xElement.Element("Text").Value); string text = xElement.Element("Text").Value; string[] formatStrings = xElement.Element("Formats").Value.Split(','); string[] modeStrings = xElement.Element("Modes").Value.Split(','); int[] formats = new int[text.Length]; EditorMode[] modes = new EditorMode[text.Length]; var decos = xElement.Elements().FirstOrDefault(x => x.Name == "Decorations"); CharacterDecorationInfo[] decorations = null; if (decos != null) { var children = decos.Elements("d").ToList(); decorations = new CharacterDecorationInfo[children.Count]; for (int i = 0; i < children.Count; i++) { string[] list = children[i].Value.Split(','); decorations[i] = new CharacterDecorationInfo(); decorations[i].DecorationType = (CharacterDecorationType)Enum.Parse(typeof(CharacterDecorationType), list[0]); decorations[i].Index = int.Parse(list[1]); decorations[i].Position = (Position)Enum.Parse(typeof(Position), list[2]); decorations[i].UnicodeString = list[3]; } } try { for (int i = 0; i < text.Length; i++) { formats[i] = int.Parse(formatStrings[i]); modes[i] = (EditorMode)Enum.Parse(typeof(EditorMode), modeStrings[i]); } } catch { int formatId = textManager.GetFormatId(FontSize, fontType, FontStyles.Normal, FontWeights.Normal, Brushes.Black, false); for (int i = 0; i < text.Length; i++) { formats[i] = formatId; modes[i] = Editor.EditorMode.Math; } } ConsumeFormattedText(text, formats, modes, decorations, true); } }
public void ResetTextEquation(int caretIndex, int selectionStartIndex, int selectedItems, string text, int[] formats, EditorMode[] modes, CharacterDecorationInfo[] cdiList) { textData.Clear(); textData.Append(text); this.caretIndex = caretIndex; this.SelectionStartIndex = selectionStartIndex; this.SelectedItems = selectedItems; this.formats.Clear(); this.formats.AddRange(formats); this.modes.Clear(); this.modes.AddRange(modes); this.decorations.Clear(); decorations.AddRange(cdiList); FormatText(); }
public void AddDecoration(CharacterDecorationType cdt, Position position, string sign) { if (cdt == CharacterDecorationType.None) { var decoArray = (from d in decorations where d.Index == caretIndex - 1 select d).ToArray(); UndoManager.AddUndoAction(new DecorationAction(this, decoArray) { UndoFlag = false }); decorations.RemoveAll(x => x.Index == caretIndex - 1); } else if (!char.IsWhiteSpace(textData[caretIndex - 1])) { CharacterDecorationInfo cdi = new CharacterDecorationInfo(); cdi.DecorationType = cdt; cdi.Position = position; cdi.UnicodeString = sign; cdi.Index = caretIndex - 1; decorations.Add(cdi); UndoManager.AddUndoAction(new DecorationAction(this, new[] { cdi })); } FormatText(); }
public virtual void ConsumeFormattedText(string text, int[] formats, EditorMode[] modes, CharacterDecorationInfo[] decorations, bool addUndo) { }
public DecorationAction(ISupportsUndo executor, CharacterDecorationInfo [] cdi, bool added) : base(executor) { Added = added; CharacterDecorations = cdi; }
public DecorationAction(ISupportsUndo executor, CharacterDecorationInfo [] cdi) : base(executor) { CharacterDecorations = cdi; }
public override void ConsumeFormattedText(string text, int[] formats, EditorMode[] modes, CharacterDecorationInfo[] decorations, bool addUndo) { ActiveChild.ConsumeFormattedText(text, formats, modes, decorations, addUndo); CalculateSize(); }