示例#1
0
        private SyntaxNode GenerateInitializeComponentMethod(VB6Form form)
        {
            var statements = new List <SyntaxNode>();

            // Initialize individual controls
            foreach (var child in WalkFormObjects(form.Children))
            {
                var targetType = typeMappings.GetMapping(child.Type);

                if (targetType.Type != null)
                {
                    statements.Add(compilationUnit.Generator.AssignmentStatement(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), child.Name), compilationUnit.Generator.ObjectCreationExpression(targetType.Type)));
                    if (targetType.IsContainer)
                    {
                        statements.Add(compilationUnit.Generator.InvocationExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), child.Name), "SuspendLayout")));
                    }
                }
            }

            statements.Add(compilationUnit.Generator.InvocationExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), "SuspendLayout")));

            statements.Add(compilationUnit.Generator.AssignmentStatement(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), "components"), compilationUnit.Generator.ObjectCreationExpression(compilationUnit.Generator.IdentifierName("System.ComponentModel.Container"))));
            statements.Add(compilationUnit.Generator.AssignmentStatement(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), "AutoScaleMode"), compilationUnit.Generator.IdentifierName("System.Windows.Forms.AutoScaleMode.Font")));

            statements.AddRange(GenerateControlProperties(form));

            // Finalize individual control initialization
            foreach (var child in WalkFormObjects(form.Children))
            {
                var targetType = typeMappings.GetMapping(child.Type);

                if (targetType.Type != null)
                {
                    if (targetType.IsContainer)
                    {
                        statements.Add(compilationUnit.Generator.InvocationExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), child.Name), "ResumeLayout"), compilationUnit.Generator.FalseLiteralExpression()));
                        statements.Add(compilationUnit.Generator.InvocationExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), child.Name), "PerformLayout")));
                    }
                }
            }

            statements.Add(compilationUnit.Generator.InvocationExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.ThisExpression(), "ResumeLayout"), compilationUnit.Generator.FalseLiteralExpression()));

            return(compilationUnit.Generator.MethodDeclaration("InitializeComponent", accessibility: Accessibility.Private, statements: statements));
        }
示例#2
0
        public string Generate(VB6Form form)
        {
            // TODO: Generate appropriate comments
            // The following block generates this code:
            // private System.ComponentModel.IContainer components = null;
            compilationUnit.Members.Add(compilationUnit.Generator.FieldDeclaration("components",
                                                                                   compilationUnit.Generator.IdentifierName("System.ComponentModel.IContainer"), Accessibility.Private, initializer: compilationUnit.Generator.NullLiteralExpression()));

            // The following block generates this code:
            //  protected override void Dispose(bool disposing) {
            //      if (disposing && (components != null)) {
            //          components.Dispose();
            //      }
            //      base.Dispose(disposing);
            //  }
            compilationUnit.Members.Add(compilationUnit.Generator.MethodDeclaration("Dispose",
                                                                                    new SyntaxNode[] { compilationUnit.Generator.ParameterDeclaration("disposing", compilationUnit.Generator.TypeExpression(SpecialType.System_Boolean)) },
                                                                                    accessibility: Accessibility.Protected,
                                                                                    modifiers: DeclarationModifiers.Override,
                                                                                    statements: new SyntaxNode[] {
                compilationUnit.Generator.IfStatement(compilationUnit.Generator.LogicalAndExpression(compilationUnit.Generator.IdentifierName("disposing"), compilationUnit.Generator.ValueNotEqualsExpression(compilationUnit.Generator.IdentifierName("components"), compilationUnit.Generator.NullLiteralExpression())),
                                                      new SyntaxNode[] { compilationUnit.Generator.InvocationExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.IdentifierName("components"), "Dispose")) }),
                compilationUnit.Generator.InvocationExpression(compilationUnit.Generator.MemberAccessExpression(compilationUnit.Generator.BaseExpression(), "Dispose"), compilationUnit.Generator.IdentifierName("disposing"))
            }));

            compilationUnit.Members.Add(GenerateInitializeComponentMethod(form));

            // Generate control field declarations
            foreach (var child in WalkFormObjects(form.Children))
            {
                var targetType = typeMappings.GetMapping(child.Type);

                if (targetType.Type != null)
                {
                    compilationUnit.Members.Add(compilationUnit.Generator.FieldDeclaration(child.Name, targetType.Type, Accessibility.Private));
                }
            }

            return(compilationUnit.Generate(form.Name));
        }