/// <summary>
            /// Compare deux objets
            /// </summary>
            /// <param name="x">objet 1</param>
            /// <param name="y">objet 2</param>
            /// <returns>vrai ou faux</returns>
            public int Compare(VerticalPlacementItem x, VerticalPlacementItem y)
            {
                PlacementItem p1 = x.LessPosition;
                PlacementItem p2 = y.LessPosition;

                if (p1 != null && p2 != null)
                {
                    return(p1.CompareHeight(p2));
                }
                else
                if (p1 != null)
                {
                    return(-1);
                }
                else
                {
                    return(1);
                }
            }
            /// <summary>
            /// Compare deux éléments en hauteur
            /// </summary>
            /// <param name="x">élément 1</param>
            /// <param name="y">élément 2</param>
            /// <returns>x=y 0, x &gt; y 1 ou x &lt; y -1</returns>
            public int CompareHeight(PlacementItem x, PlacementItem y)
            {
                if (this.Equals(x.rect, y.rect))
                {
                    return(0);
                }
                else
                {
                    float xheight = x.rect.Top + x.rect.Height;
                    float yheight = y.rect.Top + y.rect.Height;

                    if (xheight > yheight)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }
            }
            /// <summary>
            /// Compare deux éléments en largeur
            /// </summary>
            /// <param name="x">élément 1</param>
            /// <param name="y">élément 2</param>
            /// <returns>x=y 0, x &gt; y 1 ou x &lt; y -1</returns>
            public int CompareWidth(PlacementItem x, PlacementItem y)
            {
                if (this.Equals(x.rect, y.rect))
                {
                    return(0);
                }
                else
                {
                    float xwidth = x.rect.Left + x.rect.Width;
                    float ywidth = y.rect.Left + y.rect.Width;

                    if (xwidth > ywidth)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }
            }
            /// <summary>
            /// Insert a placement item into the right horizontal placement item
            /// </summary>
            /// <param name="list">vertical placement</param>
            /// <param name="p">element to place</param>
            public static void Compare(LinkedList <VerticalPlacementItem> list, PlacementItem p)
            {
                VerticalPlacementItem input = new VerticalPlacementItem();

                input.Add(new HorizontalPlacementItem(p));
                LinkedListNode <VerticalPlacementItem> positiveCurrent = list.First;
                LinkedListNode <VerticalPlacementItem> negativeCurrent = list.Last;

                while (positiveCurrent != null && positiveCurrent != negativeCurrent)
                {
                    if (VerticalComparer.Compare(positiveCurrent.Value, input) == 0)
                    {
                        HorizontalComparer.Compare(positiveCurrent.Value.Items, input.Items.First.Value);
                        break;
                    }
                    else if (VerticalComparer.Compare(negativeCurrent.Value, input) == 0)
                    {
                        HorizontalComparer.Compare(negativeCurrent.Value.Items, input.Items.First.Value);
                        break;
                    }
                    else if (VerticalComparer.Compare(positiveCurrent.Value, input) == 1)
                    {
                        list.AddAfter(positiveCurrent, input);
                        break;
                    }
                    else if (VerticalComparer.Compare(negativeCurrent.Value, input) == -1)
                    {
                        list.AddBefore(negativeCurrent, input);
                        break;
                    }
                    positiveCurrent = positiveCurrent.Next;
                    negativeCurrent = negativeCurrent.Previous;
                }
                if (positiveCurrent == null || positiveCurrent == negativeCurrent)
                {
                    list.AddLast(input);
                }
            }
 /// <summary>
 /// Default constructor
 /// </summary>
 /// <param name="item">élement à placer</param>
 public HorizontalPlacementItem(PlacementItem item)
 {
     this.item             = item;
     this.PositionChanged += action;
 }
 /// <summary>
 /// Compare l'objet avec un autre
 /// </summary>
 /// <param name="other">autre</param>
 /// <returns>0, 1 ou -1</returns>
 public int CompareHeight(PlacementItem other)
 {
     return(this.CompareHeight(this, other));
 }
 /// <summary>
 /// Compare l'objet avec un autre
 /// </summary>
 /// <param name="other">autre</param>
 /// <returns>0, 1 ou -1</returns>
 public int CompareWidth(PlacementItem other)
 {
     return(this.CompareWidth(this, other));
 }
        /// <summary>
        /// Add a new element
        /// Create a new placement item, set update position changed event
        /// and place item
        /// </summary>
        /// <param name="cm">new cadre model</param>
        /// <param name="ratio">ratio</param>
        public void Add(CadreModel cm, float ratio)
        {
            PlacementItem p = new PlacementItem(cm, ratio);

            this.InspectQuadrille(p);
        }
 /// <summary>
 /// Inspect content
 /// </summary>
 /// <param name="p">placement</param>
 private void InspectQuadrille(PlacementItem p)
 {
     VerticalComparer.Compare(this.list, p);
 }