protected override VisitStatus BeginContainer <TProperty, TContainer, TValue>( TProperty property, ref TContainer container, ref TValue value, ref ChangeTracker changeTracker) { // Root value if (container is PropertyWrapper <TValue> || value is PropertyWrapper <TValue> ) { if (TryGetInspector(ref value, property, new PropertyPath(string.Empty), string.Empty, InspectorVisitLevel.Target)) { return(VisitStatus.Override); } PropertyContainer.Visit(ref value, this); return(VisitStatus.Override); } // Regular value var propName = property.GetName(); AddToPath(propName); try { if (TryGetInspector(ref value, property, new PropertyPath(m_Path.ToString()), propName, InspectorVisitLevel.Field)) { return(VisitStatus.Override); } var foldout = GuiFactory.Foldout(property, ref container, ref value, VisitorContext); using (VisitorContext.MakeParentScope(foldout)) { PropertyContainer.Visit(ref value, this); } return(VisitStatus.Override); } finally { RemoveFromPath(propName); } }
protected override VisitStatus BeginCollection <TProperty, TContainer, TValue>( TProperty property, ref TContainer container, ref TValue value, ref ChangeTracker changeTracker) { var propName = property.GetName(); AddToPath(propName); try { if (container is PropertyWrapper <TValue> || value is PropertyWrapper <TValue> ) { GuiFactory.CollectionSizeField(property, ref container, ref value, VisitorContext); for (int i = 0, count = property.GetCount(ref container); i < count; i++) { var callback = new VisitCollectionElementCallback <TContainer>(this); var elementChangeTracker = new ChangeTracker(changeTracker.VersionStorage); property.GetPropertyAtIndex(ref container, i, ref elementChangeTracker, ref callback); if (elementChangeTracker.IsChanged()) { changeTracker.IncrementVersion <TProperty, TContainer, TValue>(property, ref container); } } return(VisitStatus.Override); } if (typeof(TValue).IsClass && null == value) { var nullElement = new NullElement <TValue>(property.GetName()); VisitorContext.Parent.contentContainer.Add(nullElement); return(VisitStatus.Override); } var foldout = GuiFactory.Foldout(property, ref container, ref value, VisitorContext); using (VisitorContext.MakeParentScope(foldout)) { if (TryGetInspector(ref value, property, new PropertyPath(m_Path.ToString()), propName, InspectorVisitLevel.Field)) { return(VisitStatus.Override); } GuiFactory.CollectionSizeField(property, ref container, ref value, VisitorContext); for (int i = 0, count = property.GetCount(ref container); i < count; i++) { var callback = new VisitCollectionElementCallback <TContainer>(this); var elementChangeTracker = new ChangeTracker(changeTracker.VersionStorage); property.GetPropertyAtIndex(ref container, i, ref elementChangeTracker, ref callback); if (elementChangeTracker.IsChanged()) { changeTracker.IncrementVersion <TProperty, TContainer, TValue>(property, ref container); } } } return(VisitStatus.Override); } finally { RemoveFromPath(propName); } }