public virtual void DataBind(IUserInterface userInterface, MenuItemInfo itemInfo) { m_item = itemInfo; m_userInterface = userInterface; if (m_item != null) { m_icon.sprite = m_item.Icon; if (m_item.Data != null && m_item.Data is ColorResource) { m_icon.color = ((ColorResource)m_item.Data).Color; m_text.text = ((ColorResource)m_item.Data).ShortDescription.ToUpper(); if (m_icon.color.grayscale > .5f) { m_text.color = Color.white; } else { m_text.color = Color.black; } } m_icon.gameObject.SetActive(m_item.Icon != null || (m_item.Data != null && m_item.Data is ColorResource)); } else { m_icon.sprite = null; m_icon.gameObject.SetActive(false); m_text.text = string.Empty; } m_item.Validate = new MenuItemValidationEvent(); if (m_experienceMachine == null) { m_experienceMachine = IOCCore.Resolve <IExperienceMachine>(); } if (m_appTheme == null) { m_appTheme = IOCCore.Resolve <IAppTheme>(); } m_item.Validate.AddListener(m_experienceMachine.CanExecuteMenuCommand); m_item.Validate.AddListener((args) => args.IsValid = m_item.IsValid); var validationResult = IsValid(); if (validationResult.IsVisible) { if (image != null) { if (m_item.IsValid) { image.color = m_appTheme.GetSelectedTheme(m_platform).buttonNormalTextColor; } else { image.color = m_appTheme.GetSelectedTheme(m_platform).buttonDisabledTextColor; } } if (m_item.Data is TMP_InputField.ContentType) { TMP_InputField inputField = (TMP_InputField)selectable; if (inputField != null) { inputField.contentType = (TMP_InputField.ContentType)m_item.Data; var placeHolderText = inputField.placeholder.GetComponent <TextMeshProUGUI>(); if (placeHolderText) { placeHolderText.text = m_item.Text; } } } if (!(m_item.Data is TMPro.TMP_InputField.ContentType)) { m_item.Action = new MenuItemEvent(); m_item.Action.AddListener(m_experienceMachine.ExecuteMenuCommand); ((Button)selectable).onClick.AddListener(() => m_item.Action.Invoke(new MenuClickArgs(m_item.Path, m_item.Text, m_item.Command, m_item.CommandType, m_item.Data))); } } gameObject.SetActive(validationResult.IsVisible); selectable.interactable = validationResult.IsValid; }
public virtual void DataBind(IUserInterface userInterface, MenuItemInfo item) { m_item = item; m_vrMenu = userInterface; if (m_item != null) { m_icon.sprite = m_item.Icon; m_text.text = m_item.Text; if (m_item.Data != null && m_item.Data is ColorResource) { m_icon.color = ((ColorResource)m_item.Data).Color; m_text.text = ((ColorResource)m_item.Data).ShortDescription.ToUpper(); } m_icon.gameObject.SetActive(m_item.Icon != null || (m_item.Data != null && m_item.Data is ColorResource)); } else { m_icon.sprite = null; m_icon.gameObject.SetActive(false); m_text.text = string.Empty; } if (m_item.Validate == null) { m_item.Validate = new MenuItemValidationEvent(); } if (m_experienceMachine == null) { m_experienceMachine = IOCCore.Resolve <IExperienceMachine>(); } if (m_appTheme == null) { m_appTheme = IOCCore.Resolve <IAppTheme>(); } m_item.Validate.AddListener(m_experienceMachine.CanExecuteMenuCommand); m_item.Validate.AddListener((args) => args.IsValid = m_item.IsValid); var validationResult = IsValid(); if (validationResult.IsVisible) { if (m_item.IsValid) { m_text.color = overrideColor? overriddenHighlight : m_appTheme.GetSelectedTheme(m_platform).buttonNormalTextColor; } else { m_text.color = m_appTheme.GetSelectedTheme(m_platform).buttonDisabledTextColor; } if (m_image != null) { if (m_item.IsValid) { m_image.color = m_appTheme.GetSelectedTheme(m_platform).buttonNormalTextColor; } else { m_image.color = m_appTheme.GetSelectedTheme(m_platform).buttonDisabledTextColor; } } if (!(m_item.Data is ColorResource)) { if (m_item.Action == null) { m_item.Action = new MenuItemEvent(); } m_item.Action.AddListener(m_experienceMachine.ExecuteMenuCommand); ((Button)selectable).onClick.AddListener(() => m_item.Action.Invoke(new MenuClickArgs(m_item.Path, m_item.Text, m_item.Command, m_item.CommandType, m_item.Data))); } } if (m_root != null) { m_root.gameObject.SetActive(validationResult.IsVisible); } selectable.interactable = validationResult.IsValid; if (m_allowTextScroll) { StartCoroutine(InitializeTextScroll()); } }