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); }
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(); } }