Exemplo n.º 1
0
        GUIContent LabelForInclusion(ValueStore.RootNode root, OptionCapabilities capabilities)
        {
            var inclusion  = root.Inclusion;
            var capFeature = (capabilities & OptionCapabilities.HasAssociatedFeature) != 0;
            var capOption  = (capabilities & OptionCapabilities.CanIncludeOption) != 0;

            if (capFeature && capOption)
            {
                if (inclusion == OptionInclusion.Remove)
                {
                    return(inclusionO);
                }
                else if (inclusion == OptionInclusion.Feature)
                {
                    return(inclusionI);
                }
                else if (inclusion == OptionInclusion.FeatureAndOption)
                {
                    return(inclusionII);
                }
                else
                {
                    // Fix invalid value
                    root.Inclusion = OptionInclusion.Remove;
                    return(inclusionO);
                }
            }
            else if (capFeature)
            {
                if (inclusion == OptionInclusion.Remove)
                {
                    return(inclusionO);
                }
                else if (inclusion == OptionInclusion.Feature)
                {
                    return(inclusionI);
                }
                else
                {
                    // Fix invalid value
                    root.Inclusion = OptionInclusion.Remove;
                    return(inclusionO);
                }
            }
            else if (capOption)
            {
                if (inclusion == OptionInclusion.Remove)
                {
                    return(inclusionO);
                }
                else if (inclusion == OptionInclusion.Option)
                {
                    return(inclusionII);
                }
                else
                {
                    // Fix invalid value
                    root.Inclusion = OptionInclusion.Remove;
                    return(inclusionO);
                }
            }

            return(GUIContent.none);
        }
Exemplo n.º 2
0
        void DoInclusionMenu(ValueStore.RootNode root, OptionCapabilities capabilities)
        {
            if (GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition) &&
                Event.current.type == EventType.MouseDown)
            {
                Event.current.Use();

                var value = root.Inclusion;
                var menu  = new GenericMenu();

                var capFeature = (capabilities & OptionCapabilities.HasAssociatedFeature) != 0;
                var capOption  = (capabilities & OptionCapabilities.CanIncludeOption) != 0;

                if (capFeature)
                {
                    menu.AddItem(new GUIContent("Include Feature"), (value & OptionInclusion.Feature) != 0, () => {
                        root.Inclusion ^= OptionInclusion.Feature;
                        if (capOption && (root.Inclusion & OptionInclusion.Feature) == 0)
                        {
                            // Unsetting feature also unsets option
                            root.Inclusion &= ~OptionInclusion.Option;
                        }
                    });
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Include Feature"));
                }

                if (capOption)
                {
                    menu.AddItem(new GUIContent("Include Option"), (value & OptionInclusion.Option) != 0, () => {
                        root.Inclusion ^= OptionInclusion.Option;
                        if (capFeature && (root.Inclusion & OptionInclusion.Option) != 0)
                        {
                            // Setting option also sets feature
                            root.Inclusion |= OptionInclusion.Feature;
                        }
                    });
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Include Option"));
                }

                menu.AddSeparator("");

                if (capOption && capFeature)
                {
                    menu.AddItem(new GUIContent("Include Both"), (value & OptionInclusion.FeatureAndOption) == OptionInclusion.FeatureAndOption, () => {
                        root.Inclusion |= OptionInclusion.FeatureAndOption;
                    });

                    menu.AddItem(new GUIContent("Remove Both"), (value & OptionInclusion.FeatureAndOption) == 0, () => {
                        root.Inclusion &= ~OptionInclusion.FeatureAndOption;
                    });
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Include Both"));
                    menu.AddDisabledItem(new GUIContent("Remove Both"));
                }

                menu.ShowAsContext();
            }
        }