コード例 #1
0
        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);
        }
コード例 #2
0
        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>
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
ファイル: ItemEditor.cs プロジェクト: Zetan9565/Project-ZT
        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);
            }
        }