/// <summary> /// Cuts the selected text and puts it in the clipboard. /// </summary> public void Cut() { if (_textArea.SelectionManager.HasSomethingSelected) { if (CopyTextToClipboard(_textArea.SelectionManager.SelectedText)) { if (_textArea.SelectionManager.SelectionIsReadonly) { return; } // Remove text _textArea.BeginUpdate(); _textArea.Caret.Position = _textArea.SelectionManager.Selections[0].StartPosition; _textArea.SelectionManager.RemoveSelectedText(); _textArea.EndUpdate(); } } else if (_textArea.Document.TextEditorProperties.CutCopyWholeLine) { // No text was selected, select and cut the entire line int curLineNr = _textArea.Document.GetLineNumberForOffset(_textArea.Caret.Offset); LineSegment lineWhereCaretIs = _textArea.Document.GetLineSegment(curLineNr); string caretLineText = _textArea.Document.GetText(lineWhereCaretIs.Offset, lineWhereCaretIs.TotalLength); _textArea.SelectionManager.SetSelection(_textArea.Document.OffsetToPosition(lineWhereCaretIs.Offset), _textArea.Document.OffsetToPosition(lineWhereCaretIs.Offset + lineWhereCaretIs.TotalLength)); if (CopyTextToClipboard(caretLineText, true)) { if (_textArea.SelectionManager.SelectionIsReadonly) { return; } // remove line _textArea.BeginUpdate(); _textArea.Caret.Position = _textArea.Document.OffsetToPosition(lineWhereCaretIs.Offset); _textArea.SelectionManager.RemoveSelectedText(); _textArea.Document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.PositionToEnd, new TextLocation(0, curLineNr))); _textArea.EndUpdate(); } } }
protected void OnDragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(string))) { _textArea.BeginUpdate(); _textArea.Document.UndoStack.StartUndoGroup(); try { int offset = _textArea.Caret.Offset; if (_textArea.IsReadOnly(offset)) { // prevent dragging text into readonly section return; } if (e.Data.GetDataPresent(typeof(DefaultSelection))) { ISelection sel = (ISelection)e.Data.GetData(typeof(DefaultSelection)); if (sel.ContainsPosition(_textArea.Caret.Position)) { return; } if (GetDragDropEffect(e) == DragDropEffects.Move) { if (SelectionManager.SelectionIsReadOnly(_textArea.Document, sel)) { // prevent dragging text out of readonly section return; } int len = sel.Length; _textArea.Document.Remove(sel.Offset, len); if (sel.Offset < offset) { offset -= len; } } } _textArea.SelectionManager.ClearSelection(); InsertString(offset, (string)e.Data.GetData(typeof(string))); _textArea.Document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea)); } finally { _textArea.Document.UndoStack.EndUndoGroup(); _textArea.EndUpdate(); } } }