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)); }
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)); }