protected internal static IEnumerable <IGrouping <Type, Control> > LocalPropertyList(object obj, IViewVariablesManagerInternal vvm, IRobustSerializer robustSerializer) { var styleOther = false; var type = obj.GetType(); var members = new List <(MemberInfo, VVAccess, object?value, Action <object?, bool> onValueChanged, Type)>(); foreach (var fieldInfo in type.GetAllFields()) { var attr = fieldInfo.GetCustomAttribute <ViewVariablesAttribute>(); if (attr == null) { continue; } members.Add((fieldInfo, attr.Access, fieldInfo.GetValue(obj), (v, _) => fieldInfo.SetValue(obj, v), fieldInfo.FieldType)); } foreach (var propertyInfo in type.GetAllProperties()) { var attr = propertyInfo.GetCustomAttribute <ViewVariablesAttribute>(); if (attr == null) { continue; } if (!propertyInfo.IsBasePropertyDefinition()) { continue; } members.Add((propertyInfo, attr.Access, propertyInfo.GetValue(obj), (v, _) => propertyInfo.GetSetMethod(true) !.Invoke(obj, new[] { v }), propertyInfo.PropertyType)); } var groupedSorted = members .OrderBy(p => p.Item1.Name) .GroupBy(p => p.Item1.DeclaringType !, tuple => { var(memberInfo, access, value, onValueChanged, memberType) = tuple; var data = new ViewVariablesBlobMembers.MemberData { Editable = access == VVAccess.ReadWrite, Name = memberInfo.Name, Type = memberType.AssemblyQualifiedName, TypePretty = TypeAbbreviation.Abbreviate(memberType), Value = value }; var propertyEdit = new ViewVariablesPropertyControl(vvm, robustSerializer); propertyEdit.SetStyle(styleOther = !styleOther); var editor = propertyEdit.SetProperty(data); editor.OnValueChanged += onValueChanged; return(propertyEdit); }) .OrderByDescending(p => p.Key, TypeHelpers.TypeInheritanceComparer); return(groupedSorted); }
protected ViewVariablesInstance(IViewVariablesManagerInternal vvm, IRobustSerializer robustSerializer) { ViewVariablesManager = vvm; _robustSerializer = robustSerializer; }
/// <param name="playerSession">The session ID of the player who opened this session.</param> /// <param name="o">The object we represent.</param> /// <param name="sessionId"> /// The session ID for this session. This is what the server and client use to talk about this session. /// </param> /// <param name="host">The view variables host owning this session.</param> public ViewVariablesSession(NetSessionId playerSession, object o, uint sessionId, IViewVariablesHost host, IRobustSerializer robustSerializer) { PlayerSession = playerSession; Object = o; SessionId = sessionId; ObjectType = o.GetType(); Host = host; RobustSerializer = robustSerializer; var traitIds = Host.TraitIdsFor(ObjectType); if (traitIds.Contains(ViewVariablesTraits.Members)) { var trait = new ViewVariablesTraitMembers(this); _traits.Add(trait); } if (traitIds.Contains(ViewVariablesTraits.Enumerable)) { var trait = new ViewVariablesTraitEnumerable(this); _traits.Add(trait); } if (traitIds.Contains(ViewVariablesTraits.Entity)) { var trait = new ViewVariablesTraitEntity(this); _traits.Add(trait); } }
public ViewVariablesTraitMembers(IViewVariablesManagerInternal vvm, IRobustSerializer robustSerializer) { _robustSerializer = robustSerializer; _vvm = vvm; }
public ViewVariablesInstanceEntity(IViewVariablesManagerInternal vvm, IEntityManager entityManager, IRobustSerializer robustSerializer) : base(vvm, robustSerializer) { _entityManager = entityManager; }