//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.Web.UI.WebControls { using System; using System.Collections; using System.ComponentModel; using System.Drawing.Design; using System.Web.UI; using System.Globalization; /// /// Defines abstract class from which all HotSpot shapes must inherit. /// [ TypeConverter(typeof(ExpandableObjectConverter)) ] public abstract class HotSpot : IStateManager { private bool _isTrackingViewState; private StateBag _viewState; /// /// Gets or sets the keyboard shortcut key (AccessKey) for setting focus to the /// HotSpot. /// [ DefaultValue(""), Localizable(true), WebCategory("Accessibility"), WebSysDescription(SR.HotSpot_AccessKey) ] public virtual string AccessKey { get { string s = (string)ViewState["AccessKey"]; if (s != null) { return s; } return String.Empty; } set { // Valid values are null, String.Empty, and single character strings if ((value != null) && (value.Length > 1)) { throw new ArgumentOutOfRangeException("value"); } ViewState["AccessKey"] = value; } } /// /// Gets or sets the tool tip displayed over the /// hotspot and the text for device-specific display. /// [ Localizable(true), Bindable(true), WebCategory("Behavior"), DefaultValue(""), WebSysDescription(SR.HotSpot_AlternateText), NotifyParentProperty(true) ] public virtual String AlternateText { get { object text = ViewState["AlternateText"]; return (text == null)? String.Empty : (string)text; } set { ViewState["AlternateText"] = value; } } /// /// Gets or sets the HotSpotMode to either postback or navigation. /// [ WebCategory("Behavior"), DefaultValue(HotSpotMode.NotSet), WebSysDescription(SR.HotSpot_HotSpotMode), NotifyParentProperty(true) ] public virtual HotSpotMode HotSpotMode { get { object obj = ViewState["HotSpotMode"]; return (obj == null) ? HotSpotMode.NotSet : (HotSpotMode)obj; } set { if (value < HotSpotMode.NotSet || value > HotSpotMode.Inactive) { throw new ArgumentOutOfRangeException("value"); } ViewState["HotSpotMode"] = value; } } /// /// Gets or sets the argument for postback event. /// [ Bindable(true), WebCategory("Behavior"), DefaultValue(""), WebSysDescription(SR.HotSpot_PostBackValue), NotifyParentProperty(true) ] public String PostBackValue { get { object value = ViewState["PostBackValue"]; return (value == null)? String.Empty : (string)value; } set { ViewState["PostBackValue"] = value; } } /// /// Gets the markup language string representation of the shape name. /// protected internal abstract string MarkupName { get; } /// /// Gets or sets the navigation url. /// [ Bindable(true), WebCategory("Behavior"), DefaultValue(""), WebSysDescription(SR.HotSpot_NavigateUrl), NotifyParentProperty(true), UrlProperty(), Editor("System.Web.UI.Design.UrlEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor)), ] public String NavigateUrl { get { object value = ViewState["NavigateUrl"]; return (value == null)? String.Empty : (string)value; } set { ViewState["NavigateUrl"] = value; } } /// /// /// Gets or /// sets the tab index of the HotSpot. /// [ DefaultValue((short)0), WebCategory("Accessibility"), WebSysDescription(SR.HotSpot_TabIndex) ] public virtual short TabIndex { get { object o = ViewState["TabIndex"]; if (o != null) { return (short) o; } return (short)0; } set { ViewState["TabIndex"] = value; } } /// /// Gets or sets the name of the window for navigation. /// [ WebCategory("Behavior"), DefaultValue(""), TypeConverter(typeof(TargetConverter)), WebSysDescription(SR.HotSpot_Target), NotifyParentProperty(true) ] public virtual string Target { get { object value = ViewState["Target"]; return (value == null)? String.Empty : (string)value; } set { ViewState["Target"] = value; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] protected StateBag ViewState { get { if (_viewState == null) { _viewState = new StateBag(false); if (_isTrackingViewState) ((IStateManager)_viewState).TrackViewState(); } return _viewState; } } /// /// Returns a representation of the coordinates according to HTML standards. /// public abstract string GetCoordinates(); internal void SetDirty() { if (_viewState != null) { _viewState.SetDirty(true); } } public override string ToString () { return GetType().Name; } #region IStatemanager implementation /// /// Gets a value indicating whether a server control is tracking its view state changes. /// protected virtual bool IsTrackingViewState { get { return _isTrackingViewState; } } /// /// Restores view-state information that was saved by SaveViewState. /// protected virtual void LoadViewState(object savedState) { if (savedState != null) { ViewState.LoadViewState(savedState); } } /// /// Saves any server control view-state changes that have /// occurred since the time the page was posted back to the server. /// protected virtual object SaveViewState() { if (_viewState != null) { return _viewState.SaveViewState(); } return null; } /// /// Causes the tracking of view-state changes to the server control. /// protected virtual void TrackViewState() { _isTrackingViewState = true; if (_viewState != null) { _viewState.TrackViewState(); } } // private implementation of IStateManager /// bool IStateManager.IsTrackingViewState { get { return IsTrackingViewState; } } /// void IStateManager.LoadViewState(object savedState) { LoadViewState(savedState); } /// object IStateManager.SaveViewState() { return SaveViewState(); } /// void IStateManager.TrackViewState() { TrackViewState(); } #endregion } }