//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.Web.UI.WebControls.WebParts { using System; using System.ComponentModel; using System.Drawing.Design; using System.Web.UI.WebControls; /// /// 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. /// [ 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() { } /// /// The UI state of the part /// [ 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; } } /// /// The type of frame/border for the part. /// [ 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 /// /// /// public override ControlCollection Controls { get { EnsureChildControls(); return base.Controls; } } /// /// Short descriptive text used in tooltips and web part catalog descriptions /// [ 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 /// /// Perform our own databinding, then perform our child controls' databinding. /// public override void DataBind() { OnDataBinding(EventArgs.Empty); EnsureChildControls(); DataBindChildren(); } // Copied from CompositeControl #region ICompositeControlDesignerAccessor implementation void ICompositeControlDesignerAccessor.RecreateChildControls() { ChildControlsCreated = false; EnsureChildControls(); } #endregion } }