512 lines
23 KiB
C#
512 lines
23 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace DevComponents.DotNetBar.Controls
|
|
{
|
|
/// <summary>
|
|
/// Displays the desktop alerts with optional image or symbol. Text on alerts supports text-markup.
|
|
/// </summary>
|
|
public static class DesktopAlert
|
|
{
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
public static void Show(string text)
|
|
{
|
|
Show(text, _AlertColor, _AlertPosition, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="referenceControl">Specifies reference control which is used to find target screen alert is displayed on.</param>
|
|
public static void Show(string text, Control referenceControl)
|
|
{
|
|
Show(text, _AlertColor, _AlertPosition, null, referenceControl);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="markupLinkClickHandler">Text-markup link click event handler.</param>
|
|
public static void Show(string text, MarkupLinkClickEventHandler markupLinkClickHandler)
|
|
{
|
|
Show(text, _AlertColor, _AlertPosition, markupLinkClickHandler);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="alertColor">Specifies alert color.</param>
|
|
public static void Show(string text, eDesktopAlertColor alertColor)
|
|
{
|
|
Show(text, alertColor, _AlertPosition, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="alertColor">Specifies alert color.</param>
|
|
/// <param name="referenceControl">Specifies reference control which is used to find target screen alert is displayed on.</param>
|
|
public static void Show(string text, eDesktopAlertColor alertColor, Control referenceControl)
|
|
{
|
|
Show(text, alertColor, _AlertPosition, null, referenceControl);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert at specific screen position.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="position">Alert position on the screen.</param>
|
|
public static void Show(string text, eAlertPosition position)
|
|
{
|
|
Show(text, _AlertColor, position, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert at specific screen position.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="position">Alert position on the screen.</param>
|
|
/// <param name="referenceControl">Specifies reference control which is used to find target screen alert is displayed on.</param>
|
|
public static void Show(string text, eAlertPosition position, Control referenceControl)
|
|
{
|
|
Show(text, _AlertColor, position, null, referenceControl);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert at specific screen position.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="image">Image to display on alert.</param>
|
|
public static void Show(string text, Image image)
|
|
{
|
|
Show(text, image, _AlertColor, _AlertPosition, _AutoCloseTimeOut, 0, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="alertColor">Alert color.</param>
|
|
/// <param name="position">Alert position on the screen.</param>
|
|
public static void Show(string text, eDesktopAlertColor alertColor, eAlertPosition position)
|
|
{
|
|
Show(text, alertColor, position, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="position">Alert position on the screen</param>
|
|
/// <param name="markupLinkClickHandler">Text-markup link click event handler.</param>
|
|
/// <param name="referenceControl">Specifies reference control which is used to find target screen alert is displayed on.</param>
|
|
public static void Show(string text, eDesktopAlertColor alertColor, eAlertPosition position, MarkupLinkClickEventHandler markupLinkClickHandler, Control referenceControl)
|
|
{
|
|
DesktopAlertWindow alert = new DesktopAlertWindow();
|
|
alert.Text = text;
|
|
alert.MaximumSize = Dpi.Size(_MaximumAlertSize);
|
|
alert.AlertPosition = position;
|
|
alert.AutoCloseTimeOut = _AutoCloseTimeOut;
|
|
alert.TextMarkupEnabled = _TextMarkupEnabled;
|
|
if (markupLinkClickHandler != null)
|
|
alert.MarkupLinkClick += markupLinkClickHandler;
|
|
alert.AlertAnimationDuration = _AlertAnimationDuration;
|
|
alert.PlaySound = _PlaySound;
|
|
alert.ReferenceControl = referenceControl;
|
|
SetColors(alert, alertColor);
|
|
alert.Show();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="position">Alert position on the screen</param>
|
|
/// <param name="markupLinkClickHandler">Text-markup link click event handler.</param>
|
|
public static void Show(string text, eDesktopAlertColor alertColor, eAlertPosition position, MarkupLinkClickEventHandler markupLinkClickHandler)
|
|
{
|
|
Show(text, alertColor, position, markupLinkClickHandler, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
public static void Show(string text, long alertId, Action<long> alertClickAction)
|
|
{
|
|
Show(text, null, _AlertColor, _AlertPosition, _AutoCloseTimeOut, alertId, alertClickAction);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
public static void Show(string text, eDesktopAlertColor alertColor, long alertId, Action<long> alertClickAction)
|
|
{
|
|
Show(text, null, alertColor, _AlertPosition, _AutoCloseTimeOut, alertId, alertClickAction);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="symbol">Symbol to show on the alert, see http://www.devcomponents.com/kb2/?p=1347 </param>
|
|
/// <param name="symbolSet">Symbol set to use</param>
|
|
/// <param name="symbolColor">Symbol color or Color.Empty to use default text color</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="position">Alert position on the screen</param>
|
|
/// <param name="alertDurationSeconds">Duration of alert in the seconds.</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
public static void Show(string text, string symbol, eSymbolSet symbolSet, Color symbolColor, eDesktopAlertColor alertColor, eAlertPosition position,
|
|
int alertDurationSeconds, long alertId, Action<long> alertClickAction)
|
|
{
|
|
Show(text, symbol, symbolSet, symbolColor, alertColor,position, alertDurationSeconds, alertId, alertClickAction, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="symbol">Symbol to show on the alert, see http://www.devcomponents.com/kb2/?p=1347 </param>
|
|
/// <param name="symbolSet">Symbol set to use</param>
|
|
/// <param name="symbolColor">Symbol color or Color.Empty to use default text color</param>
|
|
/// <param name="position">Alert position on the screen</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="alertDurationSeconds">Duration of alert in the seconds.</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
/// <param name="markupLinkClickHandler">Text-markup link click event handler.</param>
|
|
public static void Show(string text, string symbol, eSymbolSet symbolSet, Color symbolColor, eDesktopAlertColor alertColor, eAlertPosition position,
|
|
int alertDurationSeconds, long alertId, Action<long> alertClickAction, MarkupLinkClickEventHandler markupLinkClickHandler)
|
|
{
|
|
Show(text, symbol, symbolSet, symbolColor, alertColor, position, alertDurationSeconds, alertId, alertClickAction, markupLinkClickHandler, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="symbol">Symbol to show on the alert, see http://www.devcomponents.com/kb2/?p=1347 </param>
|
|
/// <param name="symbolSet">Symbol set to use</param>
|
|
/// <param name="symbolColor">Symbol color or Color.Empty to use default text color</param>
|
|
/// <param name="position">Alert position on the screen</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="alertDurationSeconds">Duration of alert in the seconds.</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
/// <param name="markupLinkClickHandler">Text-markup link click event handler.</param>
|
|
/// <param name="referenceControl">Specifies reference control which is used to find target screen alert is displayed on.</param>
|
|
public static void Show(string text, string symbol, eSymbolSet symbolSet, Color symbolColor, eDesktopAlertColor alertColor, eAlertPosition position,
|
|
int alertDurationSeconds, long alertId, Action<long> alertClickAction, MarkupLinkClickEventHandler markupLinkClickHandler, Control referenceControl)
|
|
{
|
|
DesktopAlertWindow alert = new DesktopAlertWindow();
|
|
alert.Text = text;
|
|
alert.MaximumSize = Dpi.Size(_MaximumAlertSize);
|
|
alert.AlertPosition = position;
|
|
alert.Symbol = symbol;
|
|
alert.SymbolSet = symbolSet;
|
|
alert.SymbolColor = symbolColor;
|
|
alert.AlertId = alertId;
|
|
alert.ClickAction = alertClickAction;
|
|
alert.AutoCloseTimeOut = alertDurationSeconds;
|
|
alert.TextMarkupEnabled = _TextMarkupEnabled;
|
|
if (markupLinkClickHandler != null)
|
|
alert.MarkupLinkClick += markupLinkClickHandler;
|
|
alert.AlertAnimationDuration = _AlertAnimationDuration;
|
|
alert.PlaySound = _PlaySound;
|
|
alert.ReferenceControl = referenceControl;
|
|
SetColors(alert, alertColor);
|
|
alert.Show();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="image">Image to display on the alert</param>
|
|
/// <param name="position">Alert screen position</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="alertDurationSeconds">Duration of alert in seconds</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
public static void Show(string text, Image image, eDesktopAlertColor alertColor, eAlertPosition position,
|
|
int alertDurationSeconds, long alertId, Action<long> alertClickAction)
|
|
{
|
|
Show(text, image, alertColor, position, alertDurationSeconds, alertId, alertClickAction, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="image">Image to display on the alert</param>
|
|
/// <param name="position">Alert screen position</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="alertDurationSeconds">Duration of alert in seconds</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
/// <param name="markupLinkClickHandler">Text-markup link click event handler.</param>
|
|
public static void Show(string text, Image image, eDesktopAlertColor alertColor, eAlertPosition position,
|
|
int alertDurationSeconds, long alertId, Action<long> alertClickAction, MarkupLinkClickEventHandler markupLinkClickHandler)
|
|
{
|
|
Show(text, image, alertColor, position, alertDurationSeconds, alertId, alertClickAction, markupLinkClickHandler, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Shows desktop alert.
|
|
/// </summary>
|
|
/// <param name="text">Text to show on the alert. Text supports text-markup.</param>
|
|
/// <param name="image">Image to display on the alert</param>
|
|
/// <param name="position">Alert screen position</param>
|
|
/// <param name="alertColor">Alert color</param>
|
|
/// <param name="alertDurationSeconds">Duration of alert in seconds</param>
|
|
/// <param name="alertId">Alert ID used to recognize alert if clicked and specified Action is called</param>
|
|
/// <param name="alertClickAction">Action method to call if alert is clicked.</param>
|
|
/// <param name="markupLinkClickHandler">Text-markup link click event handler.</param>
|
|
/// <param name="referenceControl">Specifies reference control which is used to find target screen alert is displayed on.</param>
|
|
public static void Show(string text, Image image, eDesktopAlertColor alertColor, eAlertPosition position,
|
|
int alertDurationSeconds, long alertId, Action<long> alertClickAction, MarkupLinkClickEventHandler markupLinkClickHandler, Control referenceControl)
|
|
{
|
|
DesktopAlertWindow alert = new DesktopAlertWindow();
|
|
alert.Text = text;
|
|
alert.MaximumSize = Dpi.Size(_MaximumAlertSize);
|
|
alert.AlertPosition = position;
|
|
alert.Image = image;
|
|
alert.AlertId = alertId;
|
|
alert.ClickAction = alertClickAction;
|
|
alert.AutoCloseTimeOut = alertDurationSeconds;
|
|
alert.TextMarkupEnabled = _TextMarkupEnabled;
|
|
if (markupLinkClickHandler != null)
|
|
alert.MarkupLinkClick += markupLinkClickHandler;
|
|
alert.AlertAnimationDuration = _AlertAnimationDuration;
|
|
alert.PlaySound = _PlaySound;
|
|
alert.ReferenceControl = referenceControl;
|
|
SetColors(alert, alertColor);
|
|
alert.Show();
|
|
}
|
|
|
|
private static void SetColors(DesktopAlertWindow w, eDesktopAlertColor c)
|
|
{
|
|
if (c == eDesktopAlertColor.Default)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0x0078D7);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.Black)
|
|
{
|
|
w.BackColor = Color.Black;
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.Blue)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0x5B9BD5);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.BlueGray)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0x44546A);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.DarkBlue)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0x4472C4);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.DarkRed)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0xC00000);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.Gold)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0xFFC000);
|
|
w.ForeColor = Color.Black;
|
|
}
|
|
else if (c == eDesktopAlertColor.Gray)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0xE7E6E6);
|
|
w.ForeColor = Color.Black;
|
|
}
|
|
else if (c == eDesktopAlertColor.Green)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0x375623);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.Orange)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0xCA5010);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
else if (c == eDesktopAlertColor.Red)
|
|
{
|
|
w.BackColor = ColorScheme.GetColor(0xE81123);
|
|
w.ForeColor = Color.White;
|
|
}
|
|
}
|
|
|
|
private static Size _MaximumAlertSize = new Size(400, 128);
|
|
/// <summary>
|
|
/// Indicates maximum alert size.
|
|
/// </summary>
|
|
public static Size MaximumAlertSize
|
|
{
|
|
get { return _MaximumAlertSize; }
|
|
set { _MaximumAlertSize = value; }
|
|
}
|
|
|
|
private static eAlertPosition _AlertPosition = eAlertPosition.BottomRight;
|
|
/// <summary>
|
|
/// Specifies default alert screen position.
|
|
/// </summary>
|
|
public static eAlertPosition AlertPosition
|
|
{
|
|
get { return _AlertPosition; }
|
|
set { _AlertPosition = value; }
|
|
}
|
|
|
|
private static eDesktopAlertColor _AlertColor = eDesktopAlertColor.Default;
|
|
/// <summary>
|
|
/// Specifies default alert color.
|
|
/// </summary>
|
|
public static eDesktopAlertColor AlertColor
|
|
{
|
|
get { return _AlertColor; }
|
|
set { _AlertColor = value; }
|
|
}
|
|
|
|
private static int _AlertAnimationDuration = 200;
|
|
/// <summary>
|
|
/// Gets or sets the total time in milliseconds alert animation takes.
|
|
/// Default value is 200.
|
|
/// </summary>
|
|
public static int AlertAnimationDuration
|
|
{
|
|
get { return _AlertAnimationDuration; }
|
|
set { _AlertAnimationDuration = value; }
|
|
}
|
|
|
|
private static int _AutoCloseTimeOut = 6;
|
|
/// <summary>
|
|
/// Gets or sets time period in seconds after alert closes automatically.
|
|
/// </summary>
|
|
public static int AutoCloseTimeOut
|
|
{
|
|
get { return _AutoCloseTimeOut; }
|
|
set { _AutoCloseTimeOut = value; }
|
|
}
|
|
|
|
private static bool _TextMarkupEnabled = true;
|
|
/// <summary>
|
|
/// Gets or sets whether text-markup can be used in alert text, default value is true.
|
|
/// </summary>
|
|
public static bool TextMarkupEnabled
|
|
{
|
|
get { return _TextMarkupEnabled; }
|
|
set { _TextMarkupEnabled = value; }
|
|
}
|
|
|
|
private static bool _PlaySound = true;
|
|
/// <summary>
|
|
/// Indicates whether alert plays exclamation sound when shown.
|
|
/// </summary>
|
|
public static bool PlaySound
|
|
{
|
|
get { return _PlaySound; }
|
|
set { _PlaySound = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Occurs before alert is displayed and allows access to the alert Window through sender.
|
|
/// </summary>
|
|
[Description("Occurs before alert is displayed and allows access to the alert Window through sender.")]
|
|
public static event EventHandler BeforeAlertDisplayed;
|
|
|
|
/// <summary>
|
|
/// Raises BeforeAlertDisplayed event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
internal static void OnBeforeAlertDisplayed(DesktopAlertWindow w, EventArgs e)
|
|
{
|
|
EventHandler h = BeforeAlertDisplayed;
|
|
if (h != null)
|
|
h(w, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Occurs after alert as been closed.
|
|
/// </summary>
|
|
[Description("Occurs after alert has been closed.")]
|
|
public static event AlertClosedEventHandler AlertClosed;
|
|
|
|
/// <summary>
|
|
/// Raises RemovingToken event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
internal static void OnAlertClosed(object sender, AlertClosedEventArgs e)
|
|
{
|
|
AlertClosedEventHandler handler = AlertClosed;
|
|
if (handler != null)
|
|
handler(sender, e);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Defines delegate for AlertClosed event.
|
|
/// </summary>
|
|
/// <param name="sender">Sender.</param>
|
|
/// <param name="args">Event arguments</param>
|
|
public delegate void AlertClosedEventHandler(object sender, AlertClosedEventArgs args);
|
|
/// <summary>
|
|
/// Defines event arguments for AlertClosed event.
|
|
/// </summary>
|
|
public class AlertClosedEventArgs : EventArgs
|
|
{
|
|
/// <summary>
|
|
/// Specifies alert closure source.
|
|
/// </summary>
|
|
public readonly eAlertClosureSource ClosureSource;
|
|
|
|
public AlertClosedEventArgs(eAlertClosureSource source)
|
|
{
|
|
ClosureSource = source;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Defines predefined desktop alert colors.
|
|
/// </summary>
|
|
public enum eDesktopAlertColor
|
|
{
|
|
Default,
|
|
DarkRed,
|
|
Black,
|
|
Gray,
|
|
BlueGray,
|
|
Blue,
|
|
Orange,
|
|
Gold,
|
|
DarkBlue,
|
|
Green,
|
|
Red
|
|
}
|
|
}
|