예제 #1
0
        private static JiraIssueTextTag getIssueTagUnderCursor(IWpfTextView view, IViewTagAggregatorFactoryService tagAggregatorFactory)
        {
            Point position = Mouse.GetPosition(view.VisualElement);

            position = relativeToView(view, position);

            var line = view.TextViewLines.GetTextViewLineContainingYCoordinate(position.Y);

            if (line == null)
            {
                return(null);
            }
            var bufferPos = line.GetBufferPositionFromXCoordinate(position.X);

            if (!bufferPos.HasValue)
            {
                return(null);
            }

            SnapshotPoint?point = view.BufferGraph.MapDownToFirstMatch(
                new SnapshotPoint(view.TextSnapshot, bufferPos.Value), PointTrackingMode.Positive, snapshot => true, PositionAffinity.Predecessor);

            if (point == null)
            {
                return(null);
            }

            ITagAggregator <JiraIssueTextTag> aggregator            = tagAggregatorFactory.CreateTagAggregator <JiraIssueTextTag>(view);
            IEnumerable <IMappingTagSpan <JiraIssueTextTag> > spans = aggregator.GetTags(new SnapshotSpan(new SnapshotPoint(view.TextSnapshot, 0),
                                                                                                          view.TextSnapshot.Length - 1));

            JiraIssueTextTag textTag = (from span in spans
                                        let t = span.Tag
                                                where t.Where.Start.Position <= point.Value.Position && t.Where.End.Position >= point.Value.Position
                                                select span.Tag).FirstOrDefault();

            return(textTag);
        }
예제 #2
0
        public override void PreprocessMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            if (!(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))
            {
                return;
            }

            JiraIssueTextTag textTag = getIssueTagUnderCursor(view, provider.TagAggregatorFactoryService);

            if (textTag == null)
            {
                return;
            }

            e.Handled = true;

            AtlassianPanel.Instance.Jira.findAndOpenIssue(textTag.IssueKey, (success, message, ex) => {
                if (!success)
                {
                    PlvsUtils.showError(message, ex);
                }
            });
        }