Exemple #1
0
        private void AddBranchAdornment(ITextViewLine line, SnapshotSpan span, LineCoverage coverage, bool isUpToDate)
        {
            var diameter = _textView.LineHeight / _branchCoverageSpotHeightDivider;
            var spacing  = _branchCoverageSpotGap + diameter;
            var top      = (line.Height - diameter) / 2d;

            var brush = _brushesAndPens[coverage.BranchCoverageState].Brush;
            var pen   = _brushesAndPens[coverage.BranchCoverageState].Pen;

            var groupIndex = 0;
            var index      = 0;
            var left       = _sequenceCoverageLineWidth * 1.5d;

            foreach (var branchPoint in coverage.BranchesVisited)
            {
                foreach (var branch in branchPoint)
                {
                    var rect     = new Rect(left, line.Top + top, diameter, diameter);
                    var geometry = new EllipseGeometry(rect);
                    geometry.Freeze();

                    var brushOverride = brush;
                    var penOverride   = pen;
                    if (branch && coverage.BranchVisitors[groupIndex][index].Any(p => SelectedTests.Contains(p)))
                    {
                        brushOverride = _selectedBrushAndPen.Brush;
                        penOverride   = _selectedBrushAndPen.Pen;
                    }

                    var drawing = new GeometryDrawing(branch ? brushOverride : null, penOverride, geometry);
                    drawing.Freeze();

                    var drawingImage = new DrawingImage(drawing);
                    drawingImage.Freeze();

                    var image = new Image()
                    {
                        Source  = drawingImage,
                        Opacity = isUpToDate ? 1d : _modifiedOpacity
                    };

                    var testMethod = coverage.BranchVisitors[groupIndex][index].FirstOrDefault();
                    if (testMethod != null)
                    {
                        image.MouseLeftButtonDown += (o, e) => e.Handled = true;
                        image.MouseLeftButtonUp   += (o, e) => _selectTestCommand.Execute(testMethod);
                        image.Cursor = Cursors.Hand;
                        image.Tag    = coverage.BranchVisitors[groupIndex][index].ToArray();
                        image.MouseRightButtonDown += (o, e) => e.Handled = true;
                        image.MouseRightButtonUp   += OnTestItemRightButtonUp;
                        SharedDictionaryManager.InitializeDictionaries(image.Resources.MergedDictionaries);
                    }

                    Canvas.SetLeft(image, geometry.Bounds.Left);
                    Canvas.SetTop(image, geometry.Bounds.Top);

                    _adornmentLayer.AddAdornment(AdornmentPositioningBehavior.TextRelative, span, null, image, null);

                    left += spacing;
                    index++;
                }
                groupIndex++;
                index = 0;

                left += spacing;
            }
        }
Exemple #2
0
        private void AddSequenceAdornment(ITextViewLine line, SnapshotSpan span, LineCoverage coverage, bool isUpToDate)
        {
            var rect     = new Rect(0d, line.Top, _sequenceCoverageLineWidth, line.Height);
            var geometry = new RectangleGeometry(rect);

            geometry.Freeze();

            var brush = _brushesAndPens[coverage.SequenceCoverageState].Brush;

            if (coverage.SequenceCoverageState == CoverageState.Covered &&
                coverage.LineVisitors.Any(p => SelectedTests.Contains(p)))
            {
                brush = _selectedBrushAndPen.Brush;
            }

            var drawing = new GeometryDrawing(brush, null, geometry);

            drawing.Freeze();

            var drawingImage = new DrawingImage(drawing);

            drawingImage.Freeze();

            var toolTip = new StackPanel();

            var header = new TextBlock()
            {
                Text         = string.Format(Resources.VisitorCount, coverage.VisitCount),
                TextWrapping = TextWrapping.Wrap
            };

            toolTip.Children.Add(header);

            var image = new Image()
            {
                Source  = drawingImage,
                ToolTip = toolTip,
                Opacity = isUpToDate ? 1d : _modifiedOpacity
            };

            Canvas.SetLeft(image, geometry.Bounds.Left);
            Canvas.SetTop(image, geometry.Bounds.Top);
            SharedDictionaryManager.InitializeDictionaries(image.Resources.MergedDictionaries);

            if (coverage.LineVisitors.Count > 0)
            {
                var description = new TextBlock()
                {
                    Text         = string.Join("\r\n", coverage.LineVisitors.Select(p => p.ShortName)),
                    TextWrapping = TextWrapping.Wrap,
                    Opacity      = 0.7d
                };
                toolTip.Children.Add(description);

                image.Tag = coverage.LineVisitors.ToArray();
                image.MouseRightButtonDown += (o, e) => e.Handled = true;
                image.MouseRightButtonUp   += OnTestItemRightButtonUp;

                image.MouseLeftButtonDown += (o, e) => e.Handled = true;
                image.MouseLeftButtonUp   += (o, e) => _selectTestCommand.Execute(coverage.LineVisitors.First());
                image.Cursor = Cursors.Hand;
            }

            _adornmentLayer.AddAdornment(AdornmentPositioningBehavior.TextRelative, span, null, image, null);
        }