private Point getLocation(ChildFormInfo info) { Point pos = Point.Empty; switch (info.Location) { case MagneticLocation.Left: pos = new Point(m_mainForm.Left - info.Child.Width, m_mainForm.Top); break; case MagneticLocation.Right: pos = new Point(m_mainForm.Right, m_mainForm.Top); break; case MagneticLocation.Top: pos = new Point(m_mainForm.Left, m_mainForm.Top - info.Child.Height); break; case MagneticLocation.Bottom: pos = new Point(m_mainForm.Left, m_mainForm.Bottom); break; default: break; } return(pos); }
private void ChildForm_FormClosed(object sender, EventArgs e) { ChildFormInfo info = getInfo(sender as Form); if (info != null) { m_childs.Remove(info); } }
private void ChildForm_SizeChanged(object sender, EventArgs e) { ChildFormInfo info = getInfo(sender as Form); if (info != null && info.State == MagneticState.Adsorbent) { resetChildLocation(info); } }
private void resetChildLocation(ChildFormInfo info) { if (info.Child == null) { return; } Point pos = getLocation(info); setChildLocation(info, pos); }
private void setChildLocation(ChildFormInfo info, Point location) { if (info.Child == null) { return; } info.CutstomSetLocation = true; info.Child.Location = location; info.CutstomSetLocation = false; }
public void addChild(Form childForm, MagneticLocation loc) { foreach (ChildFormInfo info in m_childs) { if (info.Child == childForm) { return; } } ChildFormInfo childInfo = new ChildFormInfo(); childInfo.Child = childForm; childInfo.Location = loc; childInfo.State = MagneticState.Adsorbent; childInfo.CutstomSetLocation = false; childForm.LocationChanged += ChildForm_LocationChanged; childForm.SizeChanged += ChildForm_SizeChanged; childForm.FormClosed += ChildForm_FormClosed; m_childs.Add(childInfo); adsorbentChild(childInfo); }
private void ChildForm_LocationChanged(object sender, EventArgs e) { ChildFormInfo info = getInfo(sender as Form); if (info == null) { return; } if (info.CutstomSetLocation == true) { return; } Point location = getLocation(info); if (info.Child.Left > location.X && info.Location == MagneticLocation.Right) { if (info.Child.Left - location.X > Step) { separationChild(info); } else { adsorbentChild(info); } } else if (info.Child.Left < location.X && info.Location == MagneticLocation.Left) { if (info.Child.Left - location.X < -Step) { separationChild(info); } else { adsorbentChild(info); } } if (info.Child.Top > location.Y && info.Location == MagneticLocation.Bottom) { if (info.Child.Top - location.Y > Step) { separationChild(info); } else { adsorbentChild(info); } } else if (info.Child.Top < location.Y && info.Location == MagneticLocation.Top) { if (info.Child.Top - location.Y < -Step) { separationChild(info); } else { adsorbentChild(info); } } }
private void separationChild(ChildFormInfo info) { info.State = MagneticState.Separation; }
private void adsorbentChild(ChildFormInfo info) { info.State = MagneticState.Adsorbent; resetChildLocation(info); }
private void setChildLocation(ChildFormInfo info, int x, int y) { setChildLocation(info, new Point(x, y)); }