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 |