﻿/********
 * @version   : 2.1.0 - Ext.NET Pro License
 * @author    : Ext.NET, Inc. http://www.ext.net/
 * @date      : 2012-11-21
 * @copyright : Copyright (c) 2007-2012, Ext.NET, Inc. (http://www.ext.net/). All rights reserved.
 * @license   : See license.txt and http://www.ext.net/license/. 
 ********/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Ext.Net
{{
    /// <summary>
    /// 
    /// </summary>
    public partial class {Name}
    {{
        /// <summary>
        /// 
        /// </summary>
        new public abstract partial class Builder<T{FileName}, TBuilder> : {Extends}.Builder<T{FileName}, TBuilder>
            where T{FileName} : {Name}
            where TBuilder : Builder<T{FileName}, TBuilder>
        {{
            /*  Ctor
                -----------------------------------------------------------------------------------------------*/

			/// <summary>
			/// 
			/// </summary>
            public Builder(T{FileName} component) : base(component) {{ }}


			/*  ConfigOptions
				-----------------------------------------------------------------------------------------------*/
			{ConfigOptions}

			/*  Methods
				-----------------------------------------------------------------------------------------------*/
			{Methods}
        }}
		
		/// <summary>
        /// 
        /// </summary>
        public partial class Builder : {Name}.Builder<{Name}, {Name}.Builder>
        {{
            /*  Ctor
                -----------------------------------------------------------------------------------------------*/

			/// <summary>
			/// 
			/// </summary>
            public Builder() : base(new {Name}()) {{ }}

			/// <summary>
			/// 
			/// </summary>
            public Builder({Name} component) : base(component) {{ }}

			/// <summary>
			/// 
			/// </summary>
            public Builder({Name}.Config config) : base(new {Name}(config)) {{ }}


            /*  Implicit Conversion
                -----------------------------------------------------------------------------------------------*/

			/// <summary>
			/// 
			/// </summary>
            public static implicit operator Builder({Name} component)
            {{
                return component.ToBuilder();
            }}
        }}

        /// <summary>
        /// 
        /// </summary>
        public {Name}.Builder ToBuilder()
		{{
			return Ext.Net.X.Builder.{Name}(this);
		}}
		
		/// <summary>
        /// 
        /// </summary>
        public override IControlBuilder ToNativeBuilder()
		{{
			return (IControlBuilder)this.ToBuilder();
		}}
    }}
    
    
    /*  Builder
        -----------------------------------------------------------------------------------------------*/
    
    public partial class BuilderFactory
    {{
        /// <summary>
        /// 
        /// </summary>
        public {Name}.Builder {Name}()
        {{
#if MVC
			return this.{Name}(new {Name} {{ ViewContext = this.HtmlHelper != null ? this.HtmlHelper.ViewContext : null }});
#else
			return this.{Name}(new {Name}());
#endif			
        }}

        /// <summary>
        /// 
        /// </summary>
        public {Name}.Builder {Name}({Name} component)
        {{
#if MVC
			component.ViewContext = this.HtmlHelper != null ? this.HtmlHelper.ViewContext : null;
#endif			
			return new {Name}.Builder(component);
        }}

        /// <summary>
        /// 
        /// </summary>
        public {Name}.Builder {Name}({Name}.Config config)
        {{
#if MVC
			return new {Name}.Builder(new {Name}(config) {{ ViewContext = this.HtmlHelper != null ? this.HtmlHelper.ViewContext : null }});
#else
			return new {Name}.Builder(new {Name}(config));
#endif			
        }}
    }}
}}