File size: 2,363 Bytes
18a519f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System.Collections.Generic;

using UnityEditor;
using UnityEngine;

namespace Unity.PlasticSCM.Editor.UI
{
    internal static class DropDownTextField
    {
        internal static string DoDropDownTextField(
            string text,
            string controlName,
            List<string> dropDownOptions,
            GenericMenu.MenuFunction2 optionSelected,
            params GUILayoutOption[] options)
        {
            GUIContent textContent = new GUIContent(text);

            Rect textFieldRect = GUILayoutUtility.GetRect(
                textContent,
                EditorStyles.textField,
                options);

            return DoDropDownTextField(
                text,
                controlName,
                dropDownOptions,
                optionSelected,
                textFieldRect);
        }

        internal static string DoDropDownTextField(
            string text,
            string controlName,
            List<string> dropDownOptions,
            GenericMenu.MenuFunction2 optionSelected,
            Rect textFieldRect)
        {
            Texture popupIcon = Images.GetDropDownIcon();

            Rect popupButtonRect = new Rect(
                textFieldRect.x + textFieldRect.width - BUTTON_WIDTH,
                textFieldRect.y,
                BUTTON_WIDTH,
                textFieldRect.height);

            if (GUI.Button(popupButtonRect, string.Empty, EditorStyles.label))
            {
                GenericMenu menu = new GenericMenu();
                foreach (string option in dropDownOptions)
                {
                    menu.AddItem(
                        new GUIContent(UnityMenuItem.EscapedText(option)),
                        false,
                        optionSelected,
                        option);
                }

                menu.DropDown(textFieldRect);
            }

            Rect popupIconRect = new Rect(
                popupButtonRect.x,
                popupButtonRect.y + UnityConstants.DROPDOWN_ICON_Y_OFFSET,
                popupButtonRect.width,
                popupButtonRect.height);

            GUI.SetNextControlName(controlName);
            string result = GUI.TextField(textFieldRect, text);

            GUI.Label(popupIconRect, popupIcon);

            return result;
        }

        const int BUTTON_WIDTH = 16;
    }
}