Exemple #1
0
        void UpdateHoverItem()
        {
            var oldItem = m_HoverItem;

            var pos  = this.MapFromGlobal(QCursor.Pos());
            var item = this.ItemAt(pos);

            // Since we map the point to scene coords, we could accidently
            // focus items outside the visible viewport.
            if (m_SuppressTooltips || !this.Viewport().Geometry.Contains(pos) || !this.IsVisible())
            {
                m_TooltipTimer.Stop();
                m_HoverItem      = null;
                m_InfoPopup.Item = null;
            }
            else
            {
                if (item is RosterItem <T> )
                {
                    m_HoverItem = (RosterItem <T>)item;
                    m_HoverItem.Update();

                    if (m_InfoPopup.Item != m_HoverItem)
                    {
                        if (m_InfoPopup.IsVisible())
                        {
                            m_InfoPopup.Item = m_HoverItem;
                        }
                        else
                        {
                            m_TooltipTimer.Stop();
                            m_InfoPopup.Item = m_HoverItem;
                            m_TooltipTimer.Start();
                        }
                    }
                }
                else
                {
                    m_TooltipTimer.Stop();
                    m_HoverItem = null;

                    // Allow a buffer around the active item so that the tooltip
                    // can change items without having to be closed/re-opened.
                    if (m_InfoPopup.Item != null)
                    {
                        var    itemRect = m_InfoPopup.Item.SceneBoundingRect();
                        var    itemPos  = this.MapFromScene(itemRect.X(), itemRect.Y());
                        QRectF rect     = new QRectF(itemPos.X() - IconPadding,
                                                     itemPos.Y() - IconPadding,
                                                     itemRect.Width() + IconPadding + IconPadding,
                                                     itemRect.Height() + IconPadding + IconPadding);
                        if (!rect.Contains(pos))
                        {
                            m_InfoPopup.Item = null;
                        }
                    }
                }
            }

            if (oldItem != null && oldItem != m_HoverItem)
            {
                oldItem.Update();
            }
        }