/// <summary> /// Generates control fields /// </summary> /// <param name="source">The source.</param> /// <param name="classType">Type of the class.</param> /// <param name="method">The method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, method, generateField); Track track = source as Track; if (track != null) { CodeComHelper.GenerateField<bool>(method, fieldReference, source, Track.IsDirectionReversedProperty); TypeGenerator generator = new TypeGenerator(); if (track.IncreaseRepeatButton != null) { CodeExpression incButton = generator.ProcessGenerators(track.IncreaseRepeatButton, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "IncreaseRepeatButton"), incButton)); } if (track.DecreaseRepeatButton != null) { CodeExpression decButton = generator.ProcessGenerators(track.DecreaseRepeatButton, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "DecreaseRepeatButton"), decButton)); } if (track.Thumb != null) { CodeExpression thumb = generator.ProcessGenerators(track.Thumb, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "Thumb"), thumb)); } } return fieldReference; }
/// <summary> /// Generates control fields /// </summary> /// <param name="source">The source.</param> /// <param name="classType">Type of the class.</param> /// <param name="method">The method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, method, generateField); Track track = source as Track; if (track != null) { TypeGenerator generator = new TypeGenerator(); if (track.IncreaseRepeatButton != null) { CodeExpression incButton = generator.ProcessGenerators(track.IncreaseRepeatButton, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "IncreaseRepeatButton"), incButton)); } if (track.DecreaseRepeatButton != null) { CodeExpression decButton = generator.ProcessGenerators(track.DecreaseRepeatButton, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "DecreaseRepeatButton"), decButton)); } if (track.Thumb != null) { CodeExpression thumb = generator.ProcessGenerators(track.Thumb, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "Thumb"), thumb)); } } return(fieldReference); }
/// <summary> /// Generates code /// </summary> /// <param name="source">The dependence object</param> /// <param name="classType">Type of the class.</param> /// <param name="initMethod">The initialize method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField); DataGrid grid = source as DataGrid; CodeComHelper.GenerateEnumField<DataGridSelectionMode>(initMethod, fieldReference, source, DataGrid.SelectionModeProperty); CodeComHelper.GenerateField<bool>(initMethod, fieldReference, source, DataGrid.AutoGenerateColumnsProperty); CodeComHelper.GenerateField<bool>(initMethod, fieldReference, source, DataGrid.EnableRowVirtualizationProperty); CodeComHelper.GenerateEnumField<ScrollBarVisibility>(initMethod, fieldReference, source, DataGrid.HorizontalScrollBarVisibilityProperty); CodeComHelper.GenerateEnumField<ScrollBarVisibility>(initMethod, fieldReference, source, DataGrid.VerticalScrollBarVisibilityProperty); if (grid.Columns.Count > 0) { TypeGenerator colGenerator = new TypeGenerator(); for (int i = 0; i < grid.Columns.Count; i++) { var column = grid.Columns[i]; DataGridColumnGeneratorType.ColumnName = grid.Name + "_Col" + i; CodeExpression expr = colGenerator.ProcessGenerators(column, classType, initMethod, false); if (expr == null) { continue; } initMethod.Statements.Add(new CodeMethodInvokeExpression(fieldReference, "Columns.Add", expr)); } } return fieldReference; }
/// <summary> /// Generates code /// </summary> /// <param name="source">The dependence object</param> /// <param name="classType">Type of the class.</param> /// <param name="initMethod">The initialize method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField); DataGrid grid = source as DataGrid; CodeComHelper.GenerateEnumField <DataGridSelectionMode>(initMethod, fieldReference, source, DataGrid.SelectionModeProperty); CodeComHelper.GenerateField <bool>(initMethod, fieldReference, source, DataGrid.AutoGenerateColumnsProperty); CodeComHelper.GenerateEnumField <ScrollBarVisibility>(initMethod, fieldReference, source, DataGrid.HorizontalScrollBarVisibilityProperty); CodeComHelper.GenerateEnumField <ScrollBarVisibility>(initMethod, fieldReference, source, DataGrid.VerticalScrollBarVisibilityProperty); if (grid.Columns.Count > 0) { TypeGenerator colGenerator = new TypeGenerator(); for (int i = 0; i < grid.Columns.Count; i++) { var column = grid.Columns[i]; DataGridColumnGeneratorType.ColumnName = grid.Name + "_Col" + i; CodeExpression expr = colGenerator.ProcessGenerators(column, classType, initMethod, false); if (expr == null) { continue; } initMethod.Statements.Add(new CodeMethodInvokeExpression(fieldReference, "Columns.Add", expr)); } } return(fieldReference); }
/// <summary> /// Generates code /// </summary> /// <param name="source">The dependence object</param> /// <param name="classType">Type of the class.</param> /// <param name="method">The initialize method.</param> /// <param name="generateField"></param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, method, generateField); ItemsControl itemsControl = source as ItemsControl; CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, ItemsControl.ItemsPanelProperty); CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, ItemsControl.ItemTemplateProperty); if (itemsControl.Items.Count > 0) { TypeGenerator typeGenerator = new TypeGenerator(); ValueGenerator valueGenerator = new ValueGenerator(); CodeMemberMethod itemsMethod = new CodeMemberMethod(); itemsMethod.Attributes = MemberAttributes.Static | MemberAttributes.Private; itemsMethod.Name = "Get_" + itemsControl.Name + "_Items"; itemsMethod.ReturnType = new CodeTypeReference(typeof(ObservableCollection <object>)); classType.Members.Add(itemsMethod); CodeVariableDeclarationStatement collection = new CodeVariableDeclarationStatement( typeof(ObservableCollection <object>), "items", new CodeObjectCreateExpression(typeof(ObservableCollection <object>))); itemsMethod.Statements.Add(collection); CodeVariableReferenceExpression itemsVar = new CodeVariableReferenceExpression("items"); foreach (var item in itemsControl.Items) { Type itemType = item.GetType(); CodeExpression itemExpr = null; if (typeGenerator.HasGenerator(itemType)) { itemExpr = typeGenerator.ProcessGenerators(item, classType, itemsMethod, false); } else { itemExpr = valueGenerator.ProcessGenerators(classType, itemsMethod, item, itemsControl.Name); } if (itemExpr != null) { CodeMethodInvokeExpression addItem = new CodeMethodInvokeExpression(itemsVar, "Add", itemExpr); itemsMethod.Statements.Add(addItem); } else { CodeComHelper.GenerateError(itemsMethod, string.Format("Type {0} in Items Control collection not supported", itemType.Name)); } } CodeMethodReturnStatement returnStatement = new CodeMethodReturnStatement(itemsVar); itemsMethod.Statements.Add(returnStatement); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "ItemsSource"), new CodeMethodInvokeExpression(null, itemsMethod.Name))); } return(fieldReference); }
/// <summary> /// Generates code /// </summary> /// <param name="source">The dependence object</param> /// <param name="classType">Type of the class.</param> /// <param name="method">The initialize method.</param> /// <param name="generateField"></param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, method, generateField); ItemsControl itemsControl = source as ItemsControl; CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, ItemsControl.ItemsPanelProperty); CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, ItemsControl.ItemTemplateProperty); if (itemsControl.Items.Count > 0) { TypeGenerator typeGenerator = new TypeGenerator(); ValueGenerator valueGenerator = new ValueGenerator(); CodeMemberMethod itemsMethod = new CodeMemberMethod(); itemsMethod.Attributes = MemberAttributes.Static | MemberAttributes.Private; itemsMethod.Name = "Get_" + itemsControl.Name + "_Items"; itemsMethod.ReturnType = new CodeTypeReference(typeof(ObservableCollection<object>)); classType.Members.Add(itemsMethod); CodeVariableDeclarationStatement collection = new CodeVariableDeclarationStatement( typeof(ObservableCollection<object>), "items", new CodeObjectCreateExpression(typeof(ObservableCollection<object>))); itemsMethod.Statements.Add(collection); CodeVariableReferenceExpression itemsVar = new CodeVariableReferenceExpression("items"); foreach (var item in itemsControl.Items) { Type itemType = item.GetType(); CodeExpression itemExpr = null; if (typeGenerator.HasGenerator(itemType)) { itemExpr = typeGenerator.ProcessGenerators(item, classType, itemsMethod, false); } else { itemExpr = valueGenerator.ProcessGenerators(classType, itemsMethod, item, itemsControl.Name); } if (itemExpr != null) { CodeMethodInvokeExpression addItem = new CodeMethodInvokeExpression(itemsVar, "Add", itemExpr); itemsMethod.Statements.Add(addItem); } else { CodeComHelper.GenerateError(itemsMethod, string.Format("Type {0} in Items Control collection not supported", itemType.Name)); } } CodeMethodReturnStatement returnStatement = new CodeMethodReturnStatement(itemsVar); itemsMethod.Statements.Add(returnStatement); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "ItemsSource"), new CodeMethodInvokeExpression(null, itemsMethod.Name))); } return fieldReference; }
/// <summary> /// Generates code /// </summary> /// <param name="source">The dependence object</param> /// <param name="classType">Type of the class.</param> /// <param name="method">The initialize method.</param> /// <param name="generateField"></param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, method, generateField); ItemsControl itemsControl = source as ItemsControl; CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, ItemsControl.ItemsPanelProperty); CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, ItemsControl.ItemTemplateProperty); if (itemsControl.Items.Count > 0) { TypeGenerator itemGenerator = new TypeGenerator(); CodeMemberMethod itemsMethod = new CodeMemberMethod(); itemsMethod.Name = "Get_" + itemsControl.Name + "_Items"; itemsMethod.ReturnType = new CodeTypeReference(typeof(ObservableCollection <object>)); classType.Members.Add(itemsMethod); CodeVariableDeclarationStatement collection = new CodeVariableDeclarationStatement( typeof(ObservableCollection <object>), "items", new CodeObjectCreateExpression(typeof(ObservableCollection <object>))); itemsMethod.Statements.Add(collection); CodeVariableReferenceExpression itemsVar = new CodeVariableReferenceExpression("items"); foreach (var item in itemsControl.Items) { CodeExpression itemExpr = itemGenerator.ProcessGenerators(item, classType, itemsMethod, false); if (itemExpr != null) { CodeMethodInvokeExpression addItem = new CodeMethodInvokeExpression(itemsVar, "Add", itemExpr); itemsMethod.Statements.Add(addItem); } } CodeMethodReturnStatement returnStatement = new CodeMethodReturnStatement(itemsVar); itemsMethod.Statements.Add(returnStatement); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "ItemsSource"), new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), itemsMethod.Name))); } return(fieldReference); }
/// <summary> /// Generates control fields /// </summary> /// <param name="source">The source.</param> /// <param name="classType">Type of the class.</param> /// <param name="initMethod">The initialize method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField); HeaderedItemsControl control = source as HeaderedItemsControl; UIElement header = control.Header as UIElement; if (header != null) { TypeGenerator headerGenerator = new TypeGenerator(); CodeExpression headerExpr = headerGenerator.ProcessGenerators(header, classType, initMethod, false); initMethod.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "Header"), headerExpr)); } else if (control.Header != null) { CodeComHelper.GenerateField<object>(initMethod, fieldReference, source, HeaderedContentControl.HeaderProperty); // TODO content can be another class, so this will not work } return fieldReference; }
/// <summary> /// Generates control fields /// </summary> /// <param name="source">The source.</param> /// <param name="classType">Type of the class.</param> /// <param name="initMethod">The initialize method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public override CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod initMethod, bool generateField) { CodeExpression fieldReference = base.Generate(source, classType, initMethod, generateField); HeaderedContentControl control = source as HeaderedContentControl; UIElement header = control.Header as UIElement; if (header != null) { TypeGenerator headerGenerator = new TypeGenerator(); CodeExpression headerExpr = headerGenerator.ProcessGenerators(header, classType, initMethod, false); initMethod.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "Header"), headerExpr)); } else if (control.Header != null) { CodeComHelper.GenerateField <object>(initMethod, fieldReference, source, HeaderedContentControl.HeaderProperty); // TODO content can be another class, so this will not work } return(fieldReference); }
/// <summary> /// Generates control fields /// </summary> /// <param name="source">The source.</param> /// <param name="classType">Type of the class.</param> /// <param name="method">The method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public virtual CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField) { DataGridColumn column = source as DataGridColumn; string typeName = source.GetType().Name; string name = ColumnName; CodeExpression fieldReference = new CodeVariableReferenceExpression(name); CodeTypeReference variableType = new CodeTypeReference(typeName); CodeVariableDeclarationStatement declaration = new CodeVariableDeclarationStatement(variableType, name); declaration.InitExpression = new CodeObjectCreateExpression(typeName); method.Statements.Add(declaration); if (CodeComHelper.IsValidForFieldGenerator(source.ReadLocalValue(DataGridColumn.WidthProperty))) { DataGridLength value = (DataGridLength)source.GetValue(DataGridColumn.WidthProperty); if (value.UnitType == DataGridLengthUnitType.Pixel) { method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name), new CodePrimitiveExpression((float)value.Value))); } } CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, DataGridColumn.MaxWidthProperty); CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, DataGridColumn.MinWidthProperty); CodeComHelper.GenerateEnumField<Visibility>(method, fieldReference, source, DataGridColumn.VisibilityProperty); CodeComHelper.GenerateField<string>(method, fieldReference, source, DataGridColumn.SortMemberPathProperty); UIElement header = column.Header as UIElement; if (header != null) { TypeGenerator headerGenerator = new TypeGenerator(); CodeExpression headerExpr = headerGenerator.ProcessGenerators(header, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "Header"), headerExpr)); } else if (column.Header != null) { CodeComHelper.GenerateField<object>(method, fieldReference, source, DataGridColumn.HeaderProperty); // TODO content can be another class, so this will not work } CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, DataGridColumn.HeaderStyleProperty, name + "_h"); return fieldReference; }
/// <summary> /// Generates control fields /// </summary> /// <param name="source">The source.</param> /// <param name="classType">Type of the class.</param> /// <param name="method">The method.</param> /// <param name="generateField">if set to <c>true</c> [generate field].</param> /// <returns></returns> public virtual CodeExpression Generate(DependencyObject source, CodeTypeDeclaration classType, CodeMemberMethod method, bool generateField) { DataGridColumn column = source as DataGridColumn; string typeName = source.GetType().Name; string name = ColumnName; CodeExpression fieldReference = new CodeVariableReferenceExpression(name); CodeTypeReference variableType = new CodeTypeReference(typeName); CodeVariableDeclarationStatement declaration = new CodeVariableDeclarationStatement(variableType, name); declaration.InitExpression = new CodeObjectCreateExpression(typeName); method.Statements.Add(declaration); if (CodeComHelper.IsValidForFieldGenerator(source.ReadLocalValue(DataGridColumn.WidthProperty))) { DataGridLength value = (DataGridLength)source.GetValue(DataGridColumn.WidthProperty); CodeTypeReferenceExpression dglType = new CodeTypeReferenceExpression("DataGridLength"); switch (value.UnitType) { case DataGridLengthUnitType.Auto: // AUTO is default value so we don't need to generate any code break; case DataGridLengthUnitType.Pixel: method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name), new CodePrimitiveExpression((float)value.Value))); break; case DataGridLengthUnitType.SizeToCells: method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name), new CodeFieldReferenceExpression(dglType, "SizeToCells"))); break; case DataGridLengthUnitType.SizeToHeader: method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name), new CodeFieldReferenceExpression(dglType, "SizeToHeader"))); break; case DataGridLengthUnitType.Star: method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, DataGridColumn.WidthProperty.Name), new CodeObjectCreateExpression("DataGridLength", new CodePrimitiveExpression(Convert.ToSingle(value.Value)), new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("DataGridLengthUnitType"), "Star")))); break; default: break; } } CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, DataGridColumn.MaxWidthProperty); CodeComHelper.GenerateFieldDoubleToFloat(method, fieldReference, source, DataGridColumn.MinWidthProperty); CodeComHelper.GenerateEnumField <Visibility>(method, fieldReference, source, DataGridColumn.VisibilityProperty); CodeComHelper.GenerateField <string>(method, fieldReference, source, DataGridColumn.SortMemberPathProperty); UIElement header = column.Header as UIElement; if (header != null) { TypeGenerator headerGenerator = new TypeGenerator(); CodeExpression headerExpr = headerGenerator.ProcessGenerators(header, classType, method, false); method.Statements.Add(new CodeAssignStatement( new CodeFieldReferenceExpression(fieldReference, "Header"), headerExpr)); } else if (column.Header != null) { CodeComHelper.GenerateField <object>(method, fieldReference, source, DataGridColumn.HeaderProperty); // TODO content can be another class, so this will not work } CodeComHelper.GenerateTemplateStyleField(classType, method, fieldReference, source, DataGridColumn.HeaderStyleProperty, name + "_h"); return(fieldReference); }