private void SelectElementOnMouseOver(MouseEventArgs e)
        {
            List <RadElement> radElementList = new List <RadElement>();
            RadElement        elementAtPoint = this.Owner.ElementTree.GetElementAtPoint((RadElement)this.Owner.ElementTree.RootElement, e.Location, radElementList);

            this.HandleHoveredElementsChanged(radElementList);
            if (elementAtPoint != this.selectedElement)
            {
                this.EnsureElementUnderMouseMonitorTimer();
                if (this.selectedElement != null && elementAtPoint != null)
                {
                    if (!elementAtPoint.ShouldHandleMouseInput || !this.selectedElement.ShouldHandleMouseInput || (!elementAtPoint.NotifyParentOnMouseInput || this.selectedElement.NotifyParentOnMouseInput))
                    {
                        this.HandleMouseLeave((EventArgs)e, elementAtPoint);
                    }
                    else
                    {
                        this.AddElementsUnderMouseToMonitor(this.selectedElement);
                    }
                }
                else if (elementAtPoint == null)
                {
                    this.HandleMouseLeave((EventArgs)e);
                }
                if (elementAtPoint != null)
                {
                    this.RemoveElementsUnderMouseToMonitor(elementAtPoint);
                    this.CheckRemoveParentElementsUnderMouseToMonitor(elementAtPoint);
                    elementAtPoint.CallDoMouseEnter((EventArgs)e);
                    if (!this.Owner.IsDesignMode)
                    {
                        this.MouseHoverTimer.Start(elementAtPoint);
                    }
                }
            }
            this.selectedElement = elementAtPoint;
            if (this.selectedElement == null || !this.selectedElement.ShouldHandleMouseInput)
            {
                return;
            }
            this.selectedElement.CallDoMouseMove(e);
        }
 private void CheckRemoveParentElementsUnderMouseToMonitor(RadElement elementUnderMouse)
 {
     if (!elementUnderMouse.NotifyParentOnMouseInput)
     {
         return;
     }
     for (RadElement parent = elementUnderMouse.Parent; parent != null; parent = parent.Parent)
     {
         if (parent.ShouldHandleMouseInput)
         {
             if (!parent.IsMouseOver)
             {
                 parent.CallDoMouseEnter(EventArgs.Empty);
             }
             this.RemoveElementsUnderMouseToMonitor(parent);
             if (!parent.NotifyParentOnMouseInput)
             {
                 break;
             }
         }
     }
 }
        private void SelectElementOnMouseOver(MouseEventArgs e)
        {
            List <RadElement> newHoveredElements = new List <RadElement>();
            RadElement        elementUnderMouse  = this.Owner.ElementTree.GetElementAtPoint(
                this.Owner.ElementTree.RootElement, e.Location, newHoveredElements);

            //Handle the actually hovered element
            this.HandleHoveredElementsChanged(newHoveredElements);

            if (elementUnderMouse != selectedElement)
            {
                EnsureElementUnderMouseMonitorTimer();

                //Debug.WriteLine("----------------------------------------------------");
                if ((selectedElement != null) && (elementUnderMouse != null))
                {
                    //Debug.WriteLine("selectedElement: " + selectedElement.ToString());
                    //Debug.WriteLine("elementUnderMouse: " + elementUnderMouse.ToString());
                    //if (elementUnderMouse is FillPrimitive)
                    //	Debug.WriteLine("elementUnderMouse.Parent: " + elementUnderMouse.Parent.ToString());

                    if (!
                        (elementUnderMouse.ShouldHandleMouseInput &&
                         selectedElement.ShouldHandleMouseInput &&
                         elementUnderMouse.NotifyParentOnMouseInput &&
                         !selectedElement.NotifyParentOnMouseInput
                        ))
                    {
                        //Debug.WriteLine("HandleMouseLeave1 selectedElement");
                        HandleMouseLeave(e, elementUnderMouse);
                    }
                    else
                    {
                        this.AddElementsUnderMouseToMonitor(selectedElement);
                    }
                }
                else
                if (elementUnderMouse == null)
                {
                    //Debug.WriteLine("HandleMouseLeave2 selectedElement");
                    HandleMouseLeave(e);
                }

                if (elementUnderMouse != null)
                {
                    //Debug.WriteLine("DoMouseEnter elementUnderMouse");
                    this.RemoveElementsUnderMouseToMonitor(elementUnderMouse);
                    this.CheckRemoveParentElementsUnderMouseToMonitor(elementUnderMouse);

                    elementUnderMouse.CallDoMouseEnter(e);

                    if (!this.Owner.IsDesignMode)
                    {
                        this.MouseHoverTimer.Start(elementUnderMouse);
                    }

                    //elementUnderMouse.StopMouseLeaveNotifyTimer();
                }
                //Debug.WriteLine("----------------------------------------------------");
            }

            this.selectedElement = elementUnderMouse;

            if ((this.selectedElement != null) && (this.selectedElement.ShouldHandleMouseInput))
            {
                this.selectedElement.CallDoMouseMove(e);
            }
            //}
            //catch(Exception ex)
            //{
            //    MessageBox.Show("Internal error finding item under mouse " + ex.ToString());
            //}
        }