Beispiel #1
0
 private static void SetAsWpfIfUnset(SceneNode node, IPropertyId property, object value)
 {
     if (!DefaultTypeInstantiator.ShouldSet(node, property))
     {
         return;
     }
     node.SetValueAsWpf(property, value);
 }
Beispiel #2
0
        private bool ApplyDefaultInitializers(SceneNode node)
        {
            bool flag = false;

            if (this.ShouldUseDefaultInitializer)
            {
                foreach (DefaultInitializer defaultInitializer in DefaultTypeInstantiator.GetDefaultInitializers(node))
                {
                    flag = true;
                    defaultInitializer.InitializeDefaults((ModelItem)node.ModelItem, node.ModelItem.Context);
                }
            }
            return(flag);
        }
        protected override BaseFrameworkElement CreateElementOnStartDrag()
        {
            BaseFrameworkElement frameworkElement = (BaseFrameworkElement)null;

            using (this.ActiveSceneViewModel.ForceBaseValue())
            {
                PerformanceUtility.StartPerformanceSequence(PerformanceEvent.ShapeCreateBehaviorOnDragCreateElement);
                frameworkElement = (BaseFrameworkElement)this.ActiveSceneViewModel.CreateSceneNode(this.elementType);
                if (this.ActiveSceneInsertionPoint.CanInsert((ITypeId)frameworkElement.Type))
                {
                    IList <SceneNode> nodeTreeOnInsertion = this.typeInstantiator.CreateNodeTreeOnInsertion((SceneNode)frameworkElement);
                    this.typeInstantiator.ApplyBeforeInsertionDefaultsToElements(nodeTreeOnInsertion, (SceneNode)frameworkElement, new DefaultTypeInstantiator.SceneElementNamingCallback(DefaultTypeInstantiator.TypeNameCallback));
                    this.ActiveSceneInsertionPoint.Insert((SceneNode)frameworkElement);
                    this.UpdateEditTransaction();
                    this.typeInstantiator.ApplyAfterInsertionDefaultsToElements(nodeTreeOnInsertion, (SceneNode)frameworkElement);
                    this.ActiveSceneViewModel.ElementSelectionSet.SetSelection(DefaultTypeInstantiator.GetSelectionTarget((SceneNode)frameworkElement));
                    this.ActiveSceneViewModel.CanonicalizeViewState(SceneUpdateTypeFlags.Completing);
                }
                PerformanceUtility.EndPerformanceSequence(PerformanceEvent.ShapeCreateBehaviorOnDragCreateElement);
            }
            return(frameworkElement);
        }
Beispiel #4
0
 internal void ApplyAfterInsertionDefaultsToElements(IList <SceneNode> nodes, SceneNode rootNode)
 {
     foreach (SceneNode node in (IEnumerable <SceneNode>)nodes)
     {
         SceneElement element = node as SceneElement;
         if (element != null)
         {
             string name = element.Name;
             if (name == null)
             {
                 StyleAsset relatedUserThemeAsset = this.GetRelatedUserThemeAsset(node, rootNode);
                 if (relatedUserThemeAsset != null)
                 {
                     DocumentCompositeNode documentCompositeNode = relatedUserThemeAsset.ResourceModel.ValueNode as DocumentCompositeNode;
                     if (documentCompositeNode != null)
                     {
                         name = documentCompositeNode.GetValue <string>(DesignTimeProperties.StyleDefaultContentProperty);
                         double num1 = documentCompositeNode.GetValue <double>(DesignTimeProperties.ExplicitWidthProperty);
                         if (num1 > 0.0)
                         {
                             DefaultTypeInstantiator.SetIfUnset(node, BaseFrameworkElement.WidthProperty, (object)num1);
                         }
                         double num2 = documentCompositeNode.GetValue <double>(DesignTimeProperties.ExplicitHeightProperty);
                         if (num2 > 0.0)
                         {
                             DefaultTypeInstantiator.SetIfUnset(node, BaseFrameworkElement.HeightProperty, (object)num2);
                         }
                     }
                 }
             }
             if (name == null)
             {
                 name = element.TargetType.Name;
             }
             if (element.Name == null && this.ViewModel.DesignerContext.ProjectManager.OptionsModel.NameInteractiveElementsByDefault && Enumerable.FirstOrDefault <ITypeId>((IEnumerable <ITypeId>)DefaultTypeInstantiator.InteractiveElementTypes, (Func <ITypeId, bool>)(i =>
             {
                 IType type = this.ViewModel.ProjectContext.ResolveType(i);
                 if (type != null)
                 {
                     return(type.IsAssignableFrom((ITypeId)element.Type));
                 }
                 return(false);
             })) != null)
             {
                 element.EnsureNamed();
             }
             if (ProjectNeutralTypes.HeaderedContentControl.IsAssignableFrom((ITypeId)node.Type))
             {
                 DefaultTypeInstantiator.SetIfUnset(node, HeaderedControlProperties.HeaderedContentHeaderProperty, (object)name);
             }
             else if (ProjectNeutralTypes.HeaderedItemsControl.IsAssignableFrom((ITypeId)node.Type) && !PlatformTypes.ToolBar.IsAssignableFrom((ITypeId)node.Type))
             {
                 DefaultTypeInstantiator.SetIfUnset(node, HeaderedControlProperties.HeaderedItemsHeaderProperty, (object)name);
             }
             else if (PlatformTypes.ContentControl.IsAssignableFrom((ITypeId)node.Type) && !PlatformTypes.ScrollViewer.IsAssignableFrom((ITypeId)node.Type) && !PlatformTypes.UserControl.IsAssignableFrom((ITypeId)node.Type))
             {
                 if (ProjectNeutralTypes.TabItem.IsAssignableFrom((ITypeId)node.Type) && this.ViewModel.ProjectContext.IsCapabilitySet(PlatformCapability.UseHeaderOnTabItem))
                 {
                     IPropertyId property = (IPropertyId)ProjectNeutralTypes.TabItem.GetMember(MemberType.LocalProperty, "Header", MemberAccessTypes.Public);
                     DefaultTypeInstantiator.SetIfUnset(node, property, (object)name);
                 }
                 else
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, ContentControlElement.ContentProperty, (object)name);
                 }
             }
             else
             {
                 BaseTextElement baseTextElement;
                 if ((baseTextElement = node as BaseTextElement) != null)
                 {
                     if (string.IsNullOrEmpty(baseTextElement.Text.Trim()))
                     {
                         baseTextElement.Text = name;
                     }
                     if (PlatformTypes.TextBox.IsAssignableFrom((ITypeId)node.Type))
                     {
                         DefaultTypeInstantiator.SetAsWpfIfUnset(node, TextBoxElement.TextWrappingProperty, (object)TextWrapping.Wrap);
                     }
                     if (!node.ProjectContext.IsCapabilitySet(PlatformCapability.IsWpf) && PlatformTypes.RichTextBox.IsAssignableFrom((ITypeId)node.Type))
                     {
                         DefaultTypeInstantiator.SetAsWpfIfUnset(node, RichTextBoxElement.TextWrappingProperty, (object)TextWrapping.Wrap);
                     }
                 }
                 else if (PlatformTypes.TextBlock.IsAssignableFrom((ITypeId)node.Type))
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, TextBlockElement.TextProperty, (object)name);
                     DefaultTypeInstantiator.SetAsWpfIfUnset(node, TextBlockElement.TextWrappingProperty, (object)TextWrapping.Wrap);
                 }
                 else if (PlatformTypes.ListView.IsAssignableFrom((ITypeId)node.Type))
                 {
                     GridViewElement gridViewElement = (GridViewElement)node.ViewModel.CreateSceneNode(PlatformTypes.GridView);
                     SceneNode       sceneNode       = node.ViewModel.CreateSceneNode(PlatformTypes.GridViewColumn);
                     gridViewElement.Columns.Add(sceneNode);
                     node.SetValueAsSceneNode(DefaultTypeInstantiator.ListViewViewProperty, (SceneNode)gridViewElement);
                 }
                 else if (PlatformTypes.Border.IsAssignableFrom((ITypeId)node.Type))
                 {
                     DefaultTypeInstantiator.SetAsWpfIfUnset(node, BorderElement.BorderBrushProperty, (object)Brushes.Black);
                     DefaultTypeInstantiator.SetAsWpfIfUnset(node, BorderElement.BorderThicknessProperty, (object)new Thickness(1.0));
                 }
                 else if (typeof(FlowDocumentScrollViewer).IsAssignableFrom(node.TargetType))
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, FlowDocumentScrollViewerElement.DocumentProperty, (object)new FlowDocument((Block) new Paragraph((Inline) new Run(name))));
                 }
                 else if (typeof(Glyphs).IsAssignableFrom(node.TargetType))
                 {
                     DefaultTypeInstantiator.SetIfUnset(node, DefaultTypeInstantiator.GlyphsUnicodeStringProperty, (object)name);
                     DefaultTypeInstantiator.SetIfUnset(node, DefaultTypeInstantiator.GlyphsFillProperty, (object)Brushes.Black);
                     DefaultTypeInstantiator.SetIfUnset(node, DefaultTypeInstantiator.GlyphsFontRenderingSizeEmProperty, (object)12.0);
                 }
                 else if (typeof(Viewport3D).IsAssignableFrom(node.TargetType))
                 {
                     Viewport3DElement viewport3Delement = node as Viewport3DElement;
                     if (viewport3Delement != null)
                     {
                         Camera camera1 = (Camera)Viewport3D.CameraProperty.DefaultMetadata.DefaultValue;
                         Camera camera2 = (Camera)viewport3Delement.GetComputedValue(Viewport3DElement.CameraProperty);
                         if (camera2 == null || PropertyUtilities.Compare((object)camera1, (object)camera2, this.sceneView))
                         {
                             Camera perspectiveCamera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, 1.0, new Rect3D(-1.0, -1.0, -1.0, 2.0, 2.0, 2.0), 1.0);
                             DefaultTypeInstantiator.SetIfUnset((SceneNode)viewport3Delement, Viewport3DElement.CameraProperty, (object)perspectiveCamera);
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #5
0
        public virtual SceneNode CreateInstance(ITypeId instanceType, ISceneInsertionPoint insertionPoint, Rect rect, OnCreateInstanceAction action)
        {
            PerformanceUtility.StartPerformanceSequence(PerformanceEvent.PropertyInspectorFromCreate);
            PerformanceUtility.MeasurePerformanceUntilRender(PerformanceEvent.CreateElement);
            SceneView sceneView = this.sceneView;

            if (sceneView == null || !sceneView.IsEditable || insertionPoint == null)
            {
                return((SceneNode)null);
            }
            SceneNode rawInstance = this.CreateRawInstance(instanceType);

            if (rawInstance == null || !insertionPoint.CanInsert((ITypeId)rawInstance.Type))
            {
                return((SceneNode)null);
            }
            if (rect.IsEmpty)
            {
                rect = new Rect(0.0, 0.0, double.NaN, double.NaN);
            }
            if (double.IsInfinity(rect.Width))
            {
                rect.Width = double.NaN;
            }
            if (double.IsInfinity(rect.Height))
            {
                rect.Height = double.NaN;
            }
            using (this.ViewModel.ForceBaseValue())
            {
                using (SceneEditTransaction editTransaction = this.ViewModel.CreateEditTransaction(string.Format((IFormatProvider)CultureInfo.CurrentCulture, StringTable.UndoUnitCreateControlFormat, new object[1]
                {
                    (object)instanceType.Name
                })))
                {
                    IExpandable expandable = insertionPoint.SceneElement as IExpandable;
                    if (expandable != null)
                    {
                        insertionPoint.SceneNode.SetValue(expandable.ExpansionProperty, (object)true);
                    }
                    bool flag = this.ShouldUseDefaultInitializer && Enumerable.Any <FeatureProvider>(DefaultTypeInstantiator.GetDefaultInitializers(rawInstance));
                    IList <SceneNode> nodes = (IList <SceneNode>)null;
                    if (!flag)
                    {
                        nodes = this.CreateNodeTreeOnInsertion(rawInstance);
                        this.ApplyBeforeInsertionDefaultsToElements(nodes, rawInstance, new DefaultTypeInstantiator.SceneElementNamingCallback(DefaultTypeInstantiator.TypeNameCallback));
                    }
                    SceneNode    layoutTarget    = DefaultTypeInstantiator.GetLayoutTarget(rawInstance);
                    SceneElement selectionTarget = DefaultTypeInstantiator.GetSelectionTarget(rawInstance);
                    this.ViewModel.ElementSelectionSet.Clear();
                    insertionPoint.Insert(rawInstance);
                    editTransaction.Update();
                    this.ApplyDefaultInitializers(rawInstance);
                    if (action != null)
                    {
                        action(rawInstance);
                        editTransaction.Update();
                    }
                    if (!flag)
                    {
                        this.ApplyAfterInsertionDefaultsToElements(nodes, rawInstance);
                    }
                    SceneElement sceneElement1 = layoutTarget as SceneElement;
                    EffectNode   effectNode    = layoutTarget as EffectNode;
                    if (sceneElement1 != null && sceneElement1.IsViewObjectValid)
                    {
                        if (selectionTarget != null)
                        {
                            this.ViewModel.ElementSelectionSet.SetSelection(selectionTarget);
                        }
                        this.SetLayout(insertionPoint, rect, rawInstance, layoutTarget, editTransaction);
                    }
                    else if (effectNode != null)
                    {
                        this.ViewModel.ChildPropertySelectionSet.SetSelection((SceneNode)effectNode);
                    }
                    else
                    {
                        for (SceneNode sceneNode = layoutTarget; sceneNode != null; sceneNode = sceneNode.Parent)
                        {
                            SceneElement sceneElement2 = sceneNode as SceneElement;
                            if (sceneElement2 != null && sceneElement2.Visual != null && sceneElement2.Visual is IViewVisual)
                            {
                                this.sceneView.EnsureVisible(sceneElement2.Visual);
                                break;
                            }
                        }
                    }
                    if (this.ViewModel.DesignerContext.AmbientPropertyManager != null)
                    {
                        this.ViewModel.DesignerContext.AmbientPropertyManager.ApplyAmbientProperties(rawInstance);
                    }
                    editTransaction.Commit();
                }
            }
            return(rawInstance);
        }