using DevComponents.DotNetBar.Rendering; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; namespace DevComponents.DotNetBar.Controls { /// /// Represents the control which displays symbol from symbols library. /// [ToolboxBitmap(typeof(SymbolBox), "Controls.SymbolBox.ico"), ToolboxItem(true)] public class SymbolBox : Control { #region Constructor /// /// Initializes a new instance of the SymbolBox class. /// public SymbolBox() { this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor | ControlStyles.StandardDoubleClick | DisplayHelp.DoubleBufferFlag, true); _BackgroundStyle = new ElementStyle(); _BackgroundStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged); } #endregion #region Implementation protected override void OnPaint(PaintEventArgs e) { if ((this.BackColor.IsEmpty || this.BackColor == Color.Transparent)) { base.OnPaintBackground(e); } if (_BackgroundStyle != null) _BackgroundStyle.SetColorScheme(this.GetColorScheme()); PaintBackground(e); PaintContent(e); base.OnPaint(e); } private void PaintContent(PaintEventArgs e) { float symbolSize = _SymbolSize; Graphics g = e.Graphics; Rectangle r = ElementStyleLayout.GetInnerRect(_BackgroundStyle, this.ClientRectangle); if (symbolSize <= 0) symbolSize = Math.Max(1, Math.Min(r.Width, r.Height) * 72 / g.DpiX - 1); Color symbolColor = _SymbolColor; if (_SymbolColor.IsEmpty) { if (!_BackgroundStyle.TextColor.IsEmpty) symbolColor = _BackgroundStyle.TextColor; else if (!this.ForeColor.IsEmpty) symbolColor = this.ForeColor; else symbolColor = SystemColors.ControlText; } TextDrawing.DrawStringLegacy(g, _SymbolRealized, Symbols.GetFont(symbolSize, _SymbolSet), symbolColor, r, eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter); } protected virtual void PaintBackground(PaintEventArgs e) { Graphics g = e.Graphics; Rectangle r = this.ClientRectangle; ElementStyle style = _BackgroundStyle; if (!this.BackColor.IsEmpty && this.BackColor != Color.Transparent) { DisplayHelp.FillRectangle(g, r, this.BackColor); } if (this.BackgroundImage != null) base.OnPaintBackground(e); if (style.Custom) { SmoothingMode sm = g.SmoothingMode; //if (m_AntiAlias) // g.SmoothingMode = SmoothingMode.HighQuality; ElementStyleDisplayInfo displayInfo = new ElementStyleDisplayInfo(style, e.Graphics, r); ElementStyleDisplay.Paint(displayInfo); //if (m_AntiAlias) // g.SmoothingMode = sm; } } /// /// Returns the color scheme used by control. Color scheme for Office2007 style will be retrieved from the current renderer instead of /// local color scheme referenced by ColorScheme property. /// /// An instance of ColorScheme object. protected virtual ColorScheme GetColorScheme() { BaseRenderer r = Rendering.GlobalManager.Renderer; if (r is Office2007Renderer) return ((Office2007Renderer)r).ColorTable.LegacyColors; return new ColorScheme(); } private ElementStyle _BackgroundStyle = null; /// /// Specifies the background style of the control. /// [Browsable(true), Category("Style"), Description("Gets or sets bar background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ElementStyle BackgroundStyle { get { return _BackgroundStyle; } } /// /// Resets style to default value. Used by windows forms designer. /// [EditorBrowsable(EditorBrowsableState.Never)] public void ResetBackgroundStyle() { _BackgroundStyle.StyleChanged -= new EventHandler(this.VisualPropertyChanged); _BackgroundStyle = new ElementStyle(); _BackgroundStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged); this.Invalidate(); } private void VisualPropertyChanged(object sender, EventArgs e) { this.Invalidate(); } /// /// Gets the realized symbol string. /// [Browsable(false)] public string SymbolRealized { get { return _SymbolRealized; } } private string _Symbol = "\uf015", _SymbolRealized = "\uf015"; /// /// Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. /// [DefaultValue("\uf015"), 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.Invalidate(); } 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.Invalidate(); } 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.Refresh(); } } /// /// Gets whether property should be serialized. /// [EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeSymbolColor() { return !_SymbolColor.IsEmpty; } /// /// Resets property to its default value. /// [EditorBrowsable(EditorBrowsableState.Never)] public void ResetSymbolColor() { this.SymbolColor = Color.Empty; } private float _SymbolSize = 0f; /// /// Indicates the size of the symbol in points. /// [DefaultValue(0f), Category("Appearance"), Description("Indicates the size of the symbol in points.")] public float SymbolSize { get { return _SymbolSize; } set { if (value != _SymbolSize) { float oldValue = _SymbolSize; _SymbolSize = value; OnSymbolSizeChanged(oldValue, value); } } } /// /// Called when SymbolSize property has changed. /// /// Old property value /// New property value protected virtual void OnSymbolSizeChanged(float oldValue, float newValue) { //OnPropertyChanged(new PropertyChangedEventArgs("SymbolSize")); this.Invalidate(); } #endregion } }