private static RectTransform HandleGroupElement(GroupElement element, ref int groupIndex, ref int elementIndex, float width = 120f) { ContextMenuUIElement uiElement = GetContextMenuUIElement(elementIndex); uiElement.rectTransform.SetParent(null); uiElement.rectTransform.gameObject.SetActive(true); uiElement.icon.gameObject.SetActive(element.icon != null); uiElement.icon.sprite = element.icon; uiElement.icon.color = element.icon != null ? element.iconColor : Color.clear; uiElement.childIcon.gameObject.SetActive(true); uiElement.text.rectTransform.offsetMax = new Vector2(20f, 0f); ++elementIndex; RectTransform group = GetContextMenuGroup(groupIndex); group.SetParent(uiElement.rectTransform); group.localPosition = Vector3.zero; group.localRotation = Quaternion.identity; group.localScale = Vector3.one; group.SetRect(new Vector2(1f, 0f), new Vector2(1f, 0f), Vector2.zero, new Vector2(width, 0f)); group.gameObject.SetActive(false); uiElement.text.text = element.text; uiElement.rectTransform.gameObject.name = element.text; uiElement.button.onClick = new Button.ButtonClickedEvent(); uiElement.button.onClick.AddListener(() => group.gameObject.SetActive(!group.gameObject.activeSelf)); ++groupIndex; foreach (AContextMenuElement e in element.elements) { RectTransform rt = null; if (e is LeafElement) { rt = HandleLeafElement((LeafElement)e, ref elementIndex); } else if (e is GroupElement) { rt = HandleGroupElement((GroupElement)e, ref groupIndex, ref elementIndex, width); } rt.SetParent(group); rt.localPosition = Vector3.zero; rt.localRotation = Quaternion.identity; rt.localScale = Vector3.one; rt.SetAsLastSibling(); } group.SetParent(uiElement.rectTransform); group.localPosition = Vector3.zero; group.localRotation = Quaternion.identity; group.localScale = Vector3.one; group.SetRect(new Vector2(1f, 0f), new Vector2(1f, 0f), Vector2.zero, new Vector2(width, 0f)); return(uiElement.rectTransform); }
private static ContextMenuUIElement GetContextMenuUIElement(int index) { if (index < _displayedContextMenuElements.Count) { return(_displayedContextMenuElements[index]); } ContextMenuUIElement uiElement = new ContextMenuUIElement(); uiElement.rectTransform = ConstuctContextMenuElement(); uiElement.button = uiElement.rectTransform.Find("Button").GetComponent <Button>(); uiElement.icon = uiElement.button.transform.Find("Icon").GetComponent <Image>(); uiElement.text = uiElement.button.GetComponentInChildren <Text>(); uiElement.childIcon = uiElement.button.transform.Find("ChildIcon").GetComponent <RawImage>(); _displayedContextMenuElements.Add(uiElement); return(uiElement); }
private static RectTransform HandleLeafElement(LeafElement element, ref int index) { ContextMenuUIElement uiElement = GetContextMenuUIElement(index); uiElement.rectTransform.SetParent(null); uiElement.rectTransform.gameObject.SetActive(true); uiElement.icon.gameObject.SetActive(element.icon != null); uiElement.icon.sprite = element.icon; uiElement.icon.color = element.icon != null ? element.iconColor : Color.clear; uiElement.childIcon.gameObject.SetActive(false); uiElement.text.rectTransform.offsetMax = Vector2.zero; uiElement.text.text = element.text; uiElement.rectTransform.gameObject.name = element.text; uiElement.button.onClick = new Button.ButtonClickedEvent(); uiElement.button.onClick.AddListener(() => { element.onClick(element.parameter); HideContextMenu(); }); ++index; return(uiElement.rectTransform); }