using System;
using System.Collections;
using System.Drawing;
using DevComponents.UI.ContentManager;
namespace DevComponents.DotNetBar
{
	/// 
	/// Provides layout management for ISimpleTab tab implementations.
	/// 
	public class SimpleTabLayoutManager:BlockLayoutManager
	{
		public SimpleTabLayoutManager()
		{
		}
		/// 
		/// Resizes the content block and sets it's Bounds property to reflect new size.
		/// 
		/// Content block to resize.
        public override void Layout(IBlock block, Size availableSize)
		{
			if(this.Graphics==null)
				throw(new InvalidOperationException("Graphics property must be set to valid instance of Graphics object."));
			ISimpleTab tab=block as ISimpleTab;
			if(!tab.Visible)
				return;
			int width=0;
			int height=0;
			int paddingTop=1;
			int paddingBottom=0;
			int paddingLeft=1;
			int paddingRight=1;
			int paddingBottomSelected=2;
            eTextFormat strFormat = eTextFormat.Default;
			Font font=tab.GetTabFont();
			if(tab.Text!="")
			{
				Size textSize=TextDrawing.MeasureString(this.Graphics,tab.Text,font,0,strFormat);
				width+=textSize.Width;
				if(textSize.Height>height)
					height=textSize.Height;
			}
			else
				height+=font.Height;
			height+=(paddingTop+paddingBottom);
			if(tab.IsSelected)
				height+=paddingBottomSelected;
			width+=(paddingLeft+paddingRight);
			if(tab.TabAlignment==eTabStripAlignment.Left || tab.TabAlignment==eTabStripAlignment.Right)
				block.Bounds=new Rectangle(0,0,height,width);
			else
				block.Bounds=new Rectangle(0,0,width,height);
		}
        public override Rectangle FinalizeLayout(Rectangle containerBounds, Rectangle blocksBounds, ArrayList lines)
        {
            return (blocksBounds);
        }
	}
}