public object OnSceneGUI(object element) { if (element != null) { PropertyEditorChain chain = PropertyEditor.Get(element.GetType(), null); IPropertyEditor editor = chain.SkipUntilNot(typeof(AbstractTypePropertyEditor)); return(editor.OnSceneGUI(element)); } return(element); }
public object OnSceneGUI(object element) { try { if (_cycleScene == null) { _cycleScene = new fiCycleDetector(_cycleEdit, _cycleHeight); } _cycleScene.Enter(); // cycle; don't do anything if (_cycleScene.TryMark(element) == false) { return(element); } // Not showing a scene GUI for the object for this frame should be fine if (element == null) { return(element); } var inspectedProperties = _metadata.GetProperties(InspectedMemberFilters.InspectableMembers); for (int i = 0; i < inspectedProperties.Count; ++i) { var property = inspectedProperties[i]; var editorChain = PropertyEditor.Get(property.StorageType, property.MemberInfo); IPropertyEditor editor = editorChain.FirstEditor; object currentValue = property.Read(element); object updatedValue = editor.OnSceneGUI(currentValue); // We use EqualityComparer instead of == because EqualityComparer will properly unbox structs if (EqualityComparer <object> .Default.Equals(currentValue, updatedValue) == false) { property.Write(element, updatedValue); } } return(element); } finally { _cycleScene.Exit(); if (_cycleScene.Depth == 0) { _cycleScene = null; } } }