private PredicateMatch MatchResourceByLink(IResource res, IPropertyChangeSet cs, int propID) { LinkChangeType chg = LinkChangeType.None; if (cs != null) { chg = cs.GetLinkChange(propID, _baseResource.Id); } switch (chg) { case LinkChangeType.Add: return(PredicateMatch.Add); case LinkChangeType.Delete: return(PredicateMatch.Del); default: return(res.HasLink(propID, _baseResource) ? PredicateMatch.Match : PredicateMatch.None); } }
private void ProcessWorkspaceChange(IResource res, IPropertyChangeSet cs) { IntHashTable defaultTabMap = (IntHashTable)_unreadStateTabMap [_tabProvider.GetDefaultTab()]; IntHashTable specificTabMap = null; string resourceTab = _tabProvider.GetResourceTab(res); if (resourceTab != null) { specificTabMap = (IntHashTable)_unreadStateTabMap [resourceTab]; } LinkChange[] wsLinkChanges = cs.GetLinkChanges(_workspaceManager.Props.WorkspaceVisible); int[] linkTypes = res.GetLinkTypeIds(); for (int i = 0; i < linkTypes.Length; i++) { if (IsUnreadCountedLink(linkTypes [i])) { IResourceList linkList = res.GetLinksOfType(null, linkTypes [i]); foreach (IResource link in linkList) { if (cs.GetLinkChange(linkTypes [i], link.Id) == LinkChangeType.Add) { continue; } foreach (LinkChange linkChange in wsLinkChanges) { int delta = (linkChange.ChangeType == LinkChangeType.Add) ? 1 : -1; AdjustCounterInState(defaultTabMap, linkChange.TargetId, link, delta); AdjustCounterInState(specificTabMap, linkChange.TargetId, link, delta); } } } } }