示例#1
0
 public override void InvokeUndo(InternalTextLayerController textLayer)
 {
     textLayer.CurrentLineNumber = _startLineNumber;
     textLayer.TryMoveCaretTo(_startCharIndex);
     textLayer.StartSelect();
     textLayer.CurrentLineNumber = _endLineNumber;
     textLayer.TryMoveCaretTo(_endCharIndex);
     textLayer.EndSelect();
 }
示例#2
0
 public bool CanAcceptThisChar(char c)
 {
     //TODO: review here, enable this feature or not
     //some char can't be a start char on blank line
     if (CurrentLine.IsBlankLine &&
         !InternalTextLayerController.CanCaretStopOnThisChar(c))
     {
         return(false);
     }
     return(true);
 }
示例#3
0
 public override void InvokeRedo(InternalTextLayerController textLayer)
 {
     textLayer.CurrentLineNumber = _startLineNumber;
     textLayer.TryMoveCaretTo(_startCharIndex);
     if (_singleInsertTextRun != null)
     {
         textLayer.AddTextRunToCurrentLine(_singleInsertTextRun);
     }
     else
     {
         textLayer.AddTextRunsToCurrentLine(_insertingTextRuns);
     }
 }
示例#4
0
        public void AddCharacter(char c)
        {
            if (CurrentLine.IsBlankLine)
            {
                //TODO: review here, enable this feature or not
                //some char can't be a start char on blank line

                if (!InternalTextLayerController.CanCaretStopOnThisChar(c))
                {
                    return;
                }
                //

                //1. new
                EditableRun t = new EditableTextRun(this.RootGfx,
                                                    c,
                                                    this.CurrentSpanStyle);
                var owner = this.FlowLayer.OwnerRenderElement;
                CurrentLine.AddLast(t);
                SetCurrentTextRun(t);
            }
            else
            {
                EditableRun cRun = CurrentTextRun;
                if (cRun != null)
                {
                    if (cRun.IsInsertable)
                    {
                        cRun.InsertAfter(CurrentTextRunCharIndex, c);
                    }
                    else
                    {
                        AddTextSpan(new EditableTextRun(this.RootGfx, c, this.CurrentSpanStyle));
                        return;
                    }
                }
                else
                {
                    throw new NotSupportedException();
                }
            }

            CurrentLine.TextLineReCalculateActualLineSize();
            CurrentLine.RefreshInlineArrange();
            SetCurrentCharStepRight();
        }
        public TextEditRenderBox(
            RootGraphic rootgfx,
            int width, int height,
            bool isMultiLine,
            bool isEditable = true)
            : base(rootgfx, width, height)
        {
            _isEditable = isEditable;

            if (isEditable)
            {
                GlobalCaretController.RegisterCaretBlink(rootgfx);
                //
                _myCaret = new CaretRenderElement(rootgfx, 2, 17);
                _myCaret.TransparentForAllEvents = true;
            }

            RenderBackground = RenderCaret = RenderSelectionRange = RenderMarkers = true;

            //
            MayHasViewport  = true;
            BackgroundColor = Color.White;// Color.Transparent;

            _currentSpanStyle           = new TextSpanStyle();
            _currentSpanStyle.FontColor = Color.Black;//set default
            _currentSpanStyle.ReqFont   = rootgfx.DefaultTextEditFontInfo;

            //
            _textLayer = new EditableTextFlowLayer(this);                               //presentation
            _internalTextLayerController = new InternalTextLayerController(_textLayer); //controller

            _isMultiLine = isMultiLine;
            if (isMultiLine)
            {
                _textLayer.SetUseDoubleCanvas(false, true);
            }
            else
            {
                _textLayer.SetUseDoubleCanvas(true, false);
            }

            NeedClipArea   = true;
            IsBlockElement = false;
            NumOfWhitespaceForSingleTab = 4;//default?, configurable?
        }
示例#6
0
 public override void InvokeUndo(InternalTextLayerController textLayer)
 {
     textLayer.CurrentLineNumber = _startLineNumber;
     textLayer.TryMoveCaretTo(_startCharIndex);
     textLayer.AddCharToCurrentLine(_c);
 }
示例#7
0
 public override void InvokeRedo(InternalTextLayerController textLayer)
 {
     textLayer.CurrentLineNumber = _startLineNumber;
     textLayer.TryMoveCaretTo(_startCharIndex);
     textLayer.DoDelete();
 }
示例#8
0
 public override void InvokeUndo(InternalTextLayerController textLayer)
 {
     textLayer.CurrentLineNumber = _startLineNumber;
     textLayer.DoEnd();
     textLayer.DoDelete();
 }
示例#9
0
 public DocumentCommandCollection(InternalTextLayerController textdomManager)
 {
     _textdom = textdomManager;
 }
示例#10
0
 public override void InvokeRedo(InternalTextLayerController textLayer)
 {
 }
示例#11
0
 public abstract void InvokeRedo(InternalTextLayerController textLayer);
示例#12
0
 public override void InvokeUndo(InternalTextLayerController textLayer)
 {
     textLayer.CancelSelect();
     textLayer.AddTextRunsToCurrentLine(_deletedTextRuns);
 }