public VisualElement CreateDropdownField(string[] options, Func <int> getSelectedChoiceCallback) { var dropdownField = new DropdownField(); dropdownField.choices = options.ToList(); dropdownField.createMenuCallback = () => { var osMenu = new GenericOSMenu(); for (int i = 0; i < options.Length; i++) { var option = options[i]; var isValueSelected = getSelectedChoiceCallback.Invoke() == i; osMenu.AddItem(option, isValueSelected, () => { dropdownField.value = option; }); } return(osMenu); }; dropdownField.formatSelectedValueCallback = (value) => { // Don't show label for this dropdown return(""); }; dropdownField.index = getSelectedChoiceCallback.Invoke(); return(dropdownField); }
internal override void Apply(VisualElement container) { /// <sample> // You can provide the list of choices by code, or by comma separated values in UXML // <DropdownField .... choices="Option 1,Option 2,Option 3" .... /> var choices = new List <string> { "Option 1", "Option 2", "Option 3" }; // Get a reference to the dropdown field from UXML and assign it its value. var uxmlField = container.Q <DropdownField>("the-uxml-field"); uxmlField.choices = choices; uxmlField.value = choices[0]; // Create a new dropdown with the same choices, disable it, and give it a style class. var csharpField = new DropdownField("C# Field", choices, 0); csharpField.SetEnabled(false); csharpField.AddToClassList("some-styled-field"); container.Add(csharpField); // Mirror value of uxml field into the C# field. uxmlField.RegisterCallback <ChangeEvent <string> >((evt) => { csharpField.value = evt.newValue; }); /// </sample> }
public static DropdownField CreateDropDownValue(this List <string> items, string selection, Func <string, int, string> selectionFunction) { if (items == null || items.Count <= 0) { return(new DropdownField()); } var selectionIndex = items.IndexOf(selection); selectionIndex = selectionIndex < 0 ? 0 : selectionIndex; var menu = new DropdownField(items, selectionIndex, newValue => selectionFunction(newValue, items.IndexOf(newValue))); return(menu); }
public UnityEventItem() { AddToClassList(kListViewItemClassName); var leftColumn = new VisualElement(); leftColumn.AddToClassList(kLeftColumnClassName); Add(leftColumn); var rightColumn = new VisualElement(); rightColumn.AddToClassList(kRightColumnClassName); Add(rightColumn); callStateDropdown = new PropertyField(); callStateDropdown.label = ""; callStateDropdown.name = kCallStateDropdownName; leftColumn.Add(callStateDropdown); listenerTarget = new PropertyField(); listenerTarget.label = ""; listenerTarget.name = kListenerTargetName; leftColumn.Add(listenerTarget); functionDropdown = new DropdownField(); functionDropdown.name = kFunctionDropdownName; rightColumn.Add(functionDropdown); parameterProperty = new PropertyField(); parameterProperty.label = ""; parameterProperty.name = kParameterPropertyName; rightColumn.Add(parameterProperty); objectParameter = new ObjectField(); objectParameter.name = kObjectParameterName; objectParameter.allowSceneObjects = true; rightColumn.Add(objectParameter); }
public MinMaxGradientField(MinMaxGradientPropertyDrawer.PropertyData propertyData, string label) : base(label, null) { if (propertyData != null) { m_ColorMin = new PropertyField(propertyData.colorMin, ""); m_ColorMin.AddToClassList(colorFieldUssClass); m_ColorMax = new PropertyField(propertyData.colorMax, ""); m_ColorMax.AddToClassList(colorFieldUssClass); m_GradientMin = new PropertyField(propertyData.gradientMin, ""); m_GradientMax = new PropertyField(propertyData.gradientMax, ""); m_ModeDropdown = new DropdownField { choices = stringModes.ToList() }; m_ModeDropdown.createMenuCallback = () => { var osMenu = new GenericOSMenu(); for (int i = 0; i < stringModes.Length; i++) { var option = stringModes[i]; var isValueSelected = propertyData.mode.intValue == i; osMenu.AddItem(option, isValueSelected, () => { m_ModeDropdown.value = option; }); } return(osMenu); }; m_ModeDropdown.formatSelectedValueCallback = (value) => { // Don't show label for this dropdown return(""); }; m_ModeDropdown.index = propertyData.mode.intValue; m_ModeDropdown.AddToClassList(dropdownFieldUssClass); m_MixedValueTypeLabel = new Label("\u2014"); m_MixedValueTypeLabel.AddToClassList(multipleValuesLabelUssClass); var dropdownInput = m_ModeDropdown.Q <VisualElement>(null, "unity-popup-field__input"); dropdownInput.AddToClassList(dropdownInputUssClass); m_GradientsContainer = new VisualElement(); m_GradientsContainer.AddToClassList(gradientContainerUssClass); m_GradientsContainer.Add(m_GradientMin); m_GradientsContainer.Add(m_GradientMax); visualInput.AddToClassList(visualInputUssClass); visualInput.Add(m_ColorMin); visualInput.Add(m_ColorMax); visualInput.Add(m_GradientsContainer); visualInput.Add(m_MixedValueTypeLabel); visualInput.Add(m_ModeDropdown); m_ModeDropdown.RegisterCallback <ChangeEvent <string> >(e => { var index = Array.IndexOf(stringModes, e.newValue); var mode = (MinMaxGradientState)index; propertyData.mode.intValue = index; propertyData.mode.serializedObject.ApplyModifiedProperties(); UpdateFieldsDisplay(propertyData.mode); }); UpdateFieldsDisplay(propertyData.mode); } }
public void CreateGUI() { try { settings = settings ? settings : ItemEditorSettings.GetOrCreate(); useDatabase = settings.useDatabase; VisualElement root = rootVisualElement; var visualTree = settings.treeUxml; visualTree.CloneTree(root); var styleSheet = settings.treeUss; root.styleSheets.Add(styleSheet); searchField = root.Q <ToolbarSearchField>("search-input"); searchField.RegisterValueChangedCallback(new EventCallback <ChangeEvent <string> >(evt => { DoSearchDropdown(evt.newValue); })); searchDropdown = root.Q <UnityEngine.UIElements.ListView>("search-dropdown"); searchDropdown.makeItem = () => new Label() { enableRichText = true }; searchDropdown.onSelectionChange += OnSearchListSelected; root.RegisterCallback <PointerDownEvent>(evt => { if (!string.IsNullOrEmpty(searchField.value) && !searchDropdown.Contains(evt.target as VisualElement)) { searchField.value = string.Empty; } }); DoSearchDropdown(); searchSelector = root.Q <DropdownField>("search-selector"); searchSelector.RegisterValueChangedCallback(evt => { keyType = (SearchKeyType)searchSelector.choices.IndexOf(evt.newValue); }); funcTab = root.Q <TabbedBar>(); funcTab.Refresh(new string[] { "道具", "模板" }, OnFuncTab); funcTab.onRightClick = OnRightFuncTab; Button refresh = root.Q <Button>("refresh-button"); refresh.clicked += Refresh; Button newButton = root.Q <Button>("new-button"); newButton.clicked += OnNewClick; deleteButton = root.Q <Button>("delete-button"); deleteButton.clicked += OnDeleteClick; RefreshDeleteButton(); oldItem = root.Q <ObjectField>("old-item"); oldItem.objectType = typeof(ItemBase); Button oldButton = root.Q <ToolbarButton>("copy-button"); oldButton.clicked += OnCopyClick; oldButton = root.Q <ToolbarButton>("copy-all-button"); oldButton.clicked += OnCopyAllClick; listLabel = root.Q <Label>("list-label"); templateSelector = root.Q <DropdownField>("template-dropdown"); templateSelector.RegisterValueChangedCallback(OnTemplateSelected); RefreshTemplateSelector(); itemList = root.Q <UnityEngine.UIElements.ListView>("item-list"); itemList.selectionType = SelectionType.Multiple; itemList.makeItem = () => { var label = new Label(); label.AddManipulator(new ContextualMenuManipulator(evt => { if (label.userData is ItemNew item) { evt.menu.AppendAction("定位", a => EditorGUIUtility.PingObject(item)); evt.menu.AppendAction("删除", a => DeleteItem(item)); } })); return(label); }; itemList.bindItem = (e, i) => { (e as Label).text = !string.IsNullOrEmpty(items[i].Name) ? items[i].Name : "(未命名道具)"; e.userData = items[i]; }; itemList.onSelectionChange += (os) => OnListItemSelected(os.Select(x => x as ItemNew)); RefreshItems(); templateList = root.Q <UnityEngine.UIElements.ListView>("template-list"); templateList.selectionType = SelectionType.Multiple; templateList.makeItem = () => { var label = new Label(); label.AddManipulator(new ContextualMenuManipulator(evt => { if (label.userData is ItemTemplate template) { evt.menu.AppendAction("定位", a => EditorGUIUtility.PingObject(template)); evt.menu.AppendAction("删除", a => DeleteTemplate(template)); } })); return(label); }; templateList.bindItem = (e, i) => { (e as Label).text = !string.IsNullOrEmpty(templates[i].Name) ? templates[i].Name : "(未命名模板)"; e.userData = templates[i]; }; templateList.onSelectionChange += (os) => OnListTemplateSelected(os.Select(x => x as ItemTemplate)); RefreshTemplates(); rightPanel = root.Q <ScrollView>("right-panel"); itemContainer = root.Q("item-container"); templateContainer = root.Q("template-container"); Undo.undoRedoPerformed += RefreshModules; funcTab.SetSelected(1); root.RegisterCallback(new EventCallback <KeyDownEvent>(evt => { if (hasFocus && evt.keyCode == KeyCode.Delete) { OnDeleteClick(); } })); } catch (Exception ex) { Debug.LogException(ex); } }