/// <summary> /// Add properties to an existing EditInterface. /// </summary> /// <param name="scanner"></param> /// <param name="target"></param> /// <param name="edit"></param> private static void addProperties(MemberScanner scanner, Object target, Type startType, EditInterface edit, ReflectedEditablePropertyProvider customPropProvider) { IEnumerable <MemberWrapper> members = scanner.getMatchingMembers(startType); foreach (MemberWrapper memberWrapper in members) { if (!customPropProvider.addProperties(memberWrapper, target, edit)) { EditableAttribute editable = findEditableAttribute(memberWrapper); bool addAsProperty = (editable != null && editable.ForceAsProperty) || ReflectedVariable.canCreateVariable(memberWrapper.getWrappedType()); if (addAsProperty) { edit.addEditableProperty(editable.createEditableProperty(memberWrapper, target)); } else { Object subObject = memberWrapper.getValue(target, null); if (subObject is EditInterfaceOverride) { EditInterfaceOverride custom = (EditInterfaceOverride)subObject; edit.addSubInterface(custom.getEditInterface(memberWrapper.getWrappedName(), scanner)); } else if (subObject != null) { edit.addSubInterface(createEditInterface(subObject, scanner, memberWrapper.getWrappedName() + " - " + memberWrapper.getWrappedType(), null)); } } } } }
/// <summary> /// Safe version of addSubInterface. Will check for the calling object to be null first. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="editInterface"></param> /// <param name="value"></param> public static void safeAddSubInterface <T>(this EditInterface editInterface, T value) where T : class { if (editInterface != null) { editInterface.addSubInterface <T>(value); } }
/// <summary> /// Add a subinterface bound to source. /// </summary> /// <param name="source">The class that provided the subinterface.</param> /// <param name="subInterface">The subinterface to bind to source.</param> public void addSubInterface(T source, EditInterface subInterface) { editInterface.addSubInterface(subInterface); subInterface.ManagerBinding = source; interfaceDictionary.Add(source, subInterface); foreach (EditInterfaceCommand command in commandList) { subInterface.addCommand(command); } }