369 lines
12 KiB
C#
369 lines
12 KiB
C#
#if FRAMEWORK20
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.ComponentModel;
|
|
using System.Collections;
|
|
using DevComponents.DotNetBar;
|
|
using DevComponents.DotNetBar.Rendering;
|
|
|
|
namespace DevComponents.Editors
|
|
{
|
|
public class VisualButton : VisualButtonBase
|
|
{
|
|
#region Private Variables
|
|
|
|
#endregion
|
|
|
|
#region Events
|
|
#endregion
|
|
|
|
#region Constructor
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
public override void PerformLayout(PaintInfo pi)
|
|
{
|
|
Size size = new Size(0, (_Height > 0 ? Dpi.Height(_Height) : pi.AvailableSize.Height));
|
|
Graphics g = pi.Graphics;
|
|
|
|
size.Width += Dpi.Width6; // Border 2 pixels on each side and 1 pixels of padding between border and content
|
|
|
|
if (_Text.Length > 0)
|
|
{
|
|
Size textSize = TextDrawing.MeasureString(g, _Text, pi.DefaultFont);
|
|
size.Width += textSize.Width;
|
|
if (_Image != null)
|
|
size.Width += Dpi.Width4; // Padding between text and image
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(_SymbolRealized))
|
|
{
|
|
size.Width += size.Height;
|
|
}
|
|
else if (_Image != null)
|
|
{
|
|
size.Width += Dpi.Width(_Image.Width);
|
|
}
|
|
|
|
if (_Text.Length == 0 && _Image == null && string.IsNullOrEmpty(_SymbolRealized))
|
|
size.Width += Dpi.Width9;
|
|
|
|
this.Size = size;
|
|
this.CalculatedSize = size;
|
|
base.PerformLayout(pi);
|
|
}
|
|
|
|
private int _Height = 0;
|
|
/// <summary>
|
|
/// Gets or sets the fixed button height.
|
|
/// </summary>
|
|
public int Height
|
|
{
|
|
get { return _Height; }
|
|
set { _Height = value; }
|
|
}
|
|
|
|
protected override void OnPaint(PaintInfo p)
|
|
{
|
|
Graphics g = p.Graphics;
|
|
Rectangle r = this.RenderBounds;
|
|
PaintButtonBackground(p);
|
|
|
|
Rectangle contentRect = r;
|
|
contentRect.Inflate(-3, -3); // Two pixels border + 1 pixels padding for content
|
|
if (!string.IsNullOrEmpty(_Text))
|
|
{
|
|
TextDrawing.DrawString(g, _Text, p.DefaultFont, GetIsEnabled(p) ? p.ForeColor : p.DisabledForeColor, contentRect, eTextFormat.Default | eTextFormat.VerticalCenter);
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(_SymbolRealized))
|
|
{
|
|
Office2007ButtonItemStateColorTable ct = GetOffice2007StateColorTable(p);
|
|
Color symbolColor=(GetIsEnabled(p) ? p.ForeColor : p.DisabledForeColor);
|
|
if (!_SymbolColor.IsEmpty)
|
|
symbolColor = _SymbolColor;
|
|
else if (!ct.Text.IsEmpty)
|
|
symbolColor = ct.Text;
|
|
float symbolSize = Math.Max(1, Math.Min(r.Width, r.Height) * 72 / g.DpiX - 1.5f);
|
|
Rectangle sr = contentRect;
|
|
if (!string.IsNullOrEmpty(_Text))
|
|
sr = new Rectangle(contentRect.Right - contentRect.Height, contentRect.Y, contentRect.Height, contentRect.Height);
|
|
sr.Inflate(3, 3);
|
|
TextDrawing.DrawStringLegacy(g, _SymbolRealized, Symbols.GetFont(symbolSize, _SymbolSet),
|
|
symbolColor, sr, eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter);
|
|
}
|
|
else if (_Image != null)
|
|
{
|
|
Image image = GetIsEnabled(p) ? _Image : GetDisabledImage();
|
|
Size imageSize = Dpi.ImageSize(image.Size);
|
|
g.DrawImage(image, new Rectangle(contentRect.Right - (imageSize.Width + (string.IsNullOrEmpty(_Text)?(contentRect.Width - imageSize.Width) / 2:0)),
|
|
contentRect.Y + (contentRect.Height - imageSize.Height) / 2, imageSize.Width, imageSize.Height));
|
|
}
|
|
|
|
base.OnPaint(p);
|
|
}
|
|
|
|
protected virtual void PaintButtonBackground(PaintInfo p)
|
|
{
|
|
PaintButtonBackground(p, GetOffice2007StateColorTable(p));
|
|
}
|
|
|
|
protected virtual void PaintButtonBackground(PaintInfo p, Office2007ButtonItemStateColorTable ct)
|
|
{
|
|
Graphics g = p.Graphics;
|
|
Rectangle r = this.RenderBounds;
|
|
if (RenderBackground(p))
|
|
Office2007ButtonItemPainter.PaintBackground(g, ct, r, RoundRectangleShapeDescriptor.RectangleShape);
|
|
}
|
|
|
|
private bool RenderBackground(PaintInfo p)
|
|
{
|
|
if (RenderDefaultBackground) return true;
|
|
|
|
if (!p.MouseOver && !this.IsMouseDown && !this.IsMouseOver && !this.Checked || !this.GetIsEnabled())
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
protected Office2007ButtonItemStateColorTable GetOffice2007StateColorTable(PaintInfo p)
|
|
{
|
|
if (GlobalManager.Renderer is Office2007Renderer)
|
|
{
|
|
Office2007ColorTable ct = ((Office2007Renderer)GlobalManager.Renderer).ColorTable;
|
|
Office2007ButtonItemColorTable buttonColorTable = ct.ButtonItemColors[Enum.GetName(typeof(eButtonColor), eButtonColor.OrangeWithBackground)];
|
|
if (!this.GetIsEnabled(p))
|
|
return buttonColorTable.Disabled;
|
|
else if (this.IsMouseDown)
|
|
return buttonColorTable.Pressed;
|
|
else if (this.IsMouseOver)
|
|
return buttonColorTable.MouseOver;
|
|
else if (this.Checked)
|
|
return buttonColorTable.Checked;
|
|
else
|
|
return buttonColorTable.Default;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
protected override void OnMouseEnter()
|
|
{
|
|
if (this.GetIsEnabled())
|
|
this.IsMouseOver = true;
|
|
base.OnMouseEnter();
|
|
}
|
|
|
|
protected override void OnMouseLeave()
|
|
{
|
|
this.IsMouseOver = false;
|
|
base.OnMouseLeave();
|
|
}
|
|
|
|
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
|
|
{
|
|
if (e.Button == System.Windows.Forms.MouseButtons.Left)
|
|
{
|
|
this.IsMouseDown = true;
|
|
}
|
|
base.OnMouseDown(e);
|
|
}
|
|
|
|
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
|
|
{
|
|
if (e.Button == System.Windows.Forms.MouseButtons.Left)
|
|
this.IsMouseDown = false;
|
|
base.OnMouseUp(e);
|
|
}
|
|
|
|
private bool _IsMouseOver = false;
|
|
/// <summary>
|
|
/// Gets whether mouse is over the control.
|
|
/// </summary>
|
|
public bool IsMouseOver
|
|
{
|
|
get { return _IsMouseOver; }
|
|
internal set
|
|
{
|
|
if (_IsMouseOver != value)
|
|
{
|
|
_IsMouseOver = value;
|
|
this.InvalidateRender();
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool _IsMouseDown = false;
|
|
/// <summary>
|
|
/// Gets whether mouse is pressed on the control.
|
|
/// </summary>
|
|
public bool IsMouseDown
|
|
{
|
|
get { return _IsMouseDown; }
|
|
internal set
|
|
{
|
|
if (_IsMouseDown != value)
|
|
{
|
|
_IsMouseDown = value;
|
|
this.InvalidateRender();
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool _Checked;
|
|
public bool Checked
|
|
{
|
|
get { return _Checked; }
|
|
set
|
|
{
|
|
if (_Checked != value)
|
|
{
|
|
_Checked = value;
|
|
this.InvalidateRender();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private string _Text = "";
|
|
/// <summary>
|
|
/// Gets or sets the text displayed on the face of the button.
|
|
/// </summary>
|
|
[DefaultValue("")]
|
|
public string Text
|
|
{
|
|
get { return _Text; }
|
|
set
|
|
{
|
|
if (value == null) value = "";
|
|
if (_Text != value)
|
|
{
|
|
_Text = value;
|
|
this.InvalidateArrange();
|
|
}
|
|
}
|
|
}
|
|
|
|
private Image GetDisabledImage()
|
|
{
|
|
if (_DisabledImage == null && _Image != null)
|
|
{
|
|
_DisabledImage = ImageHelper.CreateGrayScaleImage(_Image as Bitmap);
|
|
}
|
|
|
|
return _DisabledImage;
|
|
}
|
|
|
|
private Image _DisabledImage = null;
|
|
private Image _Image = null;
|
|
/// <summary>
|
|
/// Gets or sets the image displayed on the face of the button.
|
|
/// </summary>
|
|
[DefaultValue(null)]
|
|
public Image Image
|
|
{
|
|
get { return _Image; }
|
|
set
|
|
{
|
|
if (_Image != value)
|
|
{
|
|
_Image = value;
|
|
if (_DisabledImage != null)
|
|
{
|
|
_DisabledImage.Dispose();
|
|
_DisabledImage = null;
|
|
}
|
|
this.InvalidateArrange();
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the realized symbol string.
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public string SymbolRealized
|
|
{
|
|
get { return _SymbolRealized; }
|
|
}
|
|
private string _Symbol = "", _SymbolRealized = "";
|
|
/// <summary>
|
|
/// Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting.
|
|
/// </summary>
|
|
[DefaultValue(""), Category("Appearance"), Description("Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting.")]
|
|
[Editor("DevComponents.DotNetBar.Design.SymbolTypeEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
|
|
public string Symbol
|
|
{
|
|
get { return _Symbol; }
|
|
set
|
|
{
|
|
if (value != _Symbol)
|
|
{
|
|
string oldValue = _Symbol;
|
|
_Symbol = value;
|
|
OnSymbolChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when Symbol property has changed.
|
|
/// </summary>
|
|
/// <param name="oldValue">Old property value</param>
|
|
/// <param name="newValue">New property value</param>
|
|
protected virtual void OnSymbolChanged(string oldValue, string newValue)
|
|
{
|
|
if (string.IsNullOrEmpty(newValue))
|
|
_SymbolRealized = "";
|
|
else
|
|
_SymbolRealized = Symbols.GetSymbol(newValue);
|
|
//OnPropertyChanged(new PropertyChangedEventArgs("Symbol"));
|
|
this.InvalidateArrange();
|
|
}
|
|
|
|
private eSymbolSet _SymbolSet = eSymbolSet.Awesome;
|
|
/// <summary>
|
|
/// Gets or sets the symbol set used to represent the Symbol.
|
|
/// </summary>
|
|
[Browsable(false), DefaultValue(eSymbolSet.Awesome)]
|
|
public eSymbolSet SymbolSet
|
|
{
|
|
get { return _SymbolSet; }
|
|
set
|
|
{
|
|
if (_SymbolSet != value)
|
|
{
|
|
eSymbolSet oldValue = _SymbolSet;
|
|
_SymbolSet = value;
|
|
OnSymbolSetChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Called when SymbolSet property value changes.
|
|
/// </summary>
|
|
/// <param name="oldValue">Indciates old value</param>
|
|
/// <param name="newValue">Indicates new value</param>
|
|
protected virtual void OnSymbolSetChanged(eSymbolSet oldValue, eSymbolSet newValue)
|
|
{
|
|
this.InvalidateArrange();
|
|
}
|
|
|
|
private Color _SymbolColor = Color.Empty;
|
|
/// <summary>
|
|
/// Gets or sets the color of the Symbol.
|
|
/// </summary>
|
|
[Category("Appearance"), Description("Indicates color of the Symbol.")]
|
|
public Color SymbolColor
|
|
{
|
|
get { return _SymbolColor; }
|
|
set { _SymbolColor = value; this.InvalidateRender(); }
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|
|
#endif
|
|
|