public void Insert(int position, DrawRect rect) { int pos = position <0 ? 0 : position> Count ? Count : position; if (pos == Count) { Add(rect); return; } DrawRectChild child = new DrawRectChild(); child.Child = rect; rect.LockControl = m_LockControl; rect.m_Parent = this; rect.m_ParentIndex = pos; m_childs.Insert(pos, child); m_childs[pos].RectForChild = m_childs[pos + 1].RectForChild; for (int i = pos + 1; i < Count; i++) { m_childs[i].Child.m_ParentIndex = i; } RealignChilds(pos, false); DoItemAdded(rect); }
private Rectangle CalcAlign(DrawRectChild child, ref Rectangle freeRect) { child.RectForChild = freeRect; var newRect = child.Child.Rect; if (child.Child.Visible) { switch (child.Child.m_alignment) { case RectAlignment.Absolute: var r = GetClientRect(); newRect = new Rectangle(r.X + child.Child.m_pos.X, r.Y + child.Child.m_pos.Y, child.Child.Size.Width, child.Child.Size.Height); break; case RectAlignment.Center: newRect = new Rectangle(m_rect.X + (m_rect.Width - child.Child.Width) / 2, m_rect.Y + (m_rect.Height - child.Child.Height) / 2, child.Child.Width, child.Child.Height); break; case RectAlignment.Left: newRect = new Rectangle(freeRect.Location, new Size(child.Child.Width, freeRect.Height)); freeRect = new Rectangle(freeRect.X + newRect.Width, freeRect.Y, freeRect.Width - newRect.Width, freeRect.Height); break; case RectAlignment.Right: newRect = new Rectangle(freeRect.Left + freeRect.Width - child.Child.Width, freeRect.Y, child.Child.Width, freeRect.Height); freeRect = new Rectangle(freeRect.Location, new Size(freeRect.Width - newRect.Width, freeRect.Height)); break; case RectAlignment.Top: newRect = new Rectangle(freeRect.Location, new Size(freeRect.Width, child.Child.Height)); freeRect = new Rectangle(freeRect.X, freeRect.Y + newRect.Height, freeRect.Width, freeRect.Height - newRect.Height); break; case RectAlignment.Bottom: newRect = new Rectangle(freeRect.X, freeRect.Y + freeRect.Height - child.Child.Height, freeRect.Width, child.Child.Height); freeRect = new Rectangle(freeRect.Location, new Size(freeRect.Width, freeRect.Height - newRect.Height)); break; case RectAlignment.Fill: newRect = freeRect; break; } } return(newRect); }
public void Add(DrawRect rect) { if (m_childs == null) { m_childs = new List <DrawRectChild>(); m_freeRect = GetClientRect(); } DrawRectChild child = new DrawRectChild(); child.Child = rect; rect.LockControl = m_LockControl; rect.m_Parent = this; rect.m_ParentIndex = m_childs.Count; m_childs.Add(child); DoAlign(child.Child, CalcAlign(child, ref m_freeRect), false); DoItemAdded(rect); }