public static void ClearDropdownList(this DynamicDropdownField dynamicDropdown, MVRScript context) { foreach (var prevOption in dynamicDropdown.options) { if (prevOption.Key == null) { return; } context.RemoveButton(prevOption.Key); } GameObject.Destroy(dynamicDropdown.backpanel); dynamicDropdown.backpanel = null; }
public void ShowDropDownItems(GameObject parent, DynamicDropdownField dynamicDropdown, float width, float height, int left, int top, Color color, Color hoverColor, Color textColor, UnityAction <string> onOptionSelect = null, bool refreshOnly = false) { top = top + 5; if (dynamicDropdown.isOpen) { ClearDropdownList(dynamicDropdown); dynamicDropdown.isOpen = false; return; } try { var panelHeight = dynamicDropdown.items.Count * height + 10; var panelTop = top + height * 2 - 5; dynamicDropdown.backpanel = CreatePanel(parent, width + 10, panelHeight, left - 5, (int)(panelTop), color + new Color(0.5f, 0.3f, 0.3f), Color.white); dynamicDropdown.options = new Dictionary <UIDynamicButton, string>(); var itemTop = top + (height * 2); foreach (var option in dynamicDropdown.items) { //if (dynamicDropdown.selectedValue == option) continue; var optionButton = CreateButton(parent, option, width, height, left, (int)itemTop, color + new Color(0.1f, 0.1f, 0.1f), hoverColor + new Color(0.1f, 0.1f, 0.1f), textColor + new Color(0.1f, 0.1f, 0.1f)); optionButton.buttonText.fontSize = dynamicDropdown.label.buttonText.fontSize; optionButton.button.onClick.AddListener(() => { try { dynamicDropdown.selectedOption.buttonText.text = option; dynamicDropdown.selectedValue = option; ClearDropdownList(dynamicDropdown); dynamicDropdown.isOpen = false; onOptionSelect.Invoke(option); } catch (Exception e) { SuperController.LogError(e.ToString()); } }); dynamicDropdown.options.Add(optionButton, option); itemTop += height; } dynamicDropdown.isOpen = true; } catch (Exception e) { SuperController.LogError(e.ToString()); } }
public static void Destroy(this DynamicDropdownField listBox, MVRScript context) { listBox.ClearDropdownList(context); if (listBox.label != null) { context.RemoveButton(listBox.label); } if (listBox.infoBox != null) { context.RemoveTextField(listBox.infoBox); } if (listBox.selectedOption != null) { context.RemoveButton(listBox.selectedOption); } }
public void ClearDropdownList(DynamicDropdownField dynamicDropdown) { foreach (var prevOption in dynamicDropdown.options) { if (prevOption.Key == null) { return; } _context.RemoveButton(prevOption.Key); } GameObject.Destroy(dynamicDropdown.backpanel); dynamicDropdown.backpanel = null; //var backpanelRect = dynamicDropdown.backpanel.GetComponents<RectTransform>().First(); //backpanelRect.sizeDelta = new Vector2(backpanelRect.rect.width, 0); //dynamicDropdown.options = new Dictionary<UIDynamicButton, string>(); }
public static void MinimizeDynamicDropdown(this DynamicDropdownField dropdown, MVRScript context, bool minimize = true) { if (minimize) { dropdown.ClearDropdownList(context); } if (dropdown.backpanel != null) { dropdown.backpanel.transform.localScale = minimize ? Vector3.zero : Vector3.one; } if (dropdown.infoBox != null) { dropdown.infoBox.transform.localScale = minimize ? Vector3.zero : Vector3.one; } if (dropdown.selectedOption != null) { dropdown.selectedOption.transform.localScale = minimize ? Vector3.zero : Vector3.one; } dropdown.Minimized = minimize; }
public DynamicDropdownField CreateDynamicDropdown(GameObject parent, string name, List <string> items, float width, float height, int left, int top, Color color, Color hoverColor, Color textColor, int?fontSize = null, int infoBoxHeight = 0, UnityAction <string> onOptionSelect = null) { var dynamicDropdown = new DynamicDropdownField(); dynamicDropdown.label = CreateButton(parent, name, width, 20, left, top, Color.clear, new Color(0.1f, 0.1f, 0.1f), textColor * 0.7f); dynamicDropdown.label.buttonText.fontSize = (int)((fontSize ?? 20) * 0.9); dynamicDropdown.label.buttonText.alignment = TextAnchor.LowerLeft; dynamicDropdown.selectedOption = CreateButton(parent, "", width, height, left, (int)(top + 20), color, hoverColor, textColor); dynamicDropdown.selectedOption.buttonText.fontSize = fontSize ?? 20; dynamicDropdown.items = items; if (infoBoxHeight > 0) { dynamicDropdown.infoBox = CreateTextField(parent, "", width, infoBoxHeight, left, top + (int)(height) + 20, color + new Color(0.1f, 0.1f, 0.1f), textColor); dynamicDropdown.infoBox.UItext.fontSize = (int)(fontSize * 0.9); dynamicDropdown.infoBox.UItext.fontStyle = FontStyle.Italic; dynamicDropdown.infoBox.UItext.alignment = TextAnchor.UpperLeft; } dynamicDropdown.selectedOption.button.onClick.AddListener(() => { ShowDropDownItems(parent, dynamicDropdown, width, height, left, top, color, hoverColor, textColor, onOptionSelect); }); dynamicDropdown.label.button.onClick.AddListener(() => { dynamicDropdown.MinimizeDynamicDropdown(_context, !dynamicDropdown.Minimized); }); dynamicDropdown.onRefresh = () => { if (dynamicDropdown.infoBox != null) { dynamicDropdown.infoBox.UItext.text = string.Join("\n•", dynamicDropdown.items.ToArray()); } }; return(dynamicDropdown); }
public static void Refresh(this DynamicDropdownField listBox) { listBox.onRefresh.Invoke(); }
public static void SetItems(this DynamicDropdownField listBox, List <string> items) { listBox.items = items; listBox.onRefresh.Invoke(); }