using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;

namespace nft.controls
{	
	
	/// <summary>
	/// AutoLayoutPanel の概要の説明です。
	/// </summary>
	public class AutoLayoutPanel : Panel, ILayoutManagedControl
	{

		public AutoLayoutPanel(System.ComponentModel.IContainer container) {
			///
			/// Windows.Forms クラス作成デザイナ サポートに必要です。
			///
			container.Add(this);
			//InitializeComponent();

		}

		public AutoLayoutPanel() {
			//InitializeComponent();

		}

		protected override void OnSizeChanged(EventArgs e) {
			Size sz = base.ClientSize;
			bool wide = sz.Width>sz.Height;
			DockStyle ds;
			if(wide){
				ds = DockStyle.Left;
				sz.Width /= base.Controls.Count;
			}else{
				ds = DockStyle.Top;
				sz.Height /= base.Controls.Count;
			}
			foreach(Control c in base.Controls){
				c.Size = sz;
				c.Dock = ds;
			}			
			base.OnSizeChanged (e);
		}
		
		protected virtual void DoLayout( int width, int height ){
			
		}

		#region コンポーネント デザイナで生成されたコード
		/*
		/// <summary>
		/// 必要なデザイナ変数です。
		/// </summary>
		private System.ComponentModel.Container components = null;

		/// <summary>
		/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
		/// コード エディタで変更しないでください。
		/// </summary>
		private void InitializeComponent()
		{
			components = new System.ComponentModel.Container();
		}

		/// <summary>
		/// 使用されているリソースに後処理を実行します。
		/// </summary>
		protected override void Dispose( bool disposing ) {
			if( disposing ) {
				if(components != null) {
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}
		*/
		#endregion

		#region ILayoutManagedControl メンバ

		public virtual Size LayoutHorizontal(int maxHeight) {
			SuspendLayout();
			// TODO:  AutoLayoutPanel.LayoutHorizontal 実装を追加します。
			ResumeLayout();
			return Size;
		}

		public virtual Size LayoutVirtical(int maxWidth) {
			SuspendLayout();
			// TODO:  AutoLayoutPanel.LayoutVirtical 実装を追加します。
			ResumeLayout();
			return Size;
		}

		#endregion
	}
}
