Example #1
0
        private void SetupTemplate()
        {
            this.validTemplate = false;
            if (!this.m_Template)
            {
                Debug.LogError("The dropdown template is not assigned. The template needs to be assigned and must have a child GameObject with a Toggle component serving as the item.", this);
                return;
            }
            GameObject gameObject = this.m_Template.gameObject;

            gameObject.SetActive(true);
            Toggle componentInChildren = this.m_Template.GetComponentInChildren <Toggle>();

            this.validTemplate = true;
            if (!componentInChildren || componentInChildren.transform == this.template)
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The template must have a child GameObject with a Toggle component serving as the item.", this.template);
            }
            else if (!(componentInChildren.transform.parent is RectTransform))
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The child GameObject with a Toggle component (the item) must have a RectTransform on its parent.", this.template);
            }
            else if (this.itemText != null && !this.itemText.transform.IsChildOf(componentInChildren.transform))
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The Item Text must be on the item GameObject or children of it.", this.template);
            }
            else if (this.itemImage != null && !this.itemImage.transform.IsChildOf(componentInChildren.transform))
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The Item Image must be on the item GameObject or children of it.", this.template);
            }
            if (!this.validTemplate)
            {
                gameObject.SetActive(false);
                return;
            }
            TMP_Dropdown.DropdownItem dropdownItem = componentInChildren.gameObject.AddComponent <TMP_Dropdown.DropdownItem>();
            dropdownItem.text          = this.m_ItemText;
            dropdownItem.image         = this.m_ItemImage;
            dropdownItem.toggle        = componentInChildren;
            dropdownItem.rectTransform = (RectTransform)componentInChildren.transform;
            Canvas orAddComponent = TMP_Dropdown.GetOrAddComponent <Canvas>(gameObject);

            orAddComponent.overrideSorting = true;
            orAddComponent.sortingOrder    = 30000;
            TMP_Dropdown.GetOrAddComponent <GraphicRaycaster>(gameObject);
            TMP_Dropdown.GetOrAddComponent <CanvasGroup>(gameObject);
            gameObject.SetActive(false);
            this.validTemplate = true;
        }
Example #2
0
 private TMP_Dropdown.DropdownItem AddItem(TMP_Dropdown.OptionData data, bool selected, TMP_Dropdown.DropdownItem itemTemplate, List <TMP_Dropdown.DropdownItem> items)
 {
     TMP_Dropdown.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);
     }
     items.Add(dropdownItem);
     return(dropdownItem);
 }
Example #3
0
        public void Show()
        {
            bool flag = !this.IsActive() || !this.IsInteractable() || this.m_Dropdown != null;

            if (!flag)
            {
                bool flag2 = !this.validTemplate;
                if (flag2)
                {
                    this.SetupTemplate();
                    bool flag3 = !this.validTemplate;
                    if (flag3)
                    {
                        return;
                    }
                }
                List <Canvas> list = TMP_ListPool <Canvas> .Get();

                base.gameObject.GetComponentsInParent <Canvas>(false, list);
                bool flag4 = list.Count == 0;
                if (!flag4)
                {
                    Canvas canvas = list[0];
                    TMP_ListPool <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);
                    TMP_Dropdown.DropdownItem componentInChildren = this.m_Dropdown.GetComponentInChildren <TMP_Dropdown.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 + new Vector2(componentInChildren.rectTransform.localPosition.x, componentInChildren.rectTransform.localPosition.y);
                    Vector2 vector2 = rect2.max - rect.max + new Vector2(componentInChildren.rectTransform.localPosition.x, componentInChildren.rectTransform.localPosition.y);
                    Vector2 size    = rect2.size;
                    this.m_Items.Clear();
                    Toggle toggle = null;
                    for (int i = 0; i < this.options.Count; i++)
                    {
                        TMP_Dropdown.OptionData   data = this.options[i];
                        TMP_Dropdown.DropdownItem item = this.AddItem(data, this.value == i, componentInChildren, this.m_Items);
                        bool flag5 = item == null;
                        if (!flag5)
                        {
                            item.toggle.isOn = (this.value == i);
                            item.toggle.onValueChanged.AddListener(delegate(bool x)
                            {
                                this.OnSelectItem(item.toggle);
                            });
                            bool isOn = item.toggle.isOn;
                            if (isOn)
                            {
                                item.toggle.Select();
                            }
                            bool flag6 = toggle != null;
                            if (flag6)
                            {
                                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;
                    bool  flag7 = num > 0f;
                    if (flag7)
                    {
                        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 flag8 = false;
                        for (int k = 0; k < 4; k++)
                        {
                            Vector3 vector3 = rectTransform3.InverseTransformPoint(array[k]);
                            bool    flag9   = vector3[j] < rect3.min[j] || vector3[j] > rect3.max[j];
                            if (flag9)
                            {
                                flag8 = true;
                                break;
                            }
                        }
                        bool flag10 = flag8;
                        if (flag10)
                        {
                            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);
                }
            }
        }
Example #4
0
 protected virtual void DestroyItem(TMP_Dropdown.DropdownItem item)
 {
 }
Example #5
0
 protected virtual TMP_Dropdown.DropdownItem CreateItem(TMP_Dropdown.DropdownItem itemTemplate)
 {
     return(Object.Instantiate <TMP_Dropdown.DropdownItem>(itemTemplate));
 }