public int OnAfterAttributeChange(uint docCookie, uint grfAttribs)
        {
            if ((grfAttribs & HandledRDTAttributes) == 0)
            {
                return(VSErr.S_OK); // Not interested
            }
            SccDocumentData data;

            if (TryGetDocument(docCookie, out data))
            {
                __VSRDTATTRIB attribs = (__VSRDTATTRIB)grfAttribs;

                bool wasInitialized = data.IsDocumentInitialized;
                data.OnAttributeChange(attribs, _poller);

                if (!wasInitialized &&
                    GetDocumentFlags_cb != null &&
                    (attribs & (SccDocumentData.RDTA_DocumentInitialized | SccDocumentData.RDTA_HierarchyInitialized)) != 0)
                {
                    uint newFlags = GetDocumentFlags_cb(data.Cookie);
                    data.SetFlags((_VSRDTFLAGS)newFlags);
                }
            }

            return(VSErr.S_OK);
        }
Example #2
0
        public void OnAttributeChange(__VSRDTATTRIB attributes, TryDocumentDirtyPoller poller)
        {
            if (0 != (attributes & RDTA_DocumentInitialized))
            {
                _flags = (_VSRDTFLAGS)((int)_flags & ~(int)RDT_PendingInitialization);
            }
            if (0 != (attributes & RDTA_HierarchyInitialized))
            {
                _flags = (_VSRDTFLAGS)((int)_flags & ~(int)RDT_PendingHierarchyInitialization);
            }

            if (0 != (attributes & __VSRDTATTRIB.RDTA_DocDataReloaded))
            {
                _reloadTick++;
                _saving = null;
                if (_initialUpdateCompleted && _isFileDocument)
                {
                    IFileStatusMonitor monitor = GetService <IFileStatusMonitor>();

                    if (monitor != null)
                    {
                        bool wasDirty = _isDirty;
                        _isDirty = false;
                        bool dirty = PollDirty(poller);
                        if (wasDirty != IsDirty)
                        {
                            _isDirty = wasDirty;
                            SetDirty(IsDirty);
                        }

                        monitor.ScheduleGlyphUpdate(FullPath);
                    }
                }
                else
                {
                    _initialUpdateCompleted = true;
                }
            }

            if (0 != (attributes & __VSRDTATTRIB.RDTA_DocDataIsDirty))
            {
                _initialUpdateCompleted = true;
                SetDirty(true);
            }
            else if (0 != (attributes & __VSRDTATTRIB.RDTA_DocDataIsNotDirty))
            {
                _initialUpdateCompleted = true;
                SetDirty(false);
            }
        }
Example #3
0
        /// <summary>
        ///  Formats attributes for display.  Parses bits and identifies them.
        /// </summary>
        /// <returns>Returns the formatted attributes.</returns>
        public string GetAttribs()
        {
            string        s    = "";
            __VSRDTATTRIB mask = (__VSRDTATTRIB)grfAttribs;

            if ((mask & __VSRDTATTRIB.RDTA_Hierarchy) != 0)
            {
                s += "Hierarchy ";
            }
            if ((mask & __VSRDTATTRIB.RDTA_ItemID) != 0)
            {
                s += "ItemID ";
            }
            if ((mask & __VSRDTATTRIB.RDTA_MkDocument) != 0)
            {
                s += "FullPath ";
            }
            if ((mask & __VSRDTATTRIB.RDTA_DocDataIsDirty) != 0)
            {
                s += "DataIsDirty ";
            }
            if ((mask & __VSRDTATTRIB.RDTA_DocDataIsNotDirty) != 0)
            {
                s += "DataIsNotDirty ";
            }
            if ((mask & __VSRDTATTRIB.RDTA_DocDataReloaded) != 0)
            {
                s += "DocDataReloaded ";
            }
            if ((mask & __VSRDTATTRIB.RDTA_AltHierarchyItemID) != 0)
            {
                s += "AltHierarchyItemID ";
            }

            return(string.Format(CultureInfo.CurrentCulture, "0x{0:X} ", grfAttribs) + s);
        }
 private static bool IsAttributeFlagSet(uint grfAttribs, __VSRDTATTRIB flag)
 {
     return((grfAttribs & (uint)flag) != 0);
 }
        public int OnAfterAttributeChangeEx(uint docCookie, uint grfAttribs, IVsHierarchy pHierOld, uint itemidOld, string pszMkDocumentOld, IVsHierarchy pHierNew, uint itemidNew, string pszMkDocumentNew)
        {
            if ((grfAttribs & TrackedRDTAttributes) == 0)
            {
                return(VSErr.S_OK); // Not interested
            }
            SccDocumentData data;

            if (!TryGetDocument(docCookie, true, out data))
            {
                return(VSErr.S_OK);
            }

            __VSRDTATTRIB attribs = (__VSRDTATTRIB)grfAttribs;

            {
                bool wasInitialized = data.IsDocumentInitialized;

                data.OnAttributeChange(attribs, _poller);

                if (!wasInitialized &&
                    GetDocumentFlags_cb != null &&
                    (attribs & (SccDocumentData.RDTA_DocumentInitialized | SccDocumentData.RDTA_HierarchyInitialized)) != 0)
                {
                    uint newFlags = GetDocumentFlags_cb(data.Cookie);
                    data.SetFlags((_VSRDTFLAGS)newFlags);
                }
            }


            if ((attribs & __VSRDTATTRIB.RDTA_ItemID) == __VSRDTATTRIB.RDTA_ItemID)
            {
                data.ItemId = itemidNew;
            }

            if ((attribs & __VSRDTATTRIB.RDTA_Hierarchy) == __VSRDTATTRIB.RDTA_Hierarchy)
            {
                data.Hierarchy = pHierNew;
            }

            if ((attribs & __VSRDTATTRIB.RDTA_MkDocument) == __VSRDTATTRIB.RDTA_MkDocument &&
                !string.IsNullOrEmpty(pszMkDocumentNew))
            {
                if (data.Name != pszMkDocumentNew)
                {
                    // The document changed names; Handle this as opening a new document

                    SccDocumentData newData;

                    if (!_docMap.TryGetValue(pszMkDocumentNew, out newData))
                    {
                        newData = new SccDocumentData(Context, pszMkDocumentNew);
                        newData.CopyState(data);
                        newData.Cookie = docCookie;
                        data.Dispose();

                        _docMap.Add(pszMkDocumentNew, newData);
                    }
                    else
                    {
                        data.Dispose(); // Removes old item from docmap and cookie map if necessary
                    }

                    _cookieMap[newData.Cookie] = newData;
                    data = newData;
                }

                if (!string.IsNullOrEmpty(pszMkDocumentOld) && pszMkDocumentNew != pszMkDocumentOld)
                {
                    if (SvnItem.IsValidPath(pszMkDocumentNew) && SvnItem.IsValidPath(pszMkDocumentOld))
                    {
                        string oldFile = SvnTools.GetNormalizedFullPath(pszMkDocumentOld);
                        string newFile = SvnTools.GetNormalizedFullPath(pszMkDocumentNew);
                        ProjectTracker.OnDocumentSaveAs(oldFile, newFile);
                    }
                }
            }

            return(VSErr.S_OK);
        }
Example #6
0
        internal void OnAttributeChange(__VSRDTATTRIB attributes)
        {
            if (0 != (attributes & __VSRDTATTRIB.RDTA_DocDataReloaded))
            {
                _reloadTick++;
                if (_initialUpdateCompleted && _isFileDocument)
                {
                    IFileStatusMonitor monitor = GetService<IFileStatusMonitor>();

                    if (monitor != null)
                    {
                        bool dirty = GetIsDirty(false);
                        if (dirty != IsDirty)
                            SetDirty(dirty);

                        monitor.ScheduleGlyphUpdate(Name);
                    }
                }
                else
                    _initialUpdateCompleted = true;
            }

            if (0 != (attributes & __VSRDTATTRIB.RDTA_DocDataIsDirty))
            {
                _initialUpdateCompleted = true;
                SetDirty(true);

            }
            else if (0 != (attributes & __VSRDTATTRIB.RDTA_DocDataIsNotDirty))
            {
                _initialUpdateCompleted = true;
                SetDirty(false);
            }
        }