using System; using System.Drawing; using System.Collections; using System.Windows.Forms; namespace DevComponents.DotNetBar { /// /// Provides fill layout for the dock site. /// public class DockSiteDocumentLayout { private int m_BarSpacing=2; private eOrientation m_Orientation=eOrientation.Horizontal; public DockSiteDocumentLayout() { } public void Layout(DockSite site) { if(m_Orientation==eOrientation.Horizontal) LayoutHorizontal(site); //else // LayoutVertical(site); } private void LayoutHorizontal(DockSite site) { int height=site.ClientRectangle.Height; Rectangle containerRectangle=site.ClientRectangle; int totalWidth=0, specifiedWidth=0; int variableCount=0; ArrayList visibleBars=new ArrayList(); // Calculate fixed/specified and variable width for(int i=0;i0) { totalWidth+=bar.SplitDockWidth; specifiedWidth+=bar.SplitDockWidth; } else { totalWidth+=bar.MinimumSize(m_Orientation).Width; variableCount++; } if(i+10 && visibleBars.Count-variableCount-1>0) specifiedWidth+=(visibleBars.Count-variableCount-1)*m_BarSpacing; int x=containerRectangle.X, y=containerRectangle.Y; int variableWidth=0; int totalVariableWidth=(containerRectangle.Width-specifiedWidth-m_BarSpacing*(variableCount-1)); if(variableCount>0) variableWidth=totalVariableWidth/variableCount; int availableWidth=containerRectangle.Width; int count=visibleBars.Count; for(int i=0;i0) { if(i+1==count) bar.RecalcSize(new Size(availableWidth,containerRectangle.Height)); else bar.RecalcSize(new Size(bar.SplitDockWidth,containerRectangle.Height)); } else { bar.SplitDockWidth=variableWidth; bar.RecalcSize(new Size(variableWidth,containerRectangle.Height)); totalVariableWidth-=variableWidth; } x+=(m_BarSpacing+bar.Width); availableWidth-=(m_BarSpacing+bar.Width); } } public eOrientation Orientation { get {return m_Orientation;} set {m_Orientation=value;} } } }