public void PopulateTopLevel(object inputObject) { var wrapper = new GameObject("root_wrapper"); wrapper.AddComponent <PositionWindowUnderPorts>(); wrapper.transform.position = new Vector3(0, 0, 0); wrapper.transform.SetParent(this.transform, false); wrapper.AddComponent <VerticalLayoutGroup>(); //wrapper.GetComponent<RectTransform>().sizeDelta = new Vector2(1,1); wrapper.AddComponent <Canvas>(); wrapper.GetComponent <Canvas>().worldCamera = Camera.main; wrapper.AddComponent <GraphicRaycaster>(); wrapper.GetComponent <RectTransform>().localScale = new Vector3(.0003f, .0003f, .0003f); var fitter = wrapper.AddComponent <ContentSizeFitter>(); fitter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize; fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; //wrapper.transform.Rotate(0,90,0); TopLevelElement = inputObject; /*if (IsList(inputObject)) * { * * /*Debug.Log("inputobject is a list"); * foreach (var item in (IEnumerable)inputObject) * { * * var inspectabelgo = generateInspectableElementGameObject(item,wrapper); * * * } * } * * else*/if (IsDictionary(inputObject)) { Debug.Log("inputobject is a dictionary"); foreach (var pair in (IEnumerable)inputObject) { var realpair = DictionaryHelpers.CastFrom(pair); var key = realpair.Key; var value = realpair.Value; var inspectabelgo = generateInspectableElementGameObject(value, wrapper); } } else { Debug.Log("inputobject is a object"); //because this is the top level, we wont reflect over this object //but instead just generate an element that represents it as the root. var inspectabelgo = generateInspectableElementGameObject(inputObject, wrapper); } }
private void populateNextLevel(System.Object subTreeRoot) { //build a new wrapper for this next level var wrapper = new GameObject("sub_tree_wrapper"); //wrapper.transform.position = this.transform.position; wrapper.transform.SetParent(this.transform.parent, false); wrapper.AddComponent <HorizontalLayoutGroup>(); wrapper.GetComponent <HorizontalLayoutGroup>().spacing = 5; if (InspectorVisualization.IsList(subTreeRoot)) { Debug.Log("inputobject is a list"); foreach (var item in (IEnumerable)subTreeRoot) { var inspectabelgo = InspectorVisualization.generateInspectableElementGameObject(item, wrapper); } } else if (InspectorVisualization.IsDictionary(subTreeRoot)) { Debug.Log("inputobject is a dictionary"); foreach (var pair in (IEnumerable)subTreeRoot) { var realpair = DictionaryHelpers.CastFrom(pair); var key = realpair.Key; var value = realpair.Value; InspectorVisualization.generateInspectableElementGameObject(value, wrapper); } } else { Debug.Log("inputobject is a object"); if (subTreeRoot is IDynamicMetaObjectProvider) { Debug.Log("inputobject is a dynamic object"); var names = new List <string>(); var dynobj = subTreeRoot as IronPython.Runtime.Binding.IPythonExpandable; if (dynobj != null) { names.AddRange(dynobj.Context.LanguageContext.GetMemberNames(Expression.Constant(dynobj))); } //filter names so that python private and builtin members do not show var filterednames = names.Where(x => x.StartsWith("__") != true).ToList(); foreach (var name in filterednames) { var value = InspectorVisualization.GetDynamicValue(dynobj, name); if (value != null) { InspectorVisualization.generateInspectableElementGameObject(value, wrapper); } } } // if object was not dynamic use regular reflection else { Debug.Log("inputobject is a non dynamic object"); var propertyInfos = subTreeRoot.GetType().GetProperties( BindingFlags.Public | BindingFlags.NonPublic // Get public and non-public | BindingFlags.Static | BindingFlags.Instance // Get instance + static | BindingFlags.FlattenHierarchy); // Search up the hierarchy foreach (var prop in propertyInfos.ToList()) { if (prop.GetIndexParameters().Length > 0) { // Property is an indexer Debug.Log("this property is an indexed property, for now we won't reflect further"); continue; } try { var value = prop.GetValue(subTreeRoot, null); InspectorVisualization.generateInspectableElementGameObject(value, wrapper, prop.Name); } catch (Exception e) { Debug.Log("could not get property" + prop.Name); } } } } }