示例#1
0
 internal SinglePropChangeSet(int propID, int linkTargetID, LinkChangeType linkChangeType,
                              bool displayNameAffected)
     : base(false)
 {
     _propID              = propID;
     _linkTargetID        = linkTargetID;
     _linkChangeType      = linkChangeType;
     _displayNameAffected = displayNameAffected;
 }
示例#2
0
        internal void AddChangedLink(int propID, int targetID, LinkChangeType changeType)
        {
            ArrayList list = (ArrayList)_oldValues [propID];

            if (list == null)
            {
                list = new ArrayList();
                _oldValues [propID] = list;
            }
            list.Add(new LinkChange(targetID, changeType));
        }
示例#3
0
        private void ProcessWorkspaceVisibleLink(IResource workspace, IResource res, LinkChangeType changeType,
                                                 bool recursive, IResource[] filterResources)
        {
            if ((changeType == LinkChangeType.Add && res.HasLink(Props.WorkspaceVisible, workspace) ||
                 (changeType == LinkChangeType.Delete && !res.HasLink(Props.WorkspaceVisible, workspace))))
            {
                return;
            }

            if (changeType == LinkChangeType.Add)
            {
                res.AddLink(Props.WorkspaceVisible, workspace);
            }
            else
            {
                if (HaveLinksToFilterResources(res, filterResources))
                {
                    return;
                }
                res.DeleteLink(Props.WorkspaceVisible, workspace);
            }

            WorkspaceTypeRec wrType = (WorkspaceTypeRec)_resTypeToWorkspaceRec [res.Type];

            if (wrType != null)
            {
                foreach (int linkPropId in wrType._linkPropIds)
                {
                    IResourceList linkList = GetWorkspaceLinks(res, linkPropId);
                    foreach (IResource linkRes in linkList)
                    {
                        ProcessWorkspaceVisibleLink(workspace, linkRes, changeType, false, filterResources);
                    }
                }
            }
            if (recursive)
            {
                int parentLinkType = GetRecurseLinkPropId(res.Type);
                foreach (IResource childRes in res.GetLinksTo(null, parentLinkType))
                {
                    if (!childRes.HasLink(Props.ExcludeFromWorkspace, workspace))
                    {
                        ProcessWorkspaceVisibleLink(workspace, childRes, changeType, true, filterResources);
                    }
                }
            }
        }
示例#4
0
        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);
            }
        }