#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; /// /// Gets or sets the fixed button height. /// 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; /// /// Gets whether mouse is over the control. /// public bool IsMouseOver { get { return _IsMouseOver; } internal set { if (_IsMouseOver != value) { _IsMouseOver = value; this.InvalidateRender(); } } } private bool _IsMouseDown = false; /// /// Gets whether mouse is pressed on the control. /// 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 = ""; /// /// Gets or sets the text displayed on the face of the button. /// [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; /// /// Gets or sets the image displayed on the face of the button. /// [DefaultValue(null)] public Image Image { get { return _Image; } set { if (_Image != value) { _Image = value; if (_DisabledImage != null) { _DisabledImage.Dispose(); _DisabledImage = null; } this.InvalidateArrange(); } } } /// /// Gets the realized symbol string. /// [Browsable(false)] public string SymbolRealized { get { return _SymbolRealized; } } private string _Symbol = "", _SymbolRealized = ""; /// /// Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. /// [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); } } } /// /// Called when Symbol property has changed. /// /// Old property value /// New property value 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; /// /// Gets or sets the symbol set used to represent the Symbol. /// [Browsable(false), DefaultValue(eSymbolSet.Awesome)] public eSymbolSet SymbolSet { get { return _SymbolSet; } set { if (_SymbolSet != value) { eSymbolSet oldValue = _SymbolSet; _SymbolSet = value; OnSymbolSetChanged(oldValue, value); } } } /// /// Called when SymbolSet property value changes. /// /// Indciates old value /// Indicates new value protected virtual void OnSymbolSetChanged(eSymbolSet oldValue, eSymbolSet newValue) { this.InvalidateArrange(); } private Color _SymbolColor = Color.Empty; /// /// Gets or sets the color of the Symbol. /// [Category("Appearance"), Description("Indicates color of the Symbol.")] public Color SymbolColor { get { return _SymbolColor; } set { _SymbolColor = value; this.InvalidateRender(); } } #endregion } } #endif