private void BlameAuto(StatusListEntry entry) { if (entry.MetaChange.IsFlagSet(MetaChangeEnum.Object)) { gitManager.ShowBlameWizard(entry.LocalPath, externalManager); } else { gitManager.ShowBlameWizard(GitManager.MetaPathFromAsset(entry.LocalPath), externalManager); } }
private void DoDiffScroll(Event current) { float elementHeight = diffElementRenderer.ElementHeight; if (IsGrouping()) { float totalTypesCount = diffWindowStatusList.Select(i => GetMergedStatus(i.State)).Distinct().Count(); float elementsTotalHeight = (diffWindowStatusList.Count(IsVisible) + totalTypesCount) * elementHeight; diffScrollContentRect = new Rect(0, 0, Mathf.Max(DiffRect.width - 16, 420), elementsTotalHeight); } else { diffScrollContentRect = new Rect(0, 0, Mathf.Max(DiffRect.width - 16, 420), diffWindowStatusList.Count(IsVisible) * elementHeight); } diffScroll = GUI.BeginScrollView(DiffRect, diffScroll, diffScrollContentRect); int index = 0; FileStatus?lastFileStatus = null; float infoX = 0; for (int i = 0; i < diffWindowStatusList.Count; i++) { var info = diffWindowStatusList[i]; bool isVisible = IsVisible(info); Rect elementRect; if (IsGrouping()) { FileStatus mergedStatus = GetMergedStatus(info.State); if (!lastFileStatus.HasValue || lastFileStatus != mergedStatus) { elementRect = new Rect(0, infoX, diffScrollContentRect.width + 16, elementHeight); lastFileStatus = mergedStatus; FileStatus newState = lastFileStatus.Value; if (current.type == EventType.Repaint) { styles.diffScrollHeader.Draw(elementRect, GitGUI.GetTempContent(mergedStatus.ToString()), false, false, false, false); GUIStyle.none.Draw(new Rect(elementRect.x + 12, elementRect.y + 14, elementRect.width - 12, elementRect.height - 24), GitGUI.GetTempContent(gitOverlay.GetDiffTypeIcon(info.State, false).image), false, false, false, false); } if (elementRect.Contains(current.mousePosition)) { if (current.type == EventType.ContextClick) { GenericMenu selectAllMenu = new GenericMenu(); elementContextFactory.Build(newState, selectAllMenu, this); selectAllMenu.ShowAsContext(); current.Use(); } else if (current.type == EventType.MouseDown && current.button == 0) { settings.MinimizedFileStatus = settings.MinimizedFileStatus.SetFlags(mergedStatus, !isVisible); if (!isVisible) { ClearSelected(e => e.State == newState); } Repaint(); current.Use(); } } infoX += elementRect.height; } } if (!isVisible) { continue; } elementRect = new Rect(0, infoX, diffScrollContentRect.width + 16, elementHeight); //check visibility if (elementRect.y <= DiffRect.height + diffScroll.y && elementRect.y + elementRect.height >= diffScroll.y) { bool isUpdating = (info.MetaChange.IsFlagSet(MetaChangeEnum.Object) && gitManager.IsFileUpdating(info.LocalPath)) || (info.MetaChange.IsFlagSet(MetaChangeEnum.Meta) && gitManager.IsFileUpdating(GitManager.MetaPathFromAsset(info.LocalPath))) || updatingPaths.Contains(info.LocalPath) || pathsToBeUpdated.Contains(info.LocalPath); bool isStaging = (info.MetaChange.IsFlagSet(MetaChangeEnum.Object) && gitManager.IsFileStaging(info.LocalPath)) || (info.MetaChange.IsFlagSet(MetaChangeEnum.Meta) && gitManager.IsFileStaging(GitManager.MetaPathFromAsset(info.LocalPath))); bool isDirty = (info.MetaChange.IsFlagSet(MetaChangeEnum.Object) && gitManager.IsFileDirty(info.LocalPath)) || (info.MetaChange.IsFlagSet(MetaChangeEnum.Meta) && gitManager.IsFileDirty(GitManager.MetaPathFromAsset(info.LocalPath))); bool selected = IsSelected(info); bool enabled = !isUpdating && !isDirty && !isStaging; diffElementRenderer.DoFileDiff(elementRect, info, enabled, selected, this); DoFileDiffSelection(elementRect, info, index, enabled, selected); } infoX += elementRect.height; index++; } GUI.EndScrollView(); if (DiffRect.Contains(current.mousePosition)) { if (current.type == EventType.ContextClick) { if (gitSettings.UseSimpleContextMenus) { GenericMenuWrapper genericMenuWrapper = new GenericMenuWrapper(new GenericMenu()); elementContextFactory.Build(genericMenuWrapper, this); genericMenuWrapper.GenericMenu.ShowAsContext(); } else { ContextGenericMenuPopup popup = injectionHelper.CreateInstance <ContextGenericMenuPopup>(); elementContextFactory.Build(popup, this); PopupWindow.Show(new Rect(Event.current.mousePosition, Vector2.zero), popup); } current.Use(); } else if (current.type == EventType.KeyUp && current.keyCode == KeyCode.Delete) { foreach (var id in selections) { var entry = diffWindowStatusList.FirstOrDefault(e => SelectionPredicate(id, e)); if (!string.IsNullOrEmpty(entry.LocalPath)) { DeleteAsset(entry.LocalPath); current.Use(); } } } if (current.type == EventType.MouseDrag && current.button == 2) { diffScroll.y -= current.delta.y; Repaint(); } } }
private void SeeDifferencePrevMeta(StatusListEntry entry) { gitManager.ShowDiffPrev(GitManager.MetaPathFromAsset(entry.LocalPath), externalManager); }
private void BlameMeta(StatusListEntry entry) { gitManager.ShowBlameWizard(GitManager.MetaPathFromAsset(entry.LocalPath), externalManager); }
private void RevertSelectedMeta(GitDiffWindow window) { string[] metaLocalPaths = window.GetStatusList().Where(window.IsSelected).Select(e => GitManager.MetaPathFromAsset(e.LocalPath)).ToArray(); Revert(metaLocalPaths); }
private static void SeeDifferenceMetaPrev() { gitManager.ShowDiffPrev(gitManager.ToLocalPath(GitManager.MetaPathFromAsset(AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]))), externalManager); }