Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / UI / WebControls / MultiView.cs / 1 / MultiView.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System; using System.ComponentModel; using System.Globalization; using System.Security.Permissions; using System.Web.UI; ////// [ ControlBuilder(typeof(MultiViewControlBuilder)), Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, " + AssemblyRef.SystemDesign), DefaultEvent("ActiveViewChanged"), ParseChildren(typeof(View)) ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [ToolboxData("<{0}:MultiView runat=\"server\">{0}:MultiView>")] public class MultiView : Control { private static readonly object _eventActiveViewChanged = new object(); private int _activeViewIndex = -1; private int _cachedActiveViewIndex = -1; private bool _ignoreBubbleEvents = false; private bool _controlStateApplied; ////// /// public static readonly string NextViewCommandName = "NextView"; ///Specifies the NextView command. This field is constant. ////// public static readonly string PreviousViewCommandName = "PrevView"; ///Specifies the PrevView command. This field is constant. ////// public static readonly string SwitchViewByIDCommandName = "SwitchViewByID"; ///Specifies the SwitchViewById command. This field is constant. ////// public static readonly string SwitchViewByIndexCommandName = "SwitchViewByIndex"; ///Specifies the SwitchViewByIndex command. This field is constant. ////// [ DefaultValue(-1), WebCategory("Behavior"), WebSysDescription(SR.MultiView_ActiveView) ] public virtual int ActiveViewIndex { get { if (_cachedActiveViewIndex > -1) { return _cachedActiveViewIndex; } return _activeViewIndex; } set { if (value < -1) { throw new ArgumentOutOfRangeException("value", SR.GetString(SR.MultiView_ActiveViewIndex_less_than_minus_one, value)); } if (Views.Count == 0 && ControlState < ControlState.FrameworkInitialized /* Whidbey 113333 */) { _cachedActiveViewIndex = value; return; } if (value >= Views.Count) { throw new ArgumentOutOfRangeException("value", SR.GetString(SR.MultiView_ActiveViewIndex_equal_or_greater_than_count, value, Views.Count)); } // VSWhidbey 472054: If the cached index is not -1, that means we // haven't activate any view, hence original index is set to -1. int originalIndex = (_cachedActiveViewIndex != -1) ? -1 : _activeViewIndex; _activeViewIndex = value; _cachedActiveViewIndex = -1; // Need to compare originalIndex to Views.Count in case originalIndex was set declaratively. if (originalIndex != value && originalIndex != -1 && originalIndex < Views.Count) { Views[originalIndex].Active = false; if (ShouldTriggerViewEvent) { Views[originalIndex].OnDeactivate(EventArgs.Empty); } } if (originalIndex != value && Views.Count != 0 && value != -1) { Views[value].Active = true; if (ShouldTriggerViewEvent) { Views[value].OnActivate(EventArgs.Empty); OnActiveViewChanged(EventArgs.Empty); } } } } ///Indicates the active ///inside the control. /// [ Browsable(true) ] public override bool EnableTheming { get { return base.EnableTheming; } set { base.EnableTheming = value; } } private bool ShouldTriggerViewEvent { get { // We want to fire the View's event on the first request return (_controlStateApplied || (Page != null && !Page.IsPostBack)); } } ///Gets and sets a value indicating whether theme is enabled. ////// [ Browsable(false), WebSysDescription(SR.MultiView_Views), PersistenceMode(PersistenceMode.InnerDefaultProperty) ] public virtual ViewCollection Views { get { return (ViewCollection)Controls; } } ///[To be supplied.] ////// [ WebCategory("Action"), WebSysDescription(SR.MultiView_ActiveViewChanged) ] public event EventHandler ActiveViewChanged { add { Events.AddHandler(_eventActiveViewChanged, value); } remove { Events.RemoveHandler(_eventActiveViewChanged, value); } } ///Occurs when the active view changed. ////// /// Overridden to only allow View controls to be added. /// protected override void AddParsedSubObject(object obj) { if (obj is View) { Controls.Add((Control)obj); } else if (!(obj is LiteralControl)) throw new HttpException(SR.GetString(SR.MultiView_cannot_have_children_of_type, obj.GetType().Name)); } ////// [To be supplied.] /// protected override ControlCollection CreateControlCollection() { return new ViewCollection(this); } ////// public View GetActiveView() { int activeViewIndex = ActiveViewIndex; if (activeViewIndex >= Views.Count) { throw new Exception(SR.GetString(SR.MultiView_ActiveViewIndex_out_of_range)); } if (activeViewIndex < 0) { return null; } View view = Views[activeViewIndex]; if (!view.Active) { UpdateActiveView(activeViewIndex); } return view; } // Used to wizard to disable bubble events on MultiView. internal void IgnoreBubbleEvents() { _ignoreBubbleEvents = true; } private void UpdateActiveView(int activeViewIndex) { for (int i=0; i[To be supplied.] ////// Loads the control state. /// protected internal override void LoadControlState(object state) { Pair p = state as Pair; if (p != null) { base.LoadControlState(p.First); ActiveViewIndex = (int) p.Second; } _controlStateApplied = true; } ////// protected virtual void OnActiveViewChanged(EventArgs e) { EventHandler handler = (EventHandler)Events[_eventActiveViewChanged]; if (handler != null) { handler(this, e); } } ///Raises the ///event. /// /// Overridden to handle navigation between child views. /// protected override bool OnBubbleEvent(object source, EventArgs e) { if (_ignoreBubbleEvents) { return false; } if (e is CommandEventArgs) { CommandEventArgs ce = (CommandEventArgs) e; string cn = ce.CommandName; if (cn == NextViewCommandName) { if (ActiveViewIndex < Views.Count - 1) { ActiveViewIndex = ActiveViewIndex + 1; } else { ActiveViewIndex = - 1; } return true; } else if (cn == PreviousViewCommandName) { if (ActiveViewIndex > -1 ) { ActiveViewIndex = ActiveViewIndex - 1; } return true; } else if (cn == SwitchViewByIDCommandName) { View view = FindControl((string)ce.CommandArgument) as View; if (view != null && view.Parent == this) { SetActiveView(view); return true; } else { throw new HttpException(SR.GetString( SR.MultiView_invalid_view_id, ID, (string)ce.CommandArgument, SwitchViewByIDCommandName)); } } else if (cn == SwitchViewByIndexCommandName) { int index; try { index = Int32.Parse((string)ce.CommandArgument, CultureInfo.InvariantCulture); } catch (FormatException) { throw new FormatException(SR.GetString( SR.MultiView_invalid_view_index_format, (string)ce.CommandArgument, SwitchViewByIndexCommandName)); } ActiveViewIndex = index; return true; } } return false; } ////// /// Overridden to handle navigation between child views. /// protected internal override void OnInit(EventArgs e) { base.OnInit(e); Page.RegisterRequiresControlState(this); if (_cachedActiveViewIndex > -1) { ActiveViewIndex = _cachedActiveViewIndex; _cachedActiveViewIndex = -1; GetActiveView(); } } protected internal override void RemovedControl(Control ctl) { if (((View)ctl).Active && ActiveViewIndex < Views.Count) { GetActiveView(); } base.RemovedControl(ctl); } protected internal override void Render(HtmlTextWriter writer) { View activeView = GetActiveView(); if (activeView != null) { activeView.RenderControl(writer); } } ////// protected internal override object SaveControlState() { int avi = ActiveViewIndex; object obj = base.SaveControlState(); if (obj != null || avi != -1) { return new Pair(obj, avi); } return null; } ///Saves the control state. ////// public void SetActiveView(View view) { int index = Views.IndexOf (view); if (index < 0) { throw new HttpException(SR.GetString(SR.MultiView_view_not_found, (view == null ? "null" : view.ID), this.ID)); } ActiveViewIndex = index; } } ///[To be supplied.] ///[To be supplied.] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class MultiViewControlBuilder : ControlBuilder { public override void AppendSubBuilder(ControlBuilder subBuilder) { if (subBuilder is CodeBlockBuilder) { throw new Exception(SR.GetString(SR.Multiview_rendering_block_not_allowed)); } base.AppendSubBuilder(subBuilder); } } ///[To be supplied.] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class ViewCollection : ControlCollection { ///[To be supplied.] public ViewCollection (Control owner) : base (owner) {} ///[To be supplied.] public override void Add(Control v) { if (!(v is View)) { throw new ArgumentException(SR.GetString(SR.ViewCollection_must_contain_view)); } base.Add(v); } ///[To be supplied.] public override void AddAt(int index, Control v) { if (!(v is View)) { throw new ArgumentException(SR.GetString(SR.ViewCollection_must_contain_view)); } base.AddAt(index, v); } ///[To be supplied.] public new View this[int i] { get { return (View)base[i]; } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodePageUtils.cs
- XmlTypeAttribute.cs
- XhtmlStyleClass.cs
- ListBindingConverter.cs
- ObjectTypeMapping.cs
- querybuilder.cs
- TrustDriver.cs
- DelegateSerializationHolder.cs
- EdmTypeAttribute.cs
- CompilerError.cs
- PropertyBuilder.cs
- CacheForPrimitiveTypes.cs
- SweepDirectionValidation.cs
- IntermediatePolicyValidator.cs
- DesignerMetadata.cs
- XPathNodeIterator.cs
- InvalidOleVariantTypeException.cs
- DebugHandleTracker.cs
- __FastResourceComparer.cs
- PictureBox.cs
- ContentControl.cs
- CallbackValidatorAttribute.cs
- InvalidPrinterException.cs
- FontConverter.cs
- DataError.cs
- ZipIOExtraFieldPaddingElement.cs
- CheckBox.cs
- Guid.cs
- streamingZipPartStream.cs
- DeflateEmulationStream.cs
- EntityClassGenerator.cs
- ProfileServiceManager.cs
- Compilation.cs
- EmptyCollection.cs
- FileDialog.cs
- TouchEventArgs.cs
- DispatcherExceptionFilterEventArgs.cs
- Rectangle.cs
- WebPartActionVerb.cs
- ExtendedProperty.cs
- XmlSchemaCollection.cs
- WebRequestModulesSection.cs
- ColorAnimationUsingKeyFrames.cs
- SyncOperationState.cs
- OptimizedTemplateContentHelper.cs
- RenamedEventArgs.cs
- TimeSpanValidatorAttribute.cs
- DictionaryMarkupSerializer.cs
- GcSettings.cs
- ThrowHelper.cs
- Certificate.cs
- Cursor.cs
- MissingSatelliteAssemblyException.cs
- DataTableClearEvent.cs
- BoundField.cs
- TabControl.cs
- RuleInfoComparer.cs
- TrackingMemoryStream.cs
- Tablet.cs
- NetworkAddressChange.cs
- ISO2022Encoding.cs
- latinshape.cs
- RequestCacheValidator.cs
- PassportAuthenticationEventArgs.cs
- PermissionSetEnumerator.cs
- ExplicitDiscriminatorMap.cs
- SecurityContextCookieSerializer.cs
- SqlUserDefinedAggregateAttribute.cs
- WebPartUtil.cs
- AspNetPartialTrustHelpers.cs
- AssociativeAggregationOperator.cs
- IndexedString.cs
- Graph.cs
- NamespaceListProperty.cs
- GridViewDeletedEventArgs.cs
- Calendar.cs
- EventQueueState.cs
- XmlSchemaGroupRef.cs
- OdbcParameterCollection.cs
- PresentationAppDomainManager.cs
- NullableFloatMinMaxAggregationOperator.cs
- ContainerAction.cs
- XmlHierarchicalDataSourceView.cs
- PipelineDeploymentState.cs
- ConfigurationManagerInternalFactory.cs
- HybridDictionary.cs
- ReferenceConverter.cs
- ValidatorCompatibilityHelper.cs
- JapaneseLunisolarCalendar.cs
- HashHelpers.cs
- DataGridViewIntLinkedList.cs
- AudienceUriMode.cs
- ByteRangeDownloader.cs
- ServiceDesigner.cs
- RowUpdatingEventArgs.cs
- TopClause.cs
- WebEncodingValidator.cs
- StylusEventArgs.cs
- BoundPropertyEntry.cs
- bidPrivateBase.cs