Beispiel #1
0
 internal override void SetSite(DocumentCompositeNode parent, IProperty propertyKey, int childIndex)
 {
     base.SetSite(parent, propertyKey, childIndex);
     if (parent != null)
     {
         DocumentPrimitiveNode.UnsitedValue unsitedValue = this.value as DocumentPrimitiveNode.UnsitedValue;
         if (unsitedValue == null)
         {
             return;
         }
         TypeConverter typeConverter = this.ValueConverter;
         if (typeConverter == null)
         {
             if (DocumentPrimitiveNode.objectTypeConverter == null)
             {
                 DocumentPrimitiveNode.objectTypeConverter = this.PlatformMetadata.GetTypeConverter((MemberInfo)typeof(object));
             }
             typeConverter = DocumentPrimitiveNode.objectTypeConverter;
         }
         this.value = (IDocumentNodeValue) new DocumentNodeStringValue(typeConverter.ConvertToInvariantString(unsitedValue.Value));
     }
     else
     {
         this.valueConverterProvider = (IMember)null;
     }
 }
Beispiel #2
0
 public DocumentPrimitiveNode(IDocumentContext context, ITypeId typeId, IDocumentNodeValue value)
     : base(context, typeId)
 {
     if (value == null && !this.Type.SupportsNullValues)
     {
         throw new ArgumentException(ExceptionStringTable.DocumentNodeValueTypeValueIsNull);
     }
     this.value = value;
 }
Beispiel #3
0
        public override DocumentNode Clone(IDocumentContext context)
        {
            IDocumentNodeValue documentNodeValue = this.value != null?this.value.Clone(context) : (IDocumentNodeValue)null;

            ITypeId typeId = (ITypeId)this.Type.Clone(context.TypeResolver);
            DocumentPrimitiveNode documentPrimitiveNode = new DocumentPrimitiveNode(context, typeId, documentNodeValue);

            if (this.SourceContext != null)
            {
                documentPrimitiveNode.SourceContext = this.SourceContext.FreezeText(true);
            }
            return((DocumentNode)documentPrimitiveNode);
        }
Beispiel #4
0
        public DocumentPrimitiveNode CreateNode(ITypeId typeId, IDocumentNodeValue value)
        {
            typeId = (ITypeId)this.projectContext.ResolveType(typeId);
            DocumentNodeMemberValue documentNodeMemberValue = value as DocumentNodeMemberValue;

            if (documentNodeMemberValue != null)
            {
                IType       type       = documentNodeMemberValue.Member as IType;
                IPropertyId propertyId = documentNodeMemberValue.Member as IPropertyId;
                if (type != null)
                {
                    return(new DocumentPrimitiveNode((IDocumentContext)this, typeId, (IDocumentNodeValue) new DocumentNodeMemberValue((IMember)this.projectContext.ResolveType((ITypeId)type))));
                }
                if (propertyId != null)
                {
                    return(new DocumentPrimitiveNode((IDocumentContext)this, typeId, (IDocumentNodeValue) new DocumentNodeMemberValue((IMember)this.projectContext.ResolveProperty(propertyId))));
                }
            }
            return(new DocumentPrimitiveNode((IDocumentContext)this, typeId, value));
        }
Beispiel #5
0
        private DocumentNode ConvertSubtree(DocumentNode node, IDocumentContext sourcePlatformDocumentContext, IDocumentContext targetPlatformDocumentContext)
        {
            DocumentPrimitiveNode documentPrimitiveNode = node as DocumentPrimitiveNode;
            DocumentCompositeNode documentCompositeNode = node as DocumentCompositeNode;

            if (documentPrimitiveNode != null)
            {
                ITypeId typeId        = (ITypeId)PlatformTypeHelper.ConvertTypeId((ITypeId)documentPrimitiveNode.Type, targetPlatformDocumentContext.TypeResolver.PlatformMetadata);
                object  valueAsObject = DocumentPrimitiveNode.GetValueAsObject((DocumentNode)documentPrimitiveNode);
                if (valueAsObject != null)
                {
                    return((DocumentNode) new DocumentPrimitiveNode(targetPlatformDocumentContext, typeId, this.ConvertInternal(valueAsObject, sourcePlatformDocumentContext, targetPlatformDocumentContext, PlatformConverter.ConvertToType.InstanceValue)));
                }
                IDocumentNodeValue documentNodeValue = DocumentPrimitiveNode.GetValueAsMember((DocumentNode)documentPrimitiveNode) != null || documentPrimitiveNode.Value == null ? (IDocumentNodeValue)null : documentPrimitiveNode.Value.Clone(targetPlatformDocumentContext);
                return((DocumentNode) new DocumentPrimitiveNode(targetPlatformDocumentContext, typeId, documentNodeValue));
            }
            if (documentCompositeNode != null)
            {
                if (PlatformTypes.CompositeTransform.IsAssignableFrom((ITypeId)documentCompositeNode.Type))
                {
                    IPlatform platform = PlatformConverter.GetPlatform(sourcePlatformDocumentContext);
                    if (platform != null)
                    {
                        TransformGroup transformGroup = platform.GeometryHelper.ConvertTransformToWpf((object)documentCompositeNode);
                        if (PlatformConverter.IsPlatformValue((object)transformGroup, targetPlatformDocumentContext))
                        {
                            return(targetPlatformDocumentContext.CreateNode(typeof(TransformGroup), (object)transformGroup));
                        }
                    }
                }
                ITypeId typeId = (ITypeId)PlatformTypeHelper.ConvertTypeId((ITypeId)documentCompositeNode.Type, targetPlatformDocumentContext.TypeResolver.PlatformMetadata);
                if (!documentCompositeNode.TypeResolver.PlatformMetadata.IsNullType(typeId))
                {
                    DocumentCompositeNode node1 = targetPlatformDocumentContext.CreateNode(typeId);
                    foreach (KeyValuePair <IProperty, DocumentNode> keyValuePair in (IEnumerable <KeyValuePair <IProperty, DocumentNode> >)documentCompositeNode.Properties)
                    {
                        IProperty property = this.ConvertPropertyKey(keyValuePair.Key, targetPlatformDocumentContext.TypeResolver.PlatformMetadata);
                        if (property != null)
                        {
                            DocumentNode node2 = keyValuePair.Value;
                            if (!PlatformTypes.FrameworkTemplate.IsAssignableFrom((ITypeId)node2.Type) && !PlatformTypes.Style.IsAssignableFrom((ITypeId)node2.Type))
                            {
                                DocumentNode node3 = this.ConvertSubtree(node2, sourcePlatformDocumentContext, targetPlatformDocumentContext);
                                if (node3 != null && (PlatformTypeHelper.GetPropertyType(property).IsAssignableFrom(node3.TargetType) || DocumentNodeUtilities.IsMarkupExtension(node3)))
                                {
                                    node1.Properties[(IPropertyId)property] = node3;
                                }
                            }
                        }
                    }
                    if (documentCompositeNode.SupportsChildren)
                    {
                        for (int index = 0; index < documentCompositeNode.Children.Count; ++index)
                        {
                            DocumentNode node2 = documentCompositeNode.Children[index];
                            node1.Children.Add(this.ConvertSubtree(node2, sourcePlatformDocumentContext, targetPlatformDocumentContext));
                        }
                    }
                    return((DocumentNode)node1);
                }
            }
            return((DocumentNode)null);
        }