Example #1
0
        void LoadDesigner()
        {
            groupInfo = project.GetActionGroup(groupName);
            if (groupInfo == null)
            {
                // Group not found
                return;
            }

            group             = (Stetic.ActionGroupComponent)groupInfo.Component;
            project.Unloaded += OnDisposeProject;

            designer = project.SteticProject.CreateActionGroupDesigner(groupInfo, false);
            designer.AllowActionBinding = project.Project.UsePartialTypes;
            designer.BindField         += new EventHandler(OnBindField);

            ActionGroupPage actionsPage = new ActionGroupPage();

            actionsPage.PackStart(designer, true, true, 0);
            actionsPage.ShowAll();

            AddButton(GettextCatalog.GetString("Actions"), actionsPage);

            designer.ModifiedChanged      += OnGroupModified;
            designer.SignalAdded          += OnSignalAdded;
            designer.SignalChanged        += OnSignalChanged;
            designer.RootComponentChanged += OnRootComponentChanged;

            codeBinder = new CodeBinder(project.Project, new OpenDocumentFileProvider(), designer.RootComponent);
        }
Example #2
0
		void LoadDesigner ()
		{
			groupInfo = project.GetActionGroup (groupName);
			if (groupInfo == null)
				// Group not found
				return;
			
			group = (Stetic.ActionGroupComponent) groupInfo.Component;
			project.Unloaded += OnDisposeProject;
			
			designer = project.SteticProject.CreateActionGroupDesigner (groupInfo, false);
			designer.AllowActionBinding = project.Project.UsePartialTypes;
			designer.BindField += new EventHandler (OnBindField);
			
			ActionGroupPage actionsPage = new ActionGroupPage ();
			actionsPage.PackStart (designer, true, true, 0);
			actionsPage.ShowAll ();
			
			AddButton (GettextCatalog.GetString ("Actions"), actionsPage);
			
			designer.ModifiedChanged += OnGroupModified;
			designer.SignalAdded += OnSignalAdded;
			designer.SignalChanged += OnSignalChanged;
			designer.RootComponentChanged += OnRootComponentChanged;

			codeBinder = new CodeBinder (project.Project, new OpenDocumentFileProvider (), designer.RootComponent);
		}
        static IUnresolvedTypeDefinition CreateClass(Project project, Stetic.ActionGroupComponent group, string name, string namspace, string folder)
        {
            string fullName = namspace.Length > 0 ? namspace + "." + name : name;

            var type = new CodeTypeDeclaration();

            type.Name    = name;
            type.IsClass = true;
            type.BaseTypes.Add(new CodeTypeReference("Gtk.ActionGroup"));

            // Generate the constructor. It contains the call that builds the widget.

            var ctor = new CodeConstructor();

            ctor.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            ctor.BaseConstructorArgs.Add(new CodePrimitiveExpression(fullName));

            var call = new CodeMethodInvokeExpression(
                new CodeMethodReferenceExpression(
                    new CodeTypeReferenceExpression("Stetic.Gui"),
                    "Build"
                    ),
                new CodeThisReferenceExpression(),
                new CodeTypeOfExpression(fullName)
                );

            ctor.Statements.Add(call);
            type.Members.Add(ctor);

            // Add signal handlers
            foreach (Stetic.ActionComponent action in group.GetActions())
            {
                foreach (Stetic.Signal signal in action.GetSignals())
                {
                    CodeMemberMethod met = new CodeMemberMethod();
                    met.Name       = signal.Handler;
                    met.Attributes = MemberAttributes.Family;
                    met.ReturnType = new CodeTypeReference(signal.SignalDescriptor.HandlerReturnTypeName);

                    foreach (Stetic.ParameterDescriptor pinfo in signal.SignalDescriptor.HandlerParameters)
                    {
                        met.Parameters.Add(new CodeParameterDeclarationExpression(pinfo.TypeName, pinfo.Name));
                    }

                    type.Members.Add(met);
                }
            }

            // Create the class
            return(CodeGenerationService.AddType((DotNetProject)project, folder, namspace, type));
        }
        static ITypeSymbol CreateClass(MonoDevelop.Projects.Project project, Stetic.ActionGroupComponent group, string name, string namspace, string folder)
        {
            string fullName = namspace.Length > 0 ? namspace + "." + name : name;

            var type = SyntaxFactory.ClassDeclaration(name)
                       .AddBaseListTypes(SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("Gtk.ActionGroup")));

            // Generate the constructor. It contains the call that builds the widget.
            var members = new SyntaxList <MemberDeclarationSyntax> ();

            var ctor = SyntaxFactory.ConstructorDeclaration(
                new SyntaxList <AttributeListSyntax> (),
                SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)),
                SyntaxFactory.Identifier(name),
                SyntaxFactory.ParameterList(),
                SyntaxFactory.ConstructorInitializer(SyntaxKind.BaseKeyword, SyntaxFactory.ArgumentList(new SeparatedSyntaxList <ArgumentSyntax> {
                SyntaxFactory.Argument(SyntaxFactory.ParseExpression(fullName))
            })),
                SyntaxFactory.Block(
                    SyntaxFactory.ExpressionStatement(
                        SyntaxFactory.InvocationExpression(
                            SyntaxFactory.ParseExpression("Stetic.Gui.Build"),
                            SyntaxFactory.ArgumentList(
                                new SeparatedSyntaxList <ArgumentSyntax> {
                SyntaxFactory.Argument(SyntaxFactory.ThisExpression()),
                SyntaxFactory.Argument(SyntaxFactory.ParseExpression(fullName))
            }
                                )
                            )
                        )
                    )
                );

            type = type.AddMembers(ctor);

            // Add signal handlers
            foreach (Stetic.ActionComponent action in group.GetActions())
            {
                foreach (Stetic.Signal signal in action.GetSignals())
                {
                    var parameters = new SeparatedSyntaxList <ParameterSyntax> ();
                    foreach (var p in signal.SignalDescriptor.HandlerParameters)
                    {
                        parameters = parameters.Add(SyntaxFactory.Parameter(new SyntaxList <AttributeListSyntax> (), SyntaxFactory.TokenList(), SyntaxFactory.ParseTypeName(p.TypeName), SyntaxFactory.Identifier(p.Name), null));
                    }

                    var met = SyntaxFactory.MethodDeclaration(
                        new SyntaxList <AttributeListSyntax> (),
                        SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.ProtectedKeyword)),
                        SyntaxFactory.ParseTypeName(signal.SignalDescriptor.HandlerReturnTypeName),
                        null,
                        SyntaxFactory.Identifier(signal.Handler),
                        null,
                        SyntaxFactory.ParameterList(parameters),
                        new SyntaxList <TypeParameterConstraintClauseSyntax> (),
                        SyntaxFactory.Block(),
                        null
                        );


                    type = type.AddMembers(met);
                }
            }

            // Create the class
            return(CodeGenerationService.AddType((DotNetProject)project, folder, namspace, type));
        }
Example #5
0
        static IType CreateClass(Project project, Stetic.ActionGroupComponent group, string name, string namspace, string folder)
        {
            string fullName = namspace.Length > 0 ? namspace + "." + name : name;

            CodeRefactorer gen = new CodeRefactorer(project.ParentSolution);

            CodeTypeDeclaration type = new CodeTypeDeclaration();

            type.Name    = name;
            type.IsClass = true;
            type.BaseTypes.Add(new CodeTypeReference("Gtk.ActionGroup"));

            // Generate the constructor. It contains the call that builds the widget.

            CodeConstructor ctor = new CodeConstructor();

            ctor.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            ctor.BaseConstructorArgs.Add(new CodePrimitiveExpression(fullName));

            CodeMethodInvokeExpression call = new CodeMethodInvokeExpression(
                new CodeMethodReferenceExpression(
                    new CodeTypeReferenceExpression("Stetic.Gui"),
                    "Build"
                    ),
                new CodeThisReferenceExpression(),
                new CodeTypeOfExpression(fullName)
                );

            ctor.Statements.Add(call);
            type.Members.Add(ctor);

            // Add signal handlers

            foreach (Stetic.ActionComponent action in group.GetActions())
            {
                foreach (Stetic.Signal signal in action.GetSignals())
                {
                    CodeMemberMethod met = new CodeMemberMethod();
                    met.Name       = signal.Handler;
                    met.Attributes = MemberAttributes.Family;
                    met.ReturnType = new CodeTypeReference(signal.SignalDescriptor.HandlerReturnTypeName);

                    foreach (Stetic.ParameterDescriptor pinfo in signal.SignalDescriptor.HandlerParameters)
                    {
                        met.Parameters.Add(new CodeParameterDeclarationExpression(pinfo.TypeName, pinfo.Name));
                    }

                    type.Members.Add(met);
                }
            }

            // Create the class

            IType cls = null;

            cls = gen.CreateClass(project, ((DotNetProject)project).LanguageName, folder, namspace, type);
            if (cls == null)
            {
                throw new UserException("Could not create class " + fullName);
            }

            project.AddFile(cls.CompilationUnit.FileName, BuildAction.Compile);
            IdeApp.ProjectOperations.Save(project);

#if TRUNK
            // Make sure the database is up-to-date
            ProjectDomService.Parse(project, cls.CompilationUnit.FileName);
#else
            ProjectDomService.Parse(project, cls.CompilationUnit.FileName, null);
#endif
            return(cls);
        }