コード例 #1
0
        /// <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;
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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;
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        /// <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;
        }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
        /// <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;
        }
コード例 #11
0
        /// <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);
        }