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); }
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); } }
/// <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); }
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); } }