Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 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);
                 }
             }
         }
     }
 }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
 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));
        }
Esempio n. 8
0
 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));
 }
Esempio n. 9
0
 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));
 }
Esempio n. 10
0
 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);
         }
     }
 }
Esempio n. 11
0
        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();
        }
Esempio n. 12
0
 public AssetItemNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] INodePresenter parent, [NotNull] IAssetObjectNode container, Index index)
     : base(factory, propertyProvider, parent, container, index)
 {
 }
Esempio n. 13
0
 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);
 }
Esempio n. 14
0
 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;
 }
Esempio n. 15
0
 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);
 }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
 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);
 }
Esempio n. 18
0
 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();
 }
Esempio n. 19
0
 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));
        }
Esempio n. 21
0
 public AssetRootNodePresenter([NotNull] INodePresenterFactoryInternal factory, IPropertyProviderViewModel propertyProvider, [NotNull] IAssetObjectNode rootNode)
     : base(factory, propertyProvider, rootNode)
 {
 }
Esempio n. 22
0
 protected NodePresenterBase([NotNull] INodePresenterFactoryInternal factory, [CanBeNull] IPropertyProviderViewModel propertyProvider, [CanBeNull] INodePresenter parent)
 {
     this.factory     = factory ?? throw new ArgumentNullException(nameof(factory));
     Parent           = parent;
     PropertyProvider = propertyProvider;
 }