Beispiel #1
0
        public override void Execute(TextBoxControl editor)
        {
            int       iLine = editor.LineCount;
            Paragraph pg    = editor.GetParagraph(iLine);

            TextLocation endPos = new TextLocation(pg.Length, iLine);

            if (editor.Caret.Position != endPos)
            {
                editor.Caret.Position = endPos;
                if (editor.VerticalScroll.Visible)
                {
                    editor.VerticalScroll.Value = editor.VerticalScroll.Maximum;
                }
                if (editor.HorizontalScroll.Visible)
                {
                    int lineWidth = editor.GetLineWidth(iLine);
                    if (lineWidth > editor.DrawRectangle.Width && editor.HorizontalScroll.Visible)
                    {
                        editor.HorizontalScroll.Value = Math.Min(editor.HorizontalScroll.Maximum, editor.HorizontalScroll.Value + lineWidth - editor.DrawRectangle.Width);
                    }
                    editor.PerformLayout();
                }
            }
        }
Beispiel #2
0
        /// <remarks>
        /// Executes this edit action
        /// </remarks>
        /// <param name="textArea">The <see cref="ItextArea"/> which is used for callback purposes</param>
        public override void Execute(TextBoxControl editor)
        {
            if (editor.SelectionManager.HasSomethingSelected)
            {
                DeleteSelection(editor);
            }
            else
            {
                if (editor.ReadOnly)
                {
                    return;
                }

                if (editor.Caret.Line > 0 && editor.Caret.Column > 0 && !editor.ReadOnly)
                {
                    editor.BeginUpdate();
                    Paragraph pg = editor.GetParagraph(editor.Caret.Line);
                    if (pg != null)
                    {
                        pg.Remove(editor.Caret.Column, 1);
                    }

                    editor.EndUpdate();
                }
            }
        }
Beispiel #3
0
 void CreateAnchor()
 {
     if (_control != null)
     {
         Paragraph pg = _control.GetParagraph(Math.Max(0, Math.Min(location.Line, _control.LineCount - 1)));
         anchor = pg.CreateAnchor(Math.Max(0, Math.Min(location.Column, pg.Length)));
         // after insertion: keep bookmarks after the initial whitespace (see DefaultFormattingStrategy.SmartReplaceLine)
         anchor.MovementType = AnchorMovementType.AfterInsertion;
         anchor.Deleted     += AnchorDeleted;
     }
 }
Beispiel #4
0
        /// <remarks>
        /// Executes this edit action
        /// </remarks>
        /// <param name="editor">The <see cref="Ieditor"/> which is used for callback purposes</param>
        public override void Execute(TextBoxControl editor)
        {
            if (editor.SelectionManager.HasSomethingSelected)
            {
                //Delete.DeleteSelection(editor);
            }
            else
            {
                if (editor.Caret.Line > 0 && editor.Caret.Column > 0 && !editor.ReadOnly)
                {
                    editor.BeginUpdate();

                    Paragraph line = editor.GetParagraph(editor.Caret.Line);
                    if (line != null && line.Remove(editor.Caret.Column - 1, 1))
                    {
                        editor.Caret.Column -= 1;
                    }

                    editor.EndUpdate();
                }
            }
        }
Beispiel #5
0
        /// <remarks>
        /// Executes this edit action
        /// </remarks>
        /// <param name="editor">The <see cref="TextArea"/> which is used for callback purposes</param>
        public override void Execute(TextBoxControl editor)
        {
            if (editor.ReadOnly)
            {
                return;
            }
            editor.BeginUpdate();
            editor.UndoStack.StartUndoGroup();
            try
            {
                //////////////////////////////////////

                /*  zx 2015/9/10 XML文本编辑器中按下回车键只有以下情形才有效
                 *  1.在首行中右标记符>后点击回车键时,该节点添加一个中间行,光标位置后的元素全部添加到新建的中间行中
                 *  2.光标落入文本元素中时,不管是在首行还是在中间行,该节点顺次添加一个中间行,光标以后的文本及该行中其他元素一并添加到新建的中间行中
                 *  3.光标落入中间行中无任何有效元素的区域(光标前只存在空格和tab键时),该节点顺次添加中间行,光标以后的文本及该行中的其他元素一并添加到新建的中间行中
                 *////////////////////////////////////
                if (editor.HandleKeyPress('\n'))
                {
                    return;
                }
                bool      isEnd      = false;
                bool      isAllSpace = false;
                int       curLineNr  = editor.Caret.Line;
                Paragraph pg         = editor.GetParagraph(curLineNr);
                pg.CheckIsIncludeVaildSegment(ref isEnd, ref isAllSpace);
                int insertLocation = 0;

                Block segment = pg.GetLineSegmentBeforeCaret(editor.Caret.Column, ref insertLocation);
                if (segment != null)
                {
                    List <string> spitList = new List <string>();
                    spitList = pg.SpitTextSegmentByCaret(editor.Caret.Column);
                    // 当鼠标光标落在文本元素后时
                    if (spitList.Count == 2 && (string.IsNullOrEmpty(spitList[0]) || string.IsNullOrEmpty(spitList[1])))
                    {
                        int       caretCol = 0;
                        Paragraph newPG    = editor.InsertParagraph(pg, ref caretCol);
                        if (newPG != null)
                        {
                            int index = pg.Blocks.ToList().IndexOf(segment);
                            if (string.IsNullOrEmpty(spitList[0]))
                            {
                                index -= 1;
                            }
                            List <Block> lstDelBlock = new List <Block>();
                            for (int i = 0; i < pg.Blocks.Length; i++)
                            {
                                if (i > index)
                                {
                                    lstDelBlock.Add(pg.Blocks[i]);
                                }
                            }
                            pg.Remove(lstDelBlock);
                            newPG.AddSegment(lstDelBlock.ToArray());
                            editor.Caret.Position = new TextLocation(caretCol, editor.Caret.Line + 1);
                            editor.Caret.UpdateCaretPosition();
                        }
                    }
                    else if (spitList.Count == 2 && !string.IsNullOrEmpty(spitList[0]) && !string.IsNullOrEmpty(spitList[1]))
                    {
                        int       caretCol = 0;
                        Paragraph newPG    = editor.InsertParagraph(pg, ref caretCol);
                        if (newPG != null)
                        {
                            int          index       = pg.Blocks.ToList().IndexOf(segment);
                            List <Block> lstDelBlock = new List <Block>();
                            for (int i = 0; i < pg.Blocks.Length; i++)
                            {
                                if (i > index && pg.Blocks[i] != segment)
                                {
                                    lstDelBlock.Add(pg.Blocks[i]);
                                }
                            }
                            pg.Remove(lstDelBlock);
                            pg.Remove(new List <Block>()
                            {
                                segment
                            });
                            Block segBefore = new Block(BlockType.Text, spitList[0]);
                            pg.AddSegment(segBefore);
                            Block segAfter = new Block(BlockType.Text, spitList[1]);
                            newPG.AddSegment(segAfter);
                            newPG.AddSegment(lstDelBlock.ToArray());
                            editor.Caret.Position = new TextLocation(caretCol, editor.Caret.Line + 1);
                            editor.Caret.UpdateCaretPosition();
                        }
                    }
                }
                else if (pg.Blocks.Length == 0 || isAllSpace)
                {
                    int       caretCol = 0;
                    Paragraph newPG    = editor.InsertParagraph(pg, ref caretCol);
                    editor.Caret.Position = new TextLocation(caretCol, editor.Caret.Line + 1);
                    editor.Caret.UpdateCaretPosition();
                }
            }
            finally
            {
                editor.UndoStack.EndUndoGroup();
                editor.EndUpdate();
            }
        }