/// <summary> /// Moves the cursor to the next marker /// </summary> public static void NextMarker(ScintillaControl sci, Int32 marker, Int32 line) { Int32 next = 0; Int32 lineMask = sci.MarkerGet(line); if ((lineMask & GetMarkerMask(marker)) != 0) { next = sci.MarkerNext(line + 1, GetMarkerMask(marker)); if (next != -1) { sci.EnsureVisibleEnforcePolicy(next); sci.GotoLineIndent(next); } else { next = sci.MarkerNext(0, GetMarkerMask(marker)); if (next != -1) { sci.EnsureVisibleEnforcePolicy(next); sci.GotoLineIndent(next); } } } else { next = sci.MarkerNext(line, GetMarkerMask(marker)); if (next != -1) { sci.EnsureVisibleEnforcePolicy(next); sci.GotoLineIndent(next); } else { next = sci.MarkerNext(0, GetMarkerMask(marker)); if (next != -1) { sci.EnsureVisibleEnforcePolicy(next); sci.GotoLineIndent(next); } } } }
/// <summary> /// Move the document position /// </summary> private void MoveToPosition(ScintillaControl sci, Int32 position) { try { position = sci.MBSafePosition(position); // scintilla indexes are in 8bits Int32 line = sci.LineFromPosition(position); sci.EnsureVisibleEnforcePolicy(line); sci.GotoPos(position); sci.SetSel(position, sci.LineEndPosition(line)); sci.Focus(); } catch { String message = TextHelper.GetString("Info.InvalidItem"); ErrorManager.ShowInfo(message); this.RemoveInvalidItems(); this.RefreshProject(); } }
/// <summary> /// Moves the cursor to the previous marker /// </summary> public static void PreviousMarker(ScintillaControl sci, Int32 marker, Int32 line) { Int32 prev = 0; Int32 count = 0; Int32 lineMask = sci.MarkerGet(line); if ((lineMask & GetMarkerMask(marker)) != 0) { prev = sci.MarkerPrevious(line - 1, GetMarkerMask(marker)); if (prev != -1) { sci.EnsureVisibleEnforcePolicy(prev); sci.GotoLineIndent(prev); } else { count = sci.LineCount; prev = sci.MarkerPrevious(count, GetMarkerMask(marker)); if (prev != -1) { sci.EnsureVisibleEnforcePolicy(prev); sci.GotoLineIndent(prev); } } } else { prev = sci.MarkerPrevious(line, GetMarkerMask(marker)); if (prev != -1) { sci.EnsureVisibleEnforcePolicy(prev); sci.GotoLineIndent(prev); } else { count = sci.LineCount; prev = sci.MarkerPrevious(count, GetMarkerMask(marker)); if (prev != -1) { sci.EnsureVisibleEnforcePolicy(prev); sci.GotoLineIndent(prev); } } } }
/// <summary> /// Selects a search match /// </summary> public static void SelectMatch(ScintillaControl sci, SearchMatch match) { Int32 start = sci.MBSafePosition(match.Index); // wchar to byte position Int32 end = start + sci.MBSafeTextLength(match.Value); // wchar to byte text length Int32 line = sci.LineFromPosition(start); sci.EnsureVisibleEnforcePolicy(line); sci.SetSel(start, end); }
/// <summary> /// Goes to the match and ensures that correct fold is opened /// </summary> private void SetSelAndFocus(ScintillaControl sci, Int32 line, Int32 startPosition, Int32 endPosition) { sci.SetSel(startPosition, endPosition); sci.EnsureVisibleEnforcePolicy(line); }