495 lines
19 KiB
C#
495 lines
19 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using DevComponents.DotNetBar;
|
|
using DevComponents.DotNetBar.Rendering;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
internal partial class TaskDialogForm : DevComponents.DotNetBar.OfficeForm
|
|
{
|
|
public TaskDialogForm()
|
|
{
|
|
InitializeComponent();
|
|
|
|
Office2007ColorTable table = ((Office2007Renderer)GlobalManager.Renderer).ColorTable;
|
|
bottomPanel.Style.BackColor1.Color = table.Form.BackColor;
|
|
|
|
headerLabel.MarkupLinkClick += new MarkupLinkClickEventHandler(MarkupLinkClick);
|
|
contentLabel.MarkupLinkClick += new MarkupLinkClickEventHandler(MarkupLinkClick);
|
|
footerLabel.MarkupLinkClick += new MarkupLinkClickEventHandler(MarkupLinkClick);
|
|
this.ShowInTaskbar = false;
|
|
}
|
|
|
|
private void MarkupLinkClick(object sender, MarkupLinkClickEventArgs e)
|
|
{
|
|
TaskDialog.InvokeMarkupLinkClick(sender, e);
|
|
}
|
|
|
|
private void TaskDialogForm_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private eTaskDialogBackgroundColor _TaskBackgroundColor = eTaskDialogBackgroundColor.Default;
|
|
/// <summary>
|
|
/// Gets or sets the task-background color.
|
|
/// </summary>
|
|
[DefaultValue(eTaskDialogBackgroundColor.Default)]
|
|
public eTaskDialogBackgroundColor TaskBackgroundColor
|
|
{
|
|
get { return _TaskBackgroundColor; }
|
|
set { _TaskBackgroundColor = value; }
|
|
}
|
|
|
|
private eTaskDialogButton _DefaultButton = eTaskDialogButton.Yes;
|
|
private static readonly int MinimumWidth = 420;
|
|
private static readonly int MinimumHeight = 200;
|
|
public eTaskDialogResult ShowTaskDialog(IWin32Window owner, TaskDialogInfo dialogInfo)
|
|
{
|
|
if (owner != null)
|
|
this.StartPosition = FormStartPosition.CenterParent;
|
|
else
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
|
|
UpdateDialogColor(dialogInfo);
|
|
|
|
int dialogButtonsWidth = Dpi.Width20;
|
|
int footerWidth = 0;
|
|
int contentHeight = Dpi.Height32;
|
|
|
|
this.Text = dialogInfo.Title;
|
|
headerLabel.Text = dialogInfo.Header;
|
|
contentLabel.Text = dialogInfo.Text;
|
|
_DefaultButton = dialogInfo.DefaultButton;
|
|
|
|
if (dialogInfo.TaskDialogIcon == eTaskDialogIcon.None)
|
|
{
|
|
int diff = this.Width - headerLabel.Right;
|
|
headerLabel.Left = headerImage.Left;
|
|
headerLabel.Width = this.Width - diff - headerLabel.Left;
|
|
|
|
diff = this.Width - contentLabel.Right;
|
|
contentLabel.Left = headerImage.Left;
|
|
contentLabel.Width = this.Width - diff - contentLabel.Left;
|
|
|
|
diff = this.Width - buttonsPanel.Right;
|
|
buttonsPanel.Left = headerImage.Left;
|
|
buttonsPanel.Width = this.Width - diff - buttonsPanel.Left;
|
|
headerImage.Visible = false;
|
|
}
|
|
else
|
|
headerImage.Image = TaskDialog.GetImage(dialogInfo.TaskDialogIcon);
|
|
|
|
if (dialogInfo.CheckBoxCommand != null)
|
|
{
|
|
taskCheckBox.Command = dialogInfo.CheckBoxCommand;
|
|
//taskCheckBox.Checked = dialogInfo.CheckBoxCommand.Checked;
|
|
dialogButtonsWidth += taskCheckBox.Width + Dpi.Width12;
|
|
}
|
|
else
|
|
taskCheckBox.Visible = false;
|
|
|
|
if (!string.IsNullOrEmpty(dialogInfo.FooterText))
|
|
{
|
|
footerLabel.Text = dialogInfo.FooterText;
|
|
footerWidth += footerLabel.Width + Dpi.Width12;
|
|
}
|
|
else
|
|
footerLabel.Visible = false;
|
|
|
|
if (dialogInfo.FooterImage != null)
|
|
{
|
|
footerImage.Image = dialogInfo.FooterImage;
|
|
footerWidth += footerImage.Width;
|
|
}
|
|
else
|
|
{
|
|
footerImage.Visible = false;
|
|
footerLabel.Left = footerImage.Left;
|
|
}
|
|
|
|
if (dialogInfo.RadioButtons != null && dialogInfo.RadioButtons.Length > 0)
|
|
{
|
|
foreach (Command command in dialogInfo.RadioButtons)
|
|
{
|
|
CheckBoxItem item = new CheckBoxItem();
|
|
item.CheckBoxStyle = eCheckBoxStyle.RadioButton;
|
|
//item.Checked = command.Checked;
|
|
item.Command = command;
|
|
buttonsPanel.Items.Add(item);
|
|
}
|
|
}
|
|
|
|
if (dialogInfo.Buttons != null && dialogInfo.Buttons.Length > 0)
|
|
{
|
|
foreach (Command command in dialogInfo.Buttons)
|
|
{
|
|
ButtonItem item = new ButtonItem();
|
|
if (command.Image != null)
|
|
{
|
|
item.ButtonStyle = eButtonStyle.ImageAndText;
|
|
item.ImagePosition = eImagePosition.Left;
|
|
}
|
|
|
|
item.Command = command;
|
|
|
|
buttonsPanel.Items.Add(item);
|
|
|
|
ButtonItemLayout.LayoutButton(item);
|
|
footerWidth = Math.Max(footerWidth, item.WidthInternal + buttonsPanel.Left * 2);
|
|
|
|
}
|
|
}
|
|
|
|
if ((dialogInfo.DialogButtons & eTaskDialogButton.Ok) == 0)
|
|
{
|
|
buttonOk.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
dialogButtonsWidth += buttonOk.Width + 3;
|
|
if (dialogInfo.DefaultButton == eTaskDialogButton.Ok)
|
|
this.AcceptButton = buttonOk;
|
|
}
|
|
if ((dialogInfo.DialogButtons & eTaskDialogButton.Cancel) == 0)
|
|
{
|
|
buttonCancel.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
dialogButtonsWidth += buttonCancel.Width + 3;
|
|
this.CancelButton = buttonCancel;
|
|
if (dialogInfo.DefaultButton == eTaskDialogButton.Cancel)
|
|
this.AcceptButton = buttonCancel;
|
|
}
|
|
if ((dialogInfo.DialogButtons & eTaskDialogButton.Yes) == 0)
|
|
{
|
|
buttonYes.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
dialogButtonsWidth += buttonYes.Width + 3;
|
|
if (dialogInfo.DefaultButton == eTaskDialogButton.Yes)
|
|
this.AcceptButton = buttonYes;
|
|
}
|
|
|
|
if ((dialogInfo.DialogButtons & eTaskDialogButton.No) == 0)
|
|
{
|
|
buttonNo.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
dialogButtonsWidth += buttonNo.Width + 3;
|
|
if (this.CancelButton == null)
|
|
this.CancelButton = buttonNo;
|
|
if (dialogInfo.DefaultButton == eTaskDialogButton.No)
|
|
this.AcceptButton = buttonNo;
|
|
}
|
|
if ((dialogInfo.DialogButtons & eTaskDialogButton.Close) == 0)
|
|
{
|
|
buttonClose.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
dialogButtonsWidth += buttonClose.Width + 3;
|
|
if (this.CancelButton == null)
|
|
this.CancelButton = buttonClose;
|
|
else if (dialogInfo.DefaultButton == eTaskDialogButton.Close)
|
|
this.AcceptButton = buttonClose;
|
|
}
|
|
if ((dialogInfo.DialogButtons & eTaskDialogButton.Retry) == 0)
|
|
{
|
|
buttonRetry.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
dialogButtonsWidth += buttonRetry.Width + Dpi.Width3;
|
|
if (dialogInfo.DefaultButton == eTaskDialogButton.Retry)
|
|
this.AcceptButton = buttonRetry;
|
|
}
|
|
|
|
// If only OK button is visible it is cancel button as well
|
|
if (dialogInfo.DialogButtons == eTaskDialogButton.Ok)
|
|
this.CancelButton = buttonOk;
|
|
|
|
if (string.IsNullOrEmpty(dialogInfo.FooterText) && dialogInfo.FooterImage == null)
|
|
{
|
|
footerPanel.Visible = false;
|
|
bottomPanel.Height = flowLayoutPanel1.Height + Dpi.Height4;
|
|
}
|
|
else
|
|
contentHeight += footerImage.Height;
|
|
|
|
this.Width = Math.Max(Dpi.Width(MinimumWidth), Math.Max(footerWidth, dialogButtonsWidth));
|
|
|
|
using (Graphics g = headerLabel.CreateGraphics()) { }
|
|
headerLabel.MaximumSize=new Size(headerLabel.Width, 1000);
|
|
headerLabel.Height=headerLabel.GetPreferredSize(Size.Empty).Height;
|
|
contentHeight += headerLabel.Height + Dpi.Height3;
|
|
|
|
//float dpiY = 96f;
|
|
//using (Graphics g = contentLabel.CreateGraphics()) { dpiY = g.DpiY; }
|
|
contentLabel.Top = headerLabel.Bounds.Bottom + Dpi.Height3;
|
|
contentLabel.MaximumSize = new Size(contentLabel.Width, 1000);
|
|
using (Graphics g = contentLabel.CreateGraphics()) { } // Force handle creation
|
|
contentLabel.Height = contentLabel.GetPreferredSize(Size.Empty).Height; // * (dpiY >= 120f ? 1.05 : 1));
|
|
contentHeight += contentLabel.Height + Dpi.Height6;
|
|
if (contentLabel.IsUsingTextMarkup)
|
|
contentHeight += Dpi.Height8;
|
|
|
|
buttonsPanel.Top = contentLabel.Bottom + Dpi.Height3;
|
|
if (buttonsPanel.Items.Count == 0)
|
|
{
|
|
buttonsPanel.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
using (Graphics g = buttonsPanel.CreateGraphics()) { }
|
|
buttonsPanel.Height = buttonsPanel.GetAutoSizeHeight() + Dpi.Height2;
|
|
contentHeight += buttonsPanel.Height + Dpi.Height6;
|
|
if (string.IsNullOrEmpty(dialogInfo.FooterText) && dialogInfo.FooterImage == null)
|
|
contentHeight += Dpi.Height8;
|
|
}
|
|
|
|
contentHeight += bottomPanel.Height;
|
|
|
|
this.Height = Math.Max(Dpi.Height(MinimumHeight), contentHeight);
|
|
|
|
if (dialogInfo.TaskDialogIcon == eTaskDialogIcon.Help)
|
|
System.Media.SystemSounds.Question.Play();
|
|
else if (dialogInfo.TaskDialogIcon == eTaskDialogIcon.Information)
|
|
System.Media.SystemSounds.Asterisk.Play();
|
|
else
|
|
System.Media.SystemSounds.Exclamation.Play();
|
|
|
|
LocalizeText();
|
|
|
|
ShowDialog(owner);
|
|
|
|
return _Result;
|
|
}
|
|
|
|
protected override void OnShown(EventArgs e)
|
|
{
|
|
if (_DefaultButton == eTaskDialogButton.Cancel && buttonCancel.Visible)
|
|
buttonCancel.Focus();
|
|
else if (_DefaultButton == eTaskDialogButton.Close && buttonClose.Visible)
|
|
buttonClose.Focus();
|
|
else if (_DefaultButton == eTaskDialogButton.No && buttonNo.Visible)
|
|
buttonNo.Focus();
|
|
else if (_DefaultButton == eTaskDialogButton.Ok && buttonOk.Visible)
|
|
buttonOk.Focus();
|
|
else if (_DefaultButton == eTaskDialogButton.Retry && buttonRetry.Visible)
|
|
buttonRetry.Focus();
|
|
else if (_DefaultButton == eTaskDialogButton.Yes && buttonYes.Visible)
|
|
buttonYes.Focus();
|
|
|
|
base.OnShown(e);
|
|
}
|
|
|
|
private void LocalizeText()
|
|
{
|
|
buttonCancel.Text = LocalizationManager.GetLocalizedString(LocalizationKeys.MessageBoxCancelButton, buttonCancel.Text);
|
|
buttonClose.Text = LocalizationManager.GetLocalizedString(LocalizationKeys.MessageBoxCloseButton, buttonClose.Text);
|
|
buttonNo.Text = LocalizationManager.GetLocalizedString(LocalizationKeys.MessageBoxNoButton, buttonNo.Text);
|
|
buttonOk.Text = LocalizationManager.GetLocalizedString(LocalizationKeys.MessageBoxOkButton, buttonOk.Text);
|
|
buttonRetry.Text = LocalizationManager.GetLocalizedString(LocalizationKeys.MessageBoxRetryButton, buttonRetry.Text);
|
|
buttonYes.Text = LocalizationManager.GetLocalizedString(LocalizationKeys.MessageBoxYesButton, buttonYes.Text);
|
|
}
|
|
|
|
private void UpdateDialogColor(TaskDialogInfo dialogInfo)
|
|
{
|
|
eTaskDialogBackgroundColor color = dialogInfo.DialogColor;
|
|
|
|
if (StyleManager.IsMetro(StyleManager.Style))
|
|
color = eTaskDialogBackgroundColor.Default;
|
|
|
|
if (color == eTaskDialogBackgroundColor.Aqua)
|
|
{
|
|
//this.BackColor = ColorScheme.GetColor(0xDBEEF3);
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xDBEEF3);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x205867);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x205867);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.Blue)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xDBE5F1);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x244061);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x244061);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.DarkBlue)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xC6D9F0);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x0F243E);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x0F243E);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.OliveGreen)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xEBF1DD);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x4F6128);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x4F6128);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.Orange)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xFDEADA);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x974806);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x974806);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.Purple)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xE5E0EC);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x3F3151);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x3F3151);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.Red)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xF2DCDB);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x632423);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x632423);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.Silver)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xF2F2F2);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x0C0C0C);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x0C0C0C);
|
|
}
|
|
else if (color == eTaskDialogBackgroundColor.Tan)
|
|
{
|
|
bottomPanel.Style.BackColor1.Color = ColorScheme.GetColor(0xDDD9C3);
|
|
headerLabel.ForeColor = ColorScheme.GetColor(0x1D1B10);
|
|
contentLabel.ForeColor = ColorScheme.GetColor(0x1D1B10);
|
|
}
|
|
|
|
if (color != eTaskDialogBackgroundColor.Default)
|
|
{
|
|
bottomPanel.Style.BorderColor.Color = headerLabel.ForeColor;
|
|
}
|
|
|
|
if (StyleManager.IsMetro(StyleManager.Style))
|
|
{
|
|
this.BackColor = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.Form.BackColor;
|
|
//bottomPanel.Style.BackColor1.Color = this.BackColor;
|
|
}
|
|
}
|
|
|
|
private eTaskDialogResult _Result = eTaskDialogResult.None;
|
|
/// <summary>
|
|
/// Gets the task-dialog result
|
|
/// </summary>
|
|
public eTaskDialogResult Result
|
|
{
|
|
get { return _Result; }
|
|
}
|
|
|
|
private bool _AntiAlias = true;
|
|
/// <summary>
|
|
/// Gets or sets the anti-alias text-rendering setting for the controls.
|
|
/// </summary>
|
|
public bool AntiAlias
|
|
{
|
|
get { return _AntiAlias; }
|
|
set
|
|
{
|
|
_AntiAlias = value;
|
|
headerLabel.AntiAlias = value;
|
|
contentLabel.AntiAlias = value;
|
|
buttonsPanel.AntiAlias = value;
|
|
buttonOk.AntiAlias = value;
|
|
buttonCancel.AntiAlias = value;
|
|
buttonYes.AntiAlias = value;
|
|
buttonNo.AntiAlias = value;
|
|
buttonRetry.AntiAlias = value;
|
|
footerLabel.AntiAlias = value;
|
|
taskCheckBox.AntiAlias = value;
|
|
}
|
|
}
|
|
|
|
private void buttonOk_Click(object sender, EventArgs e)
|
|
{
|
|
CloseDialog(eTaskDialogResult.Ok);
|
|
}
|
|
|
|
private void buttonYes_Click(object sender, EventArgs e)
|
|
{
|
|
CloseDialog(eTaskDialogResult.Yes);
|
|
}
|
|
|
|
private void buttonNo_Click(object sender, EventArgs e)
|
|
{
|
|
CloseDialog(eTaskDialogResult.No);
|
|
}
|
|
|
|
private void buttonCancel_Click(object sender, EventArgs e)
|
|
{
|
|
CloseDialog(eTaskDialogResult.Cancel);
|
|
}
|
|
|
|
private void buttonRetry_Click(object sender, EventArgs e)
|
|
{
|
|
CloseDialog(eTaskDialogResult.Retry);
|
|
}
|
|
|
|
private void buttonClose_Click(object sender, EventArgs e)
|
|
{
|
|
CloseDialog(eTaskDialogResult.Close);
|
|
}
|
|
|
|
internal void CloseDialog(eTaskDialogResult result)
|
|
{
|
|
_Result = result;
|
|
this.Close();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Defines TaskDialog colors.
|
|
/// </summary>
|
|
public enum eTaskDialogBackgroundColor
|
|
{
|
|
/// <summary>
|
|
/// Task dialog will use default background as specified by current theme.
|
|
/// </summary>
|
|
Default,
|
|
/// <summary>
|
|
/// Task dialog will use silver background color.
|
|
/// </summary>
|
|
Silver,
|
|
/// <summary>
|
|
/// Task dialog will use tan background color.
|
|
/// </summary>
|
|
Tan,
|
|
/// <summary>
|
|
/// Task dialog will use dark-blue background color.
|
|
/// </summary>
|
|
DarkBlue,
|
|
/// <summary>
|
|
/// Task dialog will use blue background color.
|
|
/// </summary>
|
|
Blue,
|
|
/// <summary>
|
|
/// Task dialog will use red background color.
|
|
/// </summary>
|
|
Red,
|
|
/// <summary>
|
|
/// Task dialog will use olive-green background color.
|
|
/// </summary>
|
|
OliveGreen,
|
|
/// <summary>
|
|
/// Task dialog will use purple background color.
|
|
/// </summary>
|
|
Purple,
|
|
/// <summary>
|
|
/// Task dialog will use aqua background color.
|
|
/// </summary>
|
|
Aqua,
|
|
/// <summary>
|
|
/// Task dialog will use orange background color.
|
|
/// </summary>
|
|
Orange
|
|
}
|
|
} |