public static void OnInsertedText(FGTextBuffer buffer, FGTextBuffer.CaretPos fromPos, FGTextBuffer.CaretPos toPos) { var guid = buffer.guid; var from = new TextPosition(fromPos.line, fromPos.characterIndex); var to = new TextPosition(toPos.line, toPos.characterIndex); var recentLocations = Instance().recentLocations; for (var i = recentLocations.Count; i-- > 0;) { var entry = recentLocations[i]; if (entry.assetGuid != guid) { continue; } var location = new TextPosition(entry.line, entry.index); if (from > location || insertingTextAfterCaret && from == location) { continue; } if (from.line == location.line) { entry.index += to.index - from.index; } entry.line += to.line - from.line; } }
public static void AddRecentLocation(string assetGuid, FGTextBuffer.CaretPos caretPosition, bool insert) { if (_instance == null) { return; } var newLocation = new RecentLocation { assetGuid = assetGuid, line = caretPosition.line, index = caretPosition.characterIndex }; if (insert && _instance.recentLocationsOffset != 0) { var current = _instance.recentLocations.Count - _instance.recentLocationsOffset; _instance.recentLocations.Insert(current, newLocation); } else { if (_instance.recentLocationsOffset != 0) { var current = _instance.recentLocations.Count - _instance.recentLocationsOffset; _instance.recentLocations.RemoveRange(current, _instance.recentLocationsOffset); } _instance.recentLocations.Add(newLocation); _instance.recentLocationsOffset = 0; } if (_instance.recentLocations.Count > 100 + _instance.recentLocationsOffset) { _instance.recentLocations.RemoveRange(0, _instance.recentLocations.Count - 100 - _instance.recentLocationsOffset); } }
public static void OnRemovedText(FGTextBuffer buffer, FGTextBuffer.CaretPos fromPos, FGTextBuffer.CaretPos toPos) { var guid = buffer.guid; var from = new TextPosition(fromPos.line, fromPos.characterIndex); var to = new TextPosition(toPos.line, toPos.characterIndex); var recentLocations = Instance().recentLocations; for (var i = recentLocations.Count; i-- > 0;) { var entry = recentLocations[i]; if (entry.assetGuid != guid) { continue; } var location = new TextPosition(entry.line, entry.index); if (from >= location) { continue; } if (to >= location) { entry.line = from.line; entry.index = from.index; continue; } if (to.line == location.line) { entry.index -= to.index - from.index; } entry.line -= to.line - from.line; } if (recentLocations.Count > 1) { var prevLocation = recentLocations[0]; for (var i = 1; i < recentLocations.Count; ++i) { var entry = recentLocations[i]; if (entry.assetGuid != prevLocation.assetGuid || entry.line != prevLocation.line || entry.index != prevLocation.index) { prevLocation = entry; } else { if (_instance.recentLocationsOffset >= recentLocations.Count - i) { --_instance.recentLocationsOffset; } recentLocations.RemoveAt(i); --i; } } } }
private void OnBufferModified(string guid, FGTextBuffer.CaretPos from, FGTextBuffer.CaretPos to) { for (var i = 0; i < results.Count; i++) { var result = results[i]; if (result.description != null && guid == result.assetGuid) { Unsubscribe(); Close(); break; } } }
private void ReplaceAll() { Unsubscribe(); FGTextBuffer buffer = null; string guid = null; bool canEditAll = true; var canEditBuffers = new HashSet<FGTextBuffer>(); for (var i = flatResults.Count; i --> 0; ) { var result = flatResults[i]; if (!result.selected) continue; if (result.assetGuid != guid) { guid = result.assetGuid; buffer = FGTextBufferManager.GetBuffer(guid); if (buffer.IsLoading) buffer.LoadImmediately(); if (FGCodeWindow.CodeWindows.All(x => x.TargetAssetGuid != guid)) { var wnd = FGCodeWindow.OpenAssetInTab(guid); if (wnd) wnd.OnFirstUpdate(); } if (!buffer.TryEdit()) canEditAll = false; else canEditBuffers.Add(buffer); } } if (!canEditAll) { if (!EditorUtility.DisplayDialog("Replace", "Some assets are locked and cannot be edited!", "Continue Anyway", "Cancel")) { Close(); return; } } buffer = null; guid = null; var updatedLines = new HashSet<int>(); for (var i = flatResults.Count; i --> 0; ) { var result = flatResults[i]; if (!result.selected) continue; if (result.assetGuid != guid) { if (buffer != null) { foreach (var line in updatedLines) buffer.UpdateHighlighting(line, line); buffer.EndEdit(); FGTextBufferManager.AddBufferToGlobalUndo(buffer); updatedLines.Clear(); } guid = result.assetGuid; buffer = FGTextBufferManager.GetBuffer(guid); if (buffer != null) { if (canEditBuffers.Contains(buffer)) buffer.BeginEdit("*Replace All"); else buffer = null; } } if (buffer != null) { var from = new FGTextBuffer.CaretPos { line = result.line, characterIndex = result.characterIndex }; var to = new FGTextBuffer.CaretPos { line = result.line, characterIndex = result.characterIndex + result.length }; var insertAt = buffer.DeleteText(from, to); if (replaceText != "") buffer.InsertText(insertAt, replaceText); updatedLines.Add(result.line); } } if (buffer != null) { foreach (var line in updatedLines) buffer.UpdateHighlighting(line, line); buffer.EndEdit(); FGTextBufferManager.AddBufferToGlobalUndo(buffer); } FGTextBufferManager.RecordGlobalUndo(); Close(); }
private void ReplaceAll() { Unsubscribe(); FGTextBuffer buffer = null; string guid = null; bool canEditAll = true; var canEditBuffers = new HashSet <FGTextBuffer>(); for (var i = flatResults.Count; i-- > 0;) { var result = flatResults[i]; if (!result.selected) { continue; } if (result.assetGuid != guid) { guid = result.assetGuid; buffer = FGTextBufferManager.GetBuffer(guid); if (buffer.IsLoading) { buffer.LoadImmediately(); } if (FGCodeWindow.CodeWindows.All(x => x.TargetAssetGuid != guid)) { var wnd = FGCodeWindow.OpenAssetInTab(guid); if (wnd) { wnd.OnFirstUpdate(); } } if (!buffer.TryEdit()) { canEditAll = false; } else { canEditBuffers.Add(buffer); } } } if (!canEditAll) { if (!EditorUtility.DisplayDialog("Replace", "Some assets are locked and cannot be edited!", "Continue Anyway", "Cancel")) { Close(); } } buffer = null; guid = null; var updatedLines = new HashSet <int>(); for (var i = flatResults.Count; i-- > 0;) { var result = flatResults[i]; if (!result.selected) { continue; } if (result.assetGuid != guid) { if (buffer != null) { foreach (var line in updatedLines) { buffer.UpdateHighlighting(line, line); } buffer.EndEdit(); FGTextBufferManager.AddBufferToGlobalUndo(buffer); updatedLines.Clear(); } guid = result.assetGuid; buffer = FGTextBufferManager.GetBuffer(guid); if (buffer != null) { if (canEditBuffers.Contains(buffer)) { buffer.BeginEdit("*Replace All"); } else { buffer = null; } } } if (buffer != null) { var from = new FGTextBuffer.CaretPos { line = result.line, characterIndex = result.characterIndex }; var to = new FGTextBuffer.CaretPos { line = result.line, characterIndex = result.characterIndex + result.length }; var insertAt = buffer.DeleteText(from, to); if (replaceText != "") { buffer.InsertText(insertAt, replaceText); } updatedLines.Add(result.line); } } if (buffer != null) { foreach (var line in updatedLines) { buffer.UpdateHighlighting(line, line); } buffer.EndEdit(); FGTextBufferManager.AddBufferToGlobalUndo(buffer); } FGTextBufferManager.RecordGlobalUndo(); Close(); }