private int SyncedOperation(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { ITextCaret caret = m_textView.Caret; var tempTrackList = m_trackList; m_trackList = new List <ITrackingPoint>(); SnapshotPoint snapPoint = tempTrackList[0].GetPoint(m_textView.TextSnapshot); int result = 0; m_dte.UndoContext.Open("Multi-point edit"); for (int i = 0; i < tempTrackList.Count; i++) { snapPoint = tempTrackList[i].GetPoint(m_textView.TextSnapshot); caret.MoveTo(snapPoint); Debug.Print("Caret #" + i + " pos : " + caret.Position); result = NextTarget.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); AddSyncPoint(m_textView.Caret.Position); } m_dte.UndoContext.Close(); RedrawScreen(); return(result); }
public static void Restore(TextSelectionState state, ITextSelection selection, ITextCaret caret) { caret.MoveTo( state.m_caretPosition.BufferPosition.TranslateTo(selection.TextView.TextSnapshot, PointTrackingMode.Positive), state.m_caretPosition.Affinity); selection.Mode = state.m_mode; SnapshotSpan newSpan; if (state.m_mode == TextSelectionMode.Box) { newSpan = new SnapshotSpan( state.m_trackedSpans[0].GetStartPoint(selection.TextView.TextBuffer.CurrentSnapshot), state.m_trackedSpans[state.m_trackedSpans.Count - 1].GetEndPoint(selection.TextView.TextBuffer.CurrentSnapshot)); } else { newSpan = state.m_trackedSpans[0].GetSpan(selection.TextView.TextBuffer.CurrentSnapshot); } selection.Select(newSpan, state.m_isReversed); }
internal int SyncedOperation(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { int result = 0; if (_trackPointList.Count > 0) { // Se tem algo selecionado if (Selecting) { switch (nCmdID) { case ((uint)VSConstants.VSStd2KCmdID.TYPECHAR): case ((uint)VSConstants.VSStd2KCmdID.BACKSPACE): case ((uint)VSConstants.VSStd2KCmdID.TAB): case ((uint)VSConstants.VSStd97CmdID.Delete): case ((uint)VSConstants.VSStd2KCmdID.RETURN): case ((uint)VSConstants.VSStd2KCmdID.BACKTAB): case ((uint)VSConstants.VSStd97CmdID.Paste): /* Ctrl+V */ DeleteSelection(); break; default: break; } } //char typedChar = char.MinValue; //typedChar = (char)(ushort)Marshal.GetObjectForNativeVariant(pvaIn); _view.Selection.Clear(); ITextCaret caret = _view.Caret; List <ITrackingPoint> tempTrackList = _trackPointList; _trackPointList = new List <ITrackingPoint>(); SnapshotPoint snapshotPoint = tempTrackList[0].GetPoint(_view.TextSnapshot); //m_dte.UndoContext.Open("Multi-point edit"); for (int i = 0; i < tempTrackList.Count; i++) { snapshotPoint = tempTrackList[i].GetPoint(_view.TextSnapshot); caret.MoveTo(snapshotPoint); // Propaga o evento para os demais locais result = _nextTarget.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); AddTrackingPoint(_view.Caret.Position); } //m_dte.UndoContext.Close(); RedrawScreen(); } return(result); }
private int SyncedOperation(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) { int result = 0; ITextCaret caret = m_textView.Caret; if (!addedCurrentCaret) { AddSyncPoint(caret.Position); addedCurrentCaret = true; } var tempTrackList = m_trackList; m_trackList = new List <ITrackingPoint>(); m_dte.UndoContext.Open("Select Next edit"); bool deleteSelection = !m_textView.Selection.IsEmpty; string currentSelection = m_textView.Selection.SelectedSpans[m_textView.Selection.SelectedSpans.Count - 1].GetText(); for (int i = 0; i < tempTrackList.Count; i++) { var trackingMode = tempTrackList[i].TrackingMode; var snapPoint = tempTrackList[i].GetPoint(m_textView.TextSnapshot); caret.MoveTo(snapPoint); using (var edit = m_textView.TextSnapshot.TextBuffer.CreateEdit()) { bool applyEdit = false; if (deleteSelection) { if (trackingMode == PointTrackingMode.Negative) { edit.Delete(caret.Position.BufferPosition.Position, currentSelection.Length); } else { edit.Delete(caret.Position.BufferPosition.Position - currentSelection.Length, currentSelection.Length); } applyEdit = true; } switch (nCmdID) { case (uint)VSConstants.VSStd2KCmdID.TYPECHAR: var typedChar = (char)(ushort)Marshal.GetObjectForNativeVariant(pvaIn); edit.Insert(tempTrackList[i].GetPosition(m_textView.TextSnapshot), typedChar.ToString()); applyEdit = true; break; case ((uint)VSConstants.VSStd97CmdID.Delete): if (i < tempTrackList.Count - 1 && deleteSelection) { edit.Insert(tempTrackList[i].GetPosition(m_textView.TextSnapshot), ""); } break; case ((uint)VSConstants.VSStd97CmdID.Paste): if (i < tempTrackList.Count - 1) { var pasteString = Clipboard.GetText(); edit.Insert(tempTrackList[i].GetPosition(m_textView.TextSnapshot), pasteString); applyEdit = true; } break; } if (applyEdit) { edit.Apply(); } } switch (nCmdID) { case ((uint)VSConstants.VSStd2KCmdID.TYPECHAR): break; case ((uint)VSConstants.VSStd97CmdID.Delete): if (!deleteSelection) { result = NextTarget.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); } break; case ((uint)VSConstants.VSStd97CmdID.Paste): if (i == tempTrackList.Count - 1) { result = NextTarget.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); } break; default: result = NextTarget.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut); break; } AddSyncPoint(m_textView.Caret.Position); } m_dte.UndoContext.Close(); RedrawScreen(); return(result); }