public bool IsSegmentExist(IpFlowIpSegmentFinder segmentFinder) { foreach (var s in ipSegments) { if (s.SegmentFinder.Equals(segmentFinder)) { return(true); } } return(false); }
public bool Equals(IpFlowIpSegmentFinder segmentFinder) { if (segmentFinder == null) { return(false); } if (Index == segmentFinder.Index && IsSource == segmentFinder.IsSource && Segment == segmentFinder.Segment) { return(true); } else { return(false); } }
public void HighlightingNode(IpFlowIpSegmentFinder segmentFinder, IReadOnlyList <IpFlowNode> nodes) { if (segmentFinder == null && diagram.HighlightNode == null || nodes == null || nodes.Count == 0) { return; } // reset each element's brush first RecoverHighlights(nodes, false); if (segmentFinder == null || !nodes.ToList().Exists(node => node.SourceIpNode.IsSegmentExist(segmentFinder) || node.DestinationIpNode.IsSegmentExist(segmentFinder))) { return; } // reset highlight if highlighting the same node twice if ((from node in nodes where node.HighlightSegment != null && node.HighlightSegment.Equals(diagram.HighlightNode) && node.IsHighlight select node).Count() > 0 && segmentFinder.Equals(diagram.HighlightNode)) { RecoverHighlights(nodes); diagram.SetCurrentValue(IpFlowDiagram.HighlightNodeProperty, null); return; } var highlightLinkFillOpacity = diagram.LinkFill.Opacity / diagram.LinkStroke.Opacity * diagram.HighlightOpacity; // ensure minimize same element once && not minmize hightlight element var minimizedSegments = new HashSet <IpFlowIpSegment>(); var highlightSegments = new HashSet <IpFlowIpSegment>(); var minimizedLinks = new HashSet <IpFlowLinkBase>(); var highlightLinks = new HashSet <IpFlowLinkBase>(); foreach (var node in nodes) { #region highlight var highlight = segmentFinder.IsSource ? node.SourceIpNode.IsSegmentExist(segmentFinder) : node.DestinationIpNode.IsSegmentExist(segmentFinder); if (highlight) { for (var index = 0; index < 4; index++) { var srcNode = node.SourceIpNode.GetSegment(index); var destNode = node.DestinationIpNode.GetSegment(index); srcNode.Color.Opacity = diagram.HighlightOpacity; destNode.Color.Opacity = diagram.HighlightOpacity; highlightSegments.Add(srcNode); highlightSegments.Add(destNode); } foreach (var link in node.Links) { link.SourceIpToPortLink.Shape.Fill.Opacity = highlightLinkFillOpacity; link.DestinationIpToPortLink.Shape.Fill.Opacity = highlightLinkFillOpacity; link.SourceToDestinationPortLink.Shape.Fill.Opacity = highlightLinkFillOpacity; link.SourceIpToPortLink.Shape.Stroke.Opacity = diagram.HighlightOpacity; link.DestinationIpToPortLink.Shape.Stroke.Opacity = diagram.HighlightOpacity; link.SourceToDestinationPortLink.Shape.Stroke.Opacity = diagram.HighlightOpacity; highlightLinks.Add(link.SourceIpToPortLink); highlightLinks.Add(link.DestinationIpToPortLink); highlightLinks.Add(link.SourceToDestinationPortLink); } node.IsHighlight = true; node.HighlightSegment = segmentFinder; #endregion } else { #region minimize var l = node.Links[0]; var minimizeFillOpacity = l.SourceIpToPortLink.Shape.Fill.Opacity - diagram.LoweredOpacity < 0 ? 0 : l.SourceIpToPortLink.Shape.Fill.Opacity - diagram.LoweredOpacity; var minimizeStrokeOpacity = l.SourceIpToPortLink.Shape.Stroke.Opacity - diagram.LoweredOpacity < 0 ? 0 : l.SourceIpToPortLink.Shape.Stroke.Opacity - diagram.LoweredOpacity; foreach (var link in node.Links) { if (!minimizedLinks.Contains(link.SourceIpToPortLink) && !highlightLinks.Contains(link.SourceIpToPortLink)) { link.SourceIpToPortLink.Shape.Fill.Opacity = minimizeFillOpacity; link.SourceIpToPortLink.Shape.Stroke.Opacity = minimizeStrokeOpacity; minimizedLinks.Add(link.SourceIpToPortLink); } if (!minimizedLinks.Contains(link.DestinationIpToPortLink) && !highlightLinks.Contains(link.DestinationIpToPortLink)) { link.DestinationIpToPortLink.Shape.Fill.Opacity = minimizeFillOpacity; link.DestinationIpToPortLink.Shape.Stroke.Opacity = minimizeStrokeOpacity; minimizedLinks.Add(link.DestinationIpToPortLink); } if (!minimizedLinks.Contains(link.SourceToDestinationPortLink) && !highlightLinks.Contains(link.SourceToDestinationPortLink)) { link.SourceToDestinationPortLink.Shape.Fill.Opacity = minimizeFillOpacity; link.SourceToDestinationPortLink.Shape.Stroke.Opacity = minimizeStrokeOpacity; minimizedLinks.Add(link.SourceToDestinationPortLink); } } for (var index = 0; index < 4; index++) { var srcNode = node.SourceIpNode.GetSegment(index); var destNode = node.DestinationIpNode.GetSegment(index); if (!minimizedSegments.Contains(srcNode) && !highlightSegments.Contains(srcNode)) { var minimizeSrcOpacity = srcNode.Color.Opacity - diagram.LoweredOpacity < 0 ? 0 : srcNode.Color.Opacity - diagram.LoweredOpacity; srcNode.Color.Opacity = minimizeSrcOpacity; minimizedSegments.Add(srcNode); } if (!minimizedSegments.Contains(destNode) && !highlightSegments.Contains(destNode)) { var minimizeDestOpacity = destNode.Color.Opacity - diagram.LoweredOpacity < 0 ? 0 : destNode.Color.Opacity - diagram.LoweredOpacity; destNode.Color.Opacity = minimizeDestOpacity; minimizedSegments.Add(destNode); } } node.IsHighlight = false; node.HighlightSegment = null; #endregion } } }