コード例 #1
0
 private void BlameAuto(StatusListEntry entry)
 {
     if (entry.MetaChange.IsFlagSet(MetaChangeEnum.Object))
     {
         gitManager.ShowBlameWizard(entry.LocalPath, externalManager);
     }
     else
     {
         gitManager.ShowBlameWizard(GitManager.MetaPathFromAsset(entry.LocalPath), externalManager);
     }
 }
コード例 #2
0
        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();
                }
            }
        }
コード例 #3
0
 private void SeeDifferencePrevMeta(StatusListEntry entry)
 {
     gitManager.ShowDiffPrev(GitManager.MetaPathFromAsset(entry.LocalPath), externalManager);
 }
コード例 #4
0
 private void BlameMeta(StatusListEntry entry)
 {
     gitManager.ShowBlameWizard(GitManager.MetaPathFromAsset(entry.LocalPath), externalManager);
 }
コード例 #5
0
 private void RevertSelectedMeta(GitDiffWindow window)
 {
     string[] metaLocalPaths = window.GetStatusList().Where(window.IsSelected).Select(e => GitManager.MetaPathFromAsset(e.LocalPath)).ToArray();
     Revert(metaLocalPaths);
 }
コード例 #6
0
 private static void SeeDifferenceMetaPrev()
 {
     gitManager.ShowDiffPrev(gitManager.ToLocalPath(GitManager.MetaPathFromAsset(AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]))), externalManager);
 }