public void OnObjectSelection(SelectionElement selected, bool multiple)
        {
            int i = selected.showIndex;

            if (multiple)
            {
                if (hasTracked)
                {
                    if (i < lo)
                    {
                        lo = i;
                    }
                    else if (i > hi)
                    {
                        hi = i;
                    }
                }
                else
                {
                    SetTracked(i);
                }
            }
            else
            {
                SetTracked((singleTracked && i == lo) ? NONE : i);
            }
        }
        /// <summary>
        /// The select.
        /// </summary>
        /// <param name="paneManager">
        /// The pane manager.
        /// </param>
        /// <param name="selectionBuffer">
        /// The selection buffer.
        /// </param>
        /// <returns>
        /// The <see cref="SelectionElement"/>.
        /// </returns>
        protected override SelectionElement Select(IPaneManager paneManager, ISelectionBuffer selectionBuffer)
        {
            paneManager     = ArgumentValidator.CheckNotNull(paneManager, "paneManager");
            selectionBuffer = ArgumentValidator.CheckNotNull(selectionBuffer, "selectionBuffer");

            selectionBuffer.Clear();
            this.DrawInternal(
                selectionBuffer.SelectionGraphics, paneManager.CoordinateConverter, paneManager.RenderMode);
            if (selectionBuffer.ContainsHit())
            {
                var selectionElement = new SelectionElement(this);
                this.OnObjectSelected(selectionElement, paneManager, selectionBuffer);
                return(selectionElement);
            }

            return(null);
        }