Exemplo n.º 1
0
        public HitTestResult HitTest(
            Point pt,
            IViewModel eventsHandler,
            HitTestResult.AreaCode panelCode,
            Func <LJD.Graphics> graphicsFactory
            )
        {
            var           viewMetrics = this;
            HitTestResult ret         = new HitTestResult();

            if (panelCode == HitTestResult.AreaCode.NavigationPanel)
            {
                var m = GetNavigationPanelMetrics(eventsHandler);
                if (m.Resizer1.Contains(pt))
                {
                    ret.Area = HitTestResult.AreaCode.NavigationPanelResizer1;
                }
                else if (m.Resizer2.Contains(pt))
                {
                    ret.Area = HitTestResult.AreaCode.NavigationPanelResizer2;
                }
                else if (m.VisibleRangeBox.Contains(pt))
                {
                    ret.Area = HitTestResult.AreaCode.NavigationPanelThumb;
                }
                else
                {
                    ret.Area = HitTestResult.AreaCode.NavigationPanel;
                }
                ret.RelativeX = (double)pt.X / viewMetrics.NavigationPanelWidth;
                return(ret);
            }

            double viewWidth = viewMetrics.ActivitiesViewWidth;

            ret.RelativeX     = (double)pt.X / viewWidth;
            ret.ActivityIndex = GetActivityByPoint(pt, viewMetrics, eventsHandler.ActivitiesCount);

            if (panelCode == HitTestResult.AreaCode.CaptionsPanel)
            {
                if (ret.ActivityIndex != null &&
                    pt.X > viewMetrics.SequenceDiagramAreaWidth && pt.X < viewMetrics.SequenceDiagramAreaWidth + viewMetrics.FoldingAreaWidth)
                {
                    ret.Area = HitTestResult.AreaCode.FoldingSign;
                }
                else
                {
                    ret.Area = HitTestResult.AreaCode.CaptionsPanel;
                }
                return(ret);
            }

            using (var g = graphicsFactory())
            {
                foreach (var bmk in GetBookmarksMetrics(g, eventsHandler))
                {
                    if (bmk.IsOverLink(pt))
                    {
                        ret.Area    = HitTestResult.AreaCode.BookmarkTrigger;
                        ret.Trigger = bmk.Bookmark.Trigger;
                        return(ret);
                    }
                }
                foreach (var evt in GetEventMetrics(g, eventsHandler).Reverse())
                {
                    if (evt.IsOverLink(pt))
                    {
                        ret.Area    = HitTestResult.AreaCode.EventTrigger;
                        ret.Trigger = evt.Event.Trigger;
                        return(ret);
                    }
                }
            }

            if (pt.Y < viewMetrics.RulersPanelHeight)
            {
                ret.Area = HitTestResult.AreaCode.RulersPanel;
                return(ret);
            }

            foreach (var a in GetActivitiesMetrics(eventsHandler))
            {
                foreach (var ms in a.Milestones)
                {
                    if (ms.Bounds.HasValue && ms.Bounds.Value.Contains(pt))
                    {
                        ret.Area    = HitTestResult.AreaCode.ActivityTrigger;
                        ret.Trigger = ms.Trigger;
                        return(ret);
                    }
                }
                if (a.BeginTriggerLinkRect.HasValue && a.BeginTriggerLinkRect.Value.Contains(pt))
                {
                    ret.Area    = HitTestResult.AreaCode.ActivityTrigger;
                    ret.Trigger = a.Activity.BeginTrigger;
                    return(ret);
                }
                if (a.EndTriggerLinkRect.HasValue && a.EndTriggerLinkRect.Value.Contains(pt))
                {
                    ret.Area    = HitTestResult.AreaCode.ActivityTrigger;
                    ret.Trigger = a.Activity.EndTrigger;
                    return(ret);
                }
                if (a.ActivityBarRect.Contains(pt))
                {
                    ret.Area = HitTestResult.AreaCode.Activity;
                    return(ret);
                }
            }

            ret.Area = HitTestResult.AreaCode.ActivitiesPanel;
            return(ret);
        }
Exemplo n.º 2
0
 static void PushGraphicsStateForDrawingActivites(LJD.Graphics g, ViewMetrics vm, HitTestResult.AreaCode area)
 {
     g.PushState();
     g.IntsersectClip(new Rectangle(0, vm.RulersPanelHeight,
                                    area == HitTestResult.AreaCode.CaptionsPanel ? vm.ActivitesCaptionsViewWidth : vm.ActivitiesViewWidth, vm.ActivitiesViewHeight));
 }