Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / WebParts / WebPart.cs / 1305376 / WebPart.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls.WebParts { using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Globalization; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Util; // ////// Adds several features to the Part class, including connections, personalization behavior, /// and additional UI properties. /// [ Designer("System.Web.UI.Design.WebControls.WebParts.WebPartDesigner, " + AssemblyRef.SystemDesign) ] public abstract class WebPart : Part, IWebPart, IWebActionable, IWebEditable { private WebPartManager _webPartManager; private string _zoneID; private int _zoneIndex; private WebPartZoneBase _zone; private bool _allowClose; private bool _allowConnect; private bool _allowEdit; private bool _allowHide; private bool _allowMinimize; private bool _allowZoneChange; private string _authorizationFilter; private string _catalogIconImageUrl; private PartChromeState _chromeState; private string _connectErrorMessage; private WebPartExportMode _exportMode; private WebPartHelpMode _helpMode; private string _helpUrl; private bool _hidden; private string _importErrorMessage; private string _titleIconImageUrl; private string _titleUrl; private bool _hasUserData; private bool _hasSharedData; private bool _isClosed; private bool _isShared; private bool _isStandalone; private bool _isStatic; // Counter to detect circular connections private Dictionary_trackerCounter; internal const string WholePartIDPrefix = "WebPart_"; private const string titleBarIDPrefix = "WebPartTitle_"; protected WebPart() { _allowClose = true; _allowConnect = true; _allowEdit = true; _allowHide = true; _allowMinimize = true; _allowZoneChange = true; _chromeState = PartChromeState.Normal; _exportMode = WebPartExportMode.None; _helpMode = WebPartHelpMode.Navigate; _isStatic = true; _isStandalone = true; } /// /// Whether the user is allowed to close the web part /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowClose), ] public virtual bool AllowClose { get { return _allowClose; } set { _allowClose = value; } } [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowConnect), ] public virtual bool AllowConnect { get { return _allowConnect; } set { _allowConnect = value; } } ////// If false, then LayoutEditorPart is the only visible EditorPart. Custom EditorParts /// may choose to be visible as well. /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowEdit), ] public virtual bool AllowEdit { get { return _allowEdit; } set { _allowEdit = value; } } ////// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowHide), ] public virtual bool AllowHide { get { return _allowHide; } set { _allowHide = value; } } ////// Whether the user is allowed to minimize the web part /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowMinimize), ] public virtual bool AllowMinimize { get { return _allowMinimize; } set { _allowMinimize = value; } } ////// Whether the user is allowed move the web part around the page /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowZoneChange), ] public virtual bool AllowZoneChange { get { return _allowZoneChange; } set { _allowZoneChange = value; } } [ DefaultValue(""), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AuthorizationFilter), ] public virtual string AuthorizationFilter { get { return (_authorizationFilter != null) ? _authorizationFilter : String.Empty; } set { _authorizationFilter = value; } } [ DefaultValue(""), Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), WebCategory("WebPartAppearance"), Personalizable(PersonalizationScope.Shared), WebSysDescription(SR.WebPart_CatalogIconImageUrl), ] public virtual string CatalogIconImageUrl { get { return (_catalogIconImageUrl != null) ? _catalogIconImageUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _catalogIconImageUrl = value; } } ////// /// Overriden to mark as personalizable /// // PERF: Use a field instead of calling base.ChromeState, since the base implementation uses // viewstate. [ Personalizable ] public override PartChromeState ChromeState { get { return _chromeState; } set { if ((value < PartChromeState.Normal) || (value > PartChromeState.Minimized)) { throw new ArgumentOutOfRangeException("value"); } _chromeState = value; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override PartChromeType ChromeType { get { return base.ChromeType; } set { base.ChromeType = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public string ConnectErrorMessage { get { return (_connectErrorMessage != null) ? _connectErrorMessage : String.Empty; } } ////// /// Overriden to mark as personalizable /// [ Personalizable(PersonalizationScope.Shared), ] public override string Description { get { return base.Description; } set { base.Description = value; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override ContentDirection Direction { get { return base.Direction; } set { base.Direction = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public string DisplayTitle { get { if (_webPartManager != null) { return _webPartManager.GetDisplayTitle(this); } else { // Needed for a WebPart in a DeclarativeCatalogPart, or any case where WebPartManager // has not been set. string displayTitle = Title; if (String.IsNullOrEmpty(displayTitle)) { displayTitle = SR.GetString(SR.Part_Untitled); } return displayTitle; } } } [ DefaultValue(WebPartExportMode.None), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_ExportMode), ] public virtual WebPartExportMode ExportMode { get { return _exportMode; } set { if (ControlState >= ControlState.Loaded && (WebPartManager == null || (WebPartManager.Personalization.Scope == PersonalizationScope.User && IsShared))) { throw new InvalidOperationException(SR.GetString(SR.WebPart_CantSetExportMode)); } if (value < WebPartExportMode.None || value > WebPartExportMode.NonSensitiveData) { throw new ArgumentOutOfRangeException("value"); } _exportMode = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool HasUserData { get { return _hasUserData; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool HasSharedData { get { return _hasSharedData; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override Unit Height { get { return base.Height; } set { base.Height = value; } } ////// The type of help UI used to display the help topic /// [ DefaultValue(WebPartHelpMode.Navigate), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_HelpMode), ] public virtual WebPartHelpMode HelpMode { get { return _helpMode; } set { if ((value < WebPartHelpMode.Modal) || (value > WebPartHelpMode.Navigate)) { throw new ArgumentOutOfRangeException("value"); } _helpMode = value; } } ////// The URL of the web part's associated help topic /// [ DefaultValue(""), Editor("System.Web.UI.Design.UrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_HelpUrl), ] public virtual string HelpUrl { get { return (_helpUrl != null) ? _helpUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _helpUrl = value; } } ////// Whether the web part is to be visually displayed or not. /// A web part with Hidden set to true still participates in various /// page lifecycle phases such as PreRender. /// [ DefaultValue(false), Personalizable, Themeable(false), WebCategory("WebPartAppearance"), WebSysDescription(SR.WebPart_Hidden), ] public virtual bool Hidden { get { return _hidden; } set { _hidden = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsClosed { get { return _isClosed; } } ////// An "orphaned" part has no Zone, but has not been moved to the page catalog yet. /// internal bool IsOrphaned { get { return (Zone == null && !IsClosed); } } [ Localizable(true), WebCategory("WebPartAppearance"), WebSysDefaultValue(SR.WebPart_DefaultImportErrorMessage), Personalizable(PersonalizationScope.Shared), WebSysDescription(SR.WebPart_ImportErrorMessage), ] public virtual string ImportErrorMessage { get { return (_importErrorMessage != null) ? _importErrorMessage : SR.GetString(SR.WebPart_DefaultImportErrorMessage); } set { _importErrorMessage = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsShared { get { return _isShared; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsStandalone { get { return _isStandalone; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsStatic { get { return _isStatic; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Localizable(true), ] public virtual string Subtitle { get { return String.Empty; } } ////// /// Overriden to mark as personalizable /// [ Personalizable, ] public override string Title { get { return base.Title; } set { base.Title = value; } } // ID rendered on the title bar of the WebPart, so a mouse listener can be attached // for drag and drop. internal string TitleBarID { get { return titleBarIDPrefix + ID; } } [ DefaultValue(""), Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), WebCategory("WebPartAppearance"), Personalizable(PersonalizationScope.Shared), WebSysDescription(SR.WebPart_TitleIconImageUrl), ] public virtual string TitleIconImageUrl { get { return (_titleIconImageUrl != null) ? _titleIconImageUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _titleIconImageUrl = value; } } [ DefaultValue(""), Editor("System.Web.UI.Design.UrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_TitleUrl), ] public virtual string TitleUrl { get { return (_titleUrl != null) ? _titleUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _titleUrl = value; } } internal DictionaryTrackerCounter { get { if (_trackerCounter == null) { _trackerCounter = new Dictionary (); } return _trackerCounter; } } /// /// Overriden by subclasses to add Verbs for this WebPart. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public virtual WebPartVerbCollection Verbs { get { return WebPartVerbCollection.Empty; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public virtual object WebBrowsableObject { get { return this; } } protected WebPartManager WebPartManager { get { return _webPartManager; } } // ID rendered on the table containing the whole web part. We shouldn't render ClientID // on the table, since it will be rendered by the WebPart on the container for the part // contents. We shouldn't render ID either, since it may be the same as another control // on the page, and it should be different than ID since it is being rendered by the Zone, // not the WebPart. internal string WholePartID { get { return WholePartIDPrefix + ID; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override Unit Width { get { return base.Width; } set { base.Width = value; } } ////// The WebPartZone that this WebPart is currently rendered within. /// If the WebPart is closed, returns the WebPartZone that the WebPart /// was last rendered within. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public WebPartZoneBase Zone { get { if (_zone == null) { string zoneID = ZoneID; if (!String.IsNullOrEmpty(zoneID) && WebPartManager != null) { WebPartZoneCollection zones = WebPartManager.Zones; if (zones != null) { _zone = zones[zoneID]; } } } return _zone; } } ////// The ID of the web part zone that this web part logically belongs to /// internal string ZoneID { get { return _zoneID; } set { if (ZoneID != value) { _zoneID = value; // Invalidate cache _zone = null; } } } ////// The index of this web part within the web part zone it logically belongs to. /// An index of -1 means the part is not currently in a zone. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public int ZoneIndex { get { return _zoneIndex; } } public virtual EditorPartCollection CreateEditorParts() { return EditorPartCollection.Empty; } protected internal virtual void OnClosing(EventArgs e) { } protected internal virtual void OnConnectModeChanged(EventArgs e) { } protected internal virtual void OnDeleting(EventArgs e) { } protected internal virtual void OnEditModeChanged(EventArgs e) { } internal override void PreRenderRecursiveInternal() { if (IsStandalone) { if (Hidden) { throw new InvalidOperationException(SR.GetString(SR.WebPart_NotStandalone, "Hidden", ID)); } } else { if (!Visible) { throw new InvalidOperationException(SR.GetString(SR.WebPart_OnlyStandalone, "Visible", ID)); } } base.PreRenderRecursiveInternal(); } internal void SetConnectErrorMessage(string connectErrorMessage) { // Only set the error message if it has not been set already. The first error message // set should be displayed. if (String.IsNullOrEmpty(_connectErrorMessage)) { _connectErrorMessage = connectErrorMessage; } } internal void SetHasUserData(bool hasUserData) { _hasUserData = hasUserData; } internal void SetHasSharedData(bool hasSharedData) { _hasSharedData = hasSharedData; } internal void SetIsClosed(bool isClosed) { _isClosed = isClosed; } internal void SetIsShared(bool isShared) { _isShared = isShared; } internal void SetIsStandalone(bool isStandalone) { _isStandalone = isStandalone; } internal void SetIsStatic(bool isStatic) { _isStatic = isStatic; } protected void SetPersonalizationDirty() { if (WebPartManager == null) { throw new InvalidOperationException(SR.GetString(SR.WebPartManagerRequired)); } WebPartManager.Personalization.SetDirty(this); } ////// This method allows a non-WebPart control to mark its personalization as dirty. /// public static void SetPersonalizationDirty(Control control) { if (control == null) { throw new ArgumentNullException("control"); } if (control.Page == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page"), "control"); } WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(control.Page); if (wpm == null) { throw new InvalidOperationException(SR.GetString(SR.WebPartManagerRequired)); } WebPart webPart = wpm.GetGenericWebPart(control); if (webPart == null) { throw new ArgumentException(SR.GetString(SR.WebPart_NonWebPart), "control"); } webPart.SetPersonalizationDirty(); } internal void SetWebPartManager(WebPartManager webPartManager) { _webPartManager = webPartManager; } ////// The index of this web part within the web part zone it logically belongs to. /// internal void SetZoneIndex(int zoneIndex) { if (zoneIndex < 0) { throw new ArgumentOutOfRangeException("zoneIndex"); } _zoneIndex = zoneIndex; } // If this is a GenericWebPart, returns the ChildControl. Else, just returns a pointer to itself. // Used when you need the Control to pass to methods on ConnectionPoint. internal Control ToControl() { GenericWebPart genericWebPart = this as GenericWebPart; if (genericWebPart != null) { Control control = genericWebPart.ChildControl; if (control != null) { return control; } else { throw new InvalidOperationException(SR.GetString(SR.GenericWebPart_ChildControlIsNull)); } } else { return this; } } protected override void TrackViewState() { if (WebPartManager != null) { WebPartManager.Personalization.ApplyPersonalizationState(this); } base.TrackViewState(); } ////// We need this to return nonzero for any two distinct WebParts on the page, /// since we use SortedList in WebPartManager, and SortedList cannot contain /// two keys where the IComparer returns zero. Two WebParts can have the same /// ZoneIndex when we merge the Shared and User parts. We use the ID /// to order the parts if ZoneIndex is the same. /// internal sealed class ZoneIndexComparer : IComparer { public int Compare(object x, object y) { WebPart p1 = (WebPart)x; WebPart p2 = (WebPart)y; int c = p1.ZoneIndex - p2.ZoneIndex; if (c == 0) { c = p1.ID.CompareTo(p2.ID); } return c; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls.WebParts { using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Globalization; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Util; // ////// Adds several features to the Part class, including connections, personalization behavior, /// and additional UI properties. /// [ Designer("System.Web.UI.Design.WebControls.WebParts.WebPartDesigner, " + AssemblyRef.SystemDesign) ] public abstract class WebPart : Part, IWebPart, IWebActionable, IWebEditable { private WebPartManager _webPartManager; private string _zoneID; private int _zoneIndex; private WebPartZoneBase _zone; private bool _allowClose; private bool _allowConnect; private bool _allowEdit; private bool _allowHide; private bool _allowMinimize; private bool _allowZoneChange; private string _authorizationFilter; private string _catalogIconImageUrl; private PartChromeState _chromeState; private string _connectErrorMessage; private WebPartExportMode _exportMode; private WebPartHelpMode _helpMode; private string _helpUrl; private bool _hidden; private string _importErrorMessage; private string _titleIconImageUrl; private string _titleUrl; private bool _hasUserData; private bool _hasSharedData; private bool _isClosed; private bool _isShared; private bool _isStandalone; private bool _isStatic; // Counter to detect circular connections private Dictionary_trackerCounter; internal const string WholePartIDPrefix = "WebPart_"; private const string titleBarIDPrefix = "WebPartTitle_"; protected WebPart() { _allowClose = true; _allowConnect = true; _allowEdit = true; _allowHide = true; _allowMinimize = true; _allowZoneChange = true; _chromeState = PartChromeState.Normal; _exportMode = WebPartExportMode.None; _helpMode = WebPartHelpMode.Navigate; _isStatic = true; _isStandalone = true; } /// /// Whether the user is allowed to close the web part /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowClose), ] public virtual bool AllowClose { get { return _allowClose; } set { _allowClose = value; } } [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowConnect), ] public virtual bool AllowConnect { get { return _allowConnect; } set { _allowConnect = value; } } ////// If false, then LayoutEditorPart is the only visible EditorPart. Custom EditorParts /// may choose to be visible as well. /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowEdit), ] public virtual bool AllowEdit { get { return _allowEdit; } set { _allowEdit = value; } } ////// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowHide), ] public virtual bool AllowHide { get { return _allowHide; } set { _allowHide = value; } } ////// Whether the user is allowed to minimize the web part /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowMinimize), ] public virtual bool AllowMinimize { get { return _allowMinimize; } set { _allowMinimize = value; } } ////// Whether the user is allowed move the web part around the page /// [ DefaultValue(true), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AllowZoneChange), ] public virtual bool AllowZoneChange { get { return _allowZoneChange; } set { _allowZoneChange = value; } } [ DefaultValue(""), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_AuthorizationFilter), ] public virtual string AuthorizationFilter { get { return (_authorizationFilter != null) ? _authorizationFilter : String.Empty; } set { _authorizationFilter = value; } } [ DefaultValue(""), Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), WebCategory("WebPartAppearance"), Personalizable(PersonalizationScope.Shared), WebSysDescription(SR.WebPart_CatalogIconImageUrl), ] public virtual string CatalogIconImageUrl { get { return (_catalogIconImageUrl != null) ? _catalogIconImageUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _catalogIconImageUrl = value; } } ////// /// Overriden to mark as personalizable /// // PERF: Use a field instead of calling base.ChromeState, since the base implementation uses // viewstate. [ Personalizable ] public override PartChromeState ChromeState { get { return _chromeState; } set { if ((value < PartChromeState.Normal) || (value > PartChromeState.Minimized)) { throw new ArgumentOutOfRangeException("value"); } _chromeState = value; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override PartChromeType ChromeType { get { return base.ChromeType; } set { base.ChromeType = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public string ConnectErrorMessage { get { return (_connectErrorMessage != null) ? _connectErrorMessage : String.Empty; } } ////// /// Overriden to mark as personalizable /// [ Personalizable(PersonalizationScope.Shared), ] public override string Description { get { return base.Description; } set { base.Description = value; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override ContentDirection Direction { get { return base.Direction; } set { base.Direction = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public string DisplayTitle { get { if (_webPartManager != null) { return _webPartManager.GetDisplayTitle(this); } else { // Needed for a WebPart in a DeclarativeCatalogPart, or any case where WebPartManager // has not been set. string displayTitle = Title; if (String.IsNullOrEmpty(displayTitle)) { displayTitle = SR.GetString(SR.Part_Untitled); } return displayTitle; } } } [ DefaultValue(WebPartExportMode.None), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_ExportMode), ] public virtual WebPartExportMode ExportMode { get { return _exportMode; } set { if (ControlState >= ControlState.Loaded && (WebPartManager == null || (WebPartManager.Personalization.Scope == PersonalizationScope.User && IsShared))) { throw new InvalidOperationException(SR.GetString(SR.WebPart_CantSetExportMode)); } if (value < WebPartExportMode.None || value > WebPartExportMode.NonSensitiveData) { throw new ArgumentOutOfRangeException("value"); } _exportMode = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool HasUserData { get { return _hasUserData; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool HasSharedData { get { return _hasSharedData; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override Unit Height { get { return base.Height; } set { base.Height = value; } } ////// The type of help UI used to display the help topic /// [ DefaultValue(WebPartHelpMode.Navigate), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_HelpMode), ] public virtual WebPartHelpMode HelpMode { get { return _helpMode; } set { if ((value < WebPartHelpMode.Modal) || (value > WebPartHelpMode.Navigate)) { throw new ArgumentOutOfRangeException("value"); } _helpMode = value; } } ////// The URL of the web part's associated help topic /// [ DefaultValue(""), Editor("System.Web.UI.Design.UrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_HelpUrl), ] public virtual string HelpUrl { get { return (_helpUrl != null) ? _helpUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _helpUrl = value; } } ////// Whether the web part is to be visually displayed or not. /// A web part with Hidden set to true still participates in various /// page lifecycle phases such as PreRender. /// [ DefaultValue(false), Personalizable, Themeable(false), WebCategory("WebPartAppearance"), WebSysDescription(SR.WebPart_Hidden), ] public virtual bool Hidden { get { return _hidden; } set { _hidden = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsClosed { get { return _isClosed; } } ////// An "orphaned" part has no Zone, but has not been moved to the page catalog yet. /// internal bool IsOrphaned { get { return (Zone == null && !IsClosed); } } [ Localizable(true), WebCategory("WebPartAppearance"), WebSysDefaultValue(SR.WebPart_DefaultImportErrorMessage), Personalizable(PersonalizationScope.Shared), WebSysDescription(SR.WebPart_ImportErrorMessage), ] public virtual string ImportErrorMessage { get { return (_importErrorMessage != null) ? _importErrorMessage : SR.GetString(SR.WebPart_DefaultImportErrorMessage); } set { _importErrorMessage = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsShared { get { return _isShared; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsStandalone { get { return _isStandalone; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public bool IsStatic { get { return _isStatic; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Localizable(true), ] public virtual string Subtitle { get { return String.Empty; } } ////// /// Overriden to mark as personalizable /// [ Personalizable, ] public override string Title { get { return base.Title; } set { base.Title = value; } } // ID rendered on the title bar of the WebPart, so a mouse listener can be attached // for drag and drop. internal string TitleBarID { get { return titleBarIDPrefix + ID; } } [ DefaultValue(""), Editor("System.Web.UI.Design.ImageUrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), WebCategory("WebPartAppearance"), Personalizable(PersonalizationScope.Shared), WebSysDescription(SR.WebPart_TitleIconImageUrl), ] public virtual string TitleIconImageUrl { get { return (_titleIconImageUrl != null) ? _titleIconImageUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _titleIconImageUrl = value; } } [ DefaultValue(""), Editor("System.Web.UI.Design.UrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), UrlProperty(), Personalizable(PersonalizationScope.Shared), Themeable(false), WebCategory("WebPartBehavior"), WebSysDescription(SR.WebPart_TitleUrl), ] public virtual string TitleUrl { get { return (_titleUrl != null) ? _titleUrl : String.Empty; } set { if (CrossSiteScriptingValidation.IsDangerousUrl(value)) { throw new ArgumentException(SR.GetString(SR.WebPart_BadUrl, value), "value"); } _titleUrl = value; } } internal DictionaryTrackerCounter { get { if (_trackerCounter == null) { _trackerCounter = new Dictionary (); } return _trackerCounter; } } /// /// Overriden by subclasses to add Verbs for this WebPart. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public virtual WebPartVerbCollection Verbs { get { return WebPartVerbCollection.Empty; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public virtual object WebBrowsableObject { get { return this; } } protected WebPartManager WebPartManager { get { return _webPartManager; } } // ID rendered on the table containing the whole web part. We shouldn't render ClientID // on the table, since it will be rendered by the WebPart on the container for the part // contents. We shouldn't render ID either, since it may be the same as another control // on the page, and it should be different than ID since it is being rendered by the Zone, // not the WebPart. internal string WholePartID { get { return WholePartIDPrefix + ID; } } ////// /// Overriden to mark as personalizable /// [ Personalizable ] public override Unit Width { get { return base.Width; } set { base.Width = value; } } ////// The WebPartZone that this WebPart is currently rendered within. /// If the WebPart is closed, returns the WebPartZone that the WebPart /// was last rendered within. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public WebPartZoneBase Zone { get { if (_zone == null) { string zoneID = ZoneID; if (!String.IsNullOrEmpty(zoneID) && WebPartManager != null) { WebPartZoneCollection zones = WebPartManager.Zones; if (zones != null) { _zone = zones[zoneID]; } } } return _zone; } } ////// The ID of the web part zone that this web part logically belongs to /// internal string ZoneID { get { return _zoneID; } set { if (ZoneID != value) { _zoneID = value; // Invalidate cache _zone = null; } } } ////// The index of this web part within the web part zone it logically belongs to. /// An index of -1 means the part is not currently in a zone. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public int ZoneIndex { get { return _zoneIndex; } } public virtual EditorPartCollection CreateEditorParts() { return EditorPartCollection.Empty; } protected internal virtual void OnClosing(EventArgs e) { } protected internal virtual void OnConnectModeChanged(EventArgs e) { } protected internal virtual void OnDeleting(EventArgs e) { } protected internal virtual void OnEditModeChanged(EventArgs e) { } internal override void PreRenderRecursiveInternal() { if (IsStandalone) { if (Hidden) { throw new InvalidOperationException(SR.GetString(SR.WebPart_NotStandalone, "Hidden", ID)); } } else { if (!Visible) { throw new InvalidOperationException(SR.GetString(SR.WebPart_OnlyStandalone, "Visible", ID)); } } base.PreRenderRecursiveInternal(); } internal void SetConnectErrorMessage(string connectErrorMessage) { // Only set the error message if it has not been set already. The first error message // set should be displayed. if (String.IsNullOrEmpty(_connectErrorMessage)) { _connectErrorMessage = connectErrorMessage; } } internal void SetHasUserData(bool hasUserData) { _hasUserData = hasUserData; } internal void SetHasSharedData(bool hasSharedData) { _hasSharedData = hasSharedData; } internal void SetIsClosed(bool isClosed) { _isClosed = isClosed; } internal void SetIsShared(bool isShared) { _isShared = isShared; } internal void SetIsStandalone(bool isStandalone) { _isStandalone = isStandalone; } internal void SetIsStatic(bool isStatic) { _isStatic = isStatic; } protected void SetPersonalizationDirty() { if (WebPartManager == null) { throw new InvalidOperationException(SR.GetString(SR.WebPartManagerRequired)); } WebPartManager.Personalization.SetDirty(this); } ////// This method allows a non-WebPart control to mark its personalization as dirty. /// public static void SetPersonalizationDirty(Control control) { if (control == null) { throw new ArgumentNullException("control"); } if (control.Page == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page"), "control"); } WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(control.Page); if (wpm == null) { throw new InvalidOperationException(SR.GetString(SR.WebPartManagerRequired)); } WebPart webPart = wpm.GetGenericWebPart(control); if (webPart == null) { throw new ArgumentException(SR.GetString(SR.WebPart_NonWebPart), "control"); } webPart.SetPersonalizationDirty(); } internal void SetWebPartManager(WebPartManager webPartManager) { _webPartManager = webPartManager; } ////// The index of this web part within the web part zone it logically belongs to. /// internal void SetZoneIndex(int zoneIndex) { if (zoneIndex < 0) { throw new ArgumentOutOfRangeException("zoneIndex"); } _zoneIndex = zoneIndex; } // If this is a GenericWebPart, returns the ChildControl. Else, just returns a pointer to itself. // Used when you need the Control to pass to methods on ConnectionPoint. internal Control ToControl() { GenericWebPart genericWebPart = this as GenericWebPart; if (genericWebPart != null) { Control control = genericWebPart.ChildControl; if (control != null) { return control; } else { throw new InvalidOperationException(SR.GetString(SR.GenericWebPart_ChildControlIsNull)); } } else { return this; } } protected override void TrackViewState() { if (WebPartManager != null) { WebPartManager.Personalization.ApplyPersonalizationState(this); } base.TrackViewState(); } ////// We need this to return nonzero for any two distinct WebParts on the page, /// since we use SortedList in WebPartManager, and SortedList cannot contain /// two keys where the IComparer returns zero. Two WebParts can have the same /// ZoneIndex when we merge the Shared and User parts. We use the ID /// to order the parts if ZoneIndex is the same. /// internal sealed class ZoneIndexComparer : IComparer { public int Compare(object x, object y) { WebPart p1 = (WebPart)x; WebPart p2 = (WebPart)y; int c = p1.ZoneIndex - p2.ZoneIndex; if (c == 0) { c = p1.ID.CompareTo(p2.ID); } return c; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextEndOfSegment.cs
- BinaryNode.cs
- SqlDataSourceStatusEventArgs.cs
- EnumDataContract.cs
- XomlCompiler.cs
- CodeGenerator.cs
- StateMachineDesignerPaint.cs
- ProcessModule.cs
- ProtectedProviderSettings.cs
- DataServiceHostFactory.cs
- GridViewColumnHeader.cs
- SafeLibraryHandle.cs
- DefaultTraceListener.cs
- InsufficientMemoryException.cs
- CornerRadiusConverter.cs
- WmpBitmapDecoder.cs
- ViewStateException.cs
- WriterOutput.cs
- ByteAnimationUsingKeyFrames.cs
- AutomationElement.cs
- ToolStripDropDownItem.cs
- infer.cs
- TextTreeExtractElementUndoUnit.cs
- Privilege.cs
- DataGridViewHeaderCell.cs
- QilLoop.cs
- RequiredFieldValidator.cs
- XmlComment.cs
- UInt32.cs
- Binding.cs
- DataObjectEventArgs.cs
- XmlValidatingReaderImpl.cs
- TypefaceCollection.cs
- UnsafeNativeMethods.cs
- StrokeNodeOperations2.cs
- ServiceParser.cs
- VisualCollection.cs
- FunctionCommandText.cs
- BuilderInfo.cs
- XmlSerializerAssemblyAttribute.cs
- ListBindableAttribute.cs
- TreeNodeSelectionProcessor.cs
- ProviderCollection.cs
- KeyEventArgs.cs
- SqlTriggerAttribute.cs
- Control.cs
- RegexGroup.cs
- XslCompiledTransform.cs
- CatalogPartCollection.cs
- PageRequestManager.cs
- TabControlEvent.cs
- OleDbConnection.cs
- _TLSstream.cs
- EnumerableRowCollection.cs
- SerializableAttribute.cs
- SqlConnectionStringBuilder.cs
- CompoundFileStorageReference.cs
- Stack.cs
- DataServiceEntityAttribute.cs
- Operator.cs
- Regex.cs
- Keywords.cs
- SiteOfOriginContainer.cs
- ServiceOperation.cs
- CollectionType.cs
- Byte.cs
- SendMailErrorEventArgs.cs
- versioninfo.cs
- _FtpDataStream.cs
- FormsIdentity.cs
- PeerToPeerException.cs
- Vector3DAnimationUsingKeyFrames.cs
- QuestionEventArgs.cs
- ReadOnlyDictionary.cs
- ReachDocumentReferenceSerializer.cs
- NumberFormatInfo.cs
- ResourcePool.cs
- SecurityPermission.cs
- NodeInfo.cs
- PaintEvent.cs
- ProtocolsConfiguration.cs
- FormViewModeEventArgs.cs
- MaskInputRejectedEventArgs.cs
- SqlCacheDependencyDatabaseCollection.cs
- ObjectQuery_EntitySqlExtensions.cs
- RemotingException.cs
- SettingsAttributes.cs
- ScriptManagerProxy.cs
- RtfToken.cs
- BaseInfoTable.cs
- WaitHandle.cs
- SqlDataReaderSmi.cs
- SingleAnimation.cs
- DurationConverter.cs
- DataGridViewRow.cs
- StorageMappingItemLoader.cs
- AsymmetricSignatureFormatter.cs
- BindingGroup.cs
- MarkupObject.cs
- SecureUICommand.cs