private static void SetAsWpfIfUnset(SceneNode node, IPropertyId property, object value) { if (!DefaultTypeInstantiator.ShouldSet(node, property)) { return; } node.SetValueAsWpf(property, value); }
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); }
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); } } } } } } }
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); }