using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace DevComponents.DotNetBar
{
///
/// Represents Wizard control.
///
[ToolboxBitmap(typeof(Wizard), "Wizard.Wizard.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.WizardDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")]
public class Wizard : UserControl
{
#region Private Variables
private PanelControl panelHeader;
private int m_ButtonSpacingMajor = 8;
private int m_ButtonSpacingMinor = 1;
private int m_ButtonHeight = 22;
private FlatStyle m_ButtonFlatStyle = FlatStyle.System;
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public PanelControl panelFooter;
private ButtonX buttonHelp;
private ButtonX buttonCancel;
private ButtonX buttonFinish;
private ButtonX buttonNext;
private ButtonX buttonBack;
private bool m_FinishButtonAlwaysVisible = false;
private Label labelDescription;
private Label labelCaption;
private WizardPageCollection m_WizardPages = new WizardPageCollection();
private Stack m_PagesHistory = new Stack();
private int m_SelectedPageIndex = 0;
private bool m_PageChangeDisableButtons = true;
private bool m_PageChangeWaitCursor = true;
private eWizardFormAcceptButton m_FormAcceptButton = eWizardFormAcceptButton.FinishAndNext;
private eWizardFormCancelButton m_FormCancelButton = eWizardFormCancelButton.Cancel;
private PictureBox pictureHeader;
private Image m_HeaderImage = null;
private bool m_HeaderImageChanged = false;
private bool m_HeaderImageVisible = true;
private bool m_HelpButtonVisible = true;
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
#endregion
#region Events
///
/// Occurs when Back button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments.
///
[Description("Occurs when Back button is clicked.")]
public event CancelEventHandler BackButtonClick;
///
/// Occurs when Next button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments.
///
[Description("Occurs when Next button is clicked.")]
public event CancelEventHandler NextButtonClick;
///
/// Occurs when Finish button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments.
///
[Description("Occurs when Finish button is clicked.")]
public event CancelEventHandler FinishButtonClick;
///
/// Occurs when Cancel button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments.
///
[Description("Occurs when Cancel button is clicked.")]
public event CancelEventHandler CancelButtonClick;
///
/// Occurs when Help button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments.
///
[Description("Occurs when Help button is clicked.")]
public event CancelEventHandler HelpButtonClick;
///
/// Occurs before wizard page has changed and gives you opportunity to cancel the change.
///
[Description("Occurs before wizard page has changed and gives you opportunity to cancel the change.")]
public event WizardCancelPageChangeEventHandler WizardPageChanging;
///
/// Occurs after wizard page has changed. This event cannot be cancelled. To cancel the page change please use WizardPageChanging event.
///
[Description("Occurs after wizard page has changed.")]
public event WizardPageChangeEventHandler WizardPageChanged;
///
/// Occurs when wizard buttons (Back, Next, Finish etc) are positioned and resized.
///
[Description("Occurs when wizard buttons (Back, Next, Finish etc) are positioned and resized.")]
public event WizardButtonsLayoutEventHandler LayoutWizardButtons;
#endregion
#region Constructor Dispose
public Wizard()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
m_WizardPages.ParentWizard = this;
pictureHeader.BackgroundImage = BarFunctions.LoadBitmap("SystemImages.WizardHeaderImage.png");
panelFooter.Style.StyleChanged += new EventHandler(FooterStyleStyleChanged);
}
private void FooterStyleStyleChanged(object sender, EventArgs e)
{
if (panelFooter.Style.BackColor == Color.Transparent && panelFooter.Style.BackColor2.IsEmpty && panelFooter.Style.BackColorBlend.Count == 0)
panelFooter.BackColor = Color.Transparent;
else if (panelFooter.BackColor != SystemColors.Control)
panelFooter.BackColor = SystemColors.Control;
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
if (BarUtilities.DisposeItemImages && !this.DesignMode)
{
BarUtilities.DisposeImage(ref m_HeaderImage);
}
base.Dispose( disposing );
}
#endregion
#region Component Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.panelHeader = new DevComponents.DotNetBar.PanelControl();
this.pictureHeader = new System.Windows.Forms.PictureBox();
this.labelDescription = new System.Windows.Forms.Label();
this.labelCaption = new System.Windows.Forms.Label();
this.panelFooter = new DevComponents.DotNetBar.PanelControl();
this.buttonHelp = new ButtonX();
this.buttonCancel = new ButtonX();
this.buttonFinish = new ButtonX();
this.buttonNext = new ButtonX();
this.buttonBack = new ButtonX();
this.panelHeader.SuspendLayout();
this.panelFooter.SuspendLayout();
this.SuspendLayout();
//
// panelHeader
//
this.panelHeader.AntiAlias=false;
this.panelHeader.BackColor = Color.Transparent;
this.panelHeader.CanvasColor = System.Drawing.SystemColors.Control;
this.panelHeader.Controls.Add(this.pictureHeader);
this.panelHeader.Controls.Add(this.labelDescription);
this.panelHeader.Controls.Add(this.labelCaption);
this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
this.panelHeader.Location = new System.Drawing.Point(0, 0);
this.panelHeader.Name = "panelHeader";
this.panelHeader.Size = new System.Drawing.Size(548, 60);
//
//
//
this.panelHeader.Style.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.panelHeader.Style.BackColorGradientAngle = 90;
this.panelHeader.Style.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Etched;
this.panelHeader.Style.BorderBottomWidth = 1;
this.panelHeader.Style.BorderColor = System.Drawing.SystemColors.Control;
this.panelHeader.Style.BorderLeftWidth = 1;
this.panelHeader.Style.BorderRightWidth = 1;
this.panelHeader.Style.BorderTopWidth = 1;
this.panelHeader.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center;
this.panelHeader.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText;
this.panelHeader.TabIndex = 5;
//
// pictureHeader
//
this.pictureHeader.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pictureHeader.Location = new System.Drawing.Point(496, 6);
this.pictureHeader.Name = "pictureHeader";
this.pictureHeader.Size = new System.Drawing.Size(48, 48);
this.pictureHeader.TabIndex = 7;
this.pictureHeader.TabStop = false;
this.pictureHeader.BackgroundImageLayout = ImageLayout.None;
//
// labelDescription
//
this.labelDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelDescription.Location = new System.Drawing.Point(44, 22);
this.labelDescription.Name = "labelDescription";
this.labelDescription.Size = new System.Drawing.Size(446, 32);
this.labelDescription.TabIndex = 1;
//
// labelCaption
//
this.labelCaption.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelCaption.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelCaption.Location = new System.Drawing.Point(16, 5);
this.labelCaption.Name = "labelCaption";
this.labelCaption.Size = new System.Drawing.Size(474, 17);
this.labelCaption.TabIndex = 0;
//
// panelFooter
//
this.panelFooter.BackColor = System.Drawing.SystemColors.Control;
this.panelFooter.CanvasColor = System.Drawing.SystemColors.Control;
this.panelFooter.Controls.Add(this.buttonHelp);
this.panelFooter.Controls.Add(this.buttonCancel);
this.panelFooter.Controls.Add(this.buttonFinish);
this.panelFooter.Controls.Add(this.buttonNext);
this.panelFooter.Controls.Add(this.buttonBack);
this.panelFooter.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panelFooter.Location = new System.Drawing.Point(0, 329);
this.panelFooter.Name = "panelFooter";
this.panelFooter.Size = new System.Drawing.Size(548, 46);
this.panelFooter.AntiAlias = false;
//
//
//
this.panelFooter.TabIndex = 6;
this.panelFooter.Resize += new System.EventHandler(this.panelFooter_Resize);
//
// buttonHelp
//
this.buttonHelp.CausesValidation = false;
this.buttonHelp.Location = new System.Drawing.Point(462, 13);
this.buttonHelp.Name = "buttonHelp";
this.buttonHelp.Size = new System.Drawing.Size(74, 22);
this.buttonHelp.TabIndex = 5;
this.buttonHelp.Text = "Help";
this.buttonHelp.VisibleChanged += new System.EventHandler(this.CommandButtonVisibleChanged);
this.buttonHelp.Click += new System.EventHandler(this.buttonHelp_Click);
this.buttonHelp.ThemeAware = true;
this.buttonHelp.Style = eDotNetBarStyle.Office2000;
this.buttonHelp.ColorTable = eButtonColor.Office2007WithBackground;
//
// buttonCancel
//
this.buttonCancel.CausesValidation = false;
this.buttonCancel.Location = new System.Drawing.Point(382, 13);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(74, 22);
this.buttonCancel.TabIndex = 4;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.VisibleChanged += new System.EventHandler(this.CommandButtonVisibleChanged);
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
this.buttonCancel.ThemeAware = true;
this.buttonCancel.Style = eDotNetBarStyle.Office2000;
this.buttonCancel.ColorTable = eButtonColor.Office2007WithBackground;
//
// buttonFinish
//
this.buttonFinish.Location = new System.Drawing.Point(148, 13);
this.buttonFinish.Name = "buttonFinish";
this.buttonFinish.Size = new System.Drawing.Size(74, 22);
this.buttonFinish.TabIndex = 3;
this.buttonFinish.Text = "Finish";
this.buttonFinish.VisibleChanged += new System.EventHandler(this.CommandButtonVisibleChanged);
this.buttonFinish.Click += new System.EventHandler(this.buttonFinish_Click);
this.buttonFinish.ThemeAware = true;
this.buttonFinish.Style = eDotNetBarStyle.Office2000;
this.buttonFinish.ColorTable = eButtonColor.Office2007WithBackground;
//
// buttonNext
//
this.buttonNext.Location = new System.Drawing.Point(302, 13);
this.buttonNext.Name = "buttonNext";
this.buttonNext.Size = new System.Drawing.Size(74, 22);
this.buttonNext.TabIndex = 2;
this.buttonNext.Text = "Next >";
this.buttonNext.VisibleChanged += new System.EventHandler(this.CommandButtonVisibleChanged);
this.buttonNext.Click += new System.EventHandler(this.buttonNext_Click);
this.buttonNext.ThemeAware = true;
this.buttonNext.Style = eDotNetBarStyle.Office2000;
this.buttonNext.ColorTable = eButtonColor.Office2007WithBackground;
//
// buttonBack
//
this.buttonBack.CausesValidation = false;
this.buttonBack.Location = new System.Drawing.Point(228, 13);
this.buttonBack.Name = "buttonBack";
this.buttonBack.Size = new System.Drawing.Size(74, 22);
this.buttonBack.TabIndex = 1;
this.buttonBack.Text = "< Back";
this.buttonBack.VisibleChanged += new System.EventHandler(this.CommandButtonVisibleChanged);
this.buttonBack.Click += new System.EventHandler(this.buttonBack_Click);
this.buttonBack.ThemeAware = true;
this.buttonBack.Style = eDotNetBarStyle.Office2000;
this.buttonBack.ColorTable = eButtonColor.Office2007WithBackground;
//
// Wizard
//
this.Controls.Add(this.panelHeader);
this.Controls.Add(this.panelFooter);
this.Name = "Wizard";
this.Size = new System.Drawing.Size(548, 375);
this.panelHeader.ResumeLayout(false);
this.panelFooter.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
#region Public Properties
///
/// Gets or sets the header image. Default value is null which means that internal header image is used. You can hide header image
/// by setting HeaderImageVisible property.
///
[Browsable(true), Category("Header and Footer"), DefaultValue(null), Description("Indicates the header image.")]
public Image HeaderImage
{
get { return m_HeaderImage; }
set
{
m_HeaderImage = value;
m_HeaderImageChanged = true;
UpdatePageDisplay();
}
}
///
/// Gets or sets whether header image is visible. Default value is true.
///
[Browsable(true), Category("Header and Footer"), DefaultValue(true), Description("Indicates whether header image is visible.")]
public bool HeaderImageVisible
{
get { return m_HeaderImageVisible; }
set
{
m_HeaderImageVisible=value;
if (pictureHeader.Visible != m_HeaderImageVisible)
{
pictureHeader.Visible = m_HeaderImageVisible;
LayoutHeader();
}
}
}
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new Control.ControlCollection Controls
{
get
{
return base.Controls;
}
}
///
/// Gets or sets wizard button that is clicked when ENTER key is pressed. Default value is eWizardFormAcceptButton.FinishAndNext which
/// indicates that finish button will be clicked if available otherwise next button will be clicked.
///
[Browsable(true), DefaultValue(eWizardFormAcceptButton.FinishAndNext), Category("Wizard Behavior"), Description("Indicates wizard button that is clicked when ENTER key is pressed.")]
public eWizardFormAcceptButton FormAcceptButton
{
get { return m_FormAcceptButton; }
set
{
m_FormAcceptButton = value;
SetFormAcceptButton();
}
}
///
/// Gets or sets wizard button that is clicked when ESCAPE key is pressed. Default value is eWizardFormCancelButton.Cancel which
/// indicates that Cancel button will be clicked.
///
[Browsable(true), DefaultValue(eWizardFormCancelButton.Cancel), Category("Wizard Behavior"), Description("Indicates wizard button that is clicked when ESCAPE key is pressed.")]
public eWizardFormCancelButton FormCancelButton
{
get { return m_FormCancelButton; }
set
{
m_FormCancelButton = value;
SetFormCancelButton();
}
}
///
/// Gets or sets whether all buttons are disabled while wizard page is changed which prevents users from clicking the buttons
/// if page change is taking longer. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Behavior"), Description("Indicates whether all buttons are disabled while wizard page is changed.")]
public bool PageChangeDisableButtons
{
get { return m_PageChangeDisableButtons; }
set { m_PageChangeDisableButtons = value; }
}
///
/// Gets or sets whether wait cursor is displayed while page is changed. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Behavior"), Description("Indicates whether wait cursor is displayed while page is changed.")]
public bool PageChangeWaitCursor
{
get { return m_PageChangeWaitCursor; }
set { m_PageChangeWaitCursor = value; }
}
///
/// Gets or sets the selected page index. You can set this property to change the currently selected wizard page.
///
[Browsable(false), Category("Wizard Pages"), Description("Indicates selected page index."), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int SelectedPageIndex
{
get { return m_SelectedPageIndex; }
set
{
if (value < 0)
value = 0;
if (value < m_WizardPages.Count)
ShowPage(m_WizardPages[value], eWizardPageChangeSource.Code);
else
m_SelectedPageIndex = value;
}
}
///
/// Gets or sets selected wizard page. You can set this property to change the currently selected wizard page.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public WizardPage SelectedPage
{
get
{
if (m_SelectedPageIndex < m_WizardPages.Count)
return m_WizardPages[m_SelectedPageIndex];
return null;
}
set
{
if (!m_WizardPages.Contains(value))
throw new InvalidOperationException("WizardPage is not member of WizardPages collection. Add page to the WizardPages collection before setting this property");
ShowPage(value, eWizardPageChangeSource.Code);
}
}
///
/// Gets the collection of Wizard pages. The order of WizardPage objects inside of this collection determines the flow of the wizard.
///
[Browsable(true), Category("Wizard Pages"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public WizardPageCollection WizardPages
{
get
{
return m_WizardPages;
}
}
///
/// Returns a Stack of page history. Each time next page is displayed by wizard, previously visited page is added to the history.
/// When user commands Wizard back, the last page from the history is shown and removed from the stack. You should not modify this collection
/// directly since it is maintained by Wizard control.
///
[Browsable(false), Category("Wizard Pages"), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Stack PagesHistory
{
get
{
return m_PagesHistory;
}
}
///
/// Gets or sets the FlatStyle setting for the wizard buttons. Default value is FlatStyle.System
///
[DefaultValue(FlatStyle.System), Browsable(false), Category("Wizard Buttons"), Description("Indicates flat style for buttons"), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Obsolete("Property is obsolete and no longer applies")]
public FlatStyle ButtonFlatStyle
{
get { return m_ButtonFlatStyle; }
set
{
m_ButtonFlatStyle = value;
}
}
///
/// Gets or sets height of wizard command buttons. Default value is 22 pixels.
///
[Browsable(true), DefaultValue(22), Category("Wizard Buttons"), Description("Indicates the height of the wizard command buttons")]
public int ButtonHeight
{
get { return m_ButtonHeight; }
set
{
if (m_ButtonHeight != value)
{
m_ButtonHeight = value;
RepositionButtons();
}
}
}
///
/// Gets or sets whether back button causes validation to be performed on any controls that require validation when it receives focus. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether back button causes validation to be performed on any controls that require validation when it receives focus.")]
public bool BackButtonCausesValidation
{
get { return buttonBack.CausesValidation; }
set {buttonBack.CausesValidation = value;}
}
///
/// Gets or sets tab index of back button. Default value is 1.
///
[Browsable(true), DefaultValue(1), Category("Wizard Buttons"), Description("Indicates tab index of back button.")]
public int BackButtonTabIndex
{
get { return buttonBack.TabIndex; }
set { buttonBack.TabIndex = value; }
}
///
/// Gets or sets a value indicating whether the user can give the focus to this back button using the TAB key. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether the user can give the focus to this back button using the TAB key.")]
public bool BackButtonTabStop
{
get { return buttonBack.TabStop; }
set { buttonBack.TabStop = value; }
}
///
/// Gets or sets caption of the back button.
///
[Browsable(true), Localizable(true), DefaultValue("< Back"), Category("Wizard Buttons"), Description("Indicates caption of the button")]
public string BackButtonText
{
get { return buttonBack.Text; }
set { buttonBack.Text = value; }
}
///
/// Gets or sets width of the back button. Default value is 74.
///
[Browsable(true), DefaultValue(74), Category("Wizard Buttons"), Description("Indicates width of button")]
public int BackButtonWidth
{
get { return buttonBack.Width; }
set
{
if (buttonBack.Width != value)
{
buttonBack.Width = value;
RepositionButtons();
}
}
}
#if FRAMEWORK20
///
/// Gets or sets auto size of the button. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether button is auto sized")]
public bool BackButtonAutoSize
{
get { return buttonBack.AutoSize; }
set
{
if (buttonBack.AutoSize != value)
{
buttonBack.AutoSize = value;
RepositionButtons();
}
}
}
///
/// Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly.
///
[Browsable(true), DefaultValue(AutoSizeMode.GrowOnly), Category("Wizard Buttons"), Description("Indicates button auto-size mode")]
public AutoSizeMode BackButtonAutoSizeMode
{
get { return buttonBack.AutoSizeMode; }
set
{
if (buttonBack.AutoSizeMode != value)
{
buttonBack.AutoSizeMode = value;
RepositionButtons();
}
}
}
#endif
///
/// Gets or sets whether next button causes validation to be performed on any controls that require validation when it receives focus. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether button causes validation to be performed on any controls that require validation when it receives focus.")]
public bool NextButtonCausesValidation
{
get { return buttonNext.CausesValidation; }
set { buttonNext.CausesValidation = value; }
}
///
/// Gets or sets tab index of next button. Default value is 2.
///
[Browsable(true), DefaultValue(2), Category("Wizard Buttons"), Description("Indicates tab index of next button.")]
public int NextButtonTabIndex
{
get { return buttonNext.TabIndex; }
set { buttonNext.TabIndex = value; }
}
///
/// Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether the user can give the focus to button using the TAB key.")]
public bool NextButtonTabStop
{
get { return buttonNext.TabStop; }
set { buttonNext.TabStop = value; }
}
///
/// Gets or sets caption of the next button.
///
[Browsable(true), Localizable(true), DefaultValue("Next >"), Category("Wizard Buttons"), Description("Indicates caption of the button")]
public string NextButtonText
{
get { return buttonNext.Text; }
set { buttonNext.Text = value; }
}
///
/// Gets or sets width of the next button. Default value is 74.
///
[Browsable(true), DefaultValue(74), Category("Wizard Buttons"), Description("Indicates width of button")]
public int NextButtonWidth
{
get { return buttonNext.Width; }
set
{
if (buttonNext.Width != value)
{
buttonNext.Width = value;
RepositionButtons();
}
}
}
#if FRAMEWORK20
///
/// Gets or sets auto size of the button. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether button is auto sized")]
public bool NextButtonAutoSize
{
get { return buttonNext.AutoSize; }
set
{
if (buttonNext.AutoSize != value)
{
buttonNext.AutoSize = value;
RepositionButtons();
}
}
}
///
/// Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly.
///
[Browsable(true), DefaultValue(AutoSizeMode.GrowOnly), Category("Wizard Buttons"), Description("Indicates button auto-size mode")]
public AutoSizeMode NextButtonAutoSizeMode
{
get { return buttonNext.AutoSizeMode; }
set
{
if (buttonNext.AutoSizeMode != value)
{
buttonNext.AutoSizeMode = value;
RepositionButtons();
}
}
}
#endif
///
/// Gets or sets whether button causes validation to be performed on any controls that require validation when it receives focus. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether button causes validation to be performed on any controls that require validation when it receives focus.")]
public bool CancelButtonCausesValidation
{
get { return buttonCancel.CausesValidation; }
set { buttonCancel.CausesValidation = value; }
}
///
/// Gets or sets tab index of the button. Default value is 4.
///
[Browsable(true), DefaultValue(4), Category("Wizard Buttons"), Description("Indicates tab index of the button.")]
public int CancelButtonTabIndex
{
get { return buttonCancel.TabIndex; }
set { buttonCancel.TabIndex = value; }
}
///
/// Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether the user can give the focus to button using the TAB key.")]
public bool CancelButtonTabStop
{
get { return buttonCancel.TabStop; }
set { buttonCancel.TabStop = value; }
}
///
/// Gets or sets caption of the button.
///
[Browsable(true), Localizable(true), Category("Wizard Buttons"), Description("Indicates caption of the button")] // DefaultValue("Cancel") attribute removed since WinForms designer had trouble localizing with it
public string CancelButtonText
{
get { return buttonCancel.Text; }
set { buttonCancel.Text = value; }
}
///
/// Gets or sets width of the button. Default value is 74.
///
[Browsable(true), DefaultValue(74), Category("Wizard Buttons"), Description("Indicates width of button")]
public int CancelButtonWidth
{
get { return buttonCancel.Width; }
set
{
if (buttonCancel.Width != value)
{
buttonCancel.Width = value;
RepositionButtons();
}
}
}
#if FRAMEWORK20
///
/// Gets or sets auto size of the button. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether button is auto sized")]
public bool CancelButtonAutoSize
{
get { return buttonCancel.AutoSize; }
set
{
if (buttonCancel.AutoSize != value)
{
buttonCancel.AutoSize = value;
RepositionButtons();
}
}
}
///
/// Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly.
///
[Browsable(true), DefaultValue(AutoSizeMode.GrowOnly), Category("Wizard Buttons"), Description("Indicates button auto-size mode")]
public AutoSizeMode CancelButtonAutoSizeMode
{
get { return buttonCancel.AutoSizeMode; }
set
{
if (buttonCancel.AutoSizeMode != value)
{
buttonCancel.AutoSizeMode = value;
RepositionButtons();
}
}
}
#endif
///
/// Gets or sets whether button causes validation to be performed on any controls that require validation when it receives focus. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether button causes validation to be performed on any controls that require validation when it receives focus.")]
public bool FinishButtonCausesValidation
{
get { return buttonFinish.CausesValidation; }
set { buttonFinish.CausesValidation = value; }
}
///
/// Gets or sets tab index of the button. Default value is 4.
///
[Browsable(true), DefaultValue(4), Category("Wizard Buttons"), Description("Indicates tab index of the button.")]
public int FinishButtonTabIndex
{
get { return buttonFinish.TabIndex; }
set { buttonFinish.TabIndex = value; }
}
///
/// Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether the user can give the focus to button using the TAB key.")]
public bool FinishButtonTabStop
{
get { return buttonFinish.TabStop; }
set { buttonFinish.TabStop = value; }
}
///
/// Gets or sets caption of the button.
///
[Browsable(true), Localizable(true), DefaultValue("Finish"), Category("Wizard Buttons"), Description("Indicates caption of the button")]
public string FinishButtonText
{
get { return buttonFinish.Text; }
set { buttonFinish.Text = value; }
}
///
/// Gets or sets width of the button. Default value is 74.
///
[Browsable(true), DefaultValue(74), Category("Wizard Buttons"), Description("Indicates width of button")]
public int FinishButtonWidth
{
get { return buttonFinish.Width; }
set
{
if (buttonFinish.Width != value)
{
buttonFinish.Width = value;
RepositionButtons();
}
}
}
///
/// Gets or sets whether finish button is always visible next to the Next button. Default value is false which means that Finish
/// button will be visible only on last Wizard page and it will replace the Next button. When set to true Finish button is always visible next
/// to the Next button except on first Welcome wizard page.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether Finish button is always visible or only when needed.")]
public bool FinishButtonAlwaysVisible
{
get { return m_FinishButtonAlwaysVisible; }
set
{
if (m_FinishButtonAlwaysVisible != value)
{
m_FinishButtonAlwaysVisible = value;
OnFinishButtonAlwaysVisibleChanged();
RepositionButtons();
}
}
}
#if FRAMEWORK20
///
/// Gets or sets auto size of the button. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether button is auto sized")]
public bool FinishButtonAutoSize
{
get { return buttonFinish.AutoSize; }
set
{
if (buttonFinish.AutoSize != value)
{
buttonFinish.AutoSize = value;
RepositionButtons();
}
}
}
///
/// Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly.
///
[Browsable(true), DefaultValue(AutoSizeMode.GrowOnly), Category("Wizard Buttons"), Description("Indicates button auto-size mode")]
public AutoSizeMode FinishButtonAutoSizeMode
{
get { return buttonFinish.AutoSizeMode; }
set
{
if (buttonFinish.AutoSizeMode != value)
{
buttonFinish.AutoSizeMode = value;
RepositionButtons();
}
}
}
#endif
///
/// Gets or sets whether button causes validation to be performed on any controls that require validation when it receives focus. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether button causes validation to be performed on any controls that require validation when it receives focus.")]
public bool HelpButtonCausesValidation
{
get { return buttonHelp.CausesValidation; }
set { buttonHelp.CausesValidation = value; }
}
///
/// Gets or sets whether button is visible. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether button is visible")]
public bool HelpButtonVisible
{
get { return m_HelpButtonVisible; }
set
{
m_HelpButtonVisible = value;
buttonHelp.Visible = m_HelpButtonVisible;
RepositionButtons();
}
}
///
/// Gets or sets tab index of the button. Default value is 5.
///
[Browsable(true), DefaultValue(5), Category("Wizard Buttons"), Description("Indicates tab index of the button.")]
public int HelpButtonTabIndex
{
get { return buttonHelp.TabIndex; }
set { buttonHelp.TabIndex = value; }
}
///
/// Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true.
///
[Browsable(true), DefaultValue(true), Category("Wizard Buttons"), Description("Indicates whether the user can give the focus to button using the TAB key.")]
public bool HelpButtonTabStop
{
get { return buttonHelp.TabStop; }
set { buttonHelp.TabStop = value; }
}
///
/// Gets or sets caption of the button.
///
[Browsable(true), Localizable(true), DefaultValue("Help"), Category("Wizard Buttons"), Description("Indicates caption of the button")]
public string HelpButtonText
{
get { return buttonHelp.Text; }
set { buttonHelp.Text = value; }
}
///
/// Gets or sets width of the button. Default value is 74.
///
[Browsable(true), DefaultValue(74), Category("Wizard Buttons"), Description("Indicates width of button")]
public int HelpButtonWidth
{
get { return buttonHelp.Width; }
set
{
if (buttonHelp.Width != value)
{
buttonHelp.Width = value;
RepositionButtons();
}
}
}
#if FRAMEWORK20
///
/// Gets or sets auto size of the button. Default value is false.
///
[Browsable(true), DefaultValue(false), Category("Wizard Buttons"), Description("Indicates whether button is auto sized")]
public bool HelpButtonAutoSize
{
get { return buttonHelp.AutoSize; }
set
{
if (buttonHelp.AutoSize != value)
{
buttonHelp.AutoSize = value;
RepositionButtons();
}
}
}
///
/// Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly.
///
[Browsable(true), DefaultValue(AutoSizeMode.GrowOnly), Category("Wizard Buttons"), Description("Indicates button auto-size mode")]
public AutoSizeMode HelpButtonAutoSizeMode
{
get { return buttonHelp.AutoSizeMode; }
set
{
if (buttonHelp.AutoSizeMode != value)
{
buttonHelp.AutoSizeMode = value;
RepositionButtons();
}
}
}
#endif
///
/// Gets or sets the height of the wizard footer. Default value is 46
///
[Browsable(true), DefaultValue(46), Category("Header and Footer"), Description("Indicates height of the wizard footer.")]
public int FooterHeight
{
get { return panelFooter.Height; }
set
{
if (panelFooter.Height != value)
{
panelFooter.Height = value;
RepositionButtons();
SetupPage(this.SelectedPage);
}
}
}
///
/// Gets or sets the height of the wizard header. Default value is 60
///
[Browsable(true), DefaultValue(60), Category("Header and Footer"), Description("Indicates height of the wizard header.")]
public int HeaderHeight
{
get { return panelHeader.Height; }
set
{
if (panelHeader.Height != value)
{
panelHeader.Height = value;
SetupPage(this.SelectedPage);
}
}
}
private eWizardTitleImageAlignment _HeaderImageAlignment = eWizardTitleImageAlignment.Right;
///
/// Gets or sets the header image alignment. Default value is right.
///
[DefaultValue(eWizardTitleImageAlignment.Right), Category("Header and Footer"), Description("Indicates header image alignment.")]
public eWizardTitleImageAlignment HeaderImageAlignment
{
get { return _HeaderImageAlignment; }
set { _HeaderImageAlignment = value; LayoutHeader(); }
}
///
/// Gets or sets the header image size for interior wizard pages. Default value is 48x48
///
[Browsable(true), Category("Header and Footer"), Description("Indicates header image size for interior wizard pages.")]
public Size HeaderImageSize
{
get { return pictureHeader.Size; }
set
{
if (pictureHeader.Size != value)
{
pictureHeader.Size = value;
LayoutHeader();
}
}
}
private bool ShouldSerializeHeaderImageSize()
{
return (pictureHeader.Size.Width != 48 || pictureHeader.Size.Height != 48);
}
private void ResetHeaderImageSize()
{
TypeDescriptor.GetProperties(this)["HeaderImageSize"].SetValue(this, new Size(48, 48));
}
///
/// Gets or sets indentation of header title label. Default value is 16.
///
[Browsable(true), DefaultValue(16),Category("Header and Footer"), Description("Indicates indentation of header title label.")]
public int HeaderTitleIndent
{
get { return labelCaption.Left; }
set
{
if (labelCaption.Left != value)
{
labelCaption.Left = value;
LayoutHeader();
}
}
}
///
/// Gets or sets indentation of header description label. Default value is 44.
///
[Browsable(true), DefaultValue(44), Category("Header and Footer"), Description("Indicates indentation of header description label.")]
public int HeaderDescriptionIndent
{
get { return labelDescription.Left; }
set
{
if (labelDescription.Left != value)
{
labelDescription.Left = value;
LayoutHeader();
}
}
}
//
/// Indicates the font used to render header description text.
///
[Category("Header and Footer"), Description(" Indicates the font used to render header description text.")]
public Font HeaderDescriptionFont
{
get { return labelDescription.Font; }
set { labelDescription.Font = value; LayoutHeader(); }
}
///
/// Indicates the font used to render caption header text.
///
[Category("Header and Footer"), Description("Indicates the font used to render caption header text.")]
public Font HeaderCaptionFont
{
get { return labelCaption.Font; }
set { labelCaption.Font = value; LayoutHeader(); }
}
private bool _HeaderDescriptionVisible = true;
///
/// Gets or sets whether description text displayed in wizard header is visible.
///
[DefaultValue(true), Category("Header and Footer"), Description("Indicates whether description text displayed in wizard header is visible.")]
public bool HeaderDescriptionVisible
{
get { return _HeaderDescriptionVisible; }
set
{
_HeaderDescriptionVisible = value;
labelDescription.Visible = value;
LayoutHeader();
}
}
///
/// Gets or sets the header background style.
///
[Browsable(true), DevCoBrowsable(true), NotifyParentPropertyAttribute(true), Category("Style"), Description("Gets or sets header background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ElementStyle HeaderStyle
{
get
{
return panelHeader.Style;
}
}
///
/// Resets the style to it's default value.
///
private void ResetHeaderStyle()
{
panelHeader.ResetStyle();
}
///
/// Gets or sets the footer background style.
///
[Browsable(true), DevCoBrowsable(true), NotifyParentPropertyAttribute(true), Category("Style"), Description("Gets or sets footer background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ElementStyle FooterStyle
{
get
{
return panelFooter.Style;
}
}
///
/// Resets the style to it's default value.
///
private void ResetFooterStyle()
{
panelFooter.ResetStyle();
}
#endregion
#region Internal Implementation
///
/// Simulates Back button click on Wizard control. Note that this method will raise the same events as
/// standard Wizard Back button click.
///
public void NavigateBack()
{
CancelEventArgs ce = new CancelEventArgs();
OnBackButtonClick(ce);
if (ce.Cancel)
return;
WizardPage page = this.SelectedPage;
if (page != null)
{
page.InvokeBackButtonClick(ce);
if (ce.Cancel)
return;
}
page = GetBackPage();
if (page != null)
{
ShowPage(page, eWizardPageChangeSource.BackButton);
}
}
///
/// Simulates Next button click on Wizard control. Note that this method will raise the same events as
/// standard Wizard Next button click.
///
public void NavigateNext()
{
CancelEventArgs ce = new CancelEventArgs();
OnNextButtonClick(ce);
if (ce.Cancel)
return;
WizardPage page = this.SelectedPage;
if (page != null)
{
page.InvokeNextButtonClick(ce);
if (ce.Cancel)
return;
}
// Go to next page
page = GetNextPage();
if (page == null)
return;
WizardPage oldPage = this.SelectedPage;
if (ShowPage(page, eWizardPageChangeSource.NextButton))
{
if (!this.DesignMode)
m_PagesHistory.Push(oldPage);
}
}
///
/// Simulates Cancel button click on Wizard control. Note that this method will raise the same events as
/// standard Wizard Cancel button click.
///
public void NavigateCancel()
{
CancelEventArgs ce = new CancelEventArgs();
OnCancelButtonClick(ce);
if (ce.Cancel)
return;
WizardPage page = this.SelectedPage;
if (page != null)
{
page.InvokeCancelButtonClick(ce);
if (ce.Cancel)
return;
}
}
///
/// Simulates Finish button click on Wizard control. Note that this method will raise the same events as
/// standard Wizard Finish button click.
///
public void NavigateFinish()
{
CancelEventArgs ce = new CancelEventArgs();
OnFinishButtonClick(ce);
if (ce.Cancel)
return;
WizardPage page = this.SelectedPage;
if (page != null)
{
page.InvokeFinishButtonClick(ce);
if (ce.Cancel)
return;
}
}
protected override void OnPaint(PaintEventArgs e)
{
if (this.DesignMode && this.WizardPages.Count == 0)
{
Rectangle r = this.ClientRectangle;
Graphics g = e.Graphics;
r.Inflate(6, 6);
TextDrawing.DrawString(g, "Right-click control and use context menu commands to create, delete, navigate and re-order wizard pages. You can use Next and Back button to navigate wizard just like in run-time.",
this.Font, SystemColors.ControlDarkDark, r,
eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter | eTextFormat.WordBreak);
}
base.OnPaint(e);
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
if(this.DesignMode)
this.Invalidate();
}
private void LayoutHeader()
{
int margin = 4;
int titleWidth = this.Width - labelCaption.Left - margin;
int descWidth = this.Width - labelDescription.Left - margin;
if (m_HeaderImageVisible || this.DesignMode)
{
if (_HeaderImageAlignment == eWizardTitleImageAlignment.Right)
{
pictureHeader.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
pictureHeader.Location = new Point(this.Width - pictureHeader.Width - margin,
(panelHeader.Height - pictureHeader.Height) / 2);
}
else
{
pictureHeader.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
pictureHeader.Location = new Point(margin,
(panelHeader.Height - pictureHeader.Height) / 2);
}
titleWidth -= (pictureHeader.Width + margin);
descWidth -= (pictureHeader.Width + margin);
}
labelCaption.Width = titleWidth;
labelDescription.Width = descWidth;
labelCaption.Top = 5;
labelCaption.Height = labelCaption.Font.Height + 4;
if (_HeaderImageAlignment == eWizardTitleImageAlignment.Right)
{
labelCaption.Left = 16;
}
else
{
labelCaption.Left = pictureHeader.Bounds.Right + 10;
if (!_HeaderDescriptionVisible)
labelCaption.Top = (panelHeader.Height - labelCaption.Height) / 2;
}
labelDescription.Left = labelCaption.Left;
if (this.IsRightToLeft)
{
pictureHeader.Left = this.Width - pictureHeader.Bounds.Right;
labelCaption.Left = this.Width - labelCaption.Bounds.Right;
labelDescription.Left = this.Width - labelDescription.Bounds.Right;
}
}
///
/// Returns reference to internal Next button control.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ButtonX NextButtonControl
{
get { return buttonNext; }
}
///
/// Returns reference to internal Cancel button control.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ButtonX CancelButtonControl
{
get { return buttonCancel; }
}
///
/// Returns reference to internal Finish button control.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ButtonX FinishButtonControl
{
get { return buttonFinish; }
}
///
/// Returns reference to internal Help button control.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ButtonX HelpButtonControl
{
get { return buttonHelp; }
}
///
/// Returns reference to internal Back button control.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ButtonX BackButtonControl
{
get { return buttonBack; }
}
private bool IsRightToLeft
{
get
{
return this.RightToLeft == RightToLeft.Yes;
}
}
protected override void OnRightToLeftChanged(EventArgs e)
{
this.RepositionButtons();
this.LayoutHeader();
base.OnRightToLeftChanged(e);
}
private void RepositionButtons()
{
int buttonSpacingMajor = Dpi.Width(m_ButtonSpacingMajor);
int x=panelFooter.Width-buttonSpacingMajor;
int buttonHeight = Dpi.Height(m_ButtonHeight);
int y=(panelFooter.Height-buttonHeight)/2;
WizardButtonsLayoutEventArgs e=new WizardButtonsLayoutEventArgs();
if (buttonHelp.Visible)
{
x -= buttonHelp.Width;
e.HelpButtonBounds = new Rectangle(x, y, buttonHelp.Width, buttonHeight);
x -= buttonSpacingMajor;
}
if (buttonCancel.Visible)
{
x -= buttonCancel.Width;
e.CancelButtonBounds = new Rectangle(x, y, buttonCancel.Width, buttonHeight);
x -= buttonSpacingMajor;
}
if (buttonFinish.Visible)
{
x -= buttonFinish.Width;
e.FinishButtonBounds = new Rectangle(x, y, buttonFinish.Width, buttonHeight);
if(m_FinishButtonAlwaysVisible)
x -= buttonSpacingMajor;
else
x -= m_ButtonSpacingMinor;
}
if (buttonNext.Visible)
{
x -= buttonNext.Width;
e.NextButtonBounds = new Rectangle(x, y, buttonNext.Width, buttonHeight);
x -= m_ButtonSpacingMinor;
}
if (buttonBack.Visible)
{
x -= buttonBack.Width;
e.BackButtonBounds = new Rectangle(x, y, buttonBack.Width, buttonHeight);
x -= m_ButtonSpacingMinor;
}
if (IsRightToLeft)
{
int xOffset = panelFooter.Width-x;
if (!e.HelpButtonBounds.IsEmpty)
{
Rectangle r = e.HelpButtonBounds;
e.HelpButtonBounds = new Rectangle(panelFooter.Width - r.Right, r.Y, r.Width, r.Height);
}
if (!e.CancelButtonBounds.IsEmpty)
{
Rectangle r = e.CancelButtonBounds;
e.CancelButtonBounds = new Rectangle(panelFooter.Width - r.Right, r.Y, r.Width, r.Height);
}
if (!e.FinishButtonBounds.IsEmpty)
{
Rectangle r = e.FinishButtonBounds;
e.FinishButtonBounds = new Rectangle(panelFooter.Width - r.Right, r.Y, r.Width, r.Height);
}
if (!e.NextButtonBounds.IsEmpty)
{
Rectangle r = e.NextButtonBounds;
e.NextButtonBounds = new Rectangle(panelFooter.Width - r.Right, r.Y, r.Width, r.Height);
}
if (!e.BackButtonBounds.IsEmpty)
{
Rectangle r = e.BackButtonBounds;
e.BackButtonBounds = new Rectangle(panelFooter.Width - r.Right, r.Y, r.Width, r.Height);
}
}
OnLayoutWizardButtons(e);
if (buttonHelp.Visible)
buttonHelp.Bounds = e.HelpButtonBounds;
if (buttonCancel.Visible)
buttonCancel.Bounds = e.CancelButtonBounds;
if (buttonNext.Visible)
buttonNext.Bounds = e.NextButtonBounds;
if (buttonFinish.Visible)
buttonFinish.Bounds = e.FinishButtonBounds;
if (buttonBack.Visible)
buttonBack.Bounds = e.BackButtonBounds;
}
private void OnFinishButtonAlwaysVisibleChanged()
{
}
private void panelFooter_Resize(object sender, EventArgs e)
{
RepositionButtons();
}
private void CommandButtonVisibleChanged(object sender, EventArgs e)
{
RepositionButtons();
}
private void buttonBack_Click(object sender, EventArgs e)
{
NavigateBack();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public WizardPage GetBackPage()
{
WizardPage page = null;
if (m_PagesHistory.Count > 0)
{
page = m_PagesHistory.Pop() as WizardPage;
}
else
{
if (this.SelectedPageIndex > 0)
{
page = m_WizardPages[this.SelectedPageIndex - 1];
}
}
return page;
}
private void buttonNext_Click(object sender, EventArgs e)
{
NavigateNext();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public WizardPage GetNextPage()
{
if (this.SelectedPageIndex + 1 < m_WizardPages.Count)
return m_WizardPages[this.SelectedPageIndex + 1];
return null;
}
private void buttonFinish_Click(object sender, EventArgs e)
{
NavigateFinish();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
NavigateCancel();
}
private void buttonHelp_Click(object sender, EventArgs e)
{
CancelEventArgs ce = new CancelEventArgs();
OnHelpButtonClick(ce);
if (ce.Cancel)
return;
WizardPage page = this.SelectedPage;
if (page != null)
{
page.InvokeHelpButtonClick(ce);
if (ce.Cancel)
return;
}
}
internal void OnWizardPageAdded(WizardPage page)
{
SetupPage(page);
if (m_WizardPages.IndexOf(page) == m_SelectedPageIndex)
ShowPage(page, eWizardPageChangeSource.Code);
else
page.Visible = false;
this.Controls.Add(page);
SetupButtons(true);
}
internal void OnWizardPageRemoved(WizardPage page)
{
this.Controls.Remove(page);
if (page.Visible && this.SelectedPage!=null && !this.SelectedPage.Visible)
{
ShowPage(this.SelectedPage, eWizardPageChangeSource.Code);
}
}
private bool ShowPage(WizardPage page, eWizardPageChangeSource changeSource)
{
WizardPage oldPage = this.SelectedPage;
WizardCancelPageChangeEventArgs e = new WizardCancelPageChangeEventArgs(page, oldPage, changeSource);
OnWizardPageChanging(e);
if (e.Cancel || e.NewPage==null)
return false;
page = e.NewPage;
if (page != null)
{
page.InvokeBeforePageDisplayed(e);
if (e.Cancel || e.NewPage == null)
return false;
page = e.NewPage;
}
if (m_PageChangeDisableButtons)
{
buttonBack.Enabled = false;
buttonNext.Enabled = false;
buttonFinish.Enabled = false;
buttonCancel.Enabled = false;
}
if(m_PageChangeWaitCursor)
this.Cursor = Cursors.WaitCursor;
// Change the page
if (oldPage != null)
{
if (oldPage != page)
{
if (this.DesignMode)
TypeDescriptor.GetProperties(oldPage)["Visible"].SetValue(oldPage, false);
oldPage.Visible = false;
oldPage.InvokeAfterPageHidden(new WizardPageChangeEventArgs(page, oldPage, changeSource));
}
else
{
foreach (WizardPage wp in this.WizardPages)
{
if (wp != page)
{
if (this.DesignMode)
TypeDescriptor.GetProperties(wp)["Visible"].SetValue(wp, false);
wp.Visible = false;
}
}
}
}
if (page != null)
{
if (this.DesignMode)
TypeDescriptor.GetProperties(page)["Visible"].SetValue(page, true);
page.Visible = true;
}
m_SelectedPageIndex = m_WizardPages.IndexOf(page);
SetupButtons(true);
UpdatePageDisplay();
// Raise event
e.Cancel = false;
OnWizardPageChanged(e);
if (page != null)
{
page.InvokeAfterPageDisplayed(new WizardPageChangeEventArgs(page, oldPage, changeSource));
}
if (m_PageChangeWaitCursor)
this.Cursor = Cursors.Default;
return true;
}
internal void UpdatePageDisplay()
{
WizardPage page = this.SelectedPage;
if (page == null)
return;
if (page.InteriorPage)
{
if (!panelHeader.Visible)
panelHeader.Visible = true;
if(pictureHeader.Visible != m_HeaderImageVisible)
{
pictureHeader.Visible = m_HeaderImageVisible;
LayoutHeader();
}
}
else
{
if (panelHeader.Visible)
panelHeader.Visible = false;
}
labelCaption.Text = page.PageTitle;
labelDescription.Text = page.PageDescription;
if (page.PageHeaderImage != null)
{
pictureHeader.BackgroundImage = page.PageHeaderImage;
m_HeaderImageChanged = true;
}
else if (m_HeaderImageChanged)
{
if (m_HeaderImage != null)
pictureHeader.BackgroundImage = m_HeaderImage;
else
pictureHeader.BackgroundImage = BarFunctions.LoadBitmap("SystemImages.WizardHeaderImage.png");
m_HeaderImageChanged = false;
}
if (page.FormCaption != "")
{
Form f = this.FindForm();
if (f != null)
f.Text = page.FormCaption;
}
#if !TRIAL
if (NativeFunctions.keyValidated2 != 266)
labelCaption.Text="Invalid DotNetBar License";
#endif
}
internal void SetupButtons(bool canSetFocus)
{
eWizardButtonState backButtonEnabled = eWizardButtonState.Auto;
eWizardButtonState backButtonVisible = eWizardButtonState.Auto;
eWizardButtonState nextButtonEnabled = eWizardButtonState.Auto;
eWizardButtonState nextButtonVisible = eWizardButtonState.Auto;
eWizardButtonState finishButtonEnabled = eWizardButtonState.Auto;
eWizardButtonState cancelButtonEnabled = eWizardButtonState.Auto;
eWizardButtonState cancelButtonVisible = eWizardButtonState.Auto;
eWizardButtonState helpButtonEnabled = eWizardButtonState.Auto;
eWizardButtonState helpButtonVisible = eWizardButtonState.Auto;
WizardPage page = this.SelectedPage;
if (page != null)
{
backButtonEnabled = page.BackButtonEnabled;
backButtonVisible = page.BackButtonVisible;
nextButtonEnabled = page.NextButtonEnabled;
nextButtonVisible = page.NextButtonVisible;
finishButtonEnabled = page.FinishButtonEnabled;
cancelButtonEnabled = page.CancelButtonEnabled;
cancelButtonVisible = page.CancelButtonVisible;
helpButtonEnabled = page.HelpButtonEnabled;
helpButtonVisible = page.HelpButtonVisible;
}
if (!m_HelpButtonVisible)
helpButtonVisible = eWizardButtonState.False;
if (this.WizardPages.Count == 0 && this.DesignMode)
{
backButtonEnabled = eWizardButtonState.False;
nextButtonEnabled = eWizardButtonState.False;
finishButtonEnabled = eWizardButtonState.False;
cancelButtonEnabled = eWizardButtonState.False;
}
// Help button
if (helpButtonVisible == eWizardButtonState.False)
buttonHelp.Visible = false;
else if(!buttonHelp.Visible)
buttonHelp.Visible = true;
if (helpButtonEnabled == eWizardButtonState.False)
buttonHelp.Enabled = false;
else if(!buttonHelp.Enabled)
buttonHelp.Enabled = true;
// Cancel button
if (cancelButtonVisible == eWizardButtonState.False)
buttonCancel.Visible = false;
else if (!buttonCancel.Visible)
buttonCancel.Visible = true;
if (cancelButtonEnabled == eWizardButtonState.False)
buttonCancel.Enabled = false;
else if(!buttonCancel.Enabled)
buttonCancel.Enabled = true;
// Finish button
if (m_FinishButtonAlwaysVisible ||
this.SelectedPageIndex == m_WizardPages.Count - 1 || finishButtonEnabled == eWizardButtonState.True)
{
if (!buttonFinish.Visible)
buttonFinish.Visible = true;
}
else
buttonFinish.Visible = false;
if (finishButtonEnabled == eWizardButtonState.False ||
finishButtonEnabled == eWizardButtonState.Auto && this.SelectedPageIndex < m_WizardPages.Count - 1)
{
buttonFinish.Enabled = false;
}
else if (!buttonFinish.Enabled)
buttonFinish.Enabled = true;
// Next button
if (nextButtonVisible == eWizardButtonState.True)
{
if (!buttonNext.Visible)
buttonNext.Visible = true;
}
else if (nextButtonVisible == eWizardButtonState.Auto)
{
if (buttonFinish.Visible && buttonFinish.Enabled && !m_FinishButtonAlwaysVisible)
buttonNext.Visible = false;
else if (!buttonNext.Visible)
buttonNext.Visible = true;
}
else if (buttonNext.Visible)
buttonNext.Visible = false;
if (nextButtonEnabled == eWizardButtonState.True)
{
if (!buttonNext.Enabled)
buttonNext.Enabled = true;
}
else if (nextButtonEnabled == eWizardButtonState.Auto)
{
if (buttonFinish.Visible && buttonFinish.Enabled || this.SelectedPageIndex == m_WizardPages.Count - 1)
buttonNext.Enabled = false;
else if (!buttonNext.Enabled)
buttonNext.Enabled = true;
}
else if (buttonNext.Enabled)
buttonNext.Enabled = false;
if (canSetFocus)
{
if (buttonNext.Enabled && buttonNext.Visible)
buttonNext.Select();
else if (buttonFinish.Enabled && buttonFinish.Visible)
buttonFinish.Select();
}
if (backButtonVisible == eWizardButtonState.True || backButtonVisible == eWizardButtonState.Auto)
{
if (!buttonBack.Visible)
buttonBack.Visible = true;
}
else if (buttonBack.Visible)
buttonBack.Visible = false;
if (backButtonEnabled == eWizardButtonState.True)
{
if (!buttonBack.Enabled)
buttonBack.Enabled = true;
}
else if (backButtonEnabled == eWizardButtonState.Auto)
{
if (m_PagesHistory.Count > 0 || this.SelectedPageIndex > 0)
{
if (!buttonBack.Enabled)
buttonBack.Enabled = true;
}
else if (buttonBack.Enabled)
buttonBack.Enabled = false;
}
else if (backButtonEnabled == eWizardButtonState.False)
{
if (buttonBack.Enabled)
buttonBack.Enabled = false;
}
SetFormAcceptButton();
SetFormCancelButton();
RepositionButtons();
}
private void SetFormAcceptButton()
{
Form form = this.FindForm();
if (form == null)
return;
if (m_FormAcceptButton == eWizardFormAcceptButton.FinishAndNext)
{
if (buttonFinish.Visible && buttonFinish.Enabled)
{
if(form.AcceptButton != buttonFinish)
form.AcceptButton = buttonFinish;
}
else
{
if (form.AcceptButton != buttonNext)
form.AcceptButton = buttonNext;
}
}
else if (m_FormAcceptButton == eWizardFormAcceptButton.Next)
{
if (form.AcceptButton != buttonNext)
form.AcceptButton = buttonNext;
}
else if (m_FormAcceptButton == eWizardFormAcceptButton.Finish)
{
if (form.AcceptButton != buttonFinish)
form.AcceptButton = buttonFinish;
}
else if (m_FormAcceptButton == eWizardFormAcceptButton.None)
{
if (form.AcceptButton == buttonFinish || form.AcceptButton == buttonNext)
form.AcceptButton = null;
}
}
private void SetFormCancelButton()
{
Form form = this.FindForm();
if (form == null)
return;
if (m_FormCancelButton == eWizardFormCancelButton.Cancel)
{
if(form.CancelButton != buttonCancel)
form.CancelButton = buttonCancel;
}
else if (form.CancelButton == buttonCancel)
form.CancelButton = null;
}
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
SetFormCancelButton();
SetFormAcceptButton();
}
internal void SetupPage(WizardPage page)
{
if (page == null)
return;
Size innerPadding = new Size(7, 12);
this.SuspendLayout();
try
{
Rectangle bounds = Rectangle.Empty;
if (page.InteriorPage)
{
bounds = new Rectangle(this.ClientRectangle.X + innerPadding.Width,
this.ClientRectangle.Y + panelHeader.Height + innerPadding.Height,
this.ClientRectangle.Width - innerPadding.Width * 2,
this.ClientRectangle.Height - (panelHeader.Height + panelFooter.Height + innerPadding.Height * 2));
}
else
{
bounds = new Rectangle(this.ClientRectangle.X,
this.ClientRectangle.Y,
this.ClientRectangle.Width,
this.ClientRectangle.Height - panelFooter.Height);
}
TypeDescriptor.GetProperties(page)["Bounds"].SetValue(page, bounds);
TypeDescriptor.GetProperties(page)["Anchor"].SetValue(page, AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom);
}
finally
{
this.ResumeLayout();
}
}
private bool _ButtonFocusCuesEnabled = true;
///
/// Gets or sets whether Focus cues on wizard navigation buttons are enabled. Default value is true.
///
[DefaultValue(true), Category("Behavior"), Description("Indicates whether Focus cues on wizard navigation buttons are enabled.")]
public bool ButtonFocusCuesEnabled
{
get { return _ButtonFocusCuesEnabled; }
set
{
if (_ButtonFocusCuesEnabled != value)
{
_ButtonFocusCuesEnabled = value;
buttonHelp.FocusCuesEnabled = value;
buttonCancel.FocusCuesEnabled = value;
buttonFinish.FocusCuesEnabled = value;
buttonNext.FocusCuesEnabled = value;
buttonBack.FocusCuesEnabled = value;
}
}
}
private eWizardStyle m_WizardStyle = eWizardStyle.Default;
///
/// Gets or sets the visual style used for wizard buttons.
///
[Browsable(false), DefaultValue(eWizardStyle.Default)]
public eWizardStyle ButtonStyle
{
get { return m_WizardStyle; }
set
{
if (m_WizardStyle != value)
{
m_WizardStyle = value;
OnWizardStyleChanged();
}
}
}
private void OnWizardStyleChanged()
{
if (m_WizardStyle == eWizardStyle.Default)
{
buttonBack.Style = eDotNetBarStyle.Office2000;
buttonCancel.Style = eDotNetBarStyle.Office2000;
buttonFinish.Style = eDotNetBarStyle.Office2000;
buttonHelp.Style = eDotNetBarStyle.Office2000;
buttonNext.Style = eDotNetBarStyle.Office2000;
buttonBack.ThemeAware = true;
buttonCancel.ThemeAware = true;
buttonFinish.ThemeAware = true;
buttonHelp.ThemeAware = true;
buttonNext.ThemeAware = true;
}
else
{
buttonBack.Style = eDotNetBarStyle.Office2007;
buttonCancel.Style = eDotNetBarStyle.Office2007;
buttonFinish.Style = eDotNetBarStyle.Office2007;
buttonHelp.Style = eDotNetBarStyle.Office2007;
buttonNext.Style = eDotNetBarStyle.Office2007;
buttonBack.ThemeAware = false;
buttonCancel.ThemeAware = false;
buttonFinish.ThemeAware = false;
buttonHelp.ThemeAware = false;
buttonNext.ThemeAware = false;
}
}
#endregion
#region Event code
///
/// Raises BackButtonClick event.
///
/// Event arguments
protected virtual void OnBackButtonClick(CancelEventArgs e)
{
if (BackButtonClick != null)
BackButtonClick(this, e);
}
///
/// Raises NextButtonClick event.
///
/// Event arguments
protected virtual void OnNextButtonClick(CancelEventArgs e)
{
if (NextButtonClick != null)
NextButtonClick(this, e);
}
///
/// Raises FinishButtonClick event.
///
/// Event arguments
protected virtual void OnFinishButtonClick(CancelEventArgs e)
{
if (FinishButtonClick != null)
FinishButtonClick(this, e);
}
///
/// Raises CancelButtonClick event.
///
/// Event arguments
protected virtual void OnCancelButtonClick(CancelEventArgs e)
{
if (CancelButtonClick != null)
CancelButtonClick(this, e);
}
///
/// Raises HelpButtonClick event.
///
/// Event arguments
protected virtual void OnHelpButtonClick(CancelEventArgs e)
{
if (HelpButtonClick != null)
HelpButtonClick(this, e);
}
///
/// Raises WizardPageChanging event.
///
/// Provides event arguments
protected virtual void OnWizardPageChanging(WizardCancelPageChangeEventArgs e)
{
if (WizardPageChanging != null)
WizardPageChanging(this, e);
}
///
/// Raises WizardPageChanged event.
///
/// Provides event arguments
protected virtual void OnWizardPageChanged(WizardCancelPageChangeEventArgs e)
{
if (WizardPageChanged != null)
WizardPageChanged(this, e);
}
protected virtual void OnLayoutWizardButtons(WizardButtonsLayoutEventArgs e)
{
if (LayoutWizardButtons != null)
LayoutWizardButtons(this, e);
}
#endregion
#region Licensing
#if !TRIAL
private string m_LicenseKey = "";
[Browsable(false), DefaultValue("")]
public string LicenseKey
{
get { return m_LicenseKey; }
set
{
if (NativeFunctions.ValidateLicenseKey(value))
return;
m_LicenseKey = (!NativeFunctions.CheckLicenseKey(value) ? "9dsjkhds7" : value);
}
}
#else
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
RemindForm frm=new RemindForm();
frm.ShowDialog();
frm.Dispose();
}
#endif
#endregion
}
}