예제 #1
0
        public int CreateEditorInstance(
            uint grfCreateDoc,
            string pszMkDocument,
            string pszPhysicalView,
            IVsHierarchy pvHier,
            uint itemid,
            System.IntPtr punkDocDataExisting,
            out System.IntPtr ppunkDocView,
            out System.IntPtr ppunkDocData,
            out string pbstrEditorCaption,
            out Guid pguidCmdUI,
            out int pgrfCDW)
        {
            Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering {0} CreateEditorInstace()", this.ToString()));

            // Initialize to null
            ppunkDocView       = IntPtr.Zero;
            ppunkDocData       = IntPtr.Zero;
            pguidCmdUI         = Constants.EtoPreviewEditorFactory_guid;
            pgrfCDW            = 0;
            pbstrEditorCaption = null;


            if (!BuilderInfo.Supports(pszMkDocument))
            {
                return(VSConstants.VS_E_UNSUPPORTEDFORMAT);
            }

            // Validate inputs
            if ((grfCreateDoc & (VSConstants.CEF_OPENFILE | VSConstants.CEF_SILENT)) == 0)
            {
                return(VSConstants.E_INVALIDARG);
            }

            // Get or open text buffer
            var textBuffer = GetTextBuffer(punkDocDataExisting, pszMkDocument);

            if (textBuffer == null)
            {
                return(VSConstants.VS_E_INCOMPATIBLEDOCDATA);
            }

            if (punkDocDataExisting != IntPtr.Zero)
            {
                ppunkDocData = punkDocDataExisting;
                Marshal.AddRef(ppunkDocData);
            }
            else
            {
                ppunkDocData = Marshal.GetIUnknownForObject(textBuffer);
            }

            // Create the Document (editor)
            var editor = new EtoPreviewPane(editorPackage, pszMkDocument, textBuffer);

            ppunkDocView = Marshal.GetIUnknownForObject(editor);
            //pbstrEditorCaption = " [Preview]";
            return(VSConstants.S_OK);
        }
예제 #2
0
        public int CreateEditorInstance(
            uint grfCreateDoc,
            string pszMkDocument,
            string pszPhysicalView,
            IVsHierarchy pvHier,
            uint itemid,
            System.IntPtr punkDocDataExisting,
            out System.IntPtr ppunkDocView,
            out System.IntPtr ppunkDocData,
            out string pbstrEditorCaption,
            out Guid pguidCmdUI,
            out int pgrfCDW)
        {
            Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering {0} CreateEditorInstace()", this.ToString()));

            // Initialize to null
            ppunkDocView       = IntPtr.Zero;
            ppunkDocData       = IntPtr.Zero;
            pguidCmdUI         = Constants.EtoPreviewEditorFactory_guid;
            pgrfCDW            = 0;
            pbstrEditorCaption = null;


            if (!BuilderInfo.Supports(pszMkDocument))
            {
                return(VSConstants.VS_E_UNSUPPORTEDFORMAT);
            }

            // Validate inputs
            if ((grfCreateDoc & (VSConstants.CEF_OPENFILE | VSConstants.CEF_SILENT)) == 0)
            {
                return(VSConstants.E_INVALIDARG);
            }

            object prjItemObject;
            var    projectItemId = VSConstants.VSITEMID_ROOT;

            pvHier.GetProperty(projectItemId, (int)__VSHPROPID.VSHPROPID_ExtObject, out prjItemObject);
            var proj = prjItemObject as EnvDTE.Project;

            // Get or open text buffer
            var textBuffer = GetTextBuffer(punkDocDataExisting, pszMkDocument, ToVsProject(proj));

            if (textBuffer == null)
            {
                return(VSConstants.VS_E_INCOMPATIBLEDOCDATA);
            }

            if (punkDocDataExisting != IntPtr.Zero)
            {
                ppunkDocData = punkDocDataExisting;
                Marshal.AddRef(ppunkDocData);
            }
            else
            {
                ppunkDocData = Marshal.GetIUnknownForObject(textBuffer);
            }


            var outputFile = GetAssemblyPath(proj);
            var references = GetReferences(proj).ToList();
            //var outputDir = Path.GetDirectoryName(outputFile);

            // Create the Document (editor)
            var editor = new EtoPreviewPane(editorPackage, pszMkDocument, textBuffer, outputFile, references);

            ppunkDocView = Marshal.GetIUnknownForObject(editor);
            //pbstrEditorCaption = " [Preview]";
            return(VSConstants.S_OK);
        }