Beispiel #1
0
        public void Search_CustomInspectorWithDataBindings_ReturnsFilteredResults()
        {
            var container = new TestDataContainerWithCustomInspector
            {
                SourceData      = Generate(100),
                DestinationData = new List <TestData>()
            };

            m_PropertyElement.SetTarget(container);

            var searchElement = m_PropertyElement.Q <SearchElement>("filter");
            var searchHandler = searchElement.GetUxmlSearchHandler();

            /* The UXML declaration of the search element is.
             *
             * <pui:SearchElement
             *      name="filter"
             *      search-delay="100"
             *      handler-type="sync"
             *      search-data="Id Name"
             *      source-data="SourceData"
             *      filtered-data="DestinationData"
             *      search-filters="a:StringArray"
             *      global-string-comparison="Ordinal"/>
             */

            Assert.That(searchElement.SearchDelay, Is.EqualTo(100));
            Assert.That(searchHandler.Mode, Is.EqualTo(SearchHandlerType.sync));
            Assert.That(searchHandler.SearchDataType, Is.EqualTo(typeof(TestData)));
            Assert.That(searchElement.GlobalStringComparison, Is.EqualTo(StringComparison.Ordinal));

            searchElement.Search("Mesh");

            Assert.That(container.DestinationData.Count, Is.EqualTo(25));
        }
Beispiel #2
0
        public void TypeWithCustomInspector_WhenNoSpecializedInspectorExists_UsesDeclaredTypeInspector()
        {
            var element  = new PropertyElement();
            var instance = new ASD();

            instance.Type = new NoInspectorDerivedType();
            element.SetTarget(instance);
            Assert.That(element.Q <Label>(className: BaseType.Label).text, Is.EqualTo(nameof(BaseType)));
            element.ClearTarget();
            instance.Type = new HasInspectorDerivedType();
            element.SetTarget(instance);
            Assert.That(element.Q <Label>(className: BaseType.Label).text, Is.EqualTo(nameof(HasInspectorDerivedType)));
        }
Beispiel #3
0
        public void DefaultInspector_ForField_MimicsGenericInspector()
        {
            var fieldInspector = new PropertyElement();

            fieldInspector.SetTarget(new Types.DefaultFieldInspector()
            {
                NoInspectorType      = new Types.NoInspectorType(),
                DefaultInspectorType = new Types.DefaultInspectorType()
            });

            var noInspector =
                fieldInspector.Q <Foldout>(nameof(Types.DefaultFieldInspector.NoInspectorType));

            Assert.That(noInspector.Query <CustomInspectorElement>().ToList().Count, Is.EqualTo(0));
            Assert.That(noInspector.childCount, Is.EqualTo(3));

            var customInspectorElements = fieldInspector.Query <CustomInspectorElement>().ToList();

            Assert.That(customInspectorElements.Count, Is.EqualTo(1));
            var customInspectorElement = customInspectorElements[0].Q <Foldout>(nameof(Types.DefaultFieldInspector.DefaultInspectorType));

            Assert.That(customInspectorElement.childCount, Is.EqualTo(3));

            for (var i = 0; i < 3; ++i)
            {
                var lhs = noInspector.ElementAt(i);
                var rhs = customInspectorElement.ElementAt(i);
                Assert.That(lhs.GetType(), Is.EqualTo(rhs.GetType()));
                Assert.That(lhs.childCount, Is.EqualTo(rhs.childCount));
                Assert.That((lhs as BindableElement)?.bindingPath, Is.EqualTo((rhs as BindableElement)?.bindingPath));
            }
        }
Beispiel #4
0
        public void NullElement_WithMultipleConstructableTypes_CreatesAPopup()
        {
            var container = new TypeWithDerivableField();
            var element   = new PropertyElement();

            element.SetTarget(container);

            var stringField = element.Q <NullElement <MultipleDerivedTypes> >();

            Assert.That(stringField, Is.Not.Null);
            Assert.That(stringField.Q <Button>(), Is.Null);
            Assert.That(stringField.Q <PopupField <Type> >(), Is.Not.Null);
        }
Beispiel #5
0
        public void NullElement_WithSingleConstructableType_CreatesAButton()
        {
            var container = new SomeType();
            var element   = new PropertyElement();

            element.SetTarget(container);

            var stringField = element.Q <NullElement <SomeOtherType> >();

            Assert.That(stringField, Is.Not.Null);
            Assert.That(stringField.Q <Button>(), Is.Not.Null);
            Assert.That(stringField.Q <PopupField <Type> >(), Is.Null);
        }
Beispiel #6
0
        public void NullElement_WithStringField_CreatesAButton()
        {
            var container = new TypeWithString();
            var element   = new PropertyElement();

            element.SetTarget(container);

            var stringField = element.Q <NullElement <string> >();

            Assert.That(stringField, Is.Not.Null);
            Assert.That(stringField.Q <Button>(), Is.Not.Null);
            Assert.That(stringField.Q <PopupField <Type> >(), Is.Null);
        }
        void Initialize(EntitySelectionProxy proxy)
        {
            m_Context.SetContext(proxy);
            m_Root.Clear();

            var header = new PropertyElement();

            header.AddContext(m_Context);
            header.SetTarget(new EntityHeader(m_Context));
            m_Root.Add(header);
            m_SearchField = header.Q <ToolbarSearchField>();
            m_SearchField.RegisterValueChangedCallback(evt =>
            {
                m_Filters.Clear();
                var value   = evt.newValue.Trim();
                var matches = value.Split(' ');
                foreach (var match in matches)
                {
                    m_Filters.Add(match);
                }

                SearchChanged();
            });

            m_Settings = m_Root.Q <ToolbarMenu>();
            // TODO: Remove once we have menu items.
            m_Settings.Hide();

            m_ComponentsRoot = new VisualElement();

            m_Root.Add(m_ComponentsRoot);
            Resources.Templates.Inspector.ComponentsRoot.AddStyles(m_ComponentsRoot);
            m_ComponentsRoot.AddToClassList("entity-inspector__components-root");
            m_ComponentsRoot.RegisterCallback <GeometryChangedEvent>(OnGeometryChanged);
            m_TagsRoot = new TagComponentContainer(m_Context);
            m_ComponentsRoot.Add(m_TagsRoot);

            m_InspectorVisitor = new EntityInspectorVisitor(m_ComponentsRoot, m_TagsRoot, m_Context);
            PropertyContainer.Visit(m_Context.EntityContainer, m_InspectorVisitor);

            m_Root.ForceUpdateBindings();
        }
        public override void Reload(IProperty property)
        {
            m_Content.Clear();
            m_Elements.Clear();

            var set = GetValue();

            if (null == set)
            {
                return;
            }

            foreach (var v in set)
            {
                var key = v;

                var root = new PropertyElement();
                m_Elements.Add(root);
                root.AddToClassList(UssClasses.SetElement.ItemContainer);
                root.AddToClassList(UssClasses.Variables);
                root.SetTarget(new SetValue(key));

                var element = root[0];

                if (null == element)
                {
                    continue;
                }

                VisualElement toRemoveParent;
                VisualElement contextMenuParent;

                if (element is Foldout foldout)
                {
                    foldout.AddToClassList(UssClasses.SetElement.Item);
                    var toggle = foldout.Q <Toggle>();
                    toggle.AddToClassList(UssClasses.SetElement.ItemFoldout);
                    contextMenuParent = foldout.Q <VisualElement>(className: UssClasses.Unity.ToggleInput);

                    toRemoveParent = toggle;
                    foldout.contentContainer.AddToClassList(UssClasses.SetElement.ItemContent);
                    foldout.contentContainer.SetEnabledSmart(false);
                }
                else
                {
                    toRemoveParent    = root;
                    contextMenuParent = root.Q <Label>();
                    element.AddToClassList(UssClasses.SetElement.ItemNoFoldout);
                    element.contentContainer.SetEnabledSmart(false);
                    root.style.flexDirection = FlexDirection.Row;
                }

                contextMenuParent.AddManipulator(
                    new ContextualMenuManipulator(evt =>
                {
                    evt.menu.AppendSeparator();
                    evt.menu.AppendAction("Delete", action => { OnRemoveItem(key); });
                }));

                var button = new Button();
                button.AddToClassList(UssClasses.SetElement.RemoveItemButton);
                button.clickable.clicked += () => { OnRemoveItem(key); };
                toRemoveParent.Add(button);
                m_Content.Add(root);
            }
        }