private static IVsTextLines CreateEmptyEditor(IServiceProvider serviceProvider) { IVsTextLines vsTextLines = null; // get the ILocalRegistry interface so we can use it to create the text buffer from the shell's local registry var localRegistry = (ILocalRegistry)serviceProvider.GetService(typeof(ILocalRegistry)); if (localRegistry != null) { vsTextLines = VsTextBufferFactory.CreateInstance <IVsTextLines>(serviceProvider, localRegistry); // Initialize contents NativeMethods.ThrowOnFailure(vsTextLines.InitializeContent(string.Empty, string.Empty.Length)); } return(vsTextLines); }
public int CreateEditorInstance( uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out Guid pguidCmdUI, out int pgrfCDW) { // Initialize to null ppunkDocView = IntPtr.Zero; ppunkDocData = IntPtr.Zero; pbstrEditorCaption = null; pguidCmdUI = GuidList.guidPartEditorFactory; pgrfCDW = (int)_VSRDTFLAGS.RDT_DontSaveAs; try { // Validate inputs if ((grfCreateDoc & (VSConstants.CEF_OPENFILE | VSConstants.CEF_SILENT)) == 0) { Debug.Assert(false, "Only Open or Silent is valid"); return(VSConstants.E_INVALIDARG); } PackageEditorPane existingPackageEditor = null; if (punkDocDataExisting != IntPtr.Zero) { existingPackageEditor = Marshal.GetObjectForIUnknown(punkDocDataExisting) as PackageEditorPane; if (existingPackageEditor == null) { // The user is trying to open our editor on an existing DocData which is not our editor. // This editor does not support other editors simultaneously editing the same file. return(VSConstants.VS_E_INCOMPATIBLEDOCDATA); } } if (pszPhysicalView == null) { if (punkDocDataExisting != IntPtr.Zero) { // An XML fragment editor was already editing our DocData, and we are trying to open the main editor on it now. // Just return the existing DocData object. ppunkDocView = Marshal.GetIUnknownForObject(existingPackageEditor); ppunkDocData = Marshal.GetIUnknownForObject(existingPackageEditor); pbstrEditorCaption = string.Empty; return(VSConstants.S_OK); } // Open the main editor (the normal scenario). PackageEditorPane editor = new PackageEditorPane(myPackage); ppunkDocView = Marshal.GetIUnknownForObject(editor); ppunkDocData = Marshal.GetIUnknownForObject(editor); pbstrEditorCaption = string.Empty; return(VSConstants.S_OK); } // If physical view is non-null, create an editor window on an xml fragment. // Verify that the base document is created IVsRunningDocumentTable runningDocTable = (IVsRunningDocumentTable)this.GetService(typeof(SVsRunningDocumentTable)); int hr = runningDocTable.FindAndLockDocument( (uint)_VSRDTFLAGS.RDT_NoLock, pszMkDocument, out IVsHierarchy hierarchy, out uint itemIdFindAndLock, out IntPtr docDataFindAndLock, out uint docCookieFindAndLock ); string xml = string.Empty; if (VSConstants.S_OK != hr) // can't find document in RDT. { // We are being asked to open a sub document before the main document is open. // Let's create the main and put it in the RDT with a temporary EditLock that // we will release after the sub document window is created. using (PackageEditorPane editor = new PackageEditorPane(myPackage)) { IVsPersistDocData mainDocData = editor; mainDocData.LoadDocData(pszMkDocument); // TODO editor.TemporaryLockDocument(runningDocTable, pvHier, itemid, pszMkDocument); xml = editor.GetXml(pszPhysicalView); } } else { // get xml from open editor. if (docDataFindAndLock != IntPtr.Zero) { Marshal.Release(docDataFindAndLock); } if (existingPackageEditor != null) { xml = existingPackageEditor.GetXml(pszPhysicalView); } } // Use ILocalRegistry to create text buffer and code window ILocalRegistry localRegistry = (ILocalRegistry)this.GetService(typeof(ILocalRegistry)); Debug.Assert(null != localRegistry); // Create the document (text buffer) IntPtr vsTextLines = IntPtr.Zero; Guid guidTextLines = typeof(IVsTextLines).GUID; ErrorHandler.ThrowOnFailure( localRegistry.CreateInstance(typeof(VsTextBufferClass).GUID, null, ref guidTextLines, (uint)CLSCTX.CLSCTX_INPROC_SERVER, out vsTextLines) ); IVsTextLines textLines = (IVsTextLines)Marshal.GetObjectForIUnknown(vsTextLines); // Create the codewindow (editor) IntPtr vsCodeWindow = IntPtr.Zero; Guid guidCodeWindow = typeof(IVsCodeWindow).GUID; ErrorHandler.ThrowOnFailure( localRegistry.CreateInstance(typeof(VsCodeWindowClass).GUID, null, ref guidCodeWindow, (uint)CLSCTX.CLSCTX_INPROC_SERVER, out vsCodeWindow) ); IVsCodeWindow codeWindow = Marshal.GetObjectForIUnknown(vsCodeWindow) as IVsCodeWindow; // Site it, so it can find/query for various services IObjectWithSite textLinesWithSite = (IObjectWithSite)textLines; // Site the TextBuffer with an IOleServiceProvider IOleServiceProvider pOleSeviceProvider; pOleSeviceProvider = (IOleServiceProvider)this.vsServiceProvider.GetService(typeof(IOleServiceProvider)); textLinesWithSite.SetSite(pOleSeviceProvider); ErrorHandler.ThrowOnFailure( textLines.InitializeContent(xml, xml.Length) ); // Attach buffer to code window ErrorHandler.ThrowOnFailure( codeWindow.SetBuffer(textLines) ); // Set the language service to the XML language service to get syntax highlighting Guid xmlLanguageServiceGuid = new Guid("{f6819a78-a205-47b5-be1c-675b3c7f0b8e}"); textLines.SetLanguageServiceID(ref xmlLanguageServiceGuid); // If the project system has specified the language service clear the auto detect flag to ensure that we use the preferred service IVsUserData userData = (IVsUserData)textLines; Guid vsBufferDetectLangSIDGuid = new Guid("{17F375AC-C814-11d1-88AD-0000F87579D2}"); object flagObject = false; userData.SetData(ref vsBufferDetectLangSIDGuid, flagObject); ppunkDocView = vsCodeWindow; // refcnt from CreateEditorInstance ppunkDocData = vsTextLines; // refcnt from CreateEditorInstance pbstrEditorCaption = " (" + pszPhysicalView + ")"; pgrfCDW |= (int)__VSCREATEDOCWIN.CDW_fAltDocData; return(VSConstants.S_OK); } catch (Exception error) { System.Windows.Forms.MessageBox.Show(error.Message); } return(VSConstants.E_INVALIDARG); }
private void Initialize(string value) { IVsTextLines lines = (IVsTextLines)textBuffer; lines.InitializeContent(value, value.Length); }
public int InitializeContent(string pszText, int iLength) { return(_textBuffer.InitializeContent(pszText, iLength)); }