Ejemplo n.º 1
0
        List <ProjectHistory.SourceInfo> currentSourceInfo;        //List will be copied

        void DrawInfo(Rect area, int index)
        {
            ProjectHistory.RecordInfo info = Utility.CurrentHistory[index];

            GUILayout.BeginArea(area);

            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();

            if (removeCurrentDoubleCheck)
            {
                if (GUILayout.Button("Sure?"))
                {
                    Utility.CurrentHistory.RemoveAt(index);
                    Utility.WriteCurrent();

                    DebugHelper.Log("Last selected information removed.");

                    CloseCurrent();
                    return;
                }

                removeCurrentDoubleCheck &= !GUILayout.Button("Cancel");
            }
            else
            {
                removeCurrentDoubleCheck |= GUILayout.Button("Remove Current Information");
            }

            GUILayout.FlexibleSpace();

            //Navigation arrows
            MinMaxInt range = new MinMaxInt(0, Utility.CurrentHistory.Count - 1);

            if (GUILayout.Button("<"))
            {
                currentIndex      = range.Clamp(currentIndex - 1);
                currentSourceInfo = null;
                return;
            }

            if (GUILayout.Button(">"))
            {
                currentIndex      = range.Clamp(currentIndex + 1);
                currentSourceInfo = null;
                return;
            }

            GUILayout.FlexibleSpace();

            if (GUILayout.Button("Close"))
            {
                CloseCurrent();
                return;
            }

            EditorGUILayout.EndHorizontal();

            GUILayout.Label($"Time : {info.RecordTime.ToLocalTime():MM/dd/yyyy H:mm}");
            GUILayout.Label($"Source File Count : {info.sourceFileCount}");

            EditorGUILayout.Space();

            GUILayout.Label($"Total Line Count : {info.codeLineCount}");
            GUILayout.Label($"Line Count Without CodeHelpers : {info.codeWithoutCodeHelperCount}");

            EditorGUILayout.Space();

            GUILayout.Label($"Class Count (Not Accurate) : {info.classCount}");
            GUILayout.Label($"Struct Count (Not Accurate) : {info.structCount}");

            EditorGUILayout.Space();
            EditorGUILayout.Space();

            //Source files

            currentSourceInfo ??= new List <ProjectHistory.SourceInfo>(info.sourceInfos);

            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Sort By Name") && currentSourceInfo != null)
            {
                currentSourceInfo  = currentSourceInfo.OrderBy(thisInfo => thisInfo.name).ToList();
                currentSourceIndex = -1;
            }

            if (GUILayout.Button("Sort By Line Count") && currentSourceInfo != null)
            {
                currentSourceInfo  = currentSourceInfo.OrderByDescending(thisInfo => thisInfo.lineCount).ToList();
                currentSourceIndex = -1;
            }

            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            //Source info

            currentScrollPosition = EditorGUILayout.BeginScrollView(currentScrollPosition);

            for (int i = 0; i < currentSourceInfo.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();

                GUILayout.Label($"{currentSourceInfo[i].name} : {currentSourceInfo[i].lineCount}");
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Detail"))
                {
                    currentSourceIndex = i;
                }

                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.EndScrollView();
            GUILayout.EndArea();

            //Single source file info

            if (currentSourceIndex != -1)
            {
                var source = currentSourceInfo[currentSourceIndex];

                GUILayout.BeginArea(new Rect(area.width + 100f, area.y, position.width - area.width, area.height));
                EditorGUILayout.BeginHorizontal();

                if (GUILayout.Button("Close"))
                {
                    currentSourceIndex = -1;
                    return;
                }

                GUILayout.FlexibleSpace();
                EditorGUILayout.EndHorizontal();

                GUILayout.Label(source.name);
                EditorGUILayout.Space();

                GUILayout.Label($"Source Line Count : {source.lineCount}");
                GUILayout.Label($"Source Is CodeHelpers : {source.isCodeHelper}");

                EditorGUILayout.Space();

                GUILayout.Label($"Class Contained (Not Accurate) : {source.classContains}");
                GUILayout.Label($"Struct Contained (Not Accurate) : {source.structContains}");

                GUILayout.EndArea();
            }
        }
Ejemplo n.º 2
0
        void DrawGraph(Rect target)
        {
            Color32 backgroundColor = new Color32(45, 45, 45);
            Color32 textColor       = new Color32(185, 185, 185);
            Color32 highlightColor  = new Color32(250, 20, 20);

            EditorGUI.DrawRect(new Rect(target.position, Vector2.Scale(target.size, new Vector2(1f, -1f))), backgroundColor);

            Vector2 sideSpacing = new Vector2(100f, -30f);
            int     recordCount = Utility.CurrentHistory.Count;

            if (recordCount == 0)
            {
                return;
            }

            MinMaxInt yRange = new MinMaxInt(Utility.CurrentHistory.Min(info => info.codeLineCount), Utility.CurrentHistory.Max(info => info.codeLineCount));

            float xSpacing = recordCount == 1 ? 0f : (target.width - sideSpacing.x * 2f) / (recordCount - 1);
            float ySize    = target.height + sideSpacing.y * 2f;

            Handles.color = textColor;
            GUI.color     = textColor;

            int infoCount = Mathf.Clamp(graphInfoDisplayCount, 1, recordCount - 1);

            for (int i = 0; i < recordCount; i++)
            {
                ProjectHistory.RecordInfo info = Utility.CurrentHistory[i];
                bool showingInfo = Math.Abs(GetPercent(i) * infoCount % 1f) < Math.Abs(GetPercent(i + 1) * infoCount % 1f) &&
                                   Math.Abs(GetPercent(i) * infoCount % 1f) < Math.Abs(GetPercent(i - 1) * infoCount % 1f);

                float GetPercent(int index) => (float)index / (recordCount - 1);

                if (showingInfo)
                {
                    GUI.Label(new Rect(target.position + sideSpacing + Vector2.right * xSpacing * i, new Vector2(100f, 100f)), info.RecordTime.ToLocalTime().ToString("MM/dd/yyyy\nH:mm"));

                    GUILayout.BeginArea(new Rect(target.position + sideSpacing + Vector2.up * 30f + Vector2.right * xSpacing * i, new Vector2(40f, 20f)));
                    GUI.color = Color.white;

                    if (GUILayout.Button("Detail"))
                    {
                        currentIndex      = i;
                        currentSourceInfo = null;
                    }

                    GUI.color = textColor;
                    GUILayout.EndArea();
                }

                Vector2 position1 = target.position + sideSpacing + new Vector2(xSpacing * i, -yRange.InverseLerp(info.codeLineCount) * ySize);

                //Line
                if (i != recordCount - 1)
                {
                    Vector2 position2 = target.position + sideSpacing + new Vector2(xSpacing * (i + 1), -yRange.InverseLerp(Utility.CurrentHistory[i + 1].codeLineCount) * ySize);
                    Handles.DrawLine(position1, position2);
                }

                //Point
                if (showingInfo)
                {
                    Handles.color = highlightColor;
                    Handles.DrawWireDisc(position1, Vector3.back, 2f);
                    Handles.color = textColor;
                }
                else
                {
                    Handles.DrawWireDisc(position1, Vector3.back, 2f);
                }
            }

            int yLabelCount = Mathf.Clamp(yRange.Range, 2, 10);
            var style       = new GUIStyle(GUI.skin.label)
            {
                alignment = TextAnchor.MiddleCenter, normal = { textColor = Color.white }
            };

            for (int i = 0; i < yLabelCount; i++)
            {
                float   percent  = i / (yLabelCount - 1f);
                Vector2 position = target.position + Vector2.Scale(sideSpacing, new Vector2(0.3f, 2f)) - ySize * percent * Vector2.up;

                GUI.Label(new Rect(position, new Vector2(50f, 50f)), Mathf.RoundToInt(yRange.Lerp(percent)).ToString(), style);
            }
        }