/// <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 > y 1 ou x < 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 > y 1 ou x < 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); }