Esempio n. 1
0
        private static Enum DoEnumPopup(Rect rect, Enum selected, GUIStyle style, params GUILayoutOption[] options)
        {
            var enumType = selected.GetType();
            var enumData = EnumDataUtility.GetCachedEnumData(enumType);
            var i        = Array.IndexOf(enumData.values, selected);

            using (new UnityEditor.Localization.Editor.LocalizationGroup(enumType))
            {
                i = DoPopup(rect, i, EditorGUIUtility.TrTempContent(enumData.displayNames, enumData.tooltip));
            }
            return((i < 0 || i >= enumData.flagValues.Length) ? selected : enumData.values[i]);
        }
Esempio n. 2
0
        public static Enum DoEnumMaskPopup(Rect rect, Enum options, GUIStyle style)
        {
            var    enumData    = EnumDataUtility.GetCachedEnumData(options.GetType());
            var    optionValue = EnumDataUtility.EnumFlagsToInt(enumData, options);
            string buttonText;

            string[] optionNames;
            int[]    optionMaskValues;
            int[]    selectedOptions;
            MaskFieldGUI.GetMenuOptions(optionValue, enumData.displayNames, enumData.flagValues, out buttonText, out optionNames, out optionMaskValues, out selectedOptions);

            var id = EditorGUIUtility.GetControlID("AdvancedDropdown".GetHashCode(), FocusType.Keyboard, rect);

            if (EditorGUI.DropdownButton(id, rect, GUIContent.Temp(buttonText), EditorStyles.popup))
            {
                s_CurrentControl = id;
                ResetAndCreateWindow();
                var dataSource = new MultiselectDataSource(options);
                InitMultiselectPopupWindow(rect, dataSource);
                s_Instance.selectionChanged += dataSource.UpdateSelectedId;
                s_Instance.selectionChanged += i =>
                {
                    m_ShouldReturnValue = true;
                };
                s_Instance.windowClosed += w =>
                {
                    m_WindowClosed = true;
                };
            }

            if (m_ShouldReturnValue && s_CurrentControl == id)
            {
                m_ShouldReturnValue = false;
                return(s_DataSource.enumFlags);
            }
            if (m_WindowClosed && s_CurrentControl == id)
            {
                s_CurrentControl = 0;
                m_WindowClosed   = false;
                var result = s_DataSource.enumFlags;
                s_DataSource = null;
                return(result);
            }
            return(options);
        }
Esempio n. 3
0
        static Enum EnumMaskFieldInternal(Rect position, Enum enumValue, GUIStyle style)
        {
            Type enumType = enumValue.GetType();

            if (!enumType.IsEnum)
            {
                throw new ArgumentException("Parameter enumValue must be of type System.Enum", "enumValue");
            }

            var names = Enum.GetNames(enumType).Select(ObjectNames.NicifyVariableName).ToArray();
            int flags = MaskFieldGUIDeprecated.DoMaskField(
                IndentedRect(position),
                GUIUtility.GetControlID(s_MaskField, FocusType.Keyboard, position),
                Convert.ToInt32(enumValue),
                names, style);

            return(EnumDataUtility.IntToEnumFlags(enumType, flags));
        }
Esempio n. 4
0
        static Enum DoEnumMaskField(Rect position, GUIContent label, Enum enumValue, GUIStyle style, out int changedFlags, out bool changedToValue)
        {
            var enumType = enumValue.GetType();

            if (!enumType.IsEnum)
            {
                throw new ArgumentException("Parameter enumValue must be of type System.Enum", "enumValue");
            }

            var id    = GUIUtility.GetControlID(s_MaskField, FocusType.Keyboard, position);
            var names = Enum.GetNames(enumType).Select(ObjectNames.NicifyVariableName).ToArray();
            int flags = MaskFieldGUIDeprecated.DoMaskField(
                PrefixLabel(position, id, label),
                id,
                Convert.ToInt32(enumValue),
                names, style, out changedFlags, out changedToValue);

            return(EnumDataUtility.IntToEnumFlags(enumType, flags));
        }