#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
{
///
/// Represents non-intrusive Warning Box control with Options and Close button.
///
[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
///
/// Occurs when Close button is clicked.
///
[Description("Occurs when Close button is clicked.")]
public event EventHandler CloseClick;
///
/// Occurs when Options button is clicked.
///
[Description("Occurs when Options button is clicked.")]
public event EventHandler OptionsClick;
///
/// Occurs when warning text markup link is clicked. Markup links can be created using "a" tag, for example:
/// Markup link
///
public event MarkupLinkClickEventHandler MarkupLinkClick;
#endregion
#region Constructors
public WarningBox()
{
InitializeComponent();
CloseButton.Image = BarFunctions.LoadBitmap("SystemImages.CloseButton.png");
StyleManager.Register(this);
}
#endregion
#region Internal Implementation
///
/// 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.
///
/// New active style.
[EditorBrowsable(EditorBrowsableState.Never)]
public void StyleManagerStyleChanged(eDotNetBarStyle newStyle)
{
UpdateColorScheme();
}
///
/// Raises the CloseClick event.
///
/// Event arguments.
protected virtual void OnCloseClick(EventArgs e)
{
EventHandler handler = CloseClick;
if (handler != null) handler(this, e);
}
///
/// Raises the OptionsClick event.
///
/// Event arguments.
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);
}
///
/// Gets or sets the text displayed on close button tooltip.
///
[Browsable(true), Category("Warning"), Localizable(true), DefaultValue("Close")]
public string CloseButtonTooltip
{
get
{
return CloseButton.Tooltip;
}
set
{
CloseButton.Tooltip = value;
}
}
///
/// Gets or sets the text displayed on warning control label. Supports text-markup.
///
[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);
}
///
/// Gets or sets whether text is wrapped on multiple lines if it cannot fit the space allocated to the control.
///
[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;
}
}
///
/// Gets or sets the image displayed next to the warning label text. Default value is null.
///
[Browsable(true), Category("Warning"), DefaultValue(null), Localizable(true)]
public Image Image
{
get { return WarningLabel.Image; }
set
{
WarningLabel.Image = value;
}
}
///
/// Gets or sets the text for the Options buttons.
///
[Browsable(true), Category("Warning"), DefaultValue("Options..."), Localizable(true)]
public string OptionsText
{
get { return OptionsButton.Text; }
set
{
OptionsButton.Text = value;
}
}
private bool _OptionsButtonVisible = true;
///
/// Gets or sets whether Options button is visible. Default value is true.
///
[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;
///
/// Gets or sets whether Close button is visible. Default value is true.
///
[Browsable(true), Category("Warning"), DefaultValue(true)]
public bool CloseButtonVisible
{
get { return _CloseButtonVisible; }
set
{
if (_CloseButtonVisible != value)
{
_CloseButtonVisible = value;
PanelClose.Visible = _CloseButtonVisible;
}
}
}
///
/// 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.
///
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);
}
///
/// Invokes the MarkupLinkClick event.
///
/// Provides additional data about event.
protected virtual void OnMarkupLinkClick(MarkupLinkClickEventArgs e)
{
if (MarkupLinkClick != null)
MarkupLinkClick(this, e);
}
private int _AutoCloseTimeout = 0;
///
/// 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.
///
[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;
///
/// Gets or sets the control's color scheme.
///
[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;
///
/// Gets or sets whether anti-alias smoothing is used while painting. Default value is true.
///
[DefaultValue(true), Category("Appearance")]
public bool AntiAlias
{
get { return _AntiAlias; }
set
{
if (value != _AntiAlias)
{
bool oldValue = _AntiAlias;
_AntiAlias = value;
OnAntiAliasChanged(oldValue, value);
}
}
}
///
/// Called when AntiAlias property has changed.
///
/// Old property value
/// New property value
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
}
///
/// Defines available WarningBox control color schemes.
///
public enum eWarningBoxColorScheme
{
Default,
Green,
Yellow,
Red
}
}
#endif