File: UI\WebParts\Part.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="Part.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Web.UI.WebControls.WebParts {
 
    using System;
    using System.ComponentModel;
    using System.Drawing.Design;
    using System.Web.UI.WebControls;
 
    /// <devdoc>
    /// Base class for all Part classes in the WebPart framework.  Common to all Part controls are properties that
    /// allow the control to be rendered in a modular fashion.
    /// </devdoc>
    [
    Designer("System.Web.UI.Design.WebControls.WebParts.PartDesigner, " + AssemblyRef.SystemDesign),
    ParseChildren(true),
    PersistChildren(false),
    ]
    public abstract class Part : Panel, INamingContainer, ICompositeControlDesignerAccessor {
 
        // Prevent class from being subclassed outside of our assembly
        internal Part() {
        }
 
        /// <devdoc>
        /// The UI state of the part
        /// </devdoc>
        [
        DefaultValue(PartChromeState.Normal),
        WebCategory("WebPartAppearance"),
        WebSysDescription(SR.Part_ChromeState),
        ]
        public virtual PartChromeState ChromeState {
            get {
                object o = ViewState["ChromeState"];
                return (o != null) ? (PartChromeState)o : PartChromeState.Normal;
            }
            set {
                if ((value < PartChromeState.Normal) || (value > PartChromeState.Minimized)) {
                    throw new ArgumentOutOfRangeException("value");
                }
 
                ViewState["ChromeState"] = value;
            }
        }
 
        /// <devdoc>
        /// The type of frame/border for the part.
        /// </devdoc>
        [
        DefaultValue(PartChromeType.Default),
        WebCategory("WebPartAppearance"),
        WebSysDescription(SR.Part_ChromeType),
        ]
        public virtual PartChromeType ChromeType {
            get {
                object o = ViewState["ChromeType"];
                return (o != null) ? (PartChromeType)(int)o : PartChromeType.Default;
            }
            set {
                if ((value < PartChromeType.Default) || (value > PartChromeType.BorderOnly)) {
                    throw new ArgumentOutOfRangeException("value");
                }
                ViewState["ChromeType"] = (int)value;
            }
        }
 
        // Copied from CompositeControl
        /// <internalonly/>
        /// <devdoc>
        /// </devdoc>
        public override ControlCollection Controls {
            get {
                EnsureChildControls();
                return base.Controls;
            }
        }
 
        /// <devdoc>
        /// Short descriptive text used in tooltips and web part catalog descriptions
        /// </devdoc>
        [
        DefaultValue(""),
        Localizable(true),
        WebCategory("WebPartAppearance"),
        WebSysDescription(SR.Part_Description),
        ]
        public virtual string Description {
            get {
                string s = (string)ViewState["Description"];
                return (s != null) ? s : String.Empty;
            }
            set {
                ViewState["Description"] = value;
            }
        }
 
        [
        // Must use WebSysDefaultValue instead of DefaultValue, since it is overridden in extending classes
        Localizable(true),
        WebSysDefaultValue(""),
        WebCategory("WebPartAppearance"),
        WebSysDescription(SR.Part_Title),
        ]
        public virtual string Title {
            get {
                string s = (string)ViewState["Title"];
                return (s != null) ? s : String.Empty;
            }
            set {
                ViewState["Title"] = value;
            }
        }
 
        // Copied from CompositeControl
        /// <devdoc>
        /// Perform our own databinding, then perform our child controls' databinding.
        /// </devdoc>
        public override void DataBind() {
            OnDataBinding(EventArgs.Empty);
            EnsureChildControls();
            DataBindChildren();
        }
 
        // Copied from CompositeControl
        #region ICompositeControlDesignerAccessor implementation
        void ICompositeControlDesignerAccessor.RecreateChildControls() {
            ChildControlsCreated = false;
            EnsureChildControls();
        }
        #endregion
    }
}