private void ToolBarDoubleClick(object sender, System.EventArgs e)
        {
            ToolBarDockHolder holder = (ToolBarDockHolder)sender;

            if (IsDocked(holder))
            {
                ToolBarDockArea docked = GetDockedArea(holder);
                docked.SuspendLayout();
                holder.Parent            = holder.FloatForm;
                holder.Location          = new Point(0, 0);
                holder.DockStyle         = DockStyle.None;
                holder.FloatForm.Visible = true;
                holder.FloatForm.Size    = holder.Size;
                docked.ResumeLayout();
                docked.PerformLayout();
            }
            else
            {
                ToolBarDockArea area = holder.PreferredDockedArea;
                area.SuspendLayout();
                Point newLoc = holder.PreferredDockedLocation;
                holder.DockStyle = area.Dock;
                holder.Parent    = area;
                holder.PreferredDockedLocation = newLoc;
                holder.FloatForm.Visible       = false;
                holder.PreferredDockedArea     = area;
                area.ResumeLayout();
                area.PerformLayout();
            }
        }
 private bool IsDocked(ToolBarDockHolder holder)
 {
     return(holder.Parent == Top ||
            holder.Parent == Left ||
            holder.Parent == Right ||
            holder.Parent == Bottom);
 }
        public ToolBarDockHolder AddControl(Control c, DockStyle site, Control refControl, DockStyle refSite)
        {
            if (site == DockStyle.Fill)
            {
                site = DockStyle.Top;
            }

            ToolBarDockHolder holder = new ToolBarDockHolder(this, c, site);

            if (refControl != null)
            {
                ToolBarDockHolder refHolder = GetHolder(refControl);
                if (refHolder != null)
                {
                    Point p = refHolder.PreferredDockedLocation;
                    if (refSite == DockStyle.Left)
                    {
                        p.X -= 1;
                    }
                    else if (refSite == DockStyle.Right)
                    {
                        p.X += refHolder.Width + 1;
                    }
                    else if (refSite == DockStyle.Bottom)
                    {
                        p.Y += refHolder.Height + 1;
                    }
                    else
                    {
                        p.Y -= 1;
                    }
                    holder.PreferredDockedLocation = p;
                }
            }


            holders.Add(holder);
            if (site != DockStyle.None)
            {
                holder.DockStyle = site;
                holder.Parent    = holder.PreferredDockedArea;
            }
            else
            {
                holder.Parent            = holder.FloatForm;
                holder.Location          = new Point(0, 0);
                holder.DockStyle         = DockStyle.None;
                holder.FloatForm.Size    = holder.Size;
                holder.FloatForm.Visible = true;
            }

            holder.MouseUp     += new MouseEventHandler(ToolBarMouseUp);
            holder.DoubleClick += new EventHandler(ToolBarDoubleClick);
            holder.MouseMove   += new MouseEventHandler(ToolBarMouseMove);
            holder.MouseDown   += new MouseEventHandler(ToolBarMouseDown);

            return(holder);
        }
 private void ToolBarMouseUp(object sender, MouseEventArgs e)
 {
     if (dragged != null)
     {
         dragged    = null;
         ptOffset.X = 8;
         ptOffset.Y = 8;
     }
 }
        private void ToolBarMouseDown(object sender, MouseEventArgs e)
        {
            ToolBarDockHolder holder = (ToolBarDockHolder)sender;

            if (dragged == null &&
                e.Button.Equals(MouseButtons.Left) &&
                e.Clicks == 1 &&
                holder.CanDrag(new Point(e.X, e.Y)))
            {
                ptStart  = Control.MousePosition;
                dragged  = (ToolBarDockHolder)sender;
                ptOffset = new Point(e.X, e.Y);
            }
        }
        public void RemoveControl(Control c)
        {
            ToolBarDockHolder holder = GetHolder(c);

            if (holder != null)
            {
                holder.MouseUp     -= new MouseEventHandler(this.ToolBarMouseUp);
                holder.DoubleClick -= new EventHandler(this.ToolBarDoubleClick);
                holder.MouseMove   -= new MouseEventHandler(this.ToolBarMouseMove);
                holder.MouseDown   -= new MouseEventHandler(this.ToolBarMouseDown);

                holders.Remove(holder);
                holder.Parent = null;
                holder.FloatForm.Close();
            }
        }
        protected int GetPreferredLine(int lineSz, ToolBarDockHolder holder)
        {
            int pos, sz;

            if (Horizontal)
            {
                pos = holder.PreferredDockedLocation.Y;
                sz  = holder.Size.Height;
                if (pos < 0)
                {
                    return(Int32.MinValue);
                }
                if (pos > this.Height)
                {
                    return(Int32.MaxValue);
                }
            }
            else
            {
                pos = holder.PreferredDockedLocation.X;
                sz  = holder.Size.Width;
                if (pos < 0)
                {
                    return(Int32.MinValue);
                }
                if (pos > this.Width)
                {
                    return(Int32.MaxValue);
                }
            }
            int line    = pos / lineSz;
            int posLine = line * lineSz;

            if (posLine + 3 > pos)
            {
                return(line * 2);
            }
            if (posLine + lineSz - 3 < pos)
            {
                return(line * 2 + 2);
            }
            return(line * 2 + 1);
        }
        public void ShowControl(Control c, bool show)
        {
            ToolBarDockHolder holder = GetHolder(c);

            if (holder != null)
            {
                if (holder.Visible != show)
                {
                    if (IsDocked(holder))
                    {
                        holder.Visible = show;
                    }
                    else
                    {
                        holder.FloatForm.Visible = show;
                    }
                }
            }
        }
 private ToolBarDockArea GetDockedArea(ToolBarDockHolder holder)
 {
     if (holder.Parent == Top)
     {
         return(Top);
     }
     if (holder.Parent == Left)
     {
         return(Left);
     }
     if (holder.Parent == Right)
     {
         return(Right);
     }
     if (holder.Parent == Bottom)
     {
         return(Bottom);
     }
     return(null);
 }
 public ColumnHolder(int pos, ToolBarDockHolder holder, int size)
 {
     Position = pos;
     Holder   = holder;
     Size     = size;
 }
 protected int GetHolderWidth(ToolBarDockHolder holder)
 {
     return(Horizontal ? holder.Width : holder.Height);
 }
 protected int GetHolderLineSize(ToolBarDockHolder holder)
 {
     return(Horizontal ? holder.Height : holder.Width);
 }
 protected int GetPreferredPosition(ToolBarDockHolder holder)
 {
     return(Horizontal ? holder.PreferredDockedLocation.X :
            holder.PreferredDockedLocation.Y);
 }