kopia lustrzana https://github.com/dl2alf/AirScout
368 wiersze
12 KiB
C#
368 wiersze
12 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Windows.Forms;
|
|
using AeroWizard.Properties;
|
|
|
|
namespace AeroWizard
|
|
{
|
|
/// <summary>
|
|
/// Represents a single page in a <see cref="WizardControl" />.
|
|
/// </summary>
|
|
[Designer(typeof(Design.WizardPageDesigner)), DesignTimeVisible(true)]
|
|
[DefaultProperty("Text"), DefaultEvent("Commit")]
|
|
[ToolboxItem(false)]
|
|
public partial class WizardPage : Control
|
|
{
|
|
private bool allowCancel = true, allowNext = true, allowBack = true;
|
|
private bool showCancel = true, showNext = true, suppress;
|
|
private bool isFinishPage;
|
|
private string helpText;
|
|
|
|
private LinkLabel helpLink;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="WizardPage"/> class.
|
|
/// </summary>
|
|
public WizardPage()
|
|
{
|
|
InitializeComponent();
|
|
Margin = Padding.Empty;
|
|
base.Text = Properties.Resources.WizardHeader;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Occurs when the user has clicked the Next/Finish button but before the page is changed.
|
|
/// </summary>
|
|
[Category("Wizard"), Description("Occurs when the user has clicked the Next/Finish button but before the page is changed")]
|
|
public event EventHandler<WizardPageConfirmEventArgs> Commit;
|
|
|
|
/// <summary>
|
|
/// Occurs when <see cref="HelpText"/> is set and the user has clicked the link at bottom of the content area.
|
|
/// </summary>
|
|
[Category("Wizard"), Description("Occurs when the user has clicked the help link")]
|
|
public event EventHandler HelpClicked;
|
|
|
|
/// <summary>
|
|
/// Occurs when this page is entered.
|
|
/// </summary>
|
|
[Category("Wizard"), Description("Occurs when this page is entered")]
|
|
public event EventHandler<WizardPageInitEventArgs> Initialize;
|
|
|
|
/// <summary>
|
|
/// Occurs when the user has clicked the Back button but before the page is changed.
|
|
/// </summary>
|
|
[Category("Wizard"), Description("Occurs when the user has clicked the Back button")]
|
|
public event EventHandler<WizardPageConfirmEventArgs> Rollback;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to enable the Back button.
|
|
/// </summary>
|
|
/// <value><c>true</c> if Back button is enabled; otherwise, <c>false</c>.</value>
|
|
[DefaultValue(true), Category("Behavior"), Description("Indicates whether to enable the Back button")]
|
|
public virtual bool AllowBack
|
|
{
|
|
get { return allowBack; }
|
|
set
|
|
{
|
|
if (allowBack == value) return;
|
|
allowBack = value;
|
|
UpdateOwner();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to enable the Cancel button.
|
|
/// </summary>
|
|
/// <value><c>true</c> if Cancel button is enabled; otherwise, <c>false</c>.</value>
|
|
[DefaultValue(true), Category("Behavior"), Description("Indicates whether to enable the Cancel button")]
|
|
public virtual bool AllowCancel
|
|
{
|
|
get { return allowCancel; }
|
|
set
|
|
{
|
|
if (allowCancel == value) return;
|
|
allowCancel = value;
|
|
UpdateOwner();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to enable the Next/Finish button.
|
|
/// </summary>
|
|
/// <value><c>true</c> if Next/Finish button is enabled; otherwise, <c>false</c>.</value>
|
|
[DefaultValue(true), Category("Behavior"), Description("Indicates whether to enable the Next/Finish button")]
|
|
public virtual bool AllowNext
|
|
{
|
|
get { return allowNext; }
|
|
set
|
|
{
|
|
if (allowNext == value) return;
|
|
allowNext = value;
|
|
UpdateOwner();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the help text. When value is not <c>null</c>, a help link will be displayed at the bottom left of the content area. When clicked, the <see cref="OnHelpClicked"/> method will call the <see cref="HelpClicked"/> event.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The help text to display.
|
|
/// </value>
|
|
[DefaultValue(null), Category("Appearance"), Description("Help text to display on hyperlink at bottom left of content area.")]
|
|
public string HelpText
|
|
{
|
|
get { return helpText; }
|
|
set
|
|
{
|
|
if (helpLink == null)
|
|
{
|
|
helpLink = new LinkLabel() { AutoSize = true, Dock = DockStyle.Bottom, Text = Resources.WizardPageDefaultHelpText, Visible = false };
|
|
helpLink.LinkClicked += helpLink_LinkClicked;
|
|
Controls.Add(helpLink);
|
|
}
|
|
helpText = value;
|
|
if (helpText == null)
|
|
{
|
|
helpLink.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
helpLink.Text = helpText;
|
|
helpLink.Visible = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether this page is the last page in the sequence and should display the Finish text instead of the Next text on the Next/Finish button.
|
|
/// </summary>
|
|
/// <value><c>true</c> if this page is a finish page; otherwise, <c>false</c>.</value>
|
|
[DefaultValue(false), Category("Behavior"), Description("Indicates whether this page is the last page")]
|
|
public virtual bool IsFinishPage
|
|
{
|
|
get { return isFinishPage; }
|
|
set
|
|
{
|
|
if (isFinishPage == value) return;
|
|
isFinishPage = value;
|
|
UpdateOwner();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the next page that should be used when the user clicks the Next button or when the <see cref="WizardControl.NextPage"/> method is called. This is used to override the default behavior of going to the next page in the sequence defined within the <see cref="WizardControl.Pages"/> collection.
|
|
/// </summary>
|
|
/// <value>The wizard page to go to.</value>
|
|
[DefaultValue(null), Category("Behavior"),
|
|
Description("Specify a page other than the next page in the Pages collection as the next page.")]
|
|
public virtual WizardPage NextPage { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets the <see cref="WizardControl"/> for this page.
|
|
/// </summary>
|
|
/// <value>The <see cref="WizardControl"/> for this page.</value>
|
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
|
public virtual WizardPageContainer Owner { get; internal set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to show the Cancel button. If both <see cref="ShowCancel"/> and <see cref="ShowNext"/> are <c>false</c>, then the bottom command area will not be shown.
|
|
/// </summary>
|
|
/// <value><c>true</c> if Cancel button should be shown; otherwise, <c>false</c>.</value>
|
|
[DefaultValue(true), Category("Behavior"), Description("Indicates whether to show the Cancel button")]
|
|
public virtual bool ShowCancel
|
|
{
|
|
get { return showCancel; }
|
|
set
|
|
{
|
|
if (showCancel == value) return;
|
|
showCancel = value;
|
|
UpdateOwner();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to show the Next/Finish button. If both <see cref="ShowCancel"/> and <see cref="ShowNext"/> are <c>false</c>, then the bottom command area will not be shown.
|
|
/// </summary>
|
|
/// <value><c>true</c> if Next/Finish button should be shown; otherwise, <c>false</c>.</value>
|
|
[DefaultValue(true), Category("Behavior"), Description("Indicates whether to show the Next/Finish button")]
|
|
public virtual bool ShowNext
|
|
{
|
|
get { return showNext; }
|
|
set
|
|
{
|
|
if (showNext == value) return;
|
|
showNext = value;
|
|
UpdateOwner();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the height and width of the control.
|
|
/// </summary>
|
|
/// <value></value>
|
|
/// <returns>
|
|
/// The <see cref="T:System.Drawing.Size"/> that represents the height and width of the control in pixels.
|
|
/// </returns>
|
|
[Browsable(false)]
|
|
public new System.Drawing.Size Size { get { return base.Size; } set { base.Size = value; } }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether this <see cref="WizardPage"/> is suppressed and not shown in the normal flow.
|
|
/// </summary>
|
|
/// <value>
|
|
/// <c>true</c> if suppressed; otherwise, <c>false</c>.
|
|
/// </value>
|
|
[DefaultValue(false), Category("Behavior"), Description("Suppresses this page from viewing if selected as next.")]
|
|
public virtual bool Suppress
|
|
{
|
|
get { return suppress; }
|
|
set
|
|
{
|
|
if (suppress == value) return;
|
|
suppress = value;
|
|
UpdateOwner();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the required creation parameters when the control handle is created.
|
|
/// </summary>
|
|
/// <returns>A <see cref="T:System.Windows.Forms.CreateParams" /> that contains the required creation parameters when the handle to the control is created.</returns>
|
|
protected override CreateParams CreateParams
|
|
{
|
|
get
|
|
{
|
|
var createParams = base.CreateParams;
|
|
var parent = FindForm();
|
|
var parentRightToLeftLayout = parent != null && parent.RightToLeftLayout;
|
|
if ((RightToLeft == RightToLeft.Yes) && parentRightToLeftLayout)
|
|
{
|
|
createParams.ExStyle |= 0x500000; // WS_EX_LAYOUTRTL | WS_EX_NOINHERITLAYOUT
|
|
createParams.ExStyle &= ~0x7000; // WS_EX_RIGHT | WS_EX_RTLREADING | WS_EX_LEFTSCROLLBAR
|
|
}
|
|
return createParams;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns a <see cref="System.String"/> that represents this wizard page.
|
|
/// </summary>
|
|
/// <returns>
|
|
/// A <see cref="System.String"/> that represents this wizard page.
|
|
/// </returns>
|
|
public override string ToString() => $"{Name} (\"{Text}\")";
|
|
|
|
internal bool CommitPage() => OnCommit();
|
|
|
|
internal void InitializePage(WizardPage prevPage)
|
|
{
|
|
OnInitialize(prevPage);
|
|
}
|
|
|
|
internal bool RollbackPage() => OnRollback();
|
|
|
|
/// <summary>
|
|
/// Raises the <see cref="Commit" /> event.
|
|
/// </summary>
|
|
/// <returns><c>true</c> if handler does not set the <see cref="WizardPageConfirmEventArgs.Cancel"/> to <c>true</c>; otherwise, <c>false</c>.</returns>
|
|
protected virtual bool OnCommit()
|
|
{
|
|
var e = new WizardPageConfirmEventArgs(this);
|
|
Commit?.Invoke(this,e);
|
|
return !e.Cancel;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the <see cref="E:System.Windows.Forms.Control.GotFocus"/> event.
|
|
/// </summary>
|
|
/// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data.</param>
|
|
protected override void OnGotFocus(EventArgs e)
|
|
{
|
|
base.OnGotFocus(e);
|
|
var firstChild = GetNextControl(this, true);
|
|
firstChild?.Focus();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the <see cref="HelpClicked"/> event.
|
|
/// </summary>
|
|
protected virtual void OnHelpClicked()
|
|
{
|
|
HelpClicked?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the <see cref="Initialize"/> event.
|
|
/// </summary>
|
|
/// <param name="prevPage">The page that was previously selected.</param>
|
|
protected virtual void OnInitialize(WizardPage prevPage)
|
|
{
|
|
Initialize?.Invoke(this, new WizardPageInitEventArgs(this, prevPage));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the <see cref="Rollback"/> event.
|
|
/// </summary>
|
|
/// <returns><c>true</c> if handler does not set the <see cref="WizardPageConfirmEventArgs.Cancel"/> to <c>true</c>; otherwise, <c>false</c>.</returns>
|
|
protected virtual bool OnRollback()
|
|
{
|
|
var e = new WizardPageConfirmEventArgs(this);
|
|
Rollback?.Invoke(this, e);
|
|
return !e.Cancel;
|
|
}
|
|
|
|
private void helpLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
OnHelpClicked();
|
|
}
|
|
|
|
private void UpdateOwner()
|
|
{
|
|
if (Owner != null && this == Owner.SelectedPage)
|
|
Owner.UpdateUIDependencies();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Arguments supplied to the <see cref="WizardPage"/> events.
|
|
/// </summary>
|
|
public class WizardPageConfirmEventArgs : EventArgs
|
|
{
|
|
internal WizardPageConfirmEventArgs(WizardPage page)
|
|
{
|
|
Cancel = false;
|
|
Page = page;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether this action is to be canceled or allowed.
|
|
/// </summary>
|
|
/// <value><c>true</c> if cancel; otherwise, <c>false</c> to allow. Default is <c>false</c>.</value>
|
|
[DefaultValue(false)]
|
|
public bool Cancel { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets the <see cref="WizardPage"/> that has raised the event.
|
|
/// </summary>
|
|
/// <value>The wizard page.</value>
|
|
public WizardPage Page { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Arguments supplied to the <see cref="WizardPage.Initialize"/> event.
|
|
/// </summary>
|
|
public class WizardPageInitEventArgs : WizardPageConfirmEventArgs
|
|
{
|
|
internal WizardPageInitEventArgs(WizardPage page, WizardPage prevPage)
|
|
: base(page)
|
|
{
|
|
PreviousPage = prevPage;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the <see cref="WizardPage"/> that was previously selected when the event was raised.
|
|
/// </summary>
|
|
/// <value>The previous wizard page.</value>
|
|
public WizardPage PreviousPage { get; }
|
|
}
|
|
} |