private bool CreateControls(Point dropPoint) { using (SceneEditTransaction editTransaction = this.DragModel.Document.CreateEditTransaction(StringTable.UndoUnitDragDropCreateDataboundControl)) { DataContextInfo dataContextInfo = new DataContextEvaluator().Evaluate(this.DragModel.TargetNode); DataSourceInfo other = new DataSourceInfo(new DataSchemaNodePath(this.DragModel.DataSource.PrimaryAbsoluteSchema, this.GetRelativeSchema().Root)); bool flag = false; if (dataContextInfo.DataSource == null || !dataContextInfo.DataSource.IsValidWithSource || dataContextInfo.DataSource.CompareSources(other) != DataSourceMatchCriteria.Exact) { flag = true; } IList <DataSchemaNodePath> relativeSchemaPaths = this.GetRelativeSchemaPaths(); CanvasLikeDataViewLayoutBuilder viewLayoutBuilder = new CanvasLikeDataViewLayoutBuilder(this.DragModel.InsertionPoint.InsertIndex, false); DocumentCompositeNode containerNode = (DocumentCompositeNode)this.DragModel.TargetNode.DocumentNode; DataViewFactory.GenerateDataView(this.DragModel.Platform, this.DragModel.DocumentContext, relativeSchemaPaths, DataViewCategory.Master, containerNode, (IDataViewLayoutBuilder)viewLayoutBuilder); if (flag) { viewLayoutBuilder.RebindFields(this.DragModel.ViewModel, this.DragModel.DataSource.PrimaryAbsoluteSchema, relativeSchemaPaths); } editTransaction.Update(); viewLayoutBuilder.ApplyActiveUserThemeStyle(this.DragModel.ViewModel); viewLayoutBuilder.CompleteLayout(this.DragModel.ViewModel, dropPoint); viewLayoutBuilder.SelectElements(this.DragModel.ViewModel); editTransaction.Commit(); } return(true); }
private DocumentCompositeNode GenerateDataTemplateIfNeeded(SceneNode targetNode, ITypeId dataTemplateType) { if (this.DragModel.RelativeDropSchemaPath.IsProperty) { return((DocumentCompositeNode)null); } IList <DataSchemaNodePath> relativeSchemaPaths = this.GetRelativeSchemaPaths(); if (relativeSchemaPaths.Count == 0) { return((DocumentCompositeNode)null); } DocumentCompositeNode dataTemplateNode = (DocumentCompositeNode)null; using (SceneEditTransaction editTransaction = this.DragModel.Document.CreateEditTransaction(StringTable.UndoUnitCreateTemplate)) { DataSchemaNode node = this.DragModel.RelativeDropSchemaPath.Node; DataSchemaNode dataSchemaNode = node.CollectionItem ?? node; string str = ((dataSchemaNode.Type != (Type)null ? dataSchemaNode.Type.Name : dataSchemaNode.PathName) + "Template").TrimStart('@', '/'); if (!SceneNodeIDHelper.IsCSharpID(str)) { str = "DataTemplate"; } dataTemplateNode = DataViewFactory.CreateDataTemplateResource(targetNode, ItemsControlElement.ItemTemplateProperty, str, relativeSchemaPaths, DataViewCategory.DataTemplate, dataTemplateType); editTransaction.Update(); this.ApplyActiveUserThemeStyleToDataTemplate(dataTemplateNode); editTransaction.Commit(); } return(dataTemplateNode); }
public static DocumentCompositeNode CreateDataTemplateResource(SceneNode targetElement, IPropertyId templateProperty, string resourceNameBase, IList <DataSchemaNodePath> entries, DataViewCategory category, ITypeId dataTemplateType) { SceneViewModel viewModel = targetElement.ViewModel; IPlatform platform = targetElement.Platform; IDocumentContext documentContext = viewModel.Document.DocumentContext; DocumentCompositeNode documentCompositeNode = DataViewFactory.GenerateDataView(platform, documentContext, entries, category); if (documentCompositeNode == null) { return((DocumentCompositeNode)null); } DocumentCompositeNode node = documentContext.CreateNode(dataTemplateType); node.Properties[(IPropertyId)node.Type.Metadata.DefaultContentProperty] = (DocumentNode)documentCompositeNode; CreateResourceModel createResourceModel = new CreateResourceModel(viewModel, viewModel.DesignerContext.ResourceManager, node.Type.RuntimeType, (Type)null, (string)null, (SceneElement)null, (SceneNode)null, CreateResourceModel.ContextFlags.None); createResourceModel.KeyString = resourceNameBase; bool useStaticResource = !JoltHelper.TypeSupported((ITypeResolver)viewModel.ProjectContext, PlatformTypes.DynamicResource); if (!useStaticResource && !PlatformTypes.FrameworkElement.IsAssignableFrom((ITypeId)targetElement.Type)) { useStaticResource = true; } int index = useStaticResource ? createResourceModel.IndexInResourceSite(targetElement.DocumentNode) : -1; DocumentCompositeNode resource = createResourceModel.CreateResource((DocumentNode)node, (IPropertyId)null, index); if (templateProperty != null) { DocumentNode resourceReference = createResourceModel.CreateResourceReference(documentContext, resource, useStaticResource); using (viewModel.AnimationEditor.DeferKeyFraming()) targetElement.SetValue(templateProperty, (object)resourceReference); } return((DocumentCompositeNode)resource.Properties[DictionaryEntryNode.ValueProperty]); }
private void ApplyRulesInternal(DataBindingDragDropModel model, DataBindingDragDropFlags filteredDragFlags) { if ((filteredDragFlags & DataBindingDragDropFlags.SetBinding) == DataBindingDragDropFlags.SetBinding) { if (model.InsertionPoint.Property != null) { model.DropFlags &= ~DataBindingDragDropFlags.SetBinding; IType type = model.RelativeDropSchemaPath.Type; if (type != null && BindingPropertyHelper.GetPropertyCompatibility(model.InsertionPoint.Property, type, (ITypeResolver)model.TargetNode.ProjectContext) != BindingPropertyCompatibility.None) { model.TargetProperty = model.InsertionPoint.Property; model.DropFlags |= DataBindingDragDropFlags.SetBinding; } } else if ((filteredDragFlags & DataBindingDragDropFlags.AutoPickProperty) == DataBindingDragDropFlags.AutoPickProperty) { model.TargetProperty = this.GetSpecialDefaultBindingProperty(filteredDragFlags); if (model.TargetProperty == null) { model.TargetProperty = this.GetDefaultBindingProperty(filteredDragFlags, model.RelativeDropSchemaPath); } if (model.TargetProperty != null) { model.DropFlags |= DataBindingDragDropFlags.SetBinding; } } } if ((filteredDragFlags & DataBindingDragDropFlags.CreateElement) != DataBindingDragDropFlags.CreateElement || !PlatformTypes.Panel.IsAssignableFrom((ITypeId)model.TargetNode.Type)) { return; } if (DataBindingModeModel.Instance.NormalizedMode == DataBindingMode.Default && model.RelativeDropSchemaPath.IsCollection) { model.NewElementType = !model.RelativeDropSchemaPath.IsHierarchicalCollection ? DataBindingDragDropDefaultHandler.ItemsControlType : DataBindingDragDropDefaultHandler.TreeControlType; model.NewElementProperty = (IPropertyId)model.NewElementType.GetMember(MemberType.LocalProperty, "ItemsSource", MemberAccessTypes.Public); model.DropFlags |= DataBindingDragDropFlags.CreateElement; } List <DataSchemaNode> toCreateElements = this.GetNodesToCreateElements(); if (toCreateElements.Count < model.DataSource.Count) { return; } model.DropFlags |= DataBindingDragDropFlags.CreateElement; model.NodesToCreateElements = (IList <DataSchemaNode>)toCreateElements; if (model.NewElementType != null) { return; } IType dataType = toCreateElements[0].ResolveType(model.TargetNode.DocumentNode.TypeResolver); DataViewTemplateEntry viewTemplateEntry = DataViewFactory.GetDataViewTemplateEntry(model.Platform, dataType, DataViewCategory.Master); model.NewElementType = (ITypeId)viewTemplateEntry.FieldNode.Type; model.NewElementProperty = (IPropertyId)viewTemplateEntry.FieldValueProperty; }
private bool CreateDetailsVisualization(Point dropPoint) { using (SceneEditTransaction editTransaction = this.DragModel.Document.CreateEditTransaction(StringTable.UndoUnitDragDropCreateDataboundControl)) { bool flag = true; DocumentCompositeNode containerNode = (DocumentCompositeNode)null; BaseFrameworkElement child = this.GetReusableDetailsContainer(true, this.DragModel.CheckDropFlags(DataBindingDragDropFlags.SetBinding)); if (child != null) { containerNode = (DocumentCompositeNode)child.DocumentNode; flag = false; } IList <DataSchemaNodePath> relativeSchemaPaths = this.GetRelativeSchemaPaths(); bool shouldCreateLabels = true; if (relativeSchemaPaths.Count == 1 && this.DragModel.DataSource.Count == 1 && relativeSchemaPaths[0].Node == this.DragModel.DataSource.PrimarySchemaNodePath.Node) { shouldCreateLabels = false; } CanvasLikeDataViewLayoutBuilder viewLayoutBuilder = new CanvasLikeDataViewLayoutBuilder(this.DragModel.InsertionPoint.InsertIndex, shouldCreateLabels); DocumentCompositeNode documentCompositeNode = DataViewFactory.GenerateDataView(this.DragModel.Platform, this.DragModel.DocumentContext, relativeSchemaPaths, DataViewCategory.Details, containerNode, (IDataViewLayoutBuilder)viewLayoutBuilder); if (flag) { this.DragModel.ViewModel.ElementSelectionSet.Clear(); child = (BaseFrameworkElement)this.DragModel.ViewModel.GetSceneNode((DocumentNode)documentCompositeNode); this.DragModel.InsertionPoint.Insert((SceneNode)child); this.DragModel.ViewModel.BindingEditor.CreateAndSetBindingOrData((SceneNode)child, DesignTimeProperties.DesignDataContextProperty, this.DragModel.DetailsContainerSchemaPath); } editTransaction.Update(); viewLayoutBuilder.ApplyActiveUserThemeStyle(this.DragModel.ViewModel); if (flag) { Size size = viewLayoutBuilder.CalcCombinedSize(this.DragModel.ViewModel); Rect rect = new Rect(dropPoint, new Size() { Width = Math.Max(size.Width, 200.0), Height = Math.Max(size.Height, 200.0) }); this.DragModel.ViewModel.GetLayoutDesignerForChild((SceneElement)child, true).SetChildRect(child, rect); editTransaction.Update(); this.DragModel.ViewModel.ElementSelectionSet.SetSelection((SceneElement)child); dropPoint = new Point(); } viewLayoutBuilder.CompleteLayout(this.DragModel.ViewModel, dropPoint); if (!flag) { viewLayoutBuilder.SelectElements(this.DragModel.ViewModel); } this.LinkDetailsWithMasterControl((SceneElement)child); editTransaction.Commit(); } return(true); }
private SceneNode CreateDataGridTemplateColumn(DataSchemaNodePath schemaPath) { DataGridColumnNode dataGridColumnNode = (DataGridColumnNode)this.DragModel.ViewModel.CreateSceneNode(ProjectNeutralTypes.DataGridTemplateColumn); string columnName = DataBindingDragDropDefaultHandler.GetColumnName(schemaPath); dataGridColumnNode.SetLocalValue(DataGridColumnNode.ColumnHeaderProperty, (object)columnName); string resourceNameBase = columnName + "Template"; List <DataSchemaNodePath> list = new List <DataSchemaNodePath>() { schemaPath }; DataViewFactory.CreateDataTemplateResource((SceneNode)dataGridColumnNode, DataGridColumnNode.TemplateColumnCellTemplateProperty, resourceNameBase, (IList <DataSchemaNodePath>)list, DataViewCategory.DataTemplate, PlatformTypes.DataTemplate); return((SceneNode)dataGridColumnNode); }
private List <DataSchemaNode> GetNodesToCreateElements() { IPlatform platform = this.DragModel.Platform; List <DataSchemaNode> list = new List <DataSchemaNode>(); bool flag = DataBindingModeModel.Instance.NormalizedMode == DataBindingMode.Default; DataViewCategory category = flag ? DataViewCategory.Master : DataViewCategory.Details; if (flag && this.DragModel.DataSource.Count == 1 && this.DragModel.DataSource.PrimarySchemaNodePath.IsCollection) { DataSchemaNode collectionItemNode = this.DragModel.DataSource.PrimarySchemaNodePath.EffectiveCollectionItemNode; IType type = collectionItemNode.ResolveType(this.DragModel.TargetNode.DocumentNode.TypeResolver); if (PlatformTypes.IConvertible.IsAssignableFrom((ITypeId)type) || PlatformTypes.ImageSource.IsAssignableFrom((ITypeId)type)) { list.Add(collectionItemNode); } else { foreach (DataSchemaNode dataSchemaNode in collectionItemNode.Children) { IType dataType = dataSchemaNode.ResolveType(this.DragModel.TargetNode.DocumentNode.TypeResolver); if (DataViewFactory.GetDataViewTemplateEntry(platform, dataType, category) != null) { list.Add(dataSchemaNode); } } } } else { for (int index = 0; index < this.DragModel.DataSource.Count; ++index) { DataSchemaNodePath dataSchemaNodePath = this.DragModel.DataSource[index]; if (DataViewFactory.GetDataViewTemplateEntry(platform, dataSchemaNodePath.Type, category) != null) { list.Add(dataSchemaNodePath.Node); } } } list.Sort((Comparison <DataSchemaNode>)((a, b) => StringLogicalComparer.Instance.Compare(a.PathName, b.PathName))); return(list); }
public static DocumentCompositeNode GenerateDataView(IPlatform platform, IDocumentContext documentContext, IList <DataSchemaNodePath> entries, DataViewCategory category) { return(DataViewFactory.GenerateDataView(platform, documentContext, entries, category, (DocumentCompositeNode)null, (IDataViewLayoutBuilder)null)); }