Esempio n. 1
0
        public override bool ShowMethod(EventDescription eventDescription, string methodName)
        {
            CodeDomDocDataAdapter adapter       = GetDocDataAdapterForXSharpFile();
            List <CodeTypeMember> methodsToShow = GetHandlersFromActiveFile(methodName);

            if (methodsToShow == null || methodsToShow.Count < 1)
            {
                return(false);
            }

            Point point = new Point();

            if (methodsToShow[0] != null)
            {
                //We can't navigate to every method, so just take the first one in the list.
                object pt = methodsToShow[0].UserData[typeof(Point)];

                if (pt != null)
                {
                    point = (Point)pt;
                }
            }

            //Get IVsTextManager to navigate to the code
            IVsTextManager mgr         = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(VsTextManagerClass)) as IVsTextManager;
            Guid           logViewCode = VSConstants.LOGVIEWID_Code;

            return(ErrorHandler.Succeeded(mgr.NavigateToLineAndColumn(adapter.DocData.Buffer, ref logViewCode, point.Y - 1, point.X, point.Y - 1, point.X)));
        }
        /// <summary>
        /// This method will get the CodeDomDocDataAdapter corresponding to the active XAML file in
        /// the designer.
        /// </summary>
        /// <returns>The CodeDomDocDataAdapter for the .py file that corresponds to the active xaml file</returns>
        public CodeDomDocDataAdapter GetDocDataAdapterForPyFile()
        {
            IVSMDCodeDomProvider codeDom = (new ServiceProvider(pyFile.OleServiceProvider, true)).GetService(typeof(SVSMDCodeDomProvider)) as IVSMDCodeDomProvider;
            DocData data = new DocData((project as PythonProjectNode).ProjectMgr.Site, pyFile.Url);
            CodeDomDocDataAdapter cdDocDataAdapter = new CodeDomDocDataAdapter((project as PythonProjectNode).ProjectMgr.Site, data);

            return(cdDocDataAdapter);
        }
Esempio n. 3
0
        /// <summary>
        /// This method will get the CodeTypeDeclaration corresponding to the active XAML file in
        /// the designer.
        /// </summary>
        /// <returns>The CodeTypeDeclaration for the .prg file that corresponds to the active xaml file</returns>
        CodeTypeDeclaration GetCodeDomForXSharpFile()
        {
            CodeDomDocDataAdapter cdda = GetDocDataAdapterForXSharpFile();
            // That will call the Parse method in VSXSharpCodeDomProvider class
            CodeTypeDeclaration ctd = cdda.TypeDeclaration;
            //
            CodeCompileUnit ccu = cdda.CompileUnit;

            //
            return(ctd);
        }
Esempio n. 4
0
        /// <summary>
        /// This method will get the CodeDomDocDataAdapter corresponding to the active XAML file in
        /// the designer.
        /// </summary>
        /// <returns>The CodeDomDocDataAdapter for the .prg file that corresponds to the active xaml file</returns>
        CodeDomDocDataAdapter GetDocDataAdapterForXSharpFile()
        {
            if (_cdda == null)
            {
                var codeDom = (IVSMDCodeDomProvider)(new ServiceProvider(_xsFile.OleServiceProvider, true)).GetService(typeof(SVSMDCodeDomProvider));
                var data    = new DocData(((XSharpProjectNode)_project).ProjectMgr.Site, _xsFile.Url);

                _cdda = new CodeDomDocDataAdapter((_project as XSharpProjectNode).ProjectMgr.Site, data);
            }
            return(_cdda);
        }
        public override bool CreateMethod(EventDescription eventDescription, string methodName)
        {
            CodeMemberMethod method = new CodeMemberMethod();

            method.Name = methodName;

            foreach (EventParameter param in eventDescription.Parameters)
            {
                method.Parameters.Add(new CodeParameterDeclarationExpression(param.TypeName, param.Name));
            }
            //Finally, add the new method to the class
            CodeDomDocDataAdapter adapter = GetDocDataAdapterForPyFile();

            adapter.TypeDeclaration.Members.Add(method);
            adapter.Generate();
            return(true);
        }
Esempio n. 6
0
        public override bool AddEventHandler(EventDescription eventDescription, string objectName, string methodName)
        {
            //FixMe: VladD2: Какая-то питоновская чушь! Надо разобраться и переписать.
            const string Init = "__init__";

            //This is not the most optimal solution for WPF since we will call FindLogicalNode for each event handler,
            //but it simplifies the code generation for now.

            CodeDomDocDataAdapter adapter = GetDocDataAdapterForNemerleFile();
            CodeMemberMethod      method  = null;

            //Find the __init__ method
            foreach (CodeTypeMember ctMember in adapter.TypeDeclaration.Members)
            {
                if (ctMember is CodeConstructor)
                {
                    if (ctMember.Name == Init)
                    {
                        method = ctMember as CodeMemberMethod;
                        break;
                    }
                }
            }

            if (method == null)
            {
                method      = new CodeConstructor();
                method.Name = Init;
            }

            //Create a code statement which looks like: LogicalTreeHelper.FindLogicalNode(self.Root, "button1").Click += self.button1_Click
            var logicalTreeHelper        = new CodeTypeReferenceExpression("LogicalTreeHelper");
            var findLogicalNodeMethod    = new CodeMethodReferenceExpression(logicalTreeHelper, "FindLogicalNode");
            var selfWindow               = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Root");
            var findLogicalNodeInvoke    = new CodeMethodInvokeExpression(findLogicalNodeMethod, selfWindow, new CodeSnippetExpression("\'" + objectName + "\'"));
            var createDelegateExpression = new CodeDelegateCreateExpression(new CodeTypeReference("System.EventHandler"), new CodeThisReferenceExpression(), methodName);
            var attachEvent              = new CodeAttachEventStatement(findLogicalNodeInvoke, eventDescription.Name, createDelegateExpression);

            method.Statements.Add(attachEvent);
            adapter.Generate();

            return(true);
        }
 /// <summary>
 /// This method will get the CodeDomDocDataAdapter corresponding to the active XAML file in
 /// the designer.
 /// </summary>
 /// <returns>The CodeDomDocDataAdapter for the .py file that corresponds to the active xaml file</returns>
 public CodeDomDocDataAdapter GetDocDataAdapterForPyFile()
 {
     IVSMDCodeDomProvider codeDom = (new ServiceProvider(pyFile.OleServiceProvider, true)).GetService(typeof(SVSMDCodeDomProvider)) as IVSMDCodeDomProvider;
     DocData data = new DocData((project as PythonProjectNode).ProjectMgr.Site, pyFile.Url);
     CodeDomDocDataAdapter cdDocDataAdapter = new CodeDomDocDataAdapter((project as PythonProjectNode).ProjectMgr.Site, data);
     return cdDocDataAdapter;
 }