/// <summary> /// <para>Refreshes the text and image (if available) of the currently selected option. /// /// If you have modified the list of options, you should call this method afterwards to ensure that the visual state of the dropdown corresponds to the updated options.</para> /// </summary> public void RefreshShownValue() { DropdownWithColor.OptionData optionData = DropdownWithColor.s_NoOptionData; if (this.options.Count > 0) { optionData = this.options[Mathf.Clamp(this.m_Value, 0, this.options.Count - 1)]; } if (this.m_CaptionText) { if (optionData != null && optionData.text != null) { this.m_CaptionText.text = optionData.text; } else { this.m_CaptionText.text = string.Empty; } } if (this.m_CaptionImage) { if (optionData != null) { this.m_CaptionImage.sprite = optionData.image; this.m_CaptionImage.color = optionData.color; } else { this.m_CaptionImage.sprite = null; } this.m_CaptionImage.enabled = (this.m_CaptionImage.sprite != null); } }
private DropdownWithColor.DropdownItem AddItem(DropdownWithColor.OptionData data, bool selected, DropdownWithColor.DropdownItem itemTemplate, List <DropdownWithColor.DropdownItem> items) { DropdownWithColor.DropdownItem dropdownItem = this.CreateItem(itemTemplate); dropdownItem.rectTransform.SetParent(itemTemplate.rectTransform.parent, false); dropdownItem.gameObject.SetActive(true); dropdownItem.gameObject.name = "Item " + items.Count + ((data.text == null) ? string.Empty : (": " + data.text)); if (dropdownItem.toggle != null) { dropdownItem.toggle.isOn = false; } if (dropdownItem.text) { dropdownItem.text.text = data.text; } if (dropdownItem.image) { dropdownItem.image.sprite = data.image; dropdownItem.image.enabled = (dropdownItem.image.sprite != null); dropdownItem.image.color = data.color; } items.Add(dropdownItem); return(dropdownItem); }
/// <summary> /// <para>Show the dropdown list.</para> /// </summary> public void Show() { if (!this.IsActive() || !this.IsInteractable() || this.m_Dropdown != null) { return; } if (!this.validTemplate) { this.SetupTemplate(); if (!this.validTemplate) { return; } } List <Canvas> list = MyListPool <Canvas> .Get(); base.gameObject.GetComponentsInParent <Canvas>(false, list); if (list.Count == 0) { return; } Canvas canvas = list[0]; MyListPool <Canvas> .Release(list); this.m_Template.gameObject.SetActive(true); this.m_Dropdown = this.CreateDropdownList(this.m_Template.gameObject); this.m_Dropdown.name = "Dropdown List"; this.m_Dropdown.SetActive(true); RectTransform rectTransform = this.m_Dropdown.transform as RectTransform; rectTransform.SetParent(this.m_Template.transform.parent, false); DropdownWithColor.DropdownItem componentInChildren = this.m_Dropdown.GetComponentInChildren <DropdownWithColor.DropdownItem>(); GameObject gameObject = componentInChildren.rectTransform.parent.gameObject; RectTransform rectTransform2 = gameObject.transform as RectTransform; componentInChildren.rectTransform.gameObject.SetActive(true); Rect rect = rectTransform2.rect; Rect rect2 = componentInChildren.rectTransform.rect; Vector2 vector = rect2.min - rect.min + (Vector2)componentInChildren.rectTransform.localPosition; Vector2 vector2 = rect2.max - rect.max + (Vector2)componentInChildren.rectTransform.localPosition; Vector2 size = rect2.size; this.m_Items.Clear(); Toggle toggle = null; for (int i = 0; i < this.options.Count; i++) { DropdownWithColor.OptionData data = this.options[i]; DropdownWithColor.DropdownItem item = this.AddItem(data, this.value == i, componentInChildren, this.m_Items); if (!(item == null)) { item.toggle.isOn = (this.value == i); item.toggle.onValueChanged.AddListener(delegate(bool x) { this.OnSelectItem(item.toggle); }); if (item.toggle.isOn) { item.toggle.Select(); } if (toggle != null) { Navigation navigation = toggle.navigation; Navigation navigation2 = item.toggle.navigation; navigation.mode = Navigation.Mode.Explicit; navigation2.mode = Navigation.Mode.Explicit; navigation.selectOnDown = item.toggle; navigation.selectOnRight = item.toggle; navigation2.selectOnLeft = toggle; navigation2.selectOnUp = toggle; toggle.navigation = navigation; item.toggle.navigation = navigation2; } toggle = item.toggle; } } Vector2 sizeDelta = rectTransform2.sizeDelta; sizeDelta.y = size.y * (float)this.m_Items.Count + vector.y - vector2.y; rectTransform2.sizeDelta = sizeDelta; float num = rectTransform.rect.height - rectTransform2.rect.height; if (num > 0f) { rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, rectTransform.sizeDelta.y - num); } Vector3[] array = new Vector3[4]; rectTransform.GetWorldCorners(array); RectTransform rectTransform3 = canvas.transform as RectTransform; Rect rect3 = rectTransform3.rect; for (int j = 0; j < 2; j++) { bool flag = false; for (int k = 0; k < 4; k++) { Vector3 vector3 = rectTransform3.InverseTransformPoint(array[k]); if (vector3[j] < rect3.min[j] || vector3[j] > rect3.max[j]) { flag = true; break; } } if (flag) { RectTransformUtility.FlipLayoutOnAxis(rectTransform, j, false, false); } } for (int l = 0; l < this.m_Items.Count; l++) { RectTransform rectTransform4 = this.m_Items[l].rectTransform; rectTransform4.anchorMin = new Vector2(rectTransform4.anchorMin.x, 0f); rectTransform4.anchorMax = new Vector2(rectTransform4.anchorMax.x, 0f); rectTransform4.anchoredPosition = new Vector2(rectTransform4.anchoredPosition.x, vector.y + size.y * (float)(this.m_Items.Count - 1 - l) + size.y * rectTransform4.pivot.y); rectTransform4.sizeDelta = new Vector2(rectTransform4.sizeDelta.x, size.y); } //this.AlphaFadeList(0.15f, 0f, 1f); this.m_Template.gameObject.SetActive(false); componentInChildren.gameObject.SetActive(false); this.m_Blocker = this.CreateBlocker(canvas); }