private void GatherMembers(Dictionary<Part, Info> map, Part p, bool dragging) { if (map.ContainsKey(p)) return; // only check CanMove or CanCopy when dragging interactively, because this is the Diagram.CurrentTool if (dragging && !p.CanMove() && !p.CanCopy()) return; Node n = p as Node; if (n != null) { map[n] = new Info() { Point = n.Location }; if (((int)this.Inclusions & 1 /*?? EffectiveCollectionInclusions.Members */) != 0) { Group g = n as Group; if (g != null) { foreach (Node c in g.MemberNodes) { GatherMembers(map, c, dragging); } foreach (Link c in g.MemberLinks) { GatherMembers(map, c, dragging); } } } if (((int)this.Inclusions & 2 /*?? EffectiveCollectionInclusions.ConnectingLinks */) != 0) { foreach (Link l in n.LinksConnected) { if (map.ContainsKey(l)) continue; Node from = l.FromNode; Node to = l.ToNode; //??? NOTMOVABLELINK if (from != null && map.ContainsKey(from) && to != null && map.ContainsKey(to)) { GatherMembers(map, l, dragging); } } } if ((this.Inclusions & EffectiveCollectionInclusions.TreeChildren) != 0) { Diagram diagram = n.Diagram; var nodes = (diagram != null && diagram.TreePath == Northwoods.GoXam.Layout.TreePath.Source) ? n.NodesInto : n.NodesOutOf; foreach (Node c in nodes) { GatherMembers(map, c, dragging); } } } else { Link l = p as Link; if (l != null) { map[l] = new Info(); if (((int)this.Inclusions & 4 /*?? EffectiveCollectionInclusions.LinkLabelNodes */) != 0) { Node lab = l.LabelNode; if (lab != null) { GatherMembers(map, lab, dragging); } } } } }