2014-08-13 10:39:27 +01:00
//
// System.Web.UI.WebControls.Wizard
//
// Authors:
// Lluis Sanchez Gual (lluis@novell.com)
//
// (C) 2005 Novell, Inc. (http://www.novell.com)
//
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Web.UI ;
namespace System.Web.UI.WebControls
{
[DefaultEventAttribute ("FinishButtonClick")]
[BindableAttribute (false)]
[DesignerAttribute ("System.Web.UI.Design.WebControls.WizardDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
[ToolboxData ("<{0}:Wizard runat=\"server\"> <WizardSteps> <asp:WizardStep title=\"Step 1\" runat=\"server\"></asp:WizardStep> <asp:WizardStep title=\"Step 2\" runat=\"server\"></asp:WizardStep> </WizardSteps> </{0}:Wizard>")]
public class Wizard : CompositeControl
{
public static readonly string CancelCommandName = "Cancel" ;
public static readonly string MoveCompleteCommandName = "MoveComplete" ;
public static readonly string MoveNextCommandName = "MoveNext" ;
public static readonly string MovePreviousCommandName = "MovePrevious" ;
public static readonly string MoveToCommandName = "Move" ;
public static readonly string HeaderPlaceholderId = "headerPlaceholder" ;
public static readonly string NavigationPlaceholderId = "navigationPlaceholder" ;
public static readonly string SideBarPlaceholderId = "sideBarPlaceholder" ;
public static readonly string WizardStepPlaceholderId = "wizardStepPlaceholder" ;
protected static readonly string DataListID = "SideBarList" ;
static readonly string CancelButtonIDShort = "Cancel" ;
protected static readonly string CancelButtonID = CancelButtonIDShort + "Button" ;
static readonly string CustomFinishButtonIDShort = "CustomFinish" ;
protected static readonly string CustomFinishButtonID = CustomFinishButtonIDShort + "Button" ;
static readonly string CustomNextButtonIDShort = "CustomNext" ;
protected static readonly string CustomNextButtonID = CustomNextButtonIDShort + "Button" ;
static readonly string CustomPreviousButtonIDShort = "CustomPrevious" ;
protected static readonly string CustomPreviousButtonID = CustomPreviousButtonIDShort + "Button" ;
static readonly string FinishButtonIDShort = "Finish" ;
protected static readonly string FinishButtonID = FinishButtonIDShort + "Button" ;
static readonly string FinishPreviousButtonIDShort = "FinishPrevious" ;
protected static readonly string FinishPreviousButtonID = FinishPreviousButtonIDShort + "Button" ;
static readonly string SideBarButtonIDShort = "SideBar" ;
protected static readonly string SideBarButtonID = SideBarButtonIDShort + "Button" ;
static readonly string StartNextButtonIDShort = "StartNext" ;
protected static readonly string StartNextButtonID = StartNextButtonIDShort + "Button" ;
static readonly string StepNextButtonIDShort = "StepNext" ;
protected static readonly string StepNextButtonID = StepNextButtonIDShort + "Button" ;
static readonly string StepPreviousButtonIDShort = "StepPrevious" ;
protected static readonly string StepPreviousButtonID = StepPreviousButtonIDShort + "Button" ;
WizardStepCollection steps ;
// View state
TableItemStyle stepStyle ;
TableItemStyle sideBarStyle ;
TableItemStyle headerStyle ;
TableItemStyle navigationStyle ;
Style sideBarButtonStyle ;
Style cancelButtonStyle ;
Style finishCompleteButtonStyle ;
Style finishPreviousButtonStyle ;
Style startNextButtonStyle ;
Style stepNextButtonStyle ;
Style stepPreviousButtonStyle ;
Style navigationButtonStyle ;
ITemplate finishNavigationTemplate ;
ITemplate startNavigationTemplate ;
ITemplate stepNavigationTemplate ;
ITemplate headerTemplate ;
ITemplate sideBarTemplate ;
// Control state
int activeStepIndex = - 1 ;
bool inited = false ;
ArrayList history ;
Table wizardTable ;
WizardHeaderCell _headerCell ;
TableCell _navigationCell ;
StartNavigationContainer _startNavContainer ;
StepNavigationContainer _stepNavContainer ;
FinishNavigationContainer _finishNavContainer ;
MultiView multiView ;
DataList stepDatalist ;
ArrayList styles = new ArrayList ( ) ;
Hashtable customNavigation ;
static readonly object ActiveStepChangedEvent = new object ( ) ;
static readonly object CancelButtonClickEvent = new object ( ) ;
static readonly object FinishButtonClickEvent = new object ( ) ;
static readonly object NextButtonClickEvent = new object ( ) ;
static readonly object PreviousButtonClickEvent = new object ( ) ;
static readonly object SideBarButtonClickEvent = new object ( ) ;
public event EventHandler ActiveStepChanged {
add { Events . AddHandler ( ActiveStepChangedEvent , value ) ; }
remove { Events . RemoveHandler ( ActiveStepChangedEvent , value ) ; }
}
public event EventHandler CancelButtonClick {
add { Events . AddHandler ( CancelButtonClickEvent , value ) ; }
remove { Events . RemoveHandler ( CancelButtonClickEvent , value ) ; }
}
public event WizardNavigationEventHandler FinishButtonClick {
add { Events . AddHandler ( FinishButtonClickEvent , value ) ; }
remove { Events . RemoveHandler ( FinishButtonClickEvent , value ) ; }
}
public event WizardNavigationEventHandler NextButtonClick {
add { Events . AddHandler ( NextButtonClickEvent , value ) ; }
remove { Events . RemoveHandler ( NextButtonClickEvent , value ) ; }
}
public event WizardNavigationEventHandler PreviousButtonClick {
add { Events . AddHandler ( PreviousButtonClickEvent , value ) ; }
remove { Events . RemoveHandler ( PreviousButtonClickEvent , value ) ; }
}
public event WizardNavigationEventHandler SideBarButtonClick {
add { Events . AddHandler ( SideBarButtonClickEvent , value ) ; }
remove { Events . RemoveHandler ( SideBarButtonClickEvent , value ) ; }
}
protected virtual void OnActiveStepChanged ( object source , EventArgs e )
{
if ( Events ! = null ) {
EventHandler eh = ( EventHandler ) Events [ ActiveStepChangedEvent ] ;
if ( eh ! = null ) eh ( source , e ) ;
}
}
protected virtual void OnCancelButtonClick ( EventArgs e )
{
if ( Events ! = null ) {
EventHandler eh = ( EventHandler ) Events [ CancelButtonClickEvent ] ;
if ( eh ! = null ) eh ( this , e ) ;
}
}
protected virtual void OnFinishButtonClick ( WizardNavigationEventArgs e )
{
if ( Events ! = null ) {
WizardNavigationEventHandler eh = ( WizardNavigationEventHandler ) Events [ FinishButtonClickEvent ] ;
if ( eh ! = null ) eh ( this , e ) ;
}
}
protected virtual void OnNextButtonClick ( WizardNavigationEventArgs e )
{
if ( Events ! = null ) {
WizardNavigationEventHandler eh = ( WizardNavigationEventHandler ) Events [ NextButtonClickEvent ] ;
if ( eh ! = null ) eh ( this , e ) ;
}
}
protected virtual void OnPreviousButtonClick ( WizardNavigationEventArgs e )
{
if ( Events ! = null ) {
WizardNavigationEventHandler eh = ( WizardNavigationEventHandler ) Events [ PreviousButtonClickEvent ] ;
if ( eh ! = null ) eh ( this , e ) ;
}
}
protected virtual void OnSideBarButtonClick ( WizardNavigationEventArgs e )
{
if ( Events ! = null ) {
WizardNavigationEventHandler eh = ( WizardNavigationEventHandler ) Events [ SideBarButtonClickEvent ] ;
if ( eh ! = null ) eh ( this , e ) ;
}
}
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
[BrowsableAttribute (false)]
public WizardStepBase ActiveStep {
get {
int activeIndex = ActiveStepIndex ;
if ( activeIndex < - 1 | | activeIndex > = WizardSteps . Count )
throw new InvalidOperationException ( "ActiveStepIndex has an invalid value." ) ;
if ( activeIndex = = - 1 )
return null ;
return WizardSteps [ activeIndex ] ;
}
}
[DefaultValueAttribute (-1)]
[ThemeableAttribute (false)]
public virtual int ActiveStepIndex {
get {
return activeStepIndex ;
}
set {
if ( value < - 1 | | ( value > WizardSteps . Count & & ( inited | | WizardSteps . Count > 0 ) ) )
throw new ArgumentOutOfRangeException ( "The ActiveStepIndex must be less than WizardSteps.Count and at least -1" ) ;
if ( inited & & ! AllowNavigationToStep ( value ) )
return ;
if ( activeStepIndex ! = value ) {
activeStepIndex = value ;
if ( inited ) {
multiView . ActiveViewIndex = value ;
if ( stepDatalist ! = null ) {
stepDatalist . SelectedIndex = value ;
stepDatalist . DataBind ( ) ;
}
OnActiveStepChanged ( this , EventArgs . Empty ) ;
}
}
}
}
[UrlPropertyAttribute]
[DefaultValueAttribute ("")]
[EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public virtual string CancelButtonImageUrl {
get {
object v = ViewState [ "CancelButtonImageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "CancelButtonImageUrl" ] = value ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public Style CancelButtonStyle {
get {
if ( cancelButtonStyle = = null ) {
cancelButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) cancelButtonStyle ) . TrackViewState ( ) ;
}
return cancelButtonStyle ;
}
}
[LocalizableAttribute (true)]
public virtual string CancelButtonText {
get {
object v = ViewState [ "CancelButtonText" ] ;
return v ! = null ? ( string ) v : "Cancel" ;
}
set {
ViewState [ "CancelButtonText" ] = value ;
}
}
[DefaultValueAttribute (ButtonType.Button)]
public virtual ButtonType CancelButtonType {
get {
object v = ViewState [ "CancelButtonType" ] ;
return v ! = null ? ( ButtonType ) v : ButtonType . Button ;
}
set {
ViewState [ "CancelButtonType" ] = value ;
}
}
[UrlPropertyAttribute]
[EditorAttribute ("System.Web.UI.Design.UrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
[DefaultValueAttribute ("")]
[Themeable (false)]
public virtual string CancelDestinationPageUrl {
get {
object v = ViewState [ "CancelDestinationPageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "CancelDestinationPageUrl" ] = value ;
}
}
[DefaultValueAttribute (0)]
public virtual int CellPadding {
get {
if ( ControlStyleCreated )
return ( ( TableStyle ) ControlStyle ) . CellPadding ;
return 0 ;
}
set {
( ( TableStyle ) ControlStyle ) . CellPadding = value ;
}
}
[DefaultValueAttribute (0)]
public virtual int CellSpacing {
get {
if ( ControlStyleCreated )
return ( ( TableStyle ) ControlStyle ) . CellSpacing ;
return 0 ;
}
set {
( ( TableStyle ) ControlStyle ) . CellSpacing = value ;
}
}
[DefaultValueAttribute (false)]
[ThemeableAttribute (false)]
public virtual bool DisplayCancelButton {
get {
object v = ViewState [ "DisplayCancelButton" ] ;
return v ! = null ? ( bool ) v : false ;
}
set {
ViewState [ "DisplayCancelButton" ] = value ;
}
}
[DefaultValueAttribute (true)]
[ThemeableAttribute (false)]
public virtual bool DisplaySideBar {
get {
object v = ViewState [ "DisplaySideBar" ] ;
return v ! = null ? ( bool ) v : true ;
}
set {
ViewState [ "DisplaySideBar" ] = value ;
UpdateViews ( ) ;
}
}
[UrlPropertyAttribute]
[DefaultValueAttribute ("")]
[EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public virtual string FinishCompleteButtonImageUrl {
get {
object v = ViewState [ "FinishCompleteButtonImageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "FinishCompleteButtonImageUrl" ] = value ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public Style FinishCompleteButtonStyle {
get {
if ( finishCompleteButtonStyle = = null ) {
finishCompleteButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) finishCompleteButtonStyle ) . TrackViewState ( ) ;
}
return finishCompleteButtonStyle ;
}
}
[LocalizableAttribute (true)]
public virtual string FinishCompleteButtonText {
get {
object v = ViewState [ "FinishCompleteButtonText" ] ;
return v ! = null ? ( string ) v : "Finish" ;
}
set {
ViewState [ "FinishCompleteButtonText" ] = value ;
}
}
[DefaultValueAttribute (ButtonType.Button)]
public virtual ButtonType FinishCompleteButtonType {
get {
object v = ViewState [ "FinishCompleteButtonType" ] ;
return v ! = null ? ( ButtonType ) v : ButtonType . Button ;
}
set {
ViewState [ "FinishCompleteButtonType" ] = value ;
}
}
[UrlPropertyAttribute]
[EditorAttribute ("System.Web.UI.Design.UrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
[DefaultValueAttribute ("")]
[Themeable (false)]
public virtual string FinishDestinationPageUrl {
get {
object v = ViewState [ "FinishDestinationPageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "FinishDestinationPageUrl" ] = value ;
}
}
[DefaultValue (null)]
[TemplateContainer (typeof(Wizard), BindingDirection.OneWay)]
[PersistenceMode (PersistenceMode.InnerProperty)]
[Browsable (false)]
public virtual ITemplate FinishNavigationTemplate {
get { return finishNavigationTemplate ; }
set { finishNavigationTemplate = value ; UpdateViews ( ) ; }
}
[UrlPropertyAttribute]
[DefaultValueAttribute ("")]
[EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public virtual string FinishPreviousButtonImageUrl {
get {
object v = ViewState [ "FinishPreviousButtonImageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "FinishPreviousButtonImageUrl" ] = value ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public Style FinishPreviousButtonStyle {
get {
if ( finishPreviousButtonStyle = = null ) {
finishPreviousButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) finishPreviousButtonStyle ) . TrackViewState ( ) ;
}
return finishPreviousButtonStyle ;
}
}
[LocalizableAttribute (true)]
public virtual string FinishPreviousButtonText {
get {
object v = ViewState [ "FinishPreviousButtonText" ] ;
return v ! = null ? ( string ) v : "Previous" ;
}
set {
ViewState [ "FinishPreviousButtonText" ] = value ;
}
}
[DefaultValueAttribute (ButtonType.Button)]
public virtual ButtonType FinishPreviousButtonType {
get {
object v = ViewState [ "FinishPreviousButtonType" ] ;
return v ! = null ? ( ButtonType ) v : ButtonType . Button ;
}
set {
ViewState [ "FinishPreviousButtonType" ] = value ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public TableItemStyle HeaderStyle {
get {
if ( headerStyle = = null ) {
headerStyle = new TableItemStyle ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) headerStyle ) . TrackViewState ( ) ;
}
return headerStyle ;
}
}
[DefaultValue (null)]
[TemplateContainer (typeof(Wizard), BindingDirection.OneWay)]
[PersistenceMode (PersistenceMode.InnerProperty)]
[Browsable (false)]
public virtual ITemplate HeaderTemplate {
get { return headerTemplate ; }
set { headerTemplate = value ; UpdateViews ( ) ; }
}
[DefaultValueAttribute ("")]
[LocalizableAttribute (true)]
public virtual string HeaderText {
get {
object v = ViewState [ "HeaderText" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "HeaderText" ] = value ;
}
}
[DefaultValue (null)]
[TemplateContainerAttribute(typeof(Wizard))]
[PersistenceModeAttribute(PersistenceMode.InnerProperty)]
[BrowsableAttribute(false)]
public virtual ITemplate LayoutTemplate { get ; set ; }
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public Style NavigationButtonStyle {
get {
if ( navigationButtonStyle = = null ) {
navigationButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) navigationButtonStyle ) . TrackViewState ( ) ;
}
return navigationButtonStyle ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public TableItemStyle NavigationStyle {
get {
if ( navigationStyle = = null ) {
navigationStyle = new TableItemStyle ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) navigationStyle ) . TrackViewState ( ) ;
}
return navigationStyle ;
}
}
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[DefaultValueAttribute (null)]
[NotifyParentPropertyAttribute (true)]
public TableItemStyle SideBarStyle {
get {
if ( sideBarStyle = = null ) {
sideBarStyle = new TableItemStyle ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) sideBarStyle ) . TrackViewState ( ) ;
}
return sideBarStyle ;
}
}
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[DefaultValueAttribute (null)]
[NotifyParentPropertyAttribute (true)]
public Style SideBarButtonStyle {
get {
if ( sideBarButtonStyle = = null ) {
sideBarButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) sideBarButtonStyle ) . TrackViewState ( ) ;
}
return sideBarButtonStyle ;
}
}
[DefaultValue (null)]
[TemplateContainer (typeof(Wizard), BindingDirection.OneWay)]
[PersistenceMode (PersistenceMode.InnerProperty)]
[Browsable (false)]
public virtual ITemplate SideBarTemplate {
get { return sideBarTemplate ; }
set { sideBarTemplate = value ; UpdateViews ( ) ; }
}
[Localizable (true)]
public virtual string SkipLinkText
{
get
{
object v = ViewState [ "SkipLinkText" ] ;
return v ! = null ? ( string ) v : "Skip Navigation Links." ;
}
set
{
ViewState [ "SkipLinkText" ] = value ;
}
}
[DefaultValue (null)]
[TemplateContainer (typeof(Wizard), BindingDirection.OneWay)]
[PersistenceMode (PersistenceMode.InnerProperty)]
[Browsable (false)]
public virtual ITemplate StartNavigationTemplate {
get { return startNavigationTemplate ; }
set { startNavigationTemplate = value ; UpdateViews ( ) ; }
}
[UrlPropertyAttribute]
[DefaultValueAttribute ("")]
[EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public virtual string StartNextButtonImageUrl {
get {
object v = ViewState [ "StartNextButtonImageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "StartNextButtonImageUrl" ] = value ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public Style StartNextButtonStyle {
get {
if ( startNextButtonStyle = = null ) {
startNextButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) startNextButtonStyle ) . TrackViewState ( ) ;
}
return startNextButtonStyle ;
}
}
[LocalizableAttribute (true)]
public virtual string StartNextButtonText {
get {
object v = ViewState [ "StartNextButtonText" ] ;
return v ! = null ? ( string ) v : "Next" ;
}
set {
ViewState [ "StartNextButtonText" ] = value ;
}
}
[DefaultValueAttribute (ButtonType.Button)]
public virtual ButtonType StartNextButtonType {
get {
object v = ViewState [ "StartNextButtonType" ] ;
return v ! = null ? ( ButtonType ) v : ButtonType . Button ;
}
set {
ViewState [ "StartNextButtonType" ] = value ;
}
}
[DefaultValue (null)]
[TemplateContainer (typeof(Wizard), BindingDirection.OneWay)]
[PersistenceMode (PersistenceMode.InnerProperty)]
[Browsable (false)]
public virtual ITemplate StepNavigationTemplate {
get { return stepNavigationTemplate ; }
set { stepNavigationTemplate = value ; UpdateViews ( ) ; }
}
[UrlPropertyAttribute]
[DefaultValueAttribute ("")]
[EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public virtual string StepNextButtonImageUrl {
get {
object v = ViewState [ "StepNextButtonImageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "StepNextButtonImageUrl" ] = value ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public Style StepNextButtonStyle {
get {
if ( stepNextButtonStyle = = null ) {
stepNextButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) stepNextButtonStyle ) . TrackViewState ( ) ;
}
return stepNextButtonStyle ;
}
}
[LocalizableAttribute (true)]
public virtual string StepNextButtonText {
get {
object v = ViewState [ "StepNextButtonText" ] ;
return v ! = null ? ( string ) v : "Next" ;
}
set {
ViewState [ "StepNextButtonText" ] = value ;
}
}
[DefaultValueAttribute (ButtonType.Button)]
public virtual ButtonType StepNextButtonType {
get {
object v = ViewState [ "StepNextButtonType" ] ;
return v ! = null ? ( ButtonType ) v : ButtonType . Button ;
}
set {
ViewState [ "StepNextButtonType" ] = value ;
}
}
[UrlPropertyAttribute]
[DefaultValueAttribute ("")]
[EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public virtual string StepPreviousButtonImageUrl {
get {
object v = ViewState [ "StepPreviousButtonImageUrl" ] ;
return v ! = null ? ( string ) v : string . Empty ;
}
set {
ViewState [ "StepPreviousButtonImageUrl" ] = value ;
}
}
[DefaultValueAttribute (null)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[NotifyParentPropertyAttribute (true)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
public Style StepPreviousButtonStyle {
get {
if ( stepPreviousButtonStyle = = null ) {
stepPreviousButtonStyle = new Style ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) stepPreviousButtonStyle ) . TrackViewState ( ) ;
}
return stepPreviousButtonStyle ;
}
}
[LocalizableAttribute (true)]
public virtual string StepPreviousButtonText {
get {
object v = ViewState [ "StepPreviousButtonText" ] ;
return v ! = null ? ( string ) v : "Previous" ;
}
set {
ViewState [ "StepPreviousButtonText" ] = value ;
}
}
[DefaultValueAttribute (ButtonType.Button)]
public virtual ButtonType StepPreviousButtonType {
get {
object v = ViewState [ "StepPreviousButtonType" ] ;
return v ! = null ? ( ButtonType ) v : ButtonType . Button ;
}
set {
ViewState [ "StepPreviousButtonType" ] = value ;
}
}
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[DefaultValueAttribute (null)]
[NotifyParentPropertyAttribute (true)]
public TableItemStyle StepStyle {
get {
if ( stepStyle = = null ) {
stepStyle = new TableItemStyle ( ) ;
if ( IsTrackingViewState )
( ( IStateManager ) stepStyle ) . TrackViewState ( ) ;
}
return stepStyle ;
}
}
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
[EditorAttribute ("System.Web.UI.Design.WebControls.WizardStepCollectionEditor," + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
[PersistenceModeAttribute (PersistenceMode.InnerProperty)]
[ThemeableAttribute (false)]
public virtual WizardStepCollection WizardSteps {
get {
if ( steps = = null )
steps = new WizardStepCollection ( this ) ;
return steps ;
}
}
protected virtual new HtmlTextWriterTag TagKey
{
get {
return HtmlTextWriterTag . Table ;
}
}
internal virtual ITemplate SideBarItemTemplate
{
get { return new SideBarButtonTemplate ( this ) ; }
}
public ICollection GetHistory ( )
{
if ( history = = null )
history = new ArrayList ( ) ;
return history ;
}
public void MoveTo ( WizardStepBase wizardStep )
{
if ( wizardStep = = null )
throw new ArgumentNullException ( "wizardStep" ) ;
int i = WizardSteps . IndexOf ( wizardStep ) ;
if ( i = = - 1 )
throw new ArgumentException ( "The provided wizard step does not belong to this wizard." ) ;
ActiveStepIndex = i ;
}
public WizardStepType GetStepType ( WizardStepBase wizardStep , int index )
{
if ( wizardStep . StepType = = WizardStepType . Auto ) {
if ( ( index = = WizardSteps . Count - 1 ) | |
( WizardSteps . Count > 1 & &
WizardSteps [ WizardSteps . Count - 1 ] . StepType = = WizardStepType . Complete & &
index = = WizardSteps . Count - 2 ) )
return WizardStepType . Finish ;
else if ( index = = 0 )
return WizardStepType . Start ;
else
return WizardStepType . Step ;
} else
return wizardStep . StepType ;
}
protected virtual bool AllowNavigationToStep ( int index )
{
if ( ( index < 0 | | index > = WizardSteps . Count ) | | history = = null | | ! history . Contains ( index ) )
return true ;
return WizardSteps [ index ] . AllowReturn ;
}
protected internal override void OnInit ( EventArgs e )
{
Page . RegisterRequiresControlState ( this ) ;
base . OnInit ( e ) ;
if ( ActiveStepIndex = = - 1 )
ActiveStepIndex = 0 ;
EnsureChildControls ( ) ;
inited = true ;
}
protected override ControlCollection CreateControlCollection ( )
{
ControlCollection col = new ControlCollection ( this ) ;
col . SetReadonly ( true ) ;
return col ;
}
protected internal override void CreateChildControls ( )
{
CreateControlHierarchy ( ) ;
}
InvalidOperationException MakeLayoutException ( string phName , string phID , string condition = null )
{
return new InvalidOperationException (
String . Format ( "A {0} placeholder must be specified on Wizard '{1}'{2}. Specify a placeholder by setting a control's ID property to \"{3}\". The placeholder control must also specify runat=\"server\"" ,
phName , ID , condition , phID )
) ;
}
void CreateControlHierarchy_LayoutTemplate ( ITemplate layoutTemplate )
{
var layoutContainer = new WizardLayoutContainer ( ) ;
ControlCollection controls = Controls ;
controls . SetReadonly ( false ) ;
controls . Add ( layoutContainer ) ;
controls . SetReadonly ( true ) ;
layoutTemplate . InstantiateIn ( layoutContainer ) ;
WizardStepCollection steps = WizardSteps ;
bool doRender = steps ! = null & & steps . Count > 0 ;
Control container , placeHolder ;
if ( DisplaySideBar ) {
placeHolder = layoutContainer . FindControl ( SideBarPlaceholderId ) ;
if ( placeHolder = = null )
throw MakeLayoutException ( "sidebar" , SideBarPlaceholderId , " when DisplaySideBar is set to true" ) ;
container = new Control ( ) ;
CreateSideBar ( container ) ;
ReplacePlaceHolder ( layoutContainer , placeHolder , container ) ;
}
ITemplate headerTemplate = HeaderTemplate ;
if ( headerTemplate ! = null ) {
placeHolder = layoutContainer . FindControl ( HeaderPlaceholderId ) ;
if ( placeHolder = = null )
throw MakeLayoutException ( "header" , HeaderPlaceholderId , " when HeaderTemplate is set" ) ;
container = new Control ( ) ;
headerTemplate . InstantiateIn ( container ) ;
ReplacePlaceHolder ( layoutContainer , placeHolder , container ) ;
}
placeHolder = layoutContainer . FindControl ( WizardStepPlaceholderId ) ;
if ( placeHolder = = null )
throw MakeLayoutException ( "step" , WizardStepPlaceholderId ) ;
customNavigation = null ;
multiView = new MultiView ( ) ;
foreach ( View v in steps ) {
if ( v is TemplatedWizardStep )
InstantiateTemplateStep ( ( TemplatedWizardStep ) v ) ;
multiView . Views . Add ( v ) ;
}
multiView . ActiveViewIndex = ActiveStepIndex ;
ReplacePlaceHolder ( layoutContainer , placeHolder , multiView ) ;
placeHolder = layoutContainer . FindControl ( NavigationPlaceholderId ) ;
if ( placeHolder = = null )
throw MakeLayoutException ( "navigation" , NavigationPlaceholderId ) ;
var contentTable = new Table ( ) ;
contentTable . CellSpacing = 5 ;
contentTable . CellPadding = 5 ;
var row = new TableRow ( ) ;
var cell = new TableCell ( ) ;
cell . HorizontalAlign = HorizontalAlign . Right ;
container = new Control ( ) ;
CreateButtonBar ( container ) ;
row . Cells . Add ( cell ) ;
contentTable . Rows . Add ( row ) ;
ReplacePlaceHolder ( layoutContainer , placeHolder , container ) ;
layoutContainer . Visible = doRender ;
}
void ReplacePlaceHolder ( WebControl container , Control placeHolder , Control replacement )
{
ControlCollection controls = container . Controls ;
int index = controls . IndexOf ( placeHolder ) ;
controls . Remove ( placeHolder ) ;
controls . AddAt ( index , replacement ) ;
}
protected virtual void CreateControlHierarchy ( )
{
ITemplate layoutTemplate = LayoutTemplate ;
if ( layoutTemplate ! = null ) {
CreateControlHierarchy_LayoutTemplate ( layoutTemplate ) ;
return ;
}
styles . Clear ( ) ;
wizardTable = new ContainedTable ( this ) ;
Table contentTable = wizardTable ;
if ( DisplaySideBar ) {
contentTable = new Table ( ) ;
contentTable . CellPadding = 0 ;
contentTable . CellSpacing = 0 ;
contentTable . Height = new Unit ( "100%" ) ;
contentTable . Width = new Unit ( "100%" ) ;
TableRow row = new TableRow ( ) ;
TableCellNamingContainer sideBarCell = new TableCellNamingContainer ( SkipLinkText , ClientID ) ;
sideBarCell . ID = "SideBarContainer" ;
sideBarCell . ControlStyle . Height = Unit . Percentage ( 100 ) ;
CreateSideBar ( sideBarCell ) ;
row . Cells . Add ( sideBarCell ) ;
TableCell contentCell = new TableCell ( ) ;
contentCell . Controls . Add ( contentTable ) ;
contentCell . Height = new Unit ( "100%" ) ;
row . Cells . Add ( contentCell ) ;
wizardTable . Rows . Add ( row ) ;
}
AddHeaderRow ( contentTable ) ;
TableRow viewRow = new TableRow ( ) ;
TableCell viewCell = new TableCell ( ) ;
customNavigation = null ;
multiView = new MultiView ( ) ;
foreach ( View v in WizardSteps ) {
if ( v is TemplatedWizardStep )
InstantiateTemplateStep ( ( TemplatedWizardStep ) v ) ;
multiView . Views . Add ( v ) ;
}
multiView . ActiveViewIndex = ActiveStepIndex ;
RegisterApplyStyle ( viewCell , StepStyle ) ;
viewCell . Controls . Add ( multiView ) ;
viewRow . Cells . Add ( viewCell ) ;
viewRow . Height = new Unit ( "100%" ) ;
contentTable . Rows . Add ( viewRow ) ;
TableRow buttonRow = new TableRow ( ) ;
_navigationCell = new TableCell ( ) ;
_navigationCell . HorizontalAlign = HorizontalAlign . Right ;
RegisterApplyStyle ( _navigationCell , NavigationStyle ) ;
CreateButtonBar ( _navigationCell ) ;
buttonRow . Cells . Add ( _navigationCell ) ;
contentTable . Rows . Add ( buttonRow ) ;
Controls . SetReadonly ( false ) ;
Controls . Add ( wizardTable ) ;
Controls . SetReadonly ( true ) ;
}
internal virtual void InstantiateTemplateStep ( TemplatedWizardStep step )
{
BaseWizardContainer contentTemplateContainer = new BaseWizardContainer ( ) ;
if ( step . ContentTemplate ! = null )
step . ContentTemplate . InstantiateIn ( contentTemplateContainer . InnerCell ) ;
step . ContentTemplateContainer = contentTemplateContainer ;
step . Controls . Clear ( ) ;
step . Controls . Add ( contentTemplateContainer ) ;
BaseWizardNavigationContainer customNavigationTemplateContainer = new BaseWizardNavigationContainer ( ) ;
if ( step . CustomNavigationTemplate ! = null ) {
step . CustomNavigationTemplate . InstantiateIn ( customNavigationTemplateContainer ) ;
RegisterCustomNavigation ( step , customNavigationTemplateContainer ) ;
}
step . CustomNavigationTemplateContainer = customNavigationTemplateContainer ;
}
internal void RegisterCustomNavigation ( TemplatedWizardStep step , BaseWizardNavigationContainer customNavigationTemplateContainer )
{
if ( customNavigation = = null )
customNavigation = new Hashtable ( ) ;
customNavigation [ step ] = customNavigationTemplateContainer ;
}
void CreateButtonBar ( Control container )
{
if ( customNavigation ! = null & & customNavigation . Values . Count > 0 ) {
int i = 0 ;
foreach ( Control customNavigationTemplateContainer in customNavigation . Values ) {
customNavigationTemplateContainer . ID = "CustomNavigationTemplateContainerID" + i + + ;
container . Controls . Add ( customNavigationTemplateContainer ) ;
}
}
//
// StartNavContainer
//
_startNavContainer = new StartNavigationContainer ( this ) ;
_startNavContainer . ID = "StartNavigationTemplateContainerID" ;
if ( startNavigationTemplate ! = null )
startNavigationTemplate . InstantiateIn ( _startNavContainer ) ;
else {
TableRow row ;
AddNavButtonsTable ( _startNavContainer , out row ) ;
AddButtonCell ( row , CreateButtonSet ( StartNextButtonIDShort , MoveNextCommandName ) ) ;
AddButtonCell ( row , CreateButtonSet ( CancelButtonIDShort , CancelCommandName , false ) ) ;
_startNavContainer . ConfirmDefaultTemplate ( ) ;
}
container . Controls . Add ( _startNavContainer ) ;
//
// StepNavContainer
//
_stepNavContainer = new StepNavigationContainer ( this ) ;
_stepNavContainer . ID = "StepNavigationTemplateContainerID" ;
if ( stepNavigationTemplate ! = null )
stepNavigationTemplate . InstantiateIn ( _stepNavContainer ) ;
else {
TableRow row ;
AddNavButtonsTable ( _stepNavContainer , out row ) ;
AddButtonCell ( row , CreateButtonSet ( StepPreviousButtonIDShort , MovePreviousCommandName , false ) ) ;
AddButtonCell ( row , CreateButtonSet ( StepNextButtonIDShort , MoveNextCommandName ) ) ;
AddButtonCell ( row , CreateButtonSet ( CancelButtonIDShort , CancelCommandName , false ) ) ;
_stepNavContainer . ConfirmDefaultTemplate ( ) ;
}
container . Controls . Add ( _stepNavContainer ) ;
//
// StepNavContainer
//
_finishNavContainer = new FinishNavigationContainer ( this ) ;
_finishNavContainer . ID = "FinishNavigationTemplateContainerID" ;
if ( finishNavigationTemplate ! = null )
finishNavigationTemplate . InstantiateIn ( _finishNavContainer ) ;
else {
TableRow row ;
AddNavButtonsTable ( _finishNavContainer , out row ) ;
AddButtonCell ( row , CreateButtonSet ( FinishPreviousButtonIDShort , MovePreviousCommandName , false ) ) ;
AddButtonCell ( row , CreateButtonSet ( FinishButtonIDShort , MoveCompleteCommandName ) ) ;
AddButtonCell ( row , CreateButtonSet ( CancelButtonIDShort , CancelCommandName , false ) ) ;
_finishNavContainer . ConfirmDefaultTemplate ( ) ;
}
container . Controls . Add ( _finishNavContainer ) ;
}
static void AddNavButtonsTable ( BaseWizardNavigationContainer container , out TableRow row )
{
Table t = new Table ( ) ;
t . CellPadding = 5 ;
t . CellSpacing = 5 ;
row = new TableRow ( ) ;
t . Rows . Add ( row ) ;
container . Controls . Add ( t ) ;
}
Control [ ] CreateButtonSet ( string id , string command )
{
return CreateButtonSet ( id , command , true , null ) ;
}
Control [ ] CreateButtonSet ( string id , string command , bool causesValidation )
{
return CreateButtonSet ( id , command , causesValidation , null ) ;
}
internal Control [ ] CreateButtonSet ( string id , string command , bool causesValidation , string validationGroup )
{
return new Control [ ] {
CreateButton ( id + ButtonType . Button , command , ButtonType . Button , causesValidation , validationGroup ) ,
CreateButton ( id + ButtonType . Image , command , ButtonType . Image , causesValidation , validationGroup ) ,
CreateButton ( id + ButtonType . Link , command , ButtonType . Link , causesValidation , validationGroup )
} ;
}
Control CreateButton ( string id , string command , ButtonType type , bool causesValidation , string validationGroup )
{
WebControl b ;
switch ( type ) {
case ButtonType . Button :
b = CreateStandardButton ( ) ;
break ;
case ButtonType . Image :
b = CreateImageButton ( null ) ;
break ;
case ButtonType . Link :
b = CreateLinkButton ( ) ;
break ;
default :
throw new ArgumentOutOfRangeException ( "type" ) ;
}
b . ID = id ;
b . EnableTheming = false ;
( ( IButtonControl ) b ) . CommandName = command ;
( ( IButtonControl ) b ) . CausesValidation = causesValidation ;
if ( ! String . IsNullOrEmpty ( validationGroup ) )
( ( IButtonControl ) b ) . ValidationGroup = validationGroup ;
RegisterApplyStyle ( b , NavigationButtonStyle ) ;
return b ;
}
WebControl CreateStandardButton ( ) {
Button btn = new Button ( ) ;
return btn ;
}
WebControl CreateImageButton ( string imageUrl ) {
ImageButton img = new ImageButton ( ) ;
img . ImageUrl = imageUrl ;
return img ;
}
WebControl CreateLinkButton ( ) {
LinkButton link = new LinkButton ( ) ;
return link ;
}
void AddButtonCell ( TableRow row , params Control [ ] controls )
{
TableCell cell = new TableCell ( ) ;
cell . HorizontalAlign = HorizontalAlign . Right ;
for ( int i = 0 ; i < controls . Length ; i + + )
cell . Controls . Add ( controls [ i ] ) ;
row . Cells . Add ( cell ) ;
}
void CreateSideBar ( Control container )
{
WebControl wctl = container as WebControl ;
if ( wctl ! = null )
RegisterApplyStyle ( wctl , SideBarStyle ) ;
if ( sideBarTemplate ! = null ) {
sideBarTemplate . InstantiateIn ( container ) ;
stepDatalist = container . FindControl ( DataListID ) as DataList ;
if ( stepDatalist = = null )
throw new InvalidOperationException ( "The side bar template must contain a DataList control with id '" + DataListID + "'." ) ;
stepDatalist . ItemDataBound + = new DataListItemEventHandler ( StepDatalistItemDataBound ) ;
} else {
stepDatalist = new DataList ( ) ;
stepDatalist . ID = DataListID ;
stepDatalist . SelectedItemStyle . Font . Bold = true ;
stepDatalist . ItemTemplate = SideBarItemTemplate ;
container . Controls . Add ( stepDatalist ) ;
}
stepDatalist . ItemCommand + = new DataListCommandEventHandler ( StepDatalistItemCommand ) ;
stepDatalist . CellSpacing = 0 ;
stepDatalist . DataSource = WizardSteps ;
stepDatalist . SelectedIndex = ActiveStepIndex ;
stepDatalist . DataBind ( ) ;
}
void StepDatalistItemCommand ( object sender , DataListCommandEventArgs e )
{
WizardNavigationEventArgs arg = new WizardNavigationEventArgs ( ActiveStepIndex , Convert . ToInt32 ( e . CommandArgument ) ) ;
OnSideBarButtonClick ( arg ) ;
if ( ! arg . Cancel )
ActiveStepIndex = arg . NextStepIndex ;
}
void StepDatalistItemDataBound ( object sender , DataListItemEventArgs e )
{
if ( e . Item . ItemType = = ListItemType . Item | | e . Item . ItemType = = ListItemType . AlternatingItem | | e . Item . ItemType = = ListItemType . SelectedItem ) {
IButtonControl button = ( IButtonControl ) e . Item . FindControl ( SideBarButtonID ) ;
if ( button = = null )
throw new InvalidOperationException ( "SideBarList control must contain an IButtonControl with ID " + SideBarButtonID + " in every item template, this maybe include ItemTemplate, EditItemTemplate, SelectedItemTemplate or AlternatingItemTemplate if they exist." ) ;
WizardStepBase step = ( WizardStepBase ) e . Item . DataItem ;
if ( button is Button )
( ( Button ) button ) . UseSubmitBehavior = false ;
button . CommandName = Wizard . MoveToCommandName ;
button . CommandArgument = WizardSteps . IndexOf ( step ) . ToString ( ) ;
button . Text = step . Name ;
if ( step . StepType = = WizardStepType . Complete & & button is WebControl )
( ( WebControl ) button ) . Enabled = false ;
}
}
void AddHeaderRow ( Table table )
{
TableRow row = new TableRow ( ) ;
_headerCell = new WizardHeaderCell ( ) ;
_headerCell . ID = "HeaderContainer" ;
RegisterApplyStyle ( _headerCell , HeaderStyle ) ;
if ( headerTemplate ! = null ) {
headerTemplate . InstantiateIn ( _headerCell ) ;
_headerCell . ConfirmInitState ( ) ;
}
row . Cells . Add ( _headerCell ) ;
table . Rows . Add ( row ) ;
}
internal void RegisterApplyStyle ( WebControl control , Style style )
{
styles . Add ( new object [ ] { control , style } ) ;
}
protected override Style CreateControlStyle ( )
{
TableStyle style = new TableStyle ( ) ;
style . CellPadding = 0 ;
style . CellSpacing = 0 ;
return style ;
}
protected override IDictionary GetDesignModeState ( )
{
throw new NotImplementedException ( ) ;
}
2017-06-07 13:16:24 +00:00
protected internal override void LoadControlState ( object state )
2014-08-13 10:39:27 +01:00
{
2017-06-07 13:16:24 +00:00
if ( state = = null ) return ;
object [ ] controlState = ( object [ ] ) state ;
base . LoadControlState ( controlState [ 0 ] ) ;
activeStepIndex = ( int ) controlState [ 1 ] ;
history = ( ArrayList ) controlState [ 2 ] ;
2014-08-13 10:39:27 +01:00
}
protected internal override object SaveControlState ( )
{
if ( GetHistory ( ) . Count = = 0 | | ( int ) history [ 0 ] ! = ActiveStepIndex )
history . Insert ( 0 , ActiveStepIndex ) ;
object bstate = base . SaveControlState ( ) ;
return new object [ ] {
bstate , activeStepIndex , history
} ;
}
protected override void LoadViewState ( object savedState )
{
if ( savedState = = null ) {
base . LoadViewState ( null ) ;
return ;
}
object [ ] states = ( object [ ] ) savedState ;
base . LoadViewState ( states [ 0 ] ) ;
if ( states [ 1 ] ! = null ) ( ( IStateManager ) StepStyle ) . LoadViewState ( states [ 1 ] ) ;
if ( states [ 2 ] ! = null ) ( ( IStateManager ) SideBarStyle ) . LoadViewState ( states [ 2 ] ) ;
if ( states [ 3 ] ! = null ) ( ( IStateManager ) HeaderStyle ) . LoadViewState ( states [ 3 ] ) ;
if ( states [ 4 ] ! = null ) ( ( IStateManager ) NavigationStyle ) . LoadViewState ( states [ 4 ] ) ;
if ( states [ 5 ] ! = null ) ( ( IStateManager ) SideBarButtonStyle ) . LoadViewState ( states [ 5 ] ) ;
if ( states [ 6 ] ! = null ) ( ( IStateManager ) CancelButtonStyle ) . LoadViewState ( states [ 6 ] ) ;
if ( states [ 7 ] ! = null ) ( ( IStateManager ) FinishCompleteButtonStyle ) . LoadViewState ( states [ 7 ] ) ;
if ( states [ 8 ] ! = null ) ( ( IStateManager ) FinishPreviousButtonStyle ) . LoadViewState ( states [ 8 ] ) ;
if ( states [ 9 ] ! = null ) ( ( IStateManager ) StartNextButtonStyle ) . LoadViewState ( states [ 9 ] ) ;
if ( states [ 10 ] ! = null ) ( ( IStateManager ) StepNextButtonStyle ) . LoadViewState ( states [ 10 ] ) ;
if ( states [ 11 ] ! = null ) ( ( IStateManager ) StepPreviousButtonStyle ) . LoadViewState ( states [ 11 ] ) ;
if ( states [ 12 ] ! = null ) ( ( IStateManager ) NavigationButtonStyle ) . LoadViewState ( states [ 12 ] ) ;
if ( states [ 13 ] ! = null )
ControlStyle . LoadViewState ( states [ 13 ] ) ;
}
protected override object SaveViewState ( )
{
object [ ] state = new object [ 14 ] ;
state [ 0 ] = base . SaveViewState ( ) ;
if ( stepStyle ! = null ) state [ 1 ] = ( ( IStateManager ) stepStyle ) . SaveViewState ( ) ;
if ( sideBarStyle ! = null ) state [ 2 ] = ( ( IStateManager ) sideBarStyle ) . SaveViewState ( ) ;
if ( headerStyle ! = null ) state [ 3 ] = ( ( IStateManager ) headerStyle ) . SaveViewState ( ) ;
if ( navigationStyle ! = null ) state [ 4 ] = ( ( IStateManager ) navigationStyle ) . SaveViewState ( ) ;
if ( sideBarButtonStyle ! = null ) state [ 5 ] = ( ( IStateManager ) sideBarButtonStyle ) . SaveViewState ( ) ;
if ( cancelButtonStyle ! = null ) state [ 6 ] = ( ( IStateManager ) cancelButtonStyle ) . SaveViewState ( ) ;
if ( finishCompleteButtonStyle ! = null ) state [ 7 ] = ( ( IStateManager ) finishCompleteButtonStyle ) . SaveViewState ( ) ;
if ( finishPreviousButtonStyle ! = null ) state [ 8 ] = ( ( IStateManager ) finishPreviousButtonStyle ) . SaveViewState ( ) ;
if ( startNextButtonStyle ! = null ) state [ 9 ] = ( ( IStateManager ) startNextButtonStyle ) . SaveViewState ( ) ;
if ( stepNextButtonStyle ! = null ) state [ 10 ] = ( ( IStateManager ) stepNextButtonStyle ) . SaveViewState ( ) ;
if ( stepPreviousButtonStyle ! = null ) state [ 11 ] = ( ( IStateManager ) stepPreviousButtonStyle ) . SaveViewState ( ) ;
if ( navigationButtonStyle ! = null ) state [ 12 ] = ( ( IStateManager ) navigationButtonStyle ) . SaveViewState ( ) ;
if ( ControlStyleCreated )
state [ 13 ] = ControlStyle . SaveViewState ( ) ;
for ( int n = 0 ; n < state . Length ; n + + )
if ( state [ n ] ! = null ) return state ;
return null ;
}
protected override void TrackViewState ( )
{
base . TrackViewState ( ) ;
if ( stepStyle ! = null ) ( ( IStateManager ) stepStyle ) . TrackViewState ( ) ;
if ( sideBarStyle ! = null ) ( ( IStateManager ) sideBarStyle ) . TrackViewState ( ) ;
if ( headerStyle ! = null ) ( ( IStateManager ) headerStyle ) . TrackViewState ( ) ;
if ( navigationStyle ! = null ) ( ( IStateManager ) navigationStyle ) . TrackViewState ( ) ;
if ( sideBarButtonStyle ! = null ) ( ( IStateManager ) sideBarButtonStyle ) . TrackViewState ( ) ;
if ( cancelButtonStyle ! = null ) ( ( IStateManager ) cancelButtonStyle ) . TrackViewState ( ) ;
if ( finishCompleteButtonStyle ! = null ) ( ( IStateManager ) finishCompleteButtonStyle ) . TrackViewState ( ) ;
if ( finishPreviousButtonStyle ! = null ) ( ( IStateManager ) finishPreviousButtonStyle ) . TrackViewState ( ) ;
if ( startNextButtonStyle ! = null ) ( ( IStateManager ) startNextButtonStyle ) . TrackViewState ( ) ;
if ( stepNextButtonStyle ! = null ) ( ( IStateManager ) stepNextButtonStyle ) . TrackViewState ( ) ;
if ( stepPreviousButtonStyle ! = null ) ( ( IStateManager ) stepPreviousButtonStyle ) . TrackViewState ( ) ;
if ( navigationButtonStyle ! = null ) ( ( IStateManager ) navigationButtonStyle ) . TrackViewState ( ) ;
if ( ControlStyleCreated )
ControlStyle . TrackViewState ( ) ;
}
protected internal void RegisterCommandEvents ( IButtonControl button )
{
button . Command + = ProcessCommand ;
}
void ProcessCommand ( object sender , CommandEventArgs args )
{
Control c = sender as Control ;
if ( c ! = null ) {
switch ( c . ID ) {
case "CancelButton" :
ProcessEvent ( "Cancel" , null ) ;
return ;
case "FinishButton" :
ProcessEvent ( "MoveComplete" , null ) ;
return ;
case "StepPreviousButton" :
case "FinishPreviousButton" :
ProcessEvent ( "MovePrevious" , null ) ;
return ;
case "StartNextButton" :
case "StepNextButton" :
ProcessEvent ( "MoveNext" , null ) ;
return ;
}
}
ProcessEvent ( args . CommandName , args . CommandArgument as string ) ;
}
protected override bool OnBubbleEvent ( object source , EventArgs e )
{
CommandEventArgs args = e as CommandEventArgs ;
if ( args ! = null ) {
ProcessEvent ( args . CommandName , args . CommandArgument as string ) ;
return true ;
}
return base . OnBubbleEvent ( source , e ) ;
}
void ProcessEvent ( string commandName , string commandArg )
{
switch ( commandName ) {
case "Cancel" :
if ( CancelDestinationPageUrl . Length > 0 )
Context . Response . Redirect ( CancelDestinationPageUrl ) ;
else
OnCancelButtonClick ( EventArgs . Empty ) ;
break ;
case "MoveComplete" :
int next = - 1 ;
for ( int n = 0 ; n < WizardSteps . Count ; n + + ) {
if ( WizardSteps [ n ] . StepType = = WizardStepType . Complete ) {
next = n ;
break ;
}
}
if ( next = = - 1 & & ActiveStepIndex = = WizardSteps . Count - 1 )
next = ActiveStepIndex ;
WizardNavigationEventArgs navArgs = new WizardNavigationEventArgs ( ActiveStepIndex , next ) ;
OnFinishButtonClick ( navArgs ) ;
if ( FinishDestinationPageUrl . Length > 0 ) {
Context . Response . Redirect ( FinishDestinationPageUrl ) ;
return ;
}
if ( next ! = - 1 & & ! navArgs . Cancel )
ActiveStepIndex = next ;
break ;
case "MoveNext" :
if ( ActiveStepIndex < WizardSteps . Count - 1 ) {
WizardNavigationEventArgs args = new WizardNavigationEventArgs ( ActiveStepIndex , ActiveStepIndex + 1 ) ;
int curStep = ActiveStepIndex ;
OnNextButtonClick ( args ) ;
if ( ! args . Cancel & & curStep = = activeStepIndex )
ActiveStepIndex + + ;
}
break ;
case "MovePrevious" :
if ( ActiveStepIndex > 0 ) {
WizardNavigationEventArgs args = new WizardNavigationEventArgs ( ActiveStepIndex , ActiveStepIndex - 1 ) ;
int curStep = ActiveStepIndex ;
OnPreviousButtonClick ( args ) ;
if ( ! args . Cancel ) {
if ( curStep = = activeStepIndex )
ActiveStepIndex - - ;
if ( history ! = null & & activeStepIndex < curStep )
history . Remove ( curStep ) ;
}
}
break ;
case "Move" :
int newb = int . Parse ( commandArg ) ;
ActiveStepIndex = newb ;
break ;
}
}
internal void UpdateViews ( )
{
ChildControlsCreated = false ;
}
protected internal override void Render ( HtmlTextWriter writer )
{
PrepareControlHierarchy ( ) ;
if ( LayoutTemplate = = null )
wizardTable . Render ( writer ) ;
else
RenderChildren ( writer ) ;
}
void PrepareControlHierarchy ( )
{
if ( LayoutTemplate = = null ) {
// header
if ( ! _headerCell . Initialized ) {
if ( String . IsNullOrEmpty ( HeaderText ) )
_headerCell . Parent . Visible = false ;
else
_headerCell . Text = HeaderText ;
}
if ( ActiveStep . StepType = = WizardStepType . Complete )
_headerCell . Parent . Visible = false ;
} else {
WizardStepCollection steps = WizardSteps ;
if ( steps = = null | | steps . Count = = 0 )
return ;
}
// sidebar
if ( stepDatalist ! = null ) {
stepDatalist . SelectedIndex = ActiveStepIndex ;
stepDatalist . DataBind ( ) ;
if ( ActiveStep . StepType = = WizardStepType . Complete )
stepDatalist . NamingContainer . Visible = false ;
}
// content
TemplatedWizardStep templateStep = ActiveStep as TemplatedWizardStep ;
if ( templateStep ! = null ) {
BaseWizardContainer contentContainer = templateStep . ContentTemplateContainer as BaseWizardContainer ;
if ( contentContainer ! = null )
contentContainer . PrepareControlHierarchy ( ) ;
}
// navigation
if ( customNavigation ! = null ) {
foreach ( Control c in customNavigation . Values )
c . Visible = false ;
}
_startNavContainer . Visible = false ;
_stepNavContainer . Visible = false ;
_finishNavContainer . Visible = false ;
BaseWizardNavigationContainer currentNavContainer = GetCurrentNavContainer ( ) ;
if ( currentNavContainer = = null ) {
if ( _navigationCell ! = null )
_navigationCell . Parent . Visible = false ;
} else {
currentNavContainer . Visible = true ;
currentNavContainer . PrepareControlHierarchy ( ) ;
if ( _navigationCell ! = null & & ! currentNavContainer . Visible )
_navigationCell . Parent . Visible = false ;
}
foreach ( object [ ] styleDef in styles )
( ( WebControl ) styleDef [ 0 ] ) . ApplyStyle ( ( Style ) styleDef [ 1 ] ) ;
}
BaseWizardNavigationContainer GetCurrentNavContainer ( )
{
if ( customNavigation ! = null & & customNavigation [ ActiveStep ] ! = null ) {
return ( BaseWizardNavigationContainer ) customNavigation [ ActiveStep ] ;
}
else {
WizardStepType stepType = GetStepType ( ActiveStep , ActiveStepIndex ) ;
switch ( stepType ) {
case WizardStepType . Start :
return _startNavContainer ;
case WizardStepType . Step :
return _stepNavContainer ;
case WizardStepType . Finish :
return _finishNavContainer ;
default :
return null ;
}
}
}
sealed class TableCellNamingContainer : TableCell , INamingContainer , INonBindingContainer
{
string skipLinkText ;
string clientId ;
bool haveSkipLink ;
protected internal override void RenderChildren ( HtmlTextWriter writer )
{
if ( haveSkipLink ) {
// <a href="#ID_SkipLink">
writer . AddAttribute ( HtmlTextWriterAttribute . Href , "#" + clientId + "_SkipLink" ) ;
writer . RenderBeginTag ( HtmlTextWriterTag . A ) ;
// <img alt="" height="0" width="0" src="" style="border-width:0px;"/>
writer . AddAttribute ( HtmlTextWriterAttribute . Alt , skipLinkText ) ;
writer . AddAttribute ( HtmlTextWriterAttribute . Height , "0" ) ;
writer . AddAttribute ( HtmlTextWriterAttribute . Width , "0" ) ;
Page page = Page ;
ClientScriptManager csm ;
if ( page ! = null )
csm = page . ClientScript ;
else
csm = new ClientScriptManager ( null ) ;
writer . AddAttribute ( HtmlTextWriterAttribute . Src , csm . GetWebResourceUrl ( typeof ( SiteMapPath ) , "transparent.gif" ) ) ;
writer . AddStyleAttribute ( HtmlTextWriterStyle . BorderWidth , "0px" ) ;
writer . RenderBeginTag ( HtmlTextWriterTag . Img ) ;
writer . RenderEndTag ( ) ;
writer . RenderEndTag ( ) ; // </a>
}
base . RenderChildren ( writer ) ;
if ( haveSkipLink ) {
writer . AddAttribute ( HtmlTextWriterAttribute . Id , "SkipLink" ) ;
writer . RenderBeginTag ( HtmlTextWriterTag . A ) ;
writer . RenderEndTag ( ) ;
}
}
public TableCellNamingContainer ( string skipLinkText , string clientId )
{
this . skipLinkText = skipLinkText ;
this . clientId = clientId ;
this . haveSkipLink = ! String . IsNullOrEmpty ( skipLinkText ) ;
}
}
sealed class SideBarButtonTemplate : ITemplate
{
Wizard wizard ;
public SideBarButtonTemplate ( Wizard wizard )
{
this . wizard = wizard ;
}
public void InstantiateIn ( Control control )
{
LinkButton b = new LinkButton ( ) ;
wizard . RegisterApplyStyle ( b , wizard . SideBarButtonStyle ) ;
control . Controls . Add ( b ) ;
control . DataBinding + = Bound ;
}
void Bound ( object s , EventArgs args )
{
WizardStepBase step = DataBinder . GetDataItem ( s ) as WizardStepBase ;
if ( step ! = null ) {
DataListItem c = ( DataListItem ) s ;
LinkButton b = ( LinkButton ) c . Controls [ 0 ] ;
b . ID = SideBarButtonID ;
b . CommandName = Wizard . MoveToCommandName ;
b . CommandArgument = wizard . WizardSteps . IndexOf ( step ) . ToString ( ) ;
b . Text = step . Name ;
if ( step . StepType = = WizardStepType . Complete )
b . Enabled = false ;
}
}
}
class WizardHeaderCell : TableCell , INamingContainer , INonBindingContainer
{
bool _initialized ;
public bool Initialized {
get { return _initialized ; }
}
public WizardHeaderCell ( )
{
}
public void ConfirmInitState ( )
{
_initialized = true ;
}
}
internal abstract class DefaultNavigationContainer : BaseWizardNavigationContainer
{
bool _isDefault ;
Wizard _wizard ;
protected Wizard Wizard {
get { return _wizard ; }
}
protected DefaultNavigationContainer ( Wizard wizard )
{
_wizard = wizard ;
}
public override sealed void PrepareControlHierarchy ( )
{
if ( _isDefault )
UpdateState ( ) ;
}
protected abstract void UpdateState ( ) ;
public void ConfirmDefaultTemplate ( )
{
_isDefault = true ;
}
protected void UpdateNavButtonState ( string id , string text , string image , Style style )
{
WebControl b = ( WebControl ) FindControl ( id ) ;
foreach ( Control c in b . Parent . Controls )
c . Visible = b = = c ;
( ( IButtonControl ) b ) . Text = text ;
ImageButton imgbtn = b as ImageButton ;
if ( imgbtn ! = null )
imgbtn . ImageUrl = image ;
b . ApplyStyle ( style ) ;
}
}
sealed class StartNavigationContainer : DefaultNavigationContainer
{
public StartNavigationContainer ( Wizard wizard )
: base ( wizard )
{
}
protected override void UpdateState ( )
{
bool visible = false ;
// next
if ( Wizard . AllowNavigationToStep ( Wizard . ActiveStepIndex + 1 ) ) {
visible = true ;
UpdateNavButtonState ( Wizard . StartNextButtonIDShort + Wizard . StartNextButtonType , Wizard . StartNextButtonText , Wizard . StartNextButtonImageUrl , Wizard . StartNextButtonStyle ) ;
} else
( ( Table ) Controls [ 0 ] ) . Rows [ 0 ] . Cells [ 0 ] . Visible = false ;
// cancel
if ( Wizard . DisplayCancelButton ) {
visible = true ;
UpdateNavButtonState ( Wizard . CancelButtonIDShort + Wizard . CancelButtonType , Wizard . CancelButtonText , Wizard . CancelButtonImageUrl , Wizard . CancelButtonStyle ) ;
} else
( ( Table ) Controls [ 0 ] ) . Rows [ 0 ] . Cells [ 1 ] . Visible = false ;
Visible = visible ;
}
}
sealed class StepNavigationContainer : DefaultNavigationContainer
{
public StepNavigationContainer ( Wizard wizard )
: base ( wizard )
{
}
protected override void UpdateState ( )
{
bool visible = false ;
// previous
if ( Wizard . AllowNavigationToStep ( Wizard . ActiveStepIndex - 1 ) ) {
visible = true ;
UpdateNavButtonState ( Wizard . StepPreviousButtonIDShort + Wizard . StepPreviousButtonType , Wizard . StepPreviousButtonText , Wizard . StepPreviousButtonImageUrl , Wizard . StepPreviousButtonStyle ) ;
} else
( ( Table ) Controls [ 0 ] ) . Rows [ 0 ] . Cells [ 0 ] . Visible = false ;
// next
if ( Wizard . AllowNavigationToStep ( Wizard . ActiveStepIndex + 1 ) ) {
visible = true ;
UpdateNavButtonState ( Wizard . StepNextButtonIDShort + Wizard . StepNextButtonType , Wizard . StepNextButtonText , Wizard . StepNextButtonImageUrl , Wizard . StepNextButtonStyle ) ;
} else
( ( Table ) Controls [ 0 ] ) . Rows [ 0 ] . Cells [ 1 ] . Visible = false ;
// cancel
if ( Wizard . DisplayCancelButton ) {
visible = true ;
UpdateNavButtonState ( Wizard . CancelButtonIDShort + Wizard . CancelButtonType , Wizard . CancelButtonText , Wizard . CancelButtonImageUrl , Wizard . CancelButtonStyle ) ;
} else
( ( Table ) Controls [ 0 ] ) . Rows [ 0 ] . Cells [ 2 ] . Visible = false ;
Visible = visible ;
}
}
sealed class FinishNavigationContainer : DefaultNavigationContainer
{
public FinishNavigationContainer ( Wizard wizard )
: base ( wizard )
{
}
protected override void UpdateState ( )
{
// previous
int previous = Wizard . ActiveStepIndex - 1 ;
if ( previous > = 0 & & Wizard . AllowNavigationToStep ( previous ) ) {
UpdateNavButtonState ( Wizard . FinishPreviousButtonIDShort + Wizard . FinishPreviousButtonType , Wizard . FinishPreviousButtonText , Wizard . FinishPreviousButtonImageUrl , Wizard . FinishPreviousButtonStyle ) ;
} else
( ( Table ) Controls [ 0 ] ) . Rows [ 0 ] . Cells [ 0 ] . Visible = false ;
// finish
UpdateNavButtonState ( Wizard . FinishButtonIDShort + Wizard . FinishCompleteButtonType , Wizard . FinishCompleteButtonText , Wizard . FinishCompleteButtonImageUrl , Wizard . FinishCompleteButtonStyle ) ;
// cancel
if ( Wizard . DisplayCancelButton ) {
UpdateNavButtonState ( Wizard . CancelButtonIDShort + Wizard . CancelButtonType , Wizard . CancelButtonText , Wizard . CancelButtonImageUrl , Wizard . CancelButtonStyle ) ;
} else
( ( Table ) Controls [ 0 ] ) . Rows [ 0 ] . Cells [ 2 ] . Visible = false ;
}
}
internal class BaseWizardContainer : Table , INamingContainer , INonBindingContainer
{
public TableCell InnerCell {
get { return Rows [ 0 ] . Cells [ 0 ] ; }
}
internal BaseWizardContainer ( )
{
InitTable ( ) ;
}
void InitTable ( ) {
TableRow row = new TableRow ( ) ;
TableCell cell = new TableCell ( ) ;
cell . ControlStyle . Width = Unit . Percentage ( 100 ) ;
cell . ControlStyle . Height = Unit . Percentage ( 100 ) ;
row . Cells . Add ( cell ) ;
this . ControlStyle . Width = Unit . Percentage ( 100 ) ;
this . ControlStyle . Height = Unit . Percentage ( 100 ) ;
this . CellPadding = 0 ;
this . CellSpacing = 0 ;
this . Rows . Add ( row ) ;
}
public virtual void PrepareControlHierarchy ( )
{
}
}
internal class BaseWizardNavigationContainer : Control , INamingContainer , INonBindingContainer
{
internal BaseWizardNavigationContainer ( )
{
}
public virtual void PrepareControlHierarchy ( )
{
}
}
internal abstract class DefaultContentContainer : BaseWizardContainer
{
bool _isDefault ;
Wizard _wizard ;
protected bool IsDefaultTemplate {
get { return _isDefault ; }
}
protected Wizard Wizard {
get { return _wizard ; }
}
protected DefaultContentContainer ( Wizard wizard )
{
_wizard = wizard ;
}
public override sealed void PrepareControlHierarchy ( )
{
if ( _isDefault )
UpdateState ( ) ;
}
protected abstract void UpdateState ( ) ;
public void ConfirmDefaultTemplate ( )
{
_isDefault = true ;
}
}
}
}