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)); }
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))); }
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)); } }
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); }
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); }
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); } }