450 lines
17 KiB
C#
450 lines
17 KiB
C#
#if FRAMEWORK20
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using DevComponents.DotNetBar.Rendering;
|
|
|
|
namespace DevComponents.DotNetBar.Controls
|
|
{
|
|
/// <summary>
|
|
/// Represents non-intrusive Warning Box control with Options and Close button.
|
|
/// </summary>
|
|
[ToolboxBitmap(typeof(WarningBox), "Controls.WarningBox.ico"), ToolboxItem(true), DefaultEvent("OptionsClick"), System.Runtime.InteropServices.ComVisible(false), Designer("DevComponents.DotNetBar.Design.WarningBoxDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")]
|
|
public partial class WarningBox : UserControl
|
|
{
|
|
#region Events
|
|
/// <summary>
|
|
/// Occurs when Close button is clicked.
|
|
/// </summary>
|
|
[Description("Occurs when Close button is clicked.")]
|
|
public event EventHandler CloseClick;
|
|
/// <summary>
|
|
/// Occurs when Options button is clicked.
|
|
/// </summary>
|
|
[Description("Occurs when Options button is clicked.")]
|
|
public event EventHandler OptionsClick;
|
|
/// <summary>
|
|
/// Occurs when warning text markup link is clicked. Markup links can be created using "a" tag, for example:
|
|
/// <a name="MyLink">Markup link</a>
|
|
/// </summary>
|
|
public event MarkupLinkClickEventHandler MarkupLinkClick;
|
|
#endregion
|
|
|
|
#region Constructors
|
|
public WarningBox()
|
|
{
|
|
InitializeComponent();
|
|
CloseButton.Image = BarFunctions.LoadBitmap("SystemImages.CloseButton.png");
|
|
StyleManager.Register(this);
|
|
}
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
/// <summary>
|
|
/// Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if
|
|
/// its style is controlled by StyleManager.
|
|
/// </summary>
|
|
/// <param name="newStyle">New active style.</param>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public void StyleManagerStyleChanged(eDotNetBarStyle newStyle)
|
|
{
|
|
UpdateColorScheme();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the CloseClick event.
|
|
/// </summary>
|
|
/// <param name="e">Event arguments.</param>
|
|
protected virtual void OnCloseClick(EventArgs e)
|
|
{
|
|
EventHandler handler = CloseClick;
|
|
if (handler != null) handler(this, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the OptionsClick event.
|
|
/// </summary>
|
|
/// <param name="e">Event arguments.</param>
|
|
protected virtual void OnOptionsClick(EventArgs e)
|
|
{
|
|
EventHandler handler = OptionsClick;
|
|
if (handler != null) handler(this, e);
|
|
}
|
|
|
|
private void OptionsButton_Click(object sender, EventArgs e)
|
|
{
|
|
OnOptionsClick(e);
|
|
}
|
|
|
|
private void CloseButton_Click(object sender, EventArgs e)
|
|
{
|
|
OnCloseClick(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the text displayed on close button tooltip.
|
|
/// </summary>
|
|
[Browsable(true), Category("Warning"), Localizable(true), DefaultValue("Close")]
|
|
public string CloseButtonTooltip
|
|
{
|
|
get
|
|
{
|
|
return CloseButton.Tooltip;
|
|
}
|
|
set
|
|
{
|
|
CloseButton.Tooltip = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the text displayed on warning control label. Supports text-markup.
|
|
/// </summary>
|
|
[Browsable(true), Editor("DevComponents.DotNetBar.Design.TextMarkupUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)), Category("Warning"), Localizable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), DefaultValue("")]
|
|
public override string Text
|
|
{
|
|
get
|
|
{
|
|
return base.Text;
|
|
}
|
|
set
|
|
{
|
|
base.Text = value;
|
|
}
|
|
}
|
|
|
|
protected override void OnTextChanged(EventArgs e)
|
|
{
|
|
WarningLabel.Text = this.Text;
|
|
base.OnTextChanged(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether text is wrapped on multiple lines if it cannot fit the space allocated to the control.
|
|
/// </summary>
|
|
[DefaultValue(false), Category("Appearance"), Description("Indicates whether text is wrapped on multiple lines if it cannot fit the space allocated to the control.")]
|
|
public bool WordWrap
|
|
{
|
|
get { return WarningLabel.WordWrap; }
|
|
set
|
|
{
|
|
WarningLabel.WordWrap = value;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Gets or sets the image displayed next to the warning label text. Default value is null.
|
|
/// </summary>
|
|
[Browsable(true), Category("Warning"), DefaultValue(null), Localizable(true)]
|
|
public Image Image
|
|
{
|
|
get { return WarningLabel.Image; }
|
|
set
|
|
{
|
|
WarningLabel.Image = value;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets the text for the Options buttons.
|
|
/// </summary>
|
|
[Browsable(true), Category("Warning"), DefaultValue("Options..."), Localizable(true)]
|
|
public string OptionsText
|
|
{
|
|
get { return OptionsButton.Text; }
|
|
set
|
|
{
|
|
OptionsButton.Text = value;
|
|
}
|
|
}
|
|
|
|
private bool _OptionsButtonVisible = true;
|
|
/// <summary>
|
|
/// Gets or sets whether Options button is visible. Default value is true.
|
|
/// </summary>
|
|
[Browsable(true), Category("Warning"), DefaultValue(true)]
|
|
public bool OptionsButtonVisible
|
|
{
|
|
get { return _OptionsButtonVisible; }
|
|
set
|
|
{
|
|
if (_OptionsButtonVisible != value)
|
|
{
|
|
_OptionsButtonVisible = value;
|
|
OptionsButton.Visible = _OptionsButtonVisible;
|
|
OnOptionsButtonVisibleChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnOptionsButtonVisibleChanged()
|
|
{
|
|
if (_OptionsButtonVisible)
|
|
{
|
|
WarningLabel.Width = PanelWarning.Width - (OptionsButton.Width + 3 + PanelWarning.Padding.Horizontal);
|
|
}
|
|
else
|
|
{
|
|
WarningLabel.Width = PanelWarning.Width - (PanelWarning.Padding.Right + WarningLabel.Left);
|
|
}
|
|
}
|
|
|
|
private bool _CloseButtonVisible = true;
|
|
/// <summary>
|
|
/// Gets or sets whether Close button is visible. Default value is true.
|
|
/// </summary>
|
|
[Browsable(true), Category("Warning"), DefaultValue(true)]
|
|
public bool CloseButtonVisible
|
|
{
|
|
get { return _CloseButtonVisible; }
|
|
set
|
|
{
|
|
if (_CloseButtonVisible != value)
|
|
{
|
|
_CloseButtonVisible = value;
|
|
PanelClose.Visible = _CloseButtonVisible;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Updates control color scheme based on currently selected Office 2007 Color Table. Usually it is not necessary to
|
|
/// call this method manually. You need to call it to update the colors on control if you customize the Office2007ColorTable.WarningBox values.
|
|
/// </summary>
|
|
public void UpdateColorScheme()
|
|
{
|
|
Office2007Renderer renderer = (Office2007Renderer)GlobalManager.Renderer;
|
|
Office2007WarningBoxColorTable colorTable = null;
|
|
if (renderer == null)
|
|
colorTable = new Office2007WarningBoxColorTable(); // Default blue
|
|
else
|
|
colorTable = renderer.ColorTable.WarningBox;
|
|
|
|
if (_ColorScheme == eWarningBoxColorScheme.Default)
|
|
{
|
|
this.BackColor = colorTable.BackColor;
|
|
|
|
this.PanelWarning.Style.BorderColor.Color = colorTable.WarningBorderColor;
|
|
this.PanelWarning.Style.BackColor1.Color = colorTable.WarningBackColor1;
|
|
this.PanelWarning.Style.BackColor2.Color = colorTable.WarningBackColor2;
|
|
|
|
this.OptionsButton.Style.BackColor1.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor1.Color = colorTable.WarningBackColor1;
|
|
this.OptionsButton.Style.BackColor2.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor2.Color = colorTable.WarningBackColor2;
|
|
this.OptionsButton.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BorderColor.Color = colorTable.WarningBorderColor;
|
|
}
|
|
else if (_ColorScheme == eWarningBoxColorScheme.Green)
|
|
{
|
|
this.BackColor = colorTable.GreenBackColor;
|
|
|
|
this.PanelWarning.Style.BorderColor.Color = colorTable.GreenWarningBorderColor;
|
|
this.PanelWarning.Style.BackColor1.Color = colorTable.GreenWarningBackColor1;
|
|
this.PanelWarning.Style.BackColor2.Color = colorTable.GreenWarningBackColor2;
|
|
|
|
this.OptionsButton.Style.BackColor1.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor1.Color = colorTable.GreenWarningBackColor1;
|
|
this.OptionsButton.Style.BackColor2.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor2.Color = colorTable.GreenWarningBackColor2;
|
|
this.OptionsButton.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BorderColor.Color = colorTable.GreenWarningBorderColor;
|
|
}
|
|
else if (_ColorScheme == eWarningBoxColorScheme.Yellow)
|
|
{
|
|
this.BackColor = colorTable.YellowBackColor;
|
|
|
|
this.PanelWarning.Style.BorderColor.Color = colorTable.YellowWarningBorderColor;
|
|
this.PanelWarning.Style.BackColor1.Color = colorTable.YellowWarningBackColor1;
|
|
this.PanelWarning.Style.BackColor2.Color = colorTable.YellowWarningBackColor2;
|
|
|
|
this.OptionsButton.Style.BackColor1.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor1.Color = colorTable.YellowWarningBackColor1;
|
|
this.OptionsButton.Style.BackColor2.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor2.Color = colorTable.YellowWarningBackColor2;
|
|
this.OptionsButton.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BorderColor.Color = colorTable.YellowWarningBorderColor;
|
|
}
|
|
else if (_ColorScheme == eWarningBoxColorScheme.Red)
|
|
{
|
|
this.BackColor = colorTable.RedBackColor;
|
|
|
|
this.PanelWarning.Style.BorderColor.Color = colorTable.RedWarningBorderColor;
|
|
this.PanelWarning.Style.BackColor1.Color = colorTable.RedWarningBackColor1;
|
|
this.PanelWarning.Style.BackColor2.Color = colorTable.RedWarningBackColor2;
|
|
|
|
this.OptionsButton.Style.BackColor1.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor1.Color = colorTable.RedWarningBackColor1;
|
|
this.OptionsButton.Style.BackColor2.ColorSchemePart = eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BackColor2.Color = colorTable.RedWarningBackColor2;
|
|
this.OptionsButton.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.Custom;
|
|
this.OptionsButton.Style.BorderColor.Color = colorTable.RedWarningBorderColor;
|
|
}
|
|
|
|
this.Invalidate(true);
|
|
}
|
|
|
|
private void WarningLabel_MarkupLinkClick(object sender, MarkupLinkClickEventArgs e)
|
|
{
|
|
OnMarkupLinkClick(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Invokes the MarkupLinkClick event.
|
|
/// </summary>
|
|
/// <param name="e">Provides additional data about event.</param>
|
|
protected virtual void OnMarkupLinkClick(MarkupLinkClickEventArgs e)
|
|
{
|
|
if (MarkupLinkClick != null)
|
|
MarkupLinkClick(this, e);
|
|
}
|
|
|
|
private int _AutoCloseTimeout = 0;
|
|
/// <summary>
|
|
/// Gets or sets the timeout in seconds after which the control automatically closes itself. Default value is 0 which indicates that auto-close
|
|
/// is disabled.
|
|
/// </summary>
|
|
[DefaultValue(0), Category("Behavior"), Description("Indicates timeout in seconds after which the control automatically closes itself.")]
|
|
public int AutoCloseTimeout
|
|
{
|
|
get { return _AutoCloseTimeout; }
|
|
set
|
|
{
|
|
if (value < 0) value = 0;
|
|
_AutoCloseTimeout = value;
|
|
OnAutoCloseTimeoutChanged();
|
|
}
|
|
}
|
|
|
|
protected override void OnHandleDestroyed(EventArgs e)
|
|
{
|
|
DestroyAutoCloseTimer();
|
|
base.OnHandleDestroyed(e);
|
|
}
|
|
|
|
private void OnAutoCloseTimeoutChanged()
|
|
{
|
|
if (_AutoCloseTimeout == 0)
|
|
DestroyAutoCloseTimer();
|
|
else if (this.Visible)
|
|
SetupAutoCloseTimer();
|
|
}
|
|
|
|
private Timer _AutoCloseTimer = null;
|
|
private void SetupAutoCloseTimer()
|
|
{
|
|
if (_AutoCloseTimeout == 0 || _AutoCloseTimer != null || this.DesignMode) return;
|
|
|
|
_AutoCloseTimer = new Timer();
|
|
_AutoCloseTimer.Interval = _AutoCloseTimeout * 1000;
|
|
_AutoCloseTimer.Tick += new EventHandler(AutoCloseTimerTick);
|
|
_AutoCloseTimer.Start();
|
|
}
|
|
|
|
void AutoCloseTimerTick(object sender, EventArgs e)
|
|
{
|
|
_AutoCloseTimer.Stop();
|
|
DestroyAutoCloseTimer();
|
|
AutoClose();
|
|
}
|
|
|
|
private void AutoClose()
|
|
{
|
|
OnCloseClick(EventArgs.Empty);
|
|
this.Visible = false;
|
|
}
|
|
|
|
private void DestroyAutoCloseTimer()
|
|
{
|
|
Timer timer = _AutoCloseTimer;
|
|
_AutoCloseTimer = null;
|
|
if (timer == null) return;
|
|
timer.Stop();
|
|
timer.Dispose();
|
|
}
|
|
|
|
protected override void OnVisibleChanged(EventArgs e)
|
|
{
|
|
if (this.Visible)
|
|
{
|
|
if (_AutoCloseTimeout > 0) SetupAutoCloseTimer();
|
|
}
|
|
else
|
|
DestroyAutoCloseTimer();
|
|
|
|
base.OnVisibleChanged(e);
|
|
}
|
|
|
|
protected override void OnHandleCreated(EventArgs e)
|
|
{
|
|
if (_ColorScheme == eWarningBoxColorScheme.Default)
|
|
UpdateColorScheme();
|
|
base.OnHandleCreated(e);
|
|
}
|
|
|
|
private eWarningBoxColorScheme _ColorScheme = eWarningBoxColorScheme.Default;
|
|
/// <summary>
|
|
/// Gets or sets the control's color scheme.
|
|
/// </summary>
|
|
[DefaultValue(eWarningBoxColorScheme.Default), Category("Appearance"), Description("Indicates control's color scheme.")]
|
|
public eWarningBoxColorScheme ColorScheme
|
|
{
|
|
get { return _ColorScheme; }
|
|
set
|
|
{
|
|
_ColorScheme = value;
|
|
UpdateColorScheme();
|
|
this.Invalidate(true);
|
|
}
|
|
}
|
|
|
|
private bool _AntiAlias = true;
|
|
/// <summary>
|
|
/// Gets or sets whether anti-alias smoothing is used while painting. Default value is true.
|
|
/// </summary>
|
|
[DefaultValue(true), Category("Appearance")]
|
|
public bool AntiAlias
|
|
{
|
|
get { return _AntiAlias; }
|
|
set
|
|
{
|
|
if (value != _AntiAlias)
|
|
{
|
|
bool oldValue = _AntiAlias;
|
|
_AntiAlias = value;
|
|
OnAntiAliasChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when AntiAlias property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnAntiAliasChanged(bool oldValue, bool newValue)
|
|
{
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("AntiAlias"));
|
|
PanelWarning.AntiAlias = newValue;
|
|
CloseButton.AntiAlias = newValue;
|
|
OptionsButton.AntiAlias = newValue;
|
|
WarningLabel.AntiAlias = newValue;
|
|
this.Invalidate(true);
|
|
}
|
|
#endregion
|
|
}
|
|
/// <summary>
|
|
/// Defines available WarningBox control color schemes.
|
|
/// </summary>
|
|
public enum eWarningBoxColorScheme
|
|
{
|
|
Default,
|
|
Green,
|
|
Yellow,
|
|
Red
|
|
}
|
|
}
|
|
#endif |