public VirtualNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parent, string name, [NotNull] Type type, int?order, [NotNull] Func <object> getter, Action <object> setter) : base(factory, propertyProvider, parent) { this.getter = getter; this.setter = setter; if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (parent == null) { throw new ArgumentNullException(nameof(parent)); } if (getter == null) { throw new ArgumentNullException(nameof(getter)); } Name = name; CombineKey = Name; DisplayName = Name; Type = type; Order = order; Descriptor = TypeDescriptorFactory.Default.Find(type); AttachCommands(); }
private void CreateItems(IPropertyProviderViewModel propertyProvider, IInitializingNodePresenter parentPresenter, [NotNull] IObjectNode objectNode) { if (objectNode.IsEnumerable) { if (objectNode.ItemReferences != null) { foreach (var item in objectNode.ItemReferences) { if (ShouldCreateItemPresenter(parentPresenter, objectNode, item.Index, propertyProvider)) { var itemPresenter = CreateItem(propertyProvider, parentPresenter, objectNode, item.Index); if (item.TargetNode != null) { GenerateChildren(itemPresenter, item.TargetNode, propertyProvider); } parentPresenter.AddChild(itemPresenter); RunUpdaters(itemPresenter); } } } else { foreach (var item in objectNode.Indices) { if (ShouldCreateItemPresenter(parentPresenter, objectNode, item, propertyProvider)) { var itemPresenter = CreateItem(propertyProvider, parentPresenter, objectNode, item); parentPresenter.AddChild(itemPresenter); RunUpdaters(itemPresenter); } } } } }
public MemberNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parent, [NotNull] IMemberNode member) : base(factory, propertyProvider, parent) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (parent == null) { throw new ArgumentNullException(nameof(parent)); } Member = member ?? throw new ArgumentNullException(nameof(member)); Name = member.Name; CombineKey = Name; DisplayName = Name; IsReadOnly = !Member.MemberDescriptor.HasSet; memberAttributes.AddRange(TypeDescriptorFactory.Default.AttributeRegistry.GetAttributes(member.MemberDescriptor.MemberInfo)); member.ValueChanging += OnMemberChanging; member.ValueChanged += OnMemberChanged; if (member.Target != null) { member.Target.ItemChanging += OnItemChanging; member.Target.ItemChanged += OnItemChanged; } var displayAttribute = memberAttributes.OfType <DisplayAttribute>().FirstOrDefault(); Order = displayAttribute?.Order ?? member.MemberDescriptor.Order; AttachCommands(); }
public ItemNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parent, [NotNull] IObjectNode container, Index index) : base(factory, propertyProvider, parent) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (parent == null) { throw new ArgumentNullException(nameof(parent)); } Container = container ?? throw new ArgumentNullException(nameof(container)); Descriptor = TypeDescriptorFactory.Default.Find(container.Descriptor.GetInnerCollectionType()); OwnerCollection = parent; Type = (container.Descriptor as CollectionDescriptor)?.ElementType ?? (container.Descriptor as DictionaryDescriptor)?.ValueType; Index = index; Name = index.ToString(); Order = index.IsInt ? (int?)index.Int : null; // So items are sorted by index instead of string CombineKey = Name; DisplayName = Index.IsInt ? "Item " + Index : Index.ToString(); container.ItemChanging += OnItemChanging; container.ItemChanged += OnItemChanged; AttachCommands(); }
protected virtual IInitializingNodePresenter CreateRootPresenter(IPropertyProviderViewModel propertyProvider, [NotNull] IObjectNode rootNode) { if (rootNode == null) { throw new ArgumentNullException(nameof(rootNode)); } return(new RootNodePresenter(this, propertyProvider, rootNode)); }
protected override IInitializingNodePresenter CreateMember(IPropertyProviderViewModel propertyProvider, INodePresenter parentPresenter, IMemberNode member) { var assetNode = member as IAssetMemberNode; if (assetNode == null) { throw new ArgumentException($"Expected an {nameof(IAssetMemberNode)}."); } return(new AssetMemberNodePresenter(this, propertyProvider, parentPresenter, assetNode)); }
protected override IInitializingNodePresenter CreateItem(IPropertyProviderViewModel propertyProvider, INodePresenter containerPresenter, IObjectNode containerNode, NodeIndex index) { var assetNode = containerNode as IAssetObjectNode; if (assetNode == null) { throw new ArgumentException($"Expected an {nameof(IAssetMemberNode)}."); } return(new AssetItemNodePresenter(this, propertyProvider, containerPresenter, assetNode, index)); }
protected virtual IInitializingNodePresenter CreateMember(IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parentPresenter, [NotNull] IMemberNode member) { if (parentPresenter == null) { throw new ArgumentNullException(nameof(parentPresenter)); } if (member == null) { throw new ArgumentNullException(nameof(member)); } return(new MemberNodePresenter(this, propertyProvider, parentPresenter, member)); }
protected virtual IInitializingNodePresenter CreateItem(IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter containerPresenter, [NotNull] IObjectNode containerNode, Index index) { if (containerPresenter == null) { throw new ArgumentNullException(nameof(containerPresenter)); } if (containerNode == null) { throw new ArgumentNullException(nameof(containerNode)); } return(new ItemNodePresenter(this, propertyProvider, containerPresenter, containerNode, index)); }
private void CreateMembers(IPropertyProviderViewModel propertyProvider, IInitializingNodePresenter parentPresenter, [NotNull] IObjectNode objectNode) { foreach (var member in objectNode.Members) { if (ShouldCreateMemberPresenter(parentPresenter, member, propertyProvider)) { var memberPresenter = CreateMember(propertyProvider, parentPresenter, member); if (member.Target != null) { GenerateChildren(memberPresenter, member.Target, propertyProvider); } parentPresenter.AddChild(memberPresenter); RunUpdaters(memberPresenter); } } }
public RootNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] IObjectNode rootNode) : base(factory, propertyProvider, null) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } RootNode = rootNode ?? throw new ArgumentNullException(nameof(rootNode)); Name = "Root"; DisplayName = string.Empty; foreach (var command in factory.AvailableCommands) { if (command.CanAttach(this)) { Commands.Add(command); } } rootNode.ItemChanging += OnItemChanging; rootNode.ItemChanged += OnItemChanged; AttachCommands(); }
public AssetItemNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parent, [NotNull] IAssetObjectNode container, Index index) : base(factory, propertyProvider, parent, container, index) { }
protected virtual bool ShouldCreateMemberPresenter([NotNull] INodePresenter parent, [NotNull] IMemberNode member, [CanBeNull] IPropertyProviderViewModel propertyProvider) { if (parent == null) { throw new ArgumentNullException(nameof(parent)); } if (member == null) { throw new ArgumentNullException(nameof(member)); } // Ask the property provider if we have one, otherwise always construct. return(propertyProvider?.ShouldConstructMember(member) ?? true); }
public AssetVirtualNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parent, string name, Type type, int?order, [NotNull] Func <object> getter, Action <object> setter, Func <bool> hasBase = null, Func <bool> isInerited = null, Func <bool> isOverridden = null) : base(factory, propertyProvider, parent, name, type, order, getter, setter) { this.hasBase = hasBase; this.isInerited = isInerited; this.isOverridden = isOverridden; }
protected virtual bool ShouldCreateItemPresenter([NotNull] INodePresenter parent, [NotNull] IObjectNode collectionNode, Index index, [CanBeNull] IPropertyProviderViewModel propertyProvider) { if (parent == null) { throw new ArgumentNullException(nameof(parent)); } if (collectionNode == null) { throw new ArgumentNullException(nameof(collectionNode)); } // Ask the property provider if we have one, otherwise always construct. return(propertyProvider?.ShouldConstructItem(collectionNode, index) ?? true); }
public INodePresenter CreateNodeHierarchy(IObjectNode rootNode, GraphNodePath rootNodePath, IPropertyProviderViewModel propertyProvider) { if (rootNode == null) { throw new ArgumentNullException(nameof(rootNode)); } buildingNodes.Value = true; var rootPresenter = CreateRootPresenter(propertyProvider, rootNode); GenerateChildren(rootPresenter, rootNode, propertyProvider); RunUpdaters(rootPresenter); buildingNodes.Value = false; FinalizeTree(rootPresenter); return(rootPresenter); }
public void CreateChildren(IInitializingNodePresenter parentPresenter, IObjectNode objectNode, IPropertyProviderViewModel propertyProvider) { buildingNodes.Value = true; if (objectNode != null) { GenerateChildren(parentPresenter, objectNode, propertyProvider); } RunUpdaters(parentPresenter); buildingNodes.Value = false; FinalizeTree(parentPresenter.Root); }
private void GenerateChildren([NotNull] IInitializingNodePresenter parentPresenter, [NotNull] IObjectNode objectNode, IPropertyProviderViewModel propertyProvider) { if (parentPresenter == null) { throw new ArgumentNullException(nameof(parentPresenter)); } if (objectNode == null) { throw new ArgumentNullException(nameof(objectNode)); } CreateMembers(propertyProvider, parentPresenter, objectNode); CreateItems(propertyProvider, parentPresenter, objectNode); parentPresenter.FinalizeInitialization(); }
public AssetMemberNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parent, [NotNull] IAssetMemberNode member) : base(factory, propertyProvider, parent, member) { }
protected override bool ShouldCreateMemberPresenter(INodePresenter parent, IMemberNode member, IPropertyProviderViewModel propertyProvider) { // Don't construct members of object references if (((IAssetNodePresenter)parent).IsObjectReference(parent.Value)) { return(false); } return(base.ShouldCreateMemberPresenter(parent, member, propertyProvider)); }
public AssetRootNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] IAssetObjectNode rootNode) : base(factory, propertyProvider, rootNode) { }
protected NodePresenterBase([NotNull] INodePresenterFactoryInternal factory, [CanBeNull] IPropertyProviderViewModel propertyProvider, [CanBeNull] INodePresenter parent) { this.factory = factory ?? throw new ArgumentNullException(nameof(factory)); Parent = parent; PropertyProvider = propertyProvider; }