コード例 #1
0
        //public void SaveIfDirty2(IVsTextView view, int line, int col) {
        //    string text;
        //    int numLines;
        //    int lastCol;
        //    IVsTextLines buf = null;
        //    var hr = view.GetBuffer(out buf);
        //    Marshal.ThrowExceptionForHR(hr);
        //    hr = buf.GetLineCount(out numLines);
        //    Marshal.ThrowExceptionForHR(hr);
        //    hr = buf.GetLengthOfLine(numLines - 1, out lastCol);
        //    Marshal.ThrowExceptionForHR(hr);
        //    hr = buf.GetLineText(0, 0, numLines - 1, lastCol, out text);
        //    Marshal.ThrowExceptionForHR(hr);
        //    File.WriteAllText(m_dirtyname, text, new UTF8Encoding(false));
        //    var reply = idetoolsfuncs.GetDirtySuggestions(m_dirtyname, m_filename, line + 1, col + 1, m_projectfile);
        //    decls = new IntelliSense.NimrodDeclarations(reply);
        //}


        public static bool SaveIfDirty(string fpath)
        {
            bool dirty = false;

            Microsoft.VisualStudio.Shell.Interop.IVsPersistDocData persistDocData;
            Microsoft.VisualStudio.Shell.Interop.IVsHierarchy      hierarchy;
            uint vsitemid = Microsoft.VisualStudio.VSConstants.VSITEMID_NIL;
            uint doccook;

            VsShellUtilities.GetRDTDocumentInfo(ServiceProvider.GlobalProvider, fpath, out hierarchy, out vsitemid, out persistDocData, out doccook);
            if (hierarchy == null || doccook == (uint)Microsoft.VisualStudio.Shell.Interop.Constants.VSDOCCOOKIE_NIL)
            {
                dirty = false;
                return(dirty);
            }
            if (persistDocData != null)
            {
                int docdirty;
                persistDocData.IsDocDataDirty(out docdirty);
                dirty = (docdirty != 0);
                if (!dirty)
                {
                    return(false);
                }
            }

            Microsoft.VisualStudio.Shell.VsShellUtilities.SaveFileIfDirty(ServiceProvider.GlobalProvider, fpath);
            System.Diagnostics.Debug.Print(string.Format("NS saved file {0}", fpath));
            return(dirty);
        }
コード例 #2
0
        public async Task <(IVsHierarchy hierarchy, uint itemid, IVsPersistDocData docData, uint docCookie)> GetRDTDocumentInfoAsync(
            IServiceProvider serviceProvider,
            string fullPath)
        {
            await _threadingService.SwitchToUIThread();

            VsShellUtilities.GetRDTDocumentInfo(serviceProvider, fullPath, out IVsHierarchy hierarchy, out uint itemid, out IVsPersistDocData persistDocData, out uint docCookie);
            return(hierarchy, itemid, persistDocData, docCookie);
        }
コード例 #3
0
        /// <summary>
        /// Saves just the project file (does not save dirty documents)
        /// </summary>
        int SaveProject(IReloadableProject project)
        {
            IVsSolution        solution = _serviceProvider.GetService <IVsSolution, SVsSolution>();
            __VSSLNSAVEOPTIONS saveOpts = __VSSLNSAVEOPTIONS.SLNSAVEOPT_SkipDocs;

            VsShellUtilities.GetRDTDocumentInfo(_serviceProvider, project.ProjectFile, out IVsHierarchy hier, out uint itemid, out IVsPersistDocData docData, out uint docCookie);
            int hr = solution.SaveSolutionElement((uint)saveOpts, project.VsHierarchy, docCookie);

            return(hr);
        }
コード例 #4
0
        public static bool IsDocumentDirty(string documentPath, out IVsPersistDocData persistDocData)
        {
            var serviceProvider = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_dte);

            IVsHierarchy vsHierarchy;
            uint         itemId, docCookie;

            VsShellUtilities.GetRDTDocumentInfo(
                serviceProvider, documentPath, out vsHierarchy, out itemId, out persistDocData, out docCookie);
            if (persistDocData != null)
            {
                int isDirty;
                persistDocData.IsDocDataDirty(out isDirty);
                return(isDirty == 1);
            }

            return(false);
        }
コード例 #5
0
        /// <summary>
        /// Get document properties from RDT
        /// </summary>
        private void GetDocInfo(
            out bool isOpen,       // true if the doc is opened
            out bool isDirty,      // true if the doc is dirty
            out bool isOpenedByUs, // true if opened by our project
            out uint docCookie,    // VSDOCCOOKIE if open
            out IVsPersistDocData persistDocData)
        {
            isOpen         = isDirty = isOpenedByUs = false;
            docCookie      = (uint)ShellConstants.VSDOCCOOKIE_NIL;
            persistDocData = null;

            if (this.node == null || this.node.ProjectMgr == null || this.node.ProjectMgr.IsClosed)
            {
                return;
            }

            IVsHierarchy hierarchy;
            uint         vsitemid = VSConstants.VSITEMID_NIL;

            VsShellUtilities.GetRDTDocumentInfo(this.node.ProjectMgr.Site, this.node.Url, out hierarchy, out vsitemid, out persistDocData, out docCookie);

            if (hierarchy == null || docCookie == (uint)ShellConstants.VSDOCCOOKIE_NIL)
            {
                return;
            }

            isOpen = true;
            // check if the doc is opened by another project
            if (Utilities.IsSameComObject(this.node.ProjectMgr, hierarchy))
            {
                isOpenedByUs = true;
            }

            if (persistDocData != null)
            {
                int isDocDataDirty;
                ErrorHandler.ThrowOnFailure(persistDocData.IsDocDataDirty(out isDocDataDirty));
                isDirty = (isDocDataDirty != 0);
            }
        }
コード例 #6
0
        /// <summary>
        ///     Determines if the document is dirty by querying the doc data directly
        /// </summary>
        public static bool IsDocumentDirty(this DTE dte, string documentPath)
        {
            Debug.Assert(dte != null, "dte must not be null.");
            Debug.Assert(!string.IsNullOrWhiteSpace(documentPath), "!string.IsNullOrWhiteSpace(documentPath)");

            var serviceProvider = new ServiceProvider((IServiceProvider)dte);

            IVsHierarchy      vsHierarchy;
            uint              itemId, docCookie;
            IVsPersistDocData vsPersistDocData;

            VsShellUtilities.GetRDTDocumentInfo(
                serviceProvider, documentPath, out vsHierarchy, out itemId, out vsPersistDocData, out docCookie);
            if (vsPersistDocData != null)
            {
                int isDirty;
                vsPersistDocData.IsDocDataDirty(out isDirty);
                return(isDirty == 1);
            }

            throw new InvalidOperationException("Could not find the doc data in IsDocumentDirty");
        }
コード例 #7
0
 public void GetRDTDocumentInfo(IServiceProvider serviceProvider, string fullPath, out IVsHierarchy hierarchy, out uint itemid, out IVsPersistDocData persistDocData, out uint docCookie)
 {
     VsShellUtilities.GetRDTDocumentInfo(serviceProvider, fullPath, out hierarchy, out itemid, out persistDocData, out docCookie);
 }