2258 lines
		
	
	
		
			89 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			2258 lines
		
	
	
		
			89 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using System.ComponentModel;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
using System.Windows.Forms;
 | 
						|
using DevComponents.UI.ContentManager;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for LabelItem.
 | 
						|
	/// </summary>
 | 
						|
    [ToolboxItem(false), DesignTimeVisible(false), DefaultEvent("Click"), Designer("DevComponents.DotNetBar.Design.SimpleBaseItemDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
 | 
						|
    public class LabelItem : BaseItem, IBlockExtended
 | 
						|
    {
 | 
						|
        #region Private Variables
 | 
						|
        internal const eBorderSide DEFAULT_BORDERSIDE = eBorderSide.Top | eBorderSide.Bottom | eBorderSide.Left | eBorderSide.Right;
 | 
						|
        private eBorderType m_BorderType=eBorderType.None;
 | 
						|
		private Color m_BackColor=Color.Empty;
 | 
						|
		private Color m_ForeColor=Color.Empty;
 | 
						|
		private Color m_SingleLineColor=SystemColors.ControlDark;
 | 
						|
		private bool m_SingleLineColorCustom=false;
 | 
						|
		private System.Drawing.StringAlignment m_TextAlignment=System.Drawing.StringAlignment.Near;
 | 
						|
		private System.Drawing.StringAlignment m_TextLineAlignment=System.Drawing.StringAlignment.Center;
 | 
						|
		private System.Drawing.Font m_Font=null;
 | 
						|
		private bool m_DividerStyle=false;
 | 
						|
 | 
						|
		private int m_PaddingLeft=0, m_PaddingRight=0, m_PaddingTop=0, m_PaddingBottom=0;
 | 
						|
		private int m_Width=0, m_Height=0;
 | 
						|
		private bool m_WordWrap=false;
 | 
						|
 | 
						|
		private eImagePosition m_ImagePosition;
 | 
						|
		private System.Drawing.Image m_Image;
 | 
						|
		private System.Drawing.Image m_ImageCachedIdx=null;
 | 
						|
        private System.Drawing.Image m_DisabledImage = null;
 | 
						|
        private System.Drawing.Icon m_DisabledIcon = null;
 | 
						|
		System.Drawing.Icon m_Icon=null;
 | 
						|
		private int m_ImageIndex=-1;
 | 
						|
		private ItemPaintArgs _ItemPaintArgs=null;
 | 
						|
		//private const int ImageTextSpacing=2;
 | 
						|
        private eBorderSide m_BorderSide = DEFAULT_BORDERSIDE;
 | 
						|
        private bool m_ShowPrefix = false;
 | 
						|
        internal bool SuspendPaint = false;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Events
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example:
 | 
						|
        /// <a name="MyLink">Markup link</a>
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when text markup link is clicked. Markup links can be created using a tag.")]
 | 
						|
        public event MarkupLinkClickEventHandler MarkupLinkClick;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
        private int _ImageTextSpacing = 2;
 | 
						|
        /// <summary>
 | 
						|
        /// Specifies spacing between label image and text.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(2), Category("Appearance"), Description("Specifies spacing between label image and text.")]
 | 
						|
        public int ImageTextSpacing
 | 
						|
        {
 | 
						|
            get { return _ImageTextSpacing; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _ImageTextSpacing)
 | 
						|
                {
 | 
						|
                    int oldValue = _ImageTextSpacing;
 | 
						|
                    _ImageTextSpacing = value;
 | 
						|
                    OnImageTextSpacingChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Called when ImageTextSpacing property has changed.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="oldValue">Old property value</param>
 | 
						|
        /// <param name="newValue">New property value</param>
 | 
						|
        protected virtual void OnImageTextSpacingChanged(int oldValue, int newValue)
 | 
						|
        {
 | 
						|
            //OnPropertyChanged(new PropertyChangedEventArgs("ImageTextSpacing"));
 | 
						|
            NeedRecalcSize = true;
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
        public LabelItem():this("","") {}
 | 
						|
		public LabelItem(string sName):this(sName,""){}
 | 
						|
		public LabelItem(string sName, string ItemText):base(sName,ItemText)
 | 
						|
		{
 | 
						|
			//this.CanCustomize=false;
 | 
						|
			this.IsAccessible=false;
 | 
						|
		}
 | 
						|
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            if (BarUtilities.DisposeItemImages && !this.DesignMode)
 | 
						|
            {
 | 
						|
                BarUtilities.DisposeImage(ref m_Image);
 | 
						|
                BarUtilities.DisposeImage(ref m_ImageCachedIdx);
 | 
						|
                BarUtilities.DisposeImage(ref m_Icon);
 | 
						|
            }
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
		public override BaseItem Copy()
 | 
						|
		{
 | 
						|
			LabelItem copy=new LabelItem(m_Name);
 | 
						|
			this.CopyToItem(copy);
 | 
						|
 | 
						|
			return copy;
 | 
						|
		}
 | 
						|
 | 
						|
        internal void InternalCopyToItem(LabelItem copy)
 | 
						|
        {
 | 
						|
            CopyToItem(copy);
 | 
						|
        }
 | 
						|
 | 
						|
	    protected override void CopyToItem(BaseItem copy)
 | 
						|
		{
 | 
						|
			LabelItem objCopy=copy as LabelItem;
 | 
						|
			base.CopyToItem(objCopy);
 | 
						|
 | 
						|
			objCopy.BorderType=m_BorderType;
 | 
						|
            objCopy.BorderSide = m_BorderSide;
 | 
						|
			objCopy.BackColor=m_BackColor;
 | 
						|
			objCopy.ForeColor=m_ForeColor;
 | 
						|
			if(m_SingleLineColorCustom)
 | 
						|
				objCopy.SingleLineColor=m_SingleLineColor;
 | 
						|
			objCopy.WidthInternal=this.WidthInternal;
 | 
						|
			objCopy.HeightInternal=this.HeightInternal;
 | 
						|
			objCopy.TextAlignment=this.TextAlignment;
 | 
						|
			objCopy.TextLineAlignment=this.TextLineAlignment;
 | 
						|
			objCopy.Font=m_Font;
 | 
						|
			objCopy.PaddingBottom=m_PaddingBottom;
 | 
						|
			objCopy.PaddingLeft=m_PaddingLeft;
 | 
						|
			objCopy.PaddingRight=m_PaddingRight;
 | 
						|
			objCopy.PaddingTop=m_PaddingTop;
 | 
						|
            if (this.Image != null)
 | 
						|
                objCopy.Image = (Image) this.Image.Clone();
 | 
						|
            objCopy.ImageIndex = this.ImageIndex;
 | 
						|
            objCopy.ImagePosition = this.ImagePosition;
 | 
						|
            objCopy.WordWrap = this.WordWrap;
 | 
						|
            objCopy.DividerStyle = this.DividerStyle;
 | 
						|
            objCopy.EnableMarkup = this.EnableMarkup;
 | 
						|
            objCopy.Width = this.Width;
 | 
						|
            objCopy.Height = this.Height;
 | 
						|
            objCopy.Symbol = _Symbol;
 | 
						|
            objCopy.SymbolSet = _SymbolSet;
 | 
						|
            objCopy.SymbolSize = _SymbolSize;
 | 
						|
            objCopy.SymbolColor = _SymbolColor;
 | 
						|
		}
 | 
						|
 | 
						|
        public override void Paint(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            if (this.SuspendLayout || !IsRendered)
 | 
						|
                return;
 | 
						|
            
 | 
						|
            _ItemPaintArgs = pa;
 | 
						|
            System.Drawing.Graphics g = pa.Graphics;
 | 
						|
 | 
						|
            CompositeImage image = null;
 | 
						|
            Size imageSize = Size.Empty;
 | 
						|
 | 
						|
            bool isSymbolImage = false;
 | 
						|
            if (string.IsNullOrEmpty(this.SymbolRealized))
 | 
						|
            {
 | 
						|
                image = this.GetImage();
 | 
						|
                if (image != null)
 | 
						|
                    imageSize = image.Size;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                isSymbolImage = true;
 | 
						|
                Font symFont = Symbols.GetFont(this.SymbolSize, this.SymbolSet);
 | 
						|
                imageSize = TextDrawing.MeasureString(g, this.SymbolRealized, symFont);
 | 
						|
                int descent = (int)Math.Ceiling((symFont.FontFamily.GetCellDescent(symFont.Style) *
 | 
						|
                    symFont.Size / symFont.FontFamily.GetEmHeight(symFont.Style)));
 | 
						|
                imageSize.Height -= descent;
 | 
						|
            }
 | 
						|
 | 
						|
            Rectangle thisRect = this.DisplayRectangle;
 | 
						|
            Rectangle rClip = Rectangle.Empty;
 | 
						|
            System.Windows.Forms.Border3DSide borderside;
 | 
						|
            if (m_DividerStyle)
 | 
						|
            {
 | 
						|
                borderside = System.Windows.Forms.Border3DSide.Top;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (m_BorderSide == eBorderSide.All)
 | 
						|
                    borderside = (System.Windows.Forms.Border3DSide.Left |
 | 
						|
                    System.Windows.Forms.Border3DSide.Right | System.Windows.Forms.Border3DSide.Top |
 | 
						|
                    System.Windows.Forms.Border3DSide.Bottom);
 | 
						|
                else
 | 
						|
                    borderside = (((m_BorderSide & eBorderSide.Left) != 0) ? System.Windows.Forms.Border3DSide.Left : 0) |
 | 
						|
                    (((m_BorderSide & eBorderSide.Right) != 0) ? System.Windows.Forms.Border3DSide.Right : 0) |
 | 
						|
                    (((m_BorderSide & eBorderSide.Top) != 0) ? System.Windows.Forms.Border3DSide.Top : 0) |
 | 
						|
                    (((m_BorderSide & eBorderSide.Bottom) != 0) ? System.Windows.Forms.Border3DSide.Bottom : 0);
 | 
						|
            }
 | 
						|
 | 
						|
            if (!(pa.ContainerControl is LabelX))
 | 
						|
                DisplayHelp.FillRectangle(g, this.DisplayRectangle, m_BackColor, Color.Empty);
 | 
						|
 | 
						|
            if (m_DividerStyle)
 | 
						|
            {
 | 
						|
                System.Windows.Forms.Control ctrl = this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
                System.Windows.Forms.RightToLeft rtl = System.Windows.Forms.RightToLeft.No;
 | 
						|
                if (ctrl != null && ctrl.RightToLeft == System.Windows.Forms.RightToLeft.Yes)
 | 
						|
                    rtl = System.Windows.Forms.RightToLeft.Yes;
 | 
						|
 | 
						|
                bool disposeFont = false;
 | 
						|
                Font font = GetFont(out disposeFont);
 | 
						|
                Size sz = TextDrawing.MeasureString(g, m_Text, font, m_Rect.Width, this.GetStringFormat());
 | 
						|
                if (disposeFont) font.Dispose();
 | 
						|
                sz.Width += 4;
 | 
						|
                if (sz.Width > thisRect.Width)
 | 
						|
                    sz.Width = thisRect.Width;
 | 
						|
                rClip = new Rectangle(thisRect.X, thisRect.Y, (int)sz.Width, (int)sz.Height);
 | 
						|
                if (m_TextAlignment == StringAlignment.Center)
 | 
						|
                    rClip.Offset((thisRect.Width - (int)sz.Width) / 2, 0);
 | 
						|
                else if (m_TextAlignment == StringAlignment.Far && rtl == System.Windows.Forms.RightToLeft.No || m_TextAlignment == StringAlignment.Near && rtl == System.Windows.Forms.RightToLeft.Yes)
 | 
						|
                    rClip.Offset(thisRect.Width - rClip.Width, 0);
 | 
						|
                if (m_TextLineAlignment == StringAlignment.Center)
 | 
						|
                    rClip.Offset(0, (thisRect.Height - rClip.Height) / 2);
 | 
						|
                else if (m_TextLineAlignment == StringAlignment.Far && rtl == System.Windows.Forms.RightToLeft.No || m_TextLineAlignment == StringAlignment.Near && rtl == System.Windows.Forms.RightToLeft.Yes)
 | 
						|
                    rClip.Offset(0, thisRect.Height - rClip.Height);
 | 
						|
            }
 | 
						|
            
 | 
						|
            switch (m_BorderType)
 | 
						|
            {
 | 
						|
                case eBorderType.Bump:
 | 
						|
                    if (m_DividerStyle)
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect.X, m_Rect.Y + m_Rect.Height / 2, m_Rect.Width, 2, System.Windows.Forms.Border3DStyle.Bump, borderside);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect, System.Windows.Forms.Border3DStyle.Bump, borderside);
 | 
						|
                        thisRect.Inflate(-2, -2);
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                case eBorderType.Etched:
 | 
						|
                    if (m_DividerStyle)
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect.X, m_Rect.Y + m_Rect.Height / 2, m_Rect.Width, 2, System.Windows.Forms.Border3DStyle.Etched, borderside);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect, System.Windows.Forms.Border3DStyle.Etched, borderside);
 | 
						|
                        thisRect.Inflate(-2, -2);
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                case eBorderType.Raised:
 | 
						|
                case eBorderType.RaisedInner:
 | 
						|
                    if (m_DividerStyle)
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect.X, m_Rect.Y + m_Rect.Height / 2, m_Rect.Width, 2, System.Windows.Forms.Border3DStyle.RaisedInner, borderside);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect, System.Windows.Forms.Border3DStyle.RaisedInner, borderside);
 | 
						|
                        thisRect.Inflate(-2, -2);
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                case eBorderType.Sunken:
 | 
						|
                    if (m_DividerStyle)
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect.X, m_Rect.Y + m_Rect.Height / 2, m_Rect.Width, 2, System.Windows.Forms.Border3DStyle.SunkenOuter, borderside);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.ControlPaint.DrawBorder3D(g, m_Rect, System.Windows.Forms.Border3DStyle.SunkenOuter, borderside);
 | 
						|
                        thisRect.Inflate(-2, -2);
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                case eBorderType.SingleLine:
 | 
						|
                    if (m_DividerStyle)
 | 
						|
                    {
 | 
						|
                        g.DrawLine(new Pen(GetSingleLineColor(), 1), m_Rect.X, m_Rect.Y + m_Rect.Height / 2, m_Rect.Right, m_Rect.Y + m_Rect.Height / 2);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        BarFunctions.DrawBorder(g, eBorderType.SingleLine, m_Rect, GetSingleLineColor(), m_BorderSide, DashStyle.Solid, 1);
 | 
						|
                        thisRect.Inflate(-1, -1);
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                case eBorderType.DoubleLine:
 | 
						|
                    {
 | 
						|
                        BarFunctions.DrawBorder(g, eBorderType.DoubleLine, m_Rect, GetSingleLineColor());
 | 
						|
                        thisRect.Inflate(-2, -2);
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                default:
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
 | 
						|
            if (m_DividerStyle)
 | 
						|
                g.FillRectangle(new SolidBrush(m_BackColor), rClip);
 | 
						|
 | 
						|
            eOrientation orientation = this.Orientation;
 | 
						|
            if (_TextOrientation == eOrientation.Vertical) orientation = _TextOrientation;
 | 
						|
 | 
						|
            if (orientation == eOrientation.Horizontal)
 | 
						|
                thisRect.X += m_PaddingLeft;
 | 
						|
            else
 | 
						|
                thisRect.Y += m_PaddingLeft;
 | 
						|
 | 
						|
            if (orientation == eOrientation.Horizontal)
 | 
						|
                thisRect.Width -= (m_PaddingLeft + m_PaddingRight);
 | 
						|
            else
 | 
						|
                thisRect.Width -= (m_PaddingTop + m_PaddingBottom);
 | 
						|
            thisRect.Y += m_PaddingTop;
 | 
						|
            if (orientation == eOrientation.Horizontal)
 | 
						|
                thisRect.Height -= (m_PaddingTop + m_PaddingBottom);
 | 
						|
            else
 | 
						|
                thisRect.Height -= (m_PaddingLeft + m_PaddingRight);
 | 
						|
 | 
						|
            Color textColor = GetTextColor(pa);
 | 
						|
            Color symbolColor = textColor;
 | 
						|
            if (!this.SymbolColor.IsEmpty) symbolColor = this.SymbolColor;
 | 
						|
 | 
						|
            if (image != null || isSymbolImage)
 | 
						|
            {
 | 
						|
                switch (m_ImagePosition)
 | 
						|
                {
 | 
						|
                    case eImagePosition.Left:
 | 
						|
                        {
 | 
						|
                            if (orientation == eOrientation.Horizontal)
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.X + ImageTextSpacing, (thisRect.Y + (thisRect.Height - imageSize.Height) / 2),0,0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                   image.DrawImage(g, new Rectangle(thisRect.X + ImageTextSpacing, (thisRect.Y + (thisRect.Height - imageSize.Height) / 2), imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.X += (imageSize.Width + ImageTextSpacing * 2);
 | 
						|
                                thisRect.Width -= (imageSize.Width + ImageTextSpacing * 2);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.X + (thisRect.Width - imageSize.Height) / 2, thisRect.Y + ImageTextSpacing, 0, 0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                    image.DrawImage(g, new Rectangle(thisRect.X + (thisRect.Width - imageSize.Height) / 2, thisRect.Y + ImageTextSpacing, imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.Y += (imageSize.Height + ImageTextSpacing * 2);
 | 
						|
                                thisRect.Height -= (imageSize.Height + ImageTextSpacing * 2);
 | 
						|
                            }
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    case eImagePosition.Right:
 | 
						|
                        {
 | 
						|
                            if (orientation == eOrientation.Horizontal)
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.Right - imageSize.Width - ImageTextSpacing, (thisRect.Y + (thisRect.Height - imageSize.Height) / 2), 0, 0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                    image.DrawImage(g, new Rectangle(thisRect.Right - imageSize.Width - ImageTextSpacing, (thisRect.Y + (thisRect.Height - imageSize.Height) / 2), imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.Width -= (imageSize.Width + ImageTextSpacing * 2);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.X, thisRect.Bottom - imageSize.Height - ImageTextSpacing, 0, 0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                    image.DrawImage(g, new Rectangle(thisRect.X, thisRect.Bottom - imageSize.Height - ImageTextSpacing, imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.Height -= (imageSize.Height + ImageTextSpacing * 2);
 | 
						|
                            }
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    case eImagePosition.Top:
 | 
						|
                        {
 | 
						|
                            if (orientation == eOrientation.Horizontal)
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.X + (thisRect.Width - imageSize.Width) / 2, thisRect.Y, 0, 0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                    image.DrawImage(g, new Rectangle(thisRect.X + (thisRect.Width - imageSize.Width) / 2, thisRect.Y, imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.Y += (imageSize.Height + ImageTextSpacing);
 | 
						|
                                thisRect.Height -= (imageSize.Height + ImageTextSpacing);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.X, thisRect.Y + (thisRect.Height - imageSize.Height) / 2, 0, 0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                    image.DrawImage(g, new Rectangle(thisRect.X, thisRect.Y + (thisRect.Height - imageSize.Height) / 2, imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.X += (imageSize.Width + ImageTextSpacing);
 | 
						|
                                thisRect.Width -= (imageSize.Width + ImageTextSpacing);
 | 
						|
                            }
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    case eImagePosition.Bottom:
 | 
						|
                        {
 | 
						|
                            if (orientation == eOrientation.Horizontal)
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.X + (thisRect.Width - imageSize.Width) / 2, thisRect.Bottom - imageSize.Height, 0, 0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                    image.DrawImage(g, new Rectangle(thisRect.X + (thisRect.Width - imageSize.Width) / 2, thisRect.Bottom - imageSize.Height, imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.Height -= (imageSize.Height + ImageTextSpacing);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (isSymbolImage)
 | 
						|
                                    TextDrawing.DrawStringLegacy(g, this.SymbolRealized, Symbols.GetFont(this.SymbolSize, this.SymbolSet), symbolColor, new Rectangle(thisRect.Right - imageSize.Width, thisRect.Y + (thisRect.Height - imageSize.Height) / 2, 0, 0), eTextFormat.Default);
 | 
						|
                                else
 | 
						|
                                    image.DrawImage(g, new Rectangle(thisRect.Right - imageSize.Width, thisRect.Y + (thisRect.Height - imageSize.Height) / 2, imageSize.Width, imageSize.Height));
 | 
						|
                                thisRect.Width -= (imageSize.Width + ImageTextSpacing);
 | 
						|
                            }
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (thisRect.Height > 0 && thisRect.Width > 0)
 | 
						|
            {
 | 
						|
                if (orientation == eOrientation.Horizontal)
 | 
						|
                {
 | 
						|
                    if (m_TextAlignment == StringAlignment.Far) thisRect.Width--;
 | 
						|
                    if (this.TextMarkupBody != null)
 | 
						|
                    {
 | 
						|
                        bool disposeFont = false;
 | 
						|
                        Font font = GetFont(out disposeFont);
 | 
						|
                        TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, font, textColor, pa.RightToLeft);
 | 
						|
                        d.HotKeyPrefixVisible = !((GetStringFormat() & eTextFormat.NoPrefix) == eTextFormat.NoPrefix);
 | 
						|
                        if (m_TextLineAlignment == StringAlignment.Near)
 | 
						|
                            this.TextMarkupBody.Bounds = new Rectangle(thisRect.Location, this.TextMarkupBody.Bounds.Size);
 | 
						|
                        else if (m_TextLineAlignment == StringAlignment.Center)
 | 
						|
                            this.TextMarkupBody.Bounds = new Rectangle(new Point(thisRect.X, thisRect.Y + (thisRect.Height - this.TextMarkupBody.Bounds.Height) / 2), this.TextMarkupBody.Bounds.Size);
 | 
						|
                        else if (m_TextLineAlignment == StringAlignment.Far)
 | 
						|
                            this.TextMarkupBody.Bounds = new Rectangle(new Point(thisRect.X, thisRect.Bottom - this.TextMarkupBody.Bounds.Height), this.TextMarkupBody.Bounds.Size);
 | 
						|
                        Region oldClip = g.Clip;
 | 
						|
                        Rectangle clipRect = thisRect;
 | 
						|
                        clipRect.Inflate(2, 2);
 | 
						|
                        g.SetClip(clipRect, CombineMode.Replace);
 | 
						|
                        this.TextMarkupBody.Render(d);
 | 
						|
 | 
						|
                        if (disposeFont) font.Dispose();
 | 
						|
 | 
						|
                        if (oldClip != null)
 | 
						|
                            g.Clip = oldClip;
 | 
						|
                        else
 | 
						|
                            g.ResetClip();
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        eTextFormat format = GetStringFormat();
 | 
						|
                        if (pa.RightToLeft) format |= eTextFormat.RightToLeft;
 | 
						|
                        bool disposeFont = false;
 | 
						|
                        Font font = GetFont(out disposeFont);
 | 
						|
                        if (pa.GlassEnabled && this.Parent is CaptionItemContainer && !(this.ContainerControl is Ribbon.QatToolbar))
 | 
						|
                        {
 | 
						|
                            if (!pa.CachedPaint)
 | 
						|
                                Office2007RibbonControlPainter.PaintTextOnGlass(g, m_Text, font, thisRect, TextDrawing.GetTextFormat(format), textColor, true, true, 7);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            if ((format & eTextFormat.VerticalCenter) == eTextFormat.VerticalCenter) thisRect.Inflate(0, 2); // Height can be safely increased when vertically centered so the text is not clipped and not displayed
 | 
						|
                            TextDrawing.DrawString(g, m_Text, font, textColor, thisRect, format);
 | 
						|
                        }
 | 
						|
                        if(disposeFont) font.Dispose();
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if(_VerticalTextTopUp)
 | 
						|
                        g.RotateTransform(90);
 | 
						|
                    else
 | 
						|
                        g.RotateTransform(-90);
 | 
						|
                    bool disposeFont = false;
 | 
						|
                    Font font = GetFont(out disposeFont);
 | 
						|
                    if (this.TextMarkupBody != null)
 | 
						|
                    {
 | 
						|
                        this.TextMarkupBody.Bounds = (_VerticalTextTopUp ? new Rectangle(thisRect.Top, -thisRect.Right, this.TextMarkupBody.Bounds.Width + 2, this.TextMarkupBody.Bounds.Height) :
 | 
						|
                            new Rectangle(-thisRect.Bottom, thisRect.X, thisRect.Height + 1, thisRect.Width + 1));
 | 
						|
                        TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, font, textColor, pa.RightToLeft);
 | 
						|
                        d.HotKeyPrefixVisible = !((GetStringFormat() & eTextFormat.HidePrefix) == eTextFormat.HidePrefix);
 | 
						|
                        this.TextMarkupBody.Render(d);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        TextDrawing.DrawStringLegacy(g, m_Text, font, textColor, (_VerticalTextTopUp ? new Rectangle(thisRect.Top, -thisRect.Right, thisRect.Height + 1, thisRect.Width + 1) :
 | 
						|
                            new Rectangle(-thisRect.Bottom, thisRect.X, thisRect.Height + 1, thisRect.Width + 1)), GetStringFormat());
 | 
						|
                    }
 | 
						|
                    if(disposeFont) font.Dispose();
 | 
						|
                    g.ResetTransform();
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            //if(this.DesignMode)
 | 
						|
            this.DrawInsertMarker(g);
 | 
						|
 | 
						|
            if (this.DesignMode && this.Focused)
 | 
						|
            {
 | 
						|
                Rectangle r = m_Rect;
 | 
						|
                r.Width--;
 | 
						|
                r.Height--;
 | 
						|
                //r.Inflate(-1,-1);
 | 
						|
                DesignTime.DrawDesignTimeSelection(g, r, pa.Colors.ItemDesignTimeBorder);
 | 
						|
            }
 | 
						|
 | 
						|
            _ItemPaintArgs = null;
 | 
						|
        }
 | 
						|
 | 
						|
        private Color GetTextColor(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            Color foreColor = m_ForeColor;
 | 
						|
            if(_ForeColorColorSchemePart!= eColorSchemePart.None)
 | 
						|
                foreColor = (Color)pa.Colors.GetType().GetProperty(_ForeColorColorSchemePart.ToString()).GetValue(pa.Colors, null);
 | 
						|
            return GetTextColor(pa, this.EffectiveStyle, this.Enabled && GetEnabled(pa.ContainerControl), foreColor);
 | 
						|
        }
 | 
						|
 | 
						|
        internal static Color GetTextColor(ItemPaintArgs pa, eDotNetBarStyle effectiveStyle, bool isEnabled, Color defaultColor)
 | 
						|
        {
 | 
						|
            Office2007ColorTable table = null;
 | 
						|
            if (pa.Renderer is Rendering.Office2007Renderer)
 | 
						|
                table = ((Rendering.Office2007Renderer)pa.Renderer).ColorTable;
 | 
						|
            
 | 
						|
            if (defaultColor.IsEmpty && table != null)
 | 
						|
            {
 | 
						|
                if (pa.ContainerControl != null && table.LabelItemColors.Count > 0)
 | 
						|
                {
 | 
						|
                    // First lookup contextual colors
 | 
						|
                    LabelColors lc;
 | 
						|
                    if (pa.ContainerControl is Bar && ((Bar)pa.ContainerControl).BarType == eBarType.StatusBar &&
 | 
						|
                        table.LabelItemColors.TryGetValue(Office2007ColorTable.GetContextualKey(pa.ContainerControl.GetType(), "StatusBar"), out lc))
 | 
						|
                        return isEnabled ? lc.Text : lc.DisabledText;
 | 
						|
                    if (table.LabelItemColors.TryGetValue(Office2007ColorTable.GetContextualKey(pa.ContainerControl.GetType()), out lc))
 | 
						|
                        return isEnabled ? lc.Text : lc.DisabledText;
 | 
						|
                    if (table.LabelItemColors.TryGetValue(string.Empty, out lc))
 | 
						|
                        return isEnabled ? lc.Text : lc.DisabledText;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (BarFunctions.IsOffice2007Style(effectiveStyle) && defaultColor.IsEmpty && table!=null)
 | 
						|
            {
 | 
						|
                if ((pa.IsOnMenu || pa.IsOnPopupBar) && table.ButtonItemColors.Count>0)
 | 
						|
                {
 | 
						|
                    return isEnabled ? table.ButtonItemColors[0].Default.Text : pa.Colors.ItemDisabledText;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if((pa.ContainerControl is RibbonStrip /*|| pa.ContainerControl is Bar*/)&& table.RibbonTabItemColors.Count>0)
 | 
						|
                        return table.RibbonTabItemColors[0].Default.Text;
 | 
						|
                    Rendering.Office2007ButtonItemColorTable ct = table.ButtonItemColors[Enum.GetName(typeof(eButtonColor), eButtonColor.Orange)];
 | 
						|
                    if (ct != null && !ct.Default.Text.IsEmpty)
 | 
						|
                        return isEnabled ? ct.Default.Text : pa.Colors.ItemDisabledText;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else if (!isEnabled)
 | 
						|
            {
 | 
						|
            	return pa.Colors.ItemDisabledText;
 | 
						|
            }
 | 
						|
 | 
						|
            if (defaultColor.IsEmpty) return pa.Colors.ItemText;
 | 
						|
 | 
						|
            return defaultColor;
 | 
						|
        }
 | 
						|
 | 
						|
        private Graphics CreateGraphics()
 | 
						|
        {
 | 
						|
            System.Windows.Forms.Control objCtrl = this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
            if (!IsHandleValid(objCtrl))
 | 
						|
                return null;
 | 
						|
 | 
						|
            return BarFunctions.CreateGraphics(objCtrl);
 | 
						|
        }
 | 
						|
 | 
						|
        public override void RecalcSize()
 | 
						|
        {
 | 
						|
            if (this.SuspendLayout)
 | 
						|
                return;
 | 
						|
 | 
						|
            if (this.TextMarkupBody != null)
 | 
						|
            {
 | 
						|
                RecalcSizeMarkup();
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                Size imageSize = Size.Empty;
 | 
						|
                if (string.IsNullOrEmpty(this.SymbolRealized))
 | 
						|
                {
 | 
						|
                    CompositeImage image = this.GetImage();
 | 
						|
                    if (image != null)
 | 
						|
                        imageSize = image.Size;
 | 
						|
                }
 | 
						|
 | 
						|
                eOrientation orientation = this.Orientation;
 | 
						|
                if (_TextOrientation == eOrientation.Vertical) orientation = _TextOrientation;
 | 
						|
 | 
						|
                if (orientation == eOrientation.Horizontal || m_Width == 0)
 | 
						|
                {
 | 
						|
                    if (m_Width == 0)
 | 
						|
                    {
 | 
						|
                        // Auto-size label
 | 
						|
                        Graphics g = this.CreateGraphics();
 | 
						|
                        if (g == null) return;
 | 
						|
                        try
 | 
						|
                        {
 | 
						|
                            if (!string.IsNullOrEmpty(this.SymbolRealized))
 | 
						|
                            {
 | 
						|
                                Font symFont = Symbols.GetFont(this.SymbolSize, this.SymbolSet);
 | 
						|
                                imageSize = TextDrawing.MeasureString(g, "\uF00A", symFont); // Need to do this to get consistent size for the symbol since they are not all the same width we pick widest
 | 
						|
                                //imageSize = TextDrawing.MeasureString(g, button.Symbol, symFont);
 | 
						|
                                int descent = (int)Math.Ceiling((symFont.FontFamily.GetCellDescent(symFont.Style) *
 | 
						|
                                    symFont.Size / symFont.FontFamily.GetEmHeight(symFont.Style)));
 | 
						|
                                imageSize.Height -= descent;
 | 
						|
                            }
 | 
						|
 | 
						|
                            // Measure string
 | 
						|
                            Font objCurrentFont = null;
 | 
						|
                            bool disposeFont = false;
 | 
						|
                            if (m_Font != null)
 | 
						|
                                objCurrentFont = m_Font;
 | 
						|
                            else
 | 
						|
                                objCurrentFont = GetFont(out disposeFont);
 | 
						|
 | 
						|
                            Size objStringSize = Size.Empty;
 | 
						|
                            eTextFormat objStringFormat = GetStringFormat();
 | 
						|
 | 
						|
                            if (m_Text != "")
 | 
						|
                            {
 | 
						|
                                string text = m_Text;
 | 
						|
                                if (text.EndsWith(" "))
 | 
						|
                                    text += ".";
 | 
						|
                                int stringAreaWidth = 0;
 | 
						|
                                if (m_WordWrap && this.Stretch && this.WidthInternal > 16)
 | 
						|
                                    stringAreaWidth = this.WidthInternal;
 | 
						|
                                if (orientation == eOrientation.Vertical && !this.IsOnMenu)
 | 
						|
                                    objStringSize = TextDrawing.MeasureStringLegacy(g, text, objCurrentFont, new Size(stringAreaWidth, 0), objStringFormat);
 | 
						|
                                else
 | 
						|
                                    objStringSize = TextDrawing.MeasureString(g, text, objCurrentFont, stringAreaWidth, objStringFormat);
 | 
						|
                                objStringSize.Width += Dpi.Width2;
 | 
						|
                                if (objCurrentFont.Italic)
 | 
						|
                                    objStringSize.Width += objCurrentFont.Height / 3;
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (orientation == eOrientation.Vertical && !this.IsOnMenu)
 | 
						|
                                    objStringSize = TextDrawing.MeasureStringLegacy(g, " ", objCurrentFont, Size.Empty, objStringFormat);
 | 
						|
                                else
 | 
						|
                                    objStringSize = TextDrawing.MeasureString(g, " ", objCurrentFont, 0, objStringFormat);
 | 
						|
                                objStringSize.Width += 2;
 | 
						|
                            }
 | 
						|
                            if (this.Parent is CaptionItemContainer) objStringSize.Width += 2;
 | 
						|
                            if (m_BorderType != eBorderType.None)
 | 
						|
                            {
 | 
						|
                                objStringSize.Width += 4;
 | 
						|
                                objStringSize.Height += 2;
 | 
						|
                                if (m_BorderType != eBorderType.SingleLine)
 | 
						|
                                    objStringSize.Height += 2;
 | 
						|
 | 
						|
                            }
 | 
						|
 | 
						|
                            if (orientation == eOrientation.Horizontal)
 | 
						|
                            {
 | 
						|
                                if (this.Stretch && !(this.Parent is ItemContainer))
 | 
						|
                                    this.WidthInternal = 8;
 | 
						|
                                else
 | 
						|
                                    this.WidthInternal = objStringSize.Width + m_PaddingLeft + m_PaddingRight;
 | 
						|
                                this.HeightInternal = objStringSize.Height + m_PaddingTop + m_PaddingBottom; // +1;
 | 
						|
                                if (!imageSize.IsEmpty)
 | 
						|
                                {
 | 
						|
                                    if (m_ImagePosition == eImagePosition.Left || m_ImagePosition == eImagePosition.Right)
 | 
						|
                                    {
 | 
						|
                                        this.WidthInternal += imageSize.Width + ImageTextSpacing * 2;
 | 
						|
                                        this.HeightInternal = Math.Max(this.HeightInternal, imageSize.Height + ImageTextSpacing);
 | 
						|
                                    }
 | 
						|
                                    else
 | 
						|
                                    {
 | 
						|
                                        this.HeightInternal += imageSize.Height + ImageTextSpacing * 2;
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (this.Stretch && !(this.Parent is ItemContainer))
 | 
						|
                                    this.HeightInternal = 8;
 | 
						|
                                else
 | 
						|
                                    this.HeightInternal = objStringSize.Width + m_PaddingLeft + m_PaddingRight;
 | 
						|
                                this.WidthInternal = objStringSize.Height + m_PaddingTop + m_PaddingBottom;
 | 
						|
                                if (!imageSize.IsEmpty)
 | 
						|
                                {
 | 
						|
                                    if (m_ImagePosition == eImagePosition.Left || m_ImagePosition == eImagePosition.Right)
 | 
						|
                                    {
 | 
						|
                                        this.HeightInternal += imageSize.Width + ImageTextSpacing * 2;
 | 
						|
                                        this.WidthInternal = Math.Max(this.WidthInternal, imageSize.Width + ImageTextSpacing);
 | 
						|
                                    }
 | 
						|
                                    else
 | 
						|
                                    {
 | 
						|
                                        this.WidthInternal += imageSize.Height + ImageTextSpacing * 2;
 | 
						|
                                        this.HeightInternal = Math.Max(imageSize.Height + ImageTextSpacing, this.HeightInternal);
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            if (disposeFont)
 | 
						|
                            {
 | 
						|
                                objCurrentFont.Dispose();
 | 
						|
                                objCurrentFont = null;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        finally
 | 
						|
                        {
 | 
						|
                            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
 | 
						|
                            g.SmoothingMode = SmoothingMode.Default;
 | 
						|
                            g.Dispose();
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        this.WidthInternal = Dpi.Width(m_Width);
 | 
						|
                        if (m_Height == 0)
 | 
						|
                        {
 | 
						|
                            // Measure string
 | 
						|
                            System.Drawing.Font objCurrentFont = null;
 | 
						|
                            bool disposeFont = false;
 | 
						|
                            if (m_Font != null)
 | 
						|
                                objCurrentFont = m_Font;
 | 
						|
                            else
 | 
						|
                                objCurrentFont = GetFont(out disposeFont);
 | 
						|
 | 
						|
                            Graphics g = this.CreateGraphics();
 | 
						|
                            if (g!=null && !string.IsNullOrEmpty(this.SymbolRealized))
 | 
						|
                            {
 | 
						|
                                Font symFont = Symbols.GetFont(this.SymbolSize, this.SymbolSet);
 | 
						|
                                imageSize = TextDrawing.MeasureString(g, "\uF00A", symFont); // Need to do this to get consistent size for the symbol since they are not all the same width we pick widest
 | 
						|
                                //imageSize = TextDrawing.MeasureString(g, button.Symbol, symFont);
 | 
						|
                                int descent = (int)Math.Ceiling((symFont.FontFamily.GetCellDescent(symFont.Style) *
 | 
						|
                                    symFont.Size / symFont.FontFamily.GetEmHeight(symFont.Style)));
 | 
						|
                                imageSize.Height -= descent;
 | 
						|
                            }
 | 
						|
 | 
						|
                            if (this.WordWrap)
 | 
						|
                            {
 | 
						|
                                if (g != null)
 | 
						|
                                {
 | 
						|
                                    int availableWidth = this.WidthInternal - (m_PaddingLeft + m_PaddingRight);
 | 
						|
                                    if (!imageSize.IsEmpty && orientation == eOrientation.Horizontal && (m_ImagePosition == eImagePosition.Left || m_ImagePosition == eImagePosition.Right))
 | 
						|
                                        availableWidth -= imageSize.Width + 4;
 | 
						|
                                    Size textSize = TextDrawing.MeasureString(g, this.Text, objCurrentFont, availableWidth);
 | 
						|
                                    this.HeightInternal = textSize.Height + 2;
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                    this.HeightInternal = (int)Math.Ceiling(objCurrentFont.GetHeight());
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                                this.HeightInternal = (int)Math.Ceiling(objCurrentFont.GetHeight());
 | 
						|
                            if (g != null)
 | 
						|
                            {
 | 
						|
                                g.Dispose();
 | 
						|
                                g = null;
 | 
						|
                            }
 | 
						|
 | 
						|
                            this.HeightInternal += m_PaddingTop + m_PaddingBottom + (this.IsRightToLeft ? 2 : 0);
 | 
						|
 | 
						|
                            if (m_BorderType != eBorderType.None)
 | 
						|
                            {
 | 
						|
                                this.HeightInternal += 2;
 | 
						|
                                if (m_BorderType != eBorderType.SingleLine)
 | 
						|
                                    this.HeightInternal += 2;
 | 
						|
                            }
 | 
						|
 | 
						|
                            if (!imageSize.IsEmpty)
 | 
						|
                            {
 | 
						|
                                if (orientation == eOrientation.Horizontal)
 | 
						|
                                {
 | 
						|
                                    if (m_ImagePosition == eImagePosition.Left || m_ImagePosition == eImagePosition.Right)
 | 
						|
                                        this.HeightInternal = Math.Max(this.HeightInternal, imageSize.Height/*+2*/);
 | 
						|
                                    else
 | 
						|
                                        this.HeightInternal += imageSize.Height + 4;
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if (m_ImagePosition == eImagePosition.Left || m_ImagePosition == eImagePosition.Right)
 | 
						|
                                        this.WidthInternal = Math.Max(this.HeightInternal, imageSize.Height + 2);
 | 
						|
                                    else
 | 
						|
                                        this.WidthInternal += imageSize.Height + 4;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            if (disposeFont)
 | 
						|
                            {
 | 
						|
                                objCurrentFont.Dispose();
 | 
						|
                                objCurrentFont = null;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                            this.HeightInternal = Dpi.Height(m_Height);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    this.WidthInternal = Dpi.Width(m_Width);
 | 
						|
                    this.HeightInternal = Dpi.Height(m_Height);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            
 | 
						|
            base.RecalcSize();
 | 
						|
        }
 | 
						|
 | 
						|
        #region Markup Implementation
 | 
						|
        protected override void OnExternalSizeChange()
 | 
						|
        {
 | 
						|
            if (this.TextMarkupBody != null)
 | 
						|
            {
 | 
						|
                if(_TextOrientation == eOrientation.Horizontal)
 | 
						|
                    ArrangeMarkup(this.WidthInternal);
 | 
						|
                else
 | 
						|
                    ArrangeMarkup(this.HeightInternal + 1);
 | 
						|
            }
 | 
						|
            base.OnExternalSizeChange();
 | 
						|
        }
 | 
						|
 | 
						|
        private void ArrangeMarkup(int specifiedWidth)
 | 
						|
        {
 | 
						|
            System.Windows.Forms.Control objCtrl = this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
            if (!IsHandleValid(objCtrl))
 | 
						|
                return;
 | 
						|
            using (Graphics g = BarFunctions.CreateGraphics(objCtrl))
 | 
						|
            {
 | 
						|
                Font objCurrentFont = null;
 | 
						|
                bool disposeFont = false;
 | 
						|
                if (m_Font != null)
 | 
						|
                    objCurrentFont = m_Font;
 | 
						|
                else
 | 
						|
                    objCurrentFont = GetFont(out disposeFont);
 | 
						|
 | 
						|
                CompositeImage image = this.GetImage();
 | 
						|
 | 
						|
                Size availableSize = GetMarkupAvailableSize(g, specifiedWidth);
 | 
						|
 | 
						|
                TextMarkup.MarkupDrawContext d = new DevComponents.DotNetBar.TextMarkup.MarkupDrawContext(g, objCurrentFont, this.ForeColor, false);
 | 
						|
                d.HotKeyPrefixVisible = !((GetStringFormat() & eTextFormat.HidePrefix) == eTextFormat.HidePrefix);
 | 
						|
                TextMarkupBody.Measure(availableSize, d);
 | 
						|
                d.RightToLeft = (objCtrl.RightToLeft == System.Windows.Forms.RightToLeft.Yes);
 | 
						|
 | 
						|
                if (specifiedWidth == 0 && m_Width == 0)
 | 
						|
                    availableSize = TextMarkupBody.Bounds.Size;
 | 
						|
 | 
						|
                TextMarkupBody.Arrange(new Rectangle(Point.Empty, availableSize), d);
 | 
						|
 | 
						|
                if(disposeFont) objCurrentFont.Dispose();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private Size GetMarkupAvailableSize(Graphics g, int specifiedWidth)
 | 
						|
        {
 | 
						|
            Size availableSize = new Size((specifiedWidth==0?Dpi.Width(m_Width):specifiedWidth), 1);
 | 
						|
            if(_TextOrientation == eOrientation.Vertical)
 | 
						|
                availableSize = new Size((specifiedWidth == 0 ? Dpi.Height(m_Height): specifiedWidth), 1);
 | 
						|
 | 
						|
            Size imageSize = Size.Empty;
 | 
						|
 | 
						|
            if (!string.IsNullOrEmpty(_Symbol))
 | 
						|
                imageSize = GetSymbolSize(g);
 | 
						|
            else
 | 
						|
            {
 | 
						|
                CompositeImage image = this.GetImage();
 | 
						|
                if (image != null) imageSize = image.Size;
 | 
						|
            }
 | 
						|
 | 
						|
            if (availableSize.Width == 0)
 | 
						|
                availableSize.Width = 1600;
 | 
						|
            else
 | 
						|
            {
 | 
						|
                availableSize.Width -= (m_PaddingLeft + m_PaddingRight);
 | 
						|
                if (!imageSize.IsEmpty && (m_ImagePosition == eImagePosition.Left || m_ImagePosition == eImagePosition.Right))
 | 
						|
                    availableSize.Width -= (imageSize.Width + ImageTextSpacing * 2);
 | 
						|
                if (m_BorderType != eBorderType.None)
 | 
						|
                    availableSize.Width -= 4;
 | 
						|
            }
 | 
						|
            return availableSize;
 | 
						|
        }
 | 
						|
 | 
						|
        private void RecalcSizeMarkup()
 | 
						|
        {
 | 
						|
            RecalcSizeMarkup(0);
 | 
						|
        }
 | 
						|
 | 
						|
        private Size GetSymbolSize(Graphics g)
 | 
						|
        {
 | 
						|
            Size symbolSize = Size.Empty;
 | 
						|
            if (g == null || string.IsNullOrEmpty(_Symbol)) return symbolSize;
 | 
						|
            Font symFont = Symbols.GetFont(this.SymbolSize, this.SymbolSet);
 | 
						|
            symbolSize = TextDrawing.MeasureString(g, "\uF00A", symFont); // Need to do this to get consistent size for the symbol since they are not all the same width we pick widest
 | 
						|
            int descent = (int)Math.Ceiling((symFont.FontFamily.GetCellDescent(symFont.Style) *
 | 
						|
                symFont.Size / symFont.FontFamily.GetEmHeight(symFont.Style)));
 | 
						|
            symbolSize.Height -= descent;
 | 
						|
            return symbolSize;
 | 
						|
        }
 | 
						|
        internal void RecalcSizeMarkup(int proposedWidth)
 | 
						|
        {
 | 
						|
            eOrientation orientation = this.Orientation;
 | 
						|
            if (_TextOrientation == eOrientation.Vertical) orientation = _TextOrientation;
 | 
						|
 | 
						|
            ArrangeMarkup(proposedWidth);
 | 
						|
 | 
						|
            int width = TextMarkupBody.Bounds.Width;
 | 
						|
            int height = TextMarkupBody.Bounds.Height;
 | 
						|
 | 
						|
            if (m_BorderType != eBorderType.None)
 | 
						|
            {
 | 
						|
                width += 4;
 | 
						|
                height += 4;
 | 
						|
            }
 | 
						|
 | 
						|
            Size imageSize = Size.Empty;
 | 
						|
 | 
						|
            //if (m_Width != 0)
 | 
						|
            {
 | 
						|
                if (!string.IsNullOrEmpty(this.SymbolRealized))
 | 
						|
                {
 | 
						|
                    using (Graphics g = this.CreateGraphics())
 | 
						|
                    {
 | 
						|
                        imageSize = GetSymbolSize(g);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    CompositeImage image = this.GetImage();
 | 
						|
                    if (image != null)
 | 
						|
                        imageSize = image.Size;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (!imageSize.IsEmpty)
 | 
						|
            {
 | 
						|
                if (m_Width == 0)
 | 
						|
                {
 | 
						|
                    if (m_ImagePosition == eImagePosition.Left || m_ImagePosition == eImagePosition.Right)
 | 
						|
                    {
 | 
						|
                        width += (imageSize.Width + ImageTextSpacing * 2);
 | 
						|
                        height = Math.Max(height, imageSize.Height + ImageTextSpacing);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        height += (imageSize.Height + ImageTextSpacing * 2);
 | 
						|
                        width = Math.Max(width, imageSize.Width + ImageTextSpacing);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if(m_Width==0)
 | 
						|
            {
 | 
						|
                width+=(m_PaddingLeft + m_PaddingRight);
 | 
						|
                height+=(m_PaddingTop + m_PaddingBottom);
 | 
						|
 | 
						|
                if (this.Stretch && !(this.Parent is ItemContainer))
 | 
						|
                    width = 8;
 | 
						|
            }
 | 
						|
 | 
						|
            if (orientation == eOrientation.Vertical)
 | 
						|
            {
 | 
						|
                width += 2;
 | 
						|
                int old = width;
 | 
						|
                width = height;
 | 
						|
                height = old;
 | 
						|
            }
 | 
						|
 | 
						|
            if (m_Width == 0)
 | 
						|
            {
 | 
						|
                m_Rect.Width = width;
 | 
						|
            }
 | 
						|
            else
 | 
						|
                m_Rect.Width = Dpi.Width(m_Width);
 | 
						|
            if (m_Height == 0)
 | 
						|
                m_Rect.Height = height;
 | 
						|
            else
 | 
						|
                m_Rect.Height = Dpi.Height(m_Height);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether item supports text markup. Default is false.
 | 
						|
        /// </summary>
 | 
						|
        protected override bool IsMarkupSupported
 | 
						|
        {
 | 
						|
            get { return _EnableMarkup; }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _EnableMarkup = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether text-markup support is enabled for items Text property. Default value is true.
 | 
						|
        /// Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Appearance"), Description("Indicates whether text-markup support is enabled for items Text property.")]
 | 
						|
        public bool EnableMarkup
 | 
						|
        {
 | 
						|
            get { return _EnableMarkup; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_EnableMarkup != value)
 | 
						|
                {
 | 
						|
                    _EnableMarkup = value;
 | 
						|
                    NeedRecalcSize = true;
 | 
						|
                    OnTextChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the type of the border drawn around the label.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DefaultValue(eBorderType.None),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates the type of the border drawn around the label.")]
 | 
						|
		public eBorderType BorderType
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_BorderType;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_BorderType==value)
 | 
						|
					return;
 | 
						|
				m_BorderType=value;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the border sides that are displayed. Default value specifies border on all 4 sides.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), Category("Appearance"), DefaultValue(DEFAULT_BORDERSIDE), Description("Specifies border sides that are displayed.")]
 | 
						|
        public eBorderSide BorderSide
 | 
						|
        {
 | 
						|
            get { return m_BorderSide; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_BorderSide != value)
 | 
						|
                {
 | 
						|
                    m_BorderSide = value;
 | 
						|
                    this.Refresh();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the background color of the label.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Determines the background color of the label.")]
 | 
						|
		public Color BackColor
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_BackColor;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_BackColor==value)
 | 
						|
					return;
 | 
						|
				m_BackColor=value;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeBackColor()
 | 
						|
        {
 | 
						|
            return !m_BackColor.IsEmpty;
 | 
						|
        }
 | 
						|
 | 
						|
        private eColorSchemePart _ForeColorColorSchemePart = eColorSchemePart.None;
 | 
						|
        internal eColorSchemePart ForeColorColorSchemePart
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _ForeColorColorSchemePart;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _ForeColorColorSchemePart = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the text color.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates text color.")]
 | 
						|
		public Color ForeColor
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ForeColor;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_ForeColor==value)
 | 
						|
					return;
 | 
						|
				m_ForeColor=value;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
        /// <summary>
 | 
						|
        /// Reset property to its default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetForeColor()
 | 
						|
        {
 | 
						|
            this.ForeColor = Color.Empty;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeForeColor()
 | 
						|
        {
 | 
						|
            return !m_ForeColor.IsEmpty;
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the border line color when border is single line.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates border line color when border is single line.")]
 | 
						|
		public Color SingleLineColor
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_SingleLineColor;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_SingleLineColor==value)
 | 
						|
					return;
 | 
						|
				m_SingleLineColor=value;
 | 
						|
                if (m_SingleLineColor != SystemColors.ControlDark)
 | 
						|
                    m_SingleLineColorCustom = true;
 | 
						|
                else
 | 
						|
                    m_SingleLineColorCustom = false;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeSingleLineColor()
 | 
						|
        {
 | 
						|
            return (m_SingleLineColor != SystemColors.ControlDark);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Resets the SingleLineColor property to its default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetSingleLineColor()
 | 
						|
        {
 | 
						|
            SingleLineColor = SystemColors.ControlDark;
 | 
						|
        }
 | 
						|
 | 
						|
        private Color GetSingleLineColor()
 | 
						|
        {
 | 
						|
            if (m_SingleLineColorCustom)
 | 
						|
                return m_SingleLineColor;
 | 
						|
            Color c = m_SingleLineColor;
 | 
						|
 | 
						|
            eDotNetBarStyle effectiveStyle = EffectiveStyle;
 | 
						|
            if (effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(this.EffectiveStyle))
 | 
						|
            {
 | 
						|
                if (BarFunctions.IsOffice2007Style(effectiveStyle))
 | 
						|
                {
 | 
						|
                    if (this.ContainerControl is IRenderingSupport)
 | 
						|
                    {
 | 
						|
                        Office2007Renderer renderer = ((IRenderingSupport)this.ContainerControl).GetRenderer() as Office2007Renderer;
 | 
						|
                        if (renderer == null)
 | 
						|
                            renderer = GlobalManager.Renderer as Office2007Renderer;
 | 
						|
                        if (renderer != null)
 | 
						|
                            c = renderer.ColorTable.Bar.ToolbarBottomBorder;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    ColorScheme scheme = null;
 | 
						|
                    if (this.ContainerControl is Bar)
 | 
						|
                        scheme = ((Bar)this.ContainerControl).ColorScheme;
 | 
						|
                    else if (this.ContainerControl is MenuPanel)
 | 
						|
                        scheme = ((MenuPanel)this.ContainerControl).ColorScheme;
 | 
						|
                    else
 | 
						|
                        scheme = new ColorScheme(this.EffectiveStyle);
 | 
						|
                    if (scheme != null)
 | 
						|
                        m_SingleLineColor = scheme.BarDockedBorder;
 | 
						|
                    else
 | 
						|
                        m_SingleLineColor = SystemColors.ControlDark;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return c;
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
        /// Gets or sets the horizontal text alignment.
 | 
						|
		/// </summary>
 | 
						|
        [Browsable(true), DefaultValue(System.Drawing.StringAlignment.Near), DevCoBrowsable(true), Category("Layout"), Description("Indicates text alignment.")]
 | 
						|
		public System.Drawing.StringAlignment TextAlignment
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_TextAlignment;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_TextAlignment==value)
 | 
						|
					return;
 | 
						|
				m_TextAlignment=value;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the text vertical alignment.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(System.Drawing.StringAlignment.Center),DevCoBrowsable(true),Category("Layout"),Description("Indicates text line alignment.")]
 | 
						|
		public System.Drawing.StringAlignment TextLineAlignment
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_TextLineAlignment;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_TextLineAlignment==value)
 | 
						|
					return;
 | 
						|
				m_TextLineAlignment=value;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the label font.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(null), DevCoBrowsable(true),Category("Appearance"),Description("Indicates label font.")]
 | 
						|
		public System.Drawing.Font Font
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_Font;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Font!=value)
 | 
						|
				{
 | 
						|
					m_Font=value;
 | 
						|
					this.Refresh();
 | 
						|
				}
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the left padding in pixels.
 | 
						|
		/// </summary>
 | 
						|
        [System.ComponentModel.Browsable(true), DefaultValue(0), DevCoBrowsable(true), System.ComponentModel.Category("Layout"), System.ComponentModel.Description("Indicates left padding in pixels.")]
 | 
						|
		public int PaddingLeft
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_PaddingLeft;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_PaddingLeft==value)
 | 
						|
					return;
 | 
						|
				m_PaddingLeft=value;
 | 
						|
				NeedRecalcSize=true;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the right padding in pixels.
 | 
						|
		/// </summary>
 | 
						|
        [System.ComponentModel.Browsable(true), DefaultValue(0), DevCoBrowsable(true), System.ComponentModel.Category("Layout"), System.ComponentModel.Description("Indicates right padding in pixels.")]
 | 
						|
		public int PaddingRight
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_PaddingRight;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_PaddingRight==value)
 | 
						|
					return;
 | 
						|
				m_PaddingRight=value;
 | 
						|
				NeedRecalcSize=true;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the top padding in pixels.
 | 
						|
		/// </summary>
 | 
						|
        [System.ComponentModel.Browsable(true), DefaultValue(0), DevCoBrowsable(true), System.ComponentModel.Category("Layout"), System.ComponentModel.Description("Indicates top padding in pixels.")]
 | 
						|
		public int PaddingTop
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_PaddingTop;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_PaddingTop==value)
 | 
						|
					return;
 | 
						|
				m_PaddingTop=value;
 | 
						|
				NeedRecalcSize=true;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the bottom padding in pixels.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(0),DevCoBrowsable(true),Category("Layout"),Description("Indicates bottom padding in pixels.")]
 | 
						|
		public int PaddingBottom
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_PaddingBottom;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_PaddingBottom==value)
 | 
						|
					return;
 | 
						|
				m_PaddingBottom=value;
 | 
						|
				NeedRecalcSize=true;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the width of the label in pixels.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.DefaultValue(0),System.ComponentModel.Category("Layout"),System.ComponentModel.Description("Indicates the width of the label in pixels.")]
 | 
						|
		public int Width
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_Width;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Width==value)
 | 
						|
					return;
 | 
						|
				m_Width=value;
 | 
						|
				NeedRecalcSize=true;
 | 
						|
                if (!SuspendPaint)
 | 
						|
                {
 | 
						|
                    this.Refresh();
 | 
						|
                    OnAppearanceChanged();
 | 
						|
                }
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the height of the label.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.DefaultValue(0),System.ComponentModel.Category("Layout"),System.ComponentModel.Description("Indicates height of the label in pixels.")]
 | 
						|
		public int Height
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_Height;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Height==value)
 | 
						|
					return;
 | 
						|
				m_Height=value;
 | 
						|
				NeedRecalcSize=true;
 | 
						|
                if (!SuspendPaint)
 | 
						|
                {
 | 
						|
                    this.Refresh();
 | 
						|
                    OnAppearanceChanged();
 | 
						|
                }
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether the label is drawn as a divider label.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(false),DevCoBrowsable(true),Category("Appearance"),Description("Indicates whether label has divider style.")]
 | 
						|
		public bool DividerStyle
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_DividerStyle;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_DividerStyle==value)
 | 
						|
					return;
 | 
						|
				m_DividerStyle=value;
 | 
						|
				this.Refresh();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets a value that determines whether text is displayed in multiple lines or one long line.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Style"),System.ComponentModel.DefaultValue(false),System.ComponentModel.Description("Gets or sets a value that determines whether text is displayed in multiple lines or one long line.")]
 | 
						|
		public bool WordWrap
 | 
						|
		{
 | 
						|
			get {return m_WordWrap;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
                if (m_WordWrap != value)
 | 
						|
                {
 | 
						|
                    m_WordWrap = value;
 | 
						|
                    m_NeedRecalcSize = true;
 | 
						|
                }
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
	    private bool _FontBold = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether label text is rendered using bold font unless the Font property is specifically set to different font.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Appearance"), Description("Indicates whether label text is rendered using bold font unless the Font property is specifically set to different font.")]
 | 
						|
	    public bool FontBold
 | 
						|
	    {
 | 
						|
	        get { return _FontBold; }
 | 
						|
	        set
 | 
						|
	        {
 | 
						|
	            if (_FontBold != value)
 | 
						|
	            {
 | 
						|
	                bool oldValue = _FontBold;
 | 
						|
	                _FontBold = value;
 | 
						|
	                OnFontBoldChanged(value, oldValue);
 | 
						|
	            }
 | 
						|
	        }
 | 
						|
	    }
 | 
						|
 | 
						|
	    protected virtual void OnFontBoldChanged(bool newValue, bool oldValue)
 | 
						|
	    {
 | 
						|
	        NeedRecalcSize = true;
 | 
						|
            OnAppearanceChanged();
 | 
						|
	    }
 | 
						|
		protected virtual Font GetFont(out bool disposeFont)
 | 
						|
		{
 | 
						|
		    disposeFont = false;
 | 
						|
			if(m_Font!=null)
 | 
						|
				return m_Font;
 | 
						|
		    Font font = null;
 | 
						|
			System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
			if(objCtrl!=null)
 | 
						|
				font = (Font)objCtrl.Font;
 | 
						|
            else
 | 
						|
                font = SystemFonts.DefaultFont; // (Font)System.Windows.Forms.SystemInformation.MenuFont;
 | 
						|
		    if (font != null && _FontBold)
 | 
						|
		    {
 | 
						|
		        font = new Font(font, FontStyle.Bold);
 | 
						|
		        disposeFont = true;
 | 
						|
		    }
 | 
						|
		    return font;
 | 
						|
		}
 | 
						|
 | 
						|
        internal bool ShowPrefix
 | 
						|
        {
 | 
						|
            get { return m_ShowPrefix; }
 | 
						|
            set { m_ShowPrefix = value; }
 | 
						|
        }
 | 
						|
 | 
						|
		private eTextFormat GetStringFormat()
 | 
						|
        {
 | 
						|
            eTextFormat format = eTextFormat.Default | eTextFormat.ExpandTabs | eTextFormat.EndEllipsis;
 | 
						|
            if (!m_ShowPrefix)
 | 
						|
                format |= eTextFormat.NoPrefix;
 | 
						|
 | 
						|
            if (!m_WordWrap)
 | 
						|
                format |= eTextFormat.SingleLine;
 | 
						|
            else
 | 
						|
                format |= eTextFormat.WordBreak;
 | 
						|
            if (m_TextAlignment == StringAlignment.Center)
 | 
						|
                format |= eTextFormat.HorizontalCenter;
 | 
						|
            else if (m_TextAlignment == StringAlignment.Far)
 | 
						|
                format |= eTextFormat.Right;
 | 
						|
            if (m_TextLineAlignment == StringAlignment.Center)
 | 
						|
                format |= eTextFormat.VerticalCenter;
 | 
						|
            else if (m_TextLineAlignment == StringAlignment.Far)
 | 
						|
                format |= eTextFormat.Bottom;
 | 
						|
            if (this.IsRightToLeft)
 | 
						|
                format |= eTextFormat.RightToLeft;
 | 
						|
            
 | 
						|
            return format;
 | 
						|
		}
 | 
						|
 | 
						|
		protected internal override void Serialize(ItemSerializationContext context)
 | 
						|
		{
 | 
						|
			base.Serialize(context);
 | 
						|
            System.Xml.XmlElement ThisItem = context.ItemXmlElement;
 | 
						|
			ThisItem.SetAttribute("bt",System.Xml.XmlConvert.ToString(((int)m_BorderType)));
 | 
						|
            if(m_BorderSide!=DEFAULT_BORDERSIDE)
 | 
						|
                ThisItem.SetAttribute("BorderSide", System.Xml.XmlConvert.ToString(((int)m_BorderSide)));
 | 
						|
			if(!m_BackColor.IsEmpty)
 | 
						|
				ThisItem.SetAttribute("bc",BarFunctions.ColorToString(m_BackColor));
 | 
						|
			ThisItem.SetAttribute("fc",BarFunctions.ColorToString(m_ForeColor));
 | 
						|
			if(m_SingleLineColorCustom)
 | 
						|
				ThisItem.SetAttribute("sc",BarFunctions.ColorToString(m_SingleLineColor));
 | 
						|
			ThisItem.SetAttribute("ta",System.Xml.XmlConvert.ToString(((int)m_TextAlignment)));
 | 
						|
			ThisItem.SetAttribute("tla",System.Xml.XmlConvert.ToString(((int)m_TextLineAlignment)));
 | 
						|
			ThisItem.SetAttribute("ds",System.Xml.XmlConvert.ToString(m_DividerStyle));
 | 
						|
			ThisItem.SetAttribute("pl",System.Xml.XmlConvert.ToString(m_PaddingLeft));
 | 
						|
			ThisItem.SetAttribute("pr",System.Xml.XmlConvert.ToString(m_PaddingRight));
 | 
						|
			ThisItem.SetAttribute("pt",System.Xml.XmlConvert.ToString(m_PaddingTop));
 | 
						|
			ThisItem.SetAttribute("pb",System.Xml.XmlConvert.ToString(m_PaddingBottom));
 | 
						|
			ThisItem.SetAttribute("w",System.Xml.XmlConvert.ToString(m_Width));
 | 
						|
			ThisItem.SetAttribute("h",System.Xml.XmlConvert.ToString(m_Height));
 | 
						|
 | 
						|
			// Save Font information if needed
 | 
						|
			if(this.Font!=null)
 | 
						|
			{
 | 
						|
				if(this.Font.Name!=System.Windows.Forms.SystemInformation.MenuFont.Name || this.Font.Size!=System.Windows.Forms.SystemInformation.MenuFont.Size || this.Font.Style!=System.Windows.Forms.SystemInformation.MenuFont.Style)
 | 
						|
				{
 | 
						|
					ThisItem.SetAttribute("fontname",this.Font.Name);
 | 
						|
					ThisItem.SetAttribute("fontemsize",System.Xml.XmlConvert.ToString(this.Font.Size));
 | 
						|
					ThisItem.SetAttribute("fontstyle",System.Xml.XmlConvert.ToString((int)this.Font.Style));
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			System.Xml.XmlElement xmlElem=null, xmlElem2=null;
 | 
						|
            
 | 
						|
			// Serialize Images
 | 
						|
			if(m_Image!=null || m_ImageIndex>=0 || m_Icon!=null)
 | 
						|
			{
 | 
						|
				xmlElem=ThisItem.OwnerDocument.CreateElement("images");
 | 
						|
				ThisItem.AppendChild(xmlElem);
 | 
						|
 | 
						|
				if(m_ImageIndex>=0)
 | 
						|
					xmlElem.SetAttribute("imageindex",System.Xml.XmlConvert.ToString(m_ImageIndex));
 | 
						|
 | 
						|
				if(m_Image!=null)
 | 
						|
				{
 | 
						|
					xmlElem2=ThisItem.OwnerDocument.CreateElement("image");
 | 
						|
					xmlElem2.SetAttribute("type","default");
 | 
						|
					xmlElem.AppendChild(xmlElem2);
 | 
						|
					BarFunctions.SerializeImage(m_Image,xmlElem2);
 | 
						|
				}
 | 
						|
				if(m_Icon!=null)
 | 
						|
				{
 | 
						|
					xmlElem2=ThisItem.OwnerDocument.CreateElement("image");
 | 
						|
					xmlElem2.SetAttribute("type","icon");
 | 
						|
					xmlElem.AppendChild(xmlElem2);
 | 
						|
					BarFunctions.SerializeIcon(m_Icon,xmlElem2);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public override void Deserialize(ItemSerializationContext context)
 | 
						|
		{
 | 
						|
			base.Deserialize(context);
 | 
						|
 | 
						|
            System.Xml.XmlElement ItemXmlSource = context.ItemXmlElement;
 | 
						|
 | 
						|
			m_BorderType=(eBorderType)System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("bt"));
 | 
						|
 | 
						|
            if (ItemXmlSource.HasAttribute("BorderSide"))
 | 
						|
                m_BorderSide = (eBorderSide)System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("BorderSide"));
 | 
						|
            else
 | 
						|
                m_BorderSide = DEFAULT_BORDERSIDE;
 | 
						|
 | 
						|
			if(ItemXmlSource.HasAttribute("bc"))
 | 
						|
                m_BackColor=BarFunctions.ColorFromString(ItemXmlSource.GetAttribute("bc"));
 | 
						|
			else
 | 
						|
				m_BackColor=Color.Empty;
 | 
						|
			m_ForeColor=BarFunctions.ColorFromString(ItemXmlSource.GetAttribute("fc"));
 | 
						|
 | 
						|
            if (ItemXmlSource.HasAttribute("sc"))
 | 
						|
            {
 | 
						|
                m_SingleLineColor = BarFunctions.ColorFromString(ItemXmlSource.GetAttribute("sc"));
 | 
						|
                if (m_SingleLineColor != SystemColors.ControlDark)
 | 
						|
                    m_SingleLineColorCustom = true;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                m_SingleLineColorCustom = false;
 | 
						|
                m_SingleLineColor = SystemColors.ControlDark;
 | 
						|
            }
 | 
						|
 | 
						|
			m_TextAlignment=(StringAlignment)System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("ta"));
 | 
						|
			m_TextLineAlignment=(StringAlignment)System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("tla"));
 | 
						|
 | 
						|
			m_DividerStyle=System.Xml.XmlConvert.ToBoolean(ItemXmlSource.GetAttribute("ds"));
 | 
						|
 | 
						|
            m_PaddingLeft=System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("pl"));
 | 
						|
			m_PaddingRight=System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("pr"));
 | 
						|
			m_PaddingTop=System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("pt"));
 | 
						|
			m_PaddingBottom=System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("pb"));
 | 
						|
 | 
						|
			m_Width=System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("w"));
 | 
						|
			m_Height=System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("h"));
 | 
						|
 | 
						|
			// Load font information if it exists
 | 
						|
			if(ItemXmlSource.HasAttribute("fontname"))
 | 
						|
			{
 | 
						|
				string FontName=ItemXmlSource.GetAttribute("fontname");
 | 
						|
				float FontSize=System.Xml.XmlConvert.ToSingle(ItemXmlSource.GetAttribute("fontemsize"));
 | 
						|
				System.Drawing.FontStyle FontStyle=(System.Drawing.FontStyle)System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("fontstyle"));
 | 
						|
				try
 | 
						|
				{
 | 
						|
					this.Font=new Font(FontName,FontSize,FontStyle);
 | 
						|
				}
 | 
						|
				catch(Exception)
 | 
						|
				{
 | 
						|
                    this.Font = SystemFonts.DefaultFont; // System.Windows.Forms.SystemInformation.MenuFont.Clone() as Font;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			// Load Images
 | 
						|
			foreach(System.Xml.XmlElement xmlElem in ItemXmlSource.ChildNodes)
 | 
						|
			{
 | 
						|
				if(xmlElem.Name=="images")
 | 
						|
				{
 | 
						|
					if(xmlElem.HasAttribute("imageindex"))
 | 
						|
						m_ImageIndex=System.Xml.XmlConvert.ToInt32(xmlElem.GetAttribute("imageindex"));
 | 
						|
 | 
						|
					foreach(System.Xml.XmlElement xmlElem2 in xmlElem.ChildNodes)
 | 
						|
					{
 | 
						|
						switch(xmlElem2.GetAttribute("type"))
 | 
						|
						{
 | 
						|
							case "default":
 | 
						|
							{
 | 
						|
								m_Image=BarFunctions.DeserializeImage(xmlElem2);
 | 
						|
								m_ImageIndex=-1;
 | 
						|
								break;
 | 
						|
							}
 | 
						|
							case "icon":
 | 
						|
							{
 | 
						|
								m_Icon=BarFunctions.DeserializeIcon(xmlElem2);
 | 
						|
								m_ImageIndex=-1;
 | 
						|
								break;
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
					break;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the text associated with this item.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),Editor("DevComponents.DotNetBar.Design.TextMarkupUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf",typeof(System.Drawing.Design.UITypeEditor)),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("The text contained in the item.")]
 | 
						|
		public override string Text
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return base.Text;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Text==value)
 | 
						|
					return;
 | 
						|
				if(value==null)
 | 
						|
					m_Text="";
 | 
						|
				else
 | 
						|
					m_Text=value;
 | 
						|
				m_AccessKey=NativeFunctions.GetAccessKey(m_Text);
 | 
						|
 | 
						|
                if(ShouldSyncProperties)
 | 
						|
                    BarFunctions.SyncProperty(this, "Text");
 | 
						|
 | 
						|
                this.OnTextChanged();
 | 
						|
 | 
						|
				if(this.Displayed && m_Parent!=null && !this.SuspendLayout)
 | 
						|
				{
 | 
						|
					if(m_Width == 0 || this.ContainerControl is BaseItemControl)
 | 
						|
						NeedRecalcSize=true;
 | 
						|
                    if(!(this.ContainerControl is LabelX))
 | 
						|
					    this.Refresh(); 
 | 
						|
					// No need for this Labels are always fixed in size
 | 
						|
					//RecalcSize();
 | 
						|
					//m_Parent.SubItemSizeChanged(this);
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Specifies the label icon. Icons support alpha blending.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Specifies the label icon."),System.ComponentModel.DefaultValue(null)]
 | 
						|
		public System.Drawing.Icon Icon
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_Icon;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_Icon=value;
 | 
						|
				this.OnImageChanged();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Specifies label image.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true),DevCoBrowsable(true),Category("Appearance"),Description("The image that will be displayed on the face of the item."),DefaultValue(null)]
 | 
						|
		public System.Drawing.Image Image
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_Image;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_Image=value;
 | 
						|
				this.OnImageChanged();
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        // Property Editor support for ImageIndex selection
 | 
						|
        [System.ComponentModel.Browsable(false), System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
        public System.Windows.Forms.ImageList ImageList
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                IOwner owner = this.GetOwner() as IOwner;
 | 
						|
                if (owner != null)
 | 
						|
                    return owner.Images;
 | 
						|
                return null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
		/// <summary>
 | 
						|
		/// Specifies the index of the image for the label if ImageList is used.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("The image list image index of the image that will be displayed on the face of the item."),System.ComponentModel.Editor("DevComponents.DotNetBar.Design.ImageIndexEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)),System.ComponentModel.TypeConverter(typeof(System.Windows.Forms.ImageIndexConverter)),System.ComponentModel.DefaultValue(-1)]
 | 
						|
		public int ImageIndex
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ImageIndex;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_ImageCachedIdx=null;
 | 
						|
				if(m_ImageIndex!=value)
 | 
						|
				{
 | 
						|
					m_ImageIndex=value;
 | 
						|
                    if(ShouldSyncProperties)
 | 
						|
                        BarFunctions.SyncProperty(this, "ImageIndex");
 | 
						|
					OnImageChanged();
 | 
						|
				}
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets/Sets the image position inside the label.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("The alignment of the image in relation to text displayed by this item."),System.ComponentModel.DefaultValue(eImagePosition.Left)]
 | 
						|
		public eImagePosition ImagePosition
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ImagePosition;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_ImagePosition!=value)
 | 
						|
				{
 | 
						|
					m_ImagePosition=value;
 | 
						|
                    if(ShouldSyncProperties)
 | 
						|
                        BarFunctions.SyncProperty(this, "ImagePosition");
 | 
						|
					NeedRecalcSize=true;
 | 
						|
					this.Refresh();
 | 
						|
				}
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		private void OnImageChanged()
 | 
						|
		{
 | 
						|
            if (m_DisabledImage != null)
 | 
						|
            {
 | 
						|
                m_DisabledImage.Dispose();
 | 
						|
                m_DisabledImage = null;
 | 
						|
            }
 | 
						|
            if (m_DisabledIcon != null)
 | 
						|
            {
 | 
						|
                m_DisabledIcon.Dispose();
 | 
						|
                m_DisabledIcon = null;
 | 
						|
            }
 | 
						|
 | 
						|
			NeedRecalcSize=true;
 | 
						|
			this.Refresh();
 | 
						|
		}
 | 
						|
 | 
						|
        private CompositeImage GetImage()
 | 
						|
        {
 | 
						|
            if (this.GetEnabled())
 | 
						|
                return GetImage(ImageState.Default);
 | 
						|
            else
 | 
						|
                return GetImage(ImageState.Disabled);
 | 
						|
        }
 | 
						|
 | 
						|
		private CompositeImage GetImage(ImageState state)
 | 
						|
		{
 | 
						|
			Image image=null;
 | 
						|
 | 
						|
            if (state == ImageState.Disabled)
 | 
						|
            {
 | 
						|
                if (m_DisabledImage == null && m_DisabledIcon == null && (m_Icon != null || m_Image != null || m_ImageIndex >= 0))
 | 
						|
                    CreateDisabledImage();
 | 
						|
 | 
						|
                if(m_DisabledIcon!=null)
 | 
						|
                    return new CompositeImage(new System.Drawing.Icon(m_DisabledIcon, IconSize), true);
 | 
						|
                if(m_DisabledImage!=null)
 | 
						|
                    return new CompositeImage(m_DisabledImage, false);
 | 
						|
            }
 | 
						|
 | 
						|
			if(m_Icon!=null)
 | 
						|
			{
 | 
						|
				System.Drawing.Size iconSize=this.IconSize;
 | 
						|
				return new CompositeImage(new System.Drawing.Icon(m_Icon,iconSize),true);
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_Image!=null)
 | 
						|
			{
 | 
						|
				return new CompositeImage(m_Image,false);
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_ImageIndex>=0)
 | 
						|
			{
 | 
						|
				image=GetImageFromImageList(m_ImageIndex);
 | 
						|
				if(image!=null)
 | 
						|
					return new CompositeImage(image,false);
 | 
						|
			}
 | 
						|
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
 | 
						|
        private void CreateDisabledImage()
 | 
						|
        {
 | 
						|
            if (m_Image == null && m_ImageIndex < 0 && m_Icon == null)
 | 
						|
                return;
 | 
						|
            if (m_DisabledImage != null)
 | 
						|
                m_DisabledImage.Dispose();
 | 
						|
            m_DisabledImage = null;
 | 
						|
            if (m_DisabledIcon != null)
 | 
						|
                m_DisabledIcon.Dispose();
 | 
						|
            m_DisabledIcon = null;
 | 
						|
 | 
						|
            CompositeImage defaultImage = GetImage(ImageState.Default);
 | 
						|
 | 
						|
            if (defaultImage == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            if (this.GetOwner() is IOwner && ((IOwner)this.GetOwner()).DisabledImagesGrayScale)
 | 
						|
            {
 | 
						|
                if (defaultImage.IsIcon)
 | 
						|
                {
 | 
						|
                    m_DisabledIcon = BarFunctions.CreateDisabledIcon(defaultImage.Icon);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    m_DisabledImage = ImageHelper.CreateGrayScaleImage(defaultImage.Image as Bitmap);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            if (m_DisabledIcon != null || m_DisabledImage != null)
 | 
						|
                return;
 | 
						|
 | 
						|
            // Use old algorithm if first one failed...
 | 
						|
            System.Drawing.Imaging.PixelFormat pixelFormat = System.Drawing.Imaging.PixelFormat.Format32bppArgb;
 | 
						|
            if (!defaultImage.IsIcon && defaultImage.Image != null)
 | 
						|
                pixelFormat = defaultImage.Image.PixelFormat;
 | 
						|
 | 
						|
            if (pixelFormat == System.Drawing.Imaging.PixelFormat.Format1bppIndexed || pixelFormat == System.Drawing.Imaging.PixelFormat.Format4bppIndexed || pixelFormat == System.Drawing.Imaging.PixelFormat.Format8bppIndexed)
 | 
						|
                pixelFormat = System.Drawing.Imaging.PixelFormat.Format32bppArgb;
 | 
						|
 | 
						|
            Bitmap bmp = new Bitmap(defaultImage.Width, defaultImage.Height, pixelFormat);
 | 
						|
            m_DisabledImage = new Bitmap(defaultImage.Width, defaultImage.Height, pixelFormat);
 | 
						|
 | 
						|
            Graphics g2 = Graphics.FromImage(bmp);
 | 
						|
            using (SolidBrush brush = new SolidBrush(System.Drawing.Color.White))
 | 
						|
                g2.FillRectangle(brush, 0, 0, defaultImage.Width, defaultImage.Height);
 | 
						|
            //g2.DrawImage(defaultImage,0,0,defaultImage.Width,defaultImage.Height);
 | 
						|
            defaultImage.DrawImage(g2, new Rectangle(0, 0, defaultImage.Width, defaultImage.Height));
 | 
						|
            g2.Dispose();
 | 
						|
            g2 = Graphics.FromImage(m_DisabledImage);
 | 
						|
 | 
						|
            bmp.MakeTransparent(System.Drawing.Color.White);
 | 
						|
            eDotNetBarStyle effectiveStyle = EffectiveStyle;
 | 
						|
            if ((effectiveStyle == eDotNetBarStyle.OfficeXP || effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle)) && NativeFunctions.ColorDepth >= 8)
 | 
						|
            {
 | 
						|
                float[][] array = new float[5][];
 | 
						|
                array[0] = new float[5] { 0, 0, 0, 0, 0 };
 | 
						|
                array[1] = new float[5] { 0, 0, 0, 0, 0 };
 | 
						|
                array[2] = new float[5] { 0, 0, 0, 0, 0 };
 | 
						|
                array[3] = new float[5] { .5f, .5f, .5f, .5f, 0 };
 | 
						|
                array[4] = new float[5] { 0, 0, 0, 0, 0 };
 | 
						|
                System.Drawing.Imaging.ColorMatrix grayMatrix = new System.Drawing.Imaging.ColorMatrix(array);
 | 
						|
                System.Drawing.Imaging.ImageAttributes disabledImageAttr = new System.Drawing.Imaging.ImageAttributes();
 | 
						|
                disabledImageAttr.ClearColorKey();
 | 
						|
                disabledImageAttr.SetColorMatrix(grayMatrix);
 | 
						|
                g2.DrawImage(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, disabledImageAttr);
 | 
						|
            }
 | 
						|
            else
 | 
						|
                System.Windows.Forms.ControlPaint.DrawImageDisabled(g2, bmp, 0, 0, ColorFunctions.MenuBackColor(g2));
 | 
						|
 | 
						|
            // Clean up
 | 
						|
            g2.Dispose();
 | 
						|
            g2 = null;
 | 
						|
            bmp.Dispose();
 | 
						|
            bmp = null;
 | 
						|
 | 
						|
            defaultImage.Dispose();
 | 
						|
        }
 | 
						|
 | 
						|
		private Image GetImageFromImageList(int ImageIndex)
 | 
						|
		{
 | 
						|
			if(ImageIndex>=0)
 | 
						|
			{
 | 
						|
				IOwner owner=null;
 | 
						|
				IBarImageSize iImageSize=null;
 | 
						|
				if(_ItemPaintArgs!=null)
 | 
						|
				{
 | 
						|
					owner=_ItemPaintArgs.Owner;
 | 
						|
					iImageSize=_ItemPaintArgs.ContainerControl as IBarImageSize;
 | 
						|
				}
 | 
						|
				if(owner==null) owner=this.GetOwner() as IOwner;
 | 
						|
				if(iImageSize==null) iImageSize=this.ContainerControl as IBarImageSize; 
 | 
						|
 | 
						|
				if(owner!=null)
 | 
						|
				{
 | 
						|
					try
 | 
						|
					{
 | 
						|
						if(iImageSize!=null && iImageSize.ImageSize!=eBarImageSize.Default)
 | 
						|
						{
 | 
						|
							if(iImageSize.ImageSize==eBarImageSize.Medium && owner.ImagesMedium!=null)
 | 
						|
								return owner.ImagesMedium.Images[ImageIndex];
 | 
						|
							else if(iImageSize.ImageSize==eBarImageSize.Large && owner.ImagesLarge!=null)
 | 
						|
								return owner.ImagesLarge.Images[ImageIndex];
 | 
						|
							else if(owner.Images!=null)
 | 
						|
							{
 | 
						|
								if(ImageIndex==m_ImageIndex)
 | 
						|
								{
 | 
						|
									if(m_ImageCachedIdx==null)
 | 
						|
										m_ImageCachedIdx=owner.Images.Images[ImageIndex];
 | 
						|
									return m_ImageCachedIdx;
 | 
						|
								}
 | 
						|
								else
 | 
						|
									return owner.Images.Images[ImageIndex];
 | 
						|
							}
 | 
						|
						}
 | 
						|
						else if(m_Parent is SideBarPanelItem && ((SideBarPanelItem)m_Parent).ItemImageSize!=eBarImageSize.Default)
 | 
						|
						{
 | 
						|
							eBarImageSize imgSize=((SideBarPanelItem)m_Parent).ItemImageSize;
 | 
						|
							if(imgSize==eBarImageSize.Medium && owner.ImagesMedium!=null)
 | 
						|
								return owner.ImagesMedium.Images[ImageIndex];
 | 
						|
							else if(imgSize==eBarImageSize.Large && owner.ImagesLarge!=null)
 | 
						|
								return owner.ImagesLarge.Images[ImageIndex];
 | 
						|
							else if(owner.Images!=null)
 | 
						|
								return owner.Images.Images[ImageIndex];
 | 
						|
						}
 | 
						|
						else if(owner.Images!=null)
 | 
						|
						{
 | 
						|
							if(ImageIndex==m_ImageIndex)
 | 
						|
							{
 | 
						|
								if(m_ImageCachedIdx==null)
 | 
						|
									m_ImageCachedIdx=owner.Images.Images[ImageIndex];
 | 
						|
 | 
						|
								return m_ImageCachedIdx;
 | 
						|
							}
 | 
						|
							else
 | 
						|
								return owner.Images.Images[ImageIndex];
 | 
						|
						}
 | 
						|
					}
 | 
						|
					catch(Exception)
 | 
						|
					{
 | 
						|
						return null;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
 | 
						|
		private System.Drawing.Size IconSize
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				// Default Icon Size
 | 
						|
				System.Drawing.Size size=new Size(16,16);
 | 
						|
				IBarImageSize iImageSize=null;
 | 
						|
				if(_ItemPaintArgs!=null)
 | 
						|
				{
 | 
						|
					iImageSize=_ItemPaintArgs.ContainerControl as IBarImageSize;
 | 
						|
				}
 | 
						|
				if(iImageSize==null) iImageSize=this.ContainerControl as IBarImageSize; 
 | 
						|
 | 
						|
				try
 | 
						|
				{
 | 
						|
					if(iImageSize!=null && iImageSize.ImageSize!=eBarImageSize.Default)
 | 
						|
					{
 | 
						|
						if(iImageSize.ImageSize==eBarImageSize.Medium)
 | 
						|
							size=new Size(24,24);
 | 
						|
						else if(iImageSize.ImageSize==eBarImageSize.Large)
 | 
						|
							size=new Size(32,32);
 | 
						|
					}
 | 
						|
					else if(m_Parent is SideBarPanelItem && ((SideBarPanelItem)m_Parent).ItemImageSize!=eBarImageSize.Default)
 | 
						|
					{
 | 
						|
						eBarImageSize imgSize=((SideBarPanelItem)m_Parent).ItemImageSize;
 | 
						|
						if(imgSize==eBarImageSize.Medium)
 | 
						|
							size=new Size(24,24);
 | 
						|
						else if(imgSize==eBarImageSize.Large)
 | 
						|
							size=new Size(32,32);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				catch(Exception)
 | 
						|
				{
 | 
						|
				}
 | 
						|
 | 
						|
				return size;
 | 
						|
			}
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnCommandChanged()
 | 
						|
        {
 | 
						|
            if (!this.DesignMode && this.Command == null)
 | 
						|
                this.Text = "";
 | 
						|
            base.OnCommandChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        private eOrientation _TextOrientation = eOrientation.Horizontal;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets text-orientation. Default is horizontal.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eOrientation.Horizontal), Category("Appearance"), Description("Indicates text-orientation")]
 | 
						|
        public eOrientation TextOrientation
 | 
						|
        {
 | 
						|
            get { return _TextOrientation; }
 | 
						|
            set 
 | 
						|
            {
 | 
						|
                _TextOrientation = value;
 | 
						|
                NeedRecalcSize = true;
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _VerticalTextTopUp = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets how vertical text is rotated when TextOrientation = Vertical.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Appearance"), Description("Indicates how vertical text is rotated when TextOrientation = Vertical.")]
 | 
						|
        public bool VerticalTextTopUp
 | 
						|
        {
 | 
						|
            get { return _VerticalTextTopUp; }
 | 
						|
            set 
 | 
						|
            { 
 | 
						|
                _VerticalTextTopUp = value;
 | 
						|
                if (_TextOrientation == eOrientation.Vertical)
 | 
						|
                {
 | 
						|
                    this.Refresh();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <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 label instead of the image. Setting the symbol overrides the image setting.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(""), Category("Appearance"), Description("Indicates the symbol displayed on face of the tile 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"));
 | 
						|
            NeedRecalcSize = true;
 | 
						|
            OnAppearanceChanged();
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        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)
 | 
						|
        {
 | 
						|
            NeedRecalcSize = true;
 | 
						|
            OnAppearanceChanged();
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        private float _SymbolSize = 0f;
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates the size of the symbol in points.
 | 
						|
        /// </summary>
 | 
						|
        [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);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Called when SymbolSize property has changed.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="oldValue">Old property value</param>
 | 
						|
        /// <param name="newValue">New property value</param>
 | 
						|
        protected virtual void OnSymbolSizeChanged(float oldValue, float newValue)
 | 
						|
        {
 | 
						|
            //OnPropertyChanged(new PropertyChangedEventArgs("SymbolSize"));
 | 
						|
            NeedRecalcSize = true;
 | 
						|
            OnAppearanceChanged();
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _SymbolColor = Color.Empty;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the color of the symbol.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Columns"), Description("Indicates color of the symbol.")]
 | 
						|
        public Color SymbolColor
 | 
						|
        {
 | 
						|
            get { return _SymbolColor; }
 | 
						|
            set { _SymbolColor = value; this.Refresh(); }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeSymbolColor()
 | 
						|
        {
 | 
						|
            return !_SymbolColor.IsEmpty;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Resets property to its default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetSymbolColor()
 | 
						|
        {
 | 
						|
            this.SymbolColor = Color.Empty;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Markup Support
 | 
						|
        protected override void TextMarkupLinkClick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            TextMarkup.HyperLink link = sender as TextMarkup.HyperLink;
 | 
						|
            if(link!=null)
 | 
						|
                OnMarkupLinkClick(new MarkupLinkClickEventArgs(link.Name, link.HRef));
 | 
						|
            base.TextMarkupLinkClick(sender, e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnMarkupLinkClick(MarkupLinkClickEventArgs e)
 | 
						|
        {
 | 
						|
            if (this.MarkupLinkClick != null)
 | 
						|
                MarkupLinkClick(this, e);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IBlockExtended Members
 | 
						|
        private bool _ContainerNewLineAfter = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether label hosted in multi-line ItemContainer triggers new line switch after label is processed.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Layout"), Description("Indicates whether label hosted in multi-line ItemContainer triggers new line switch after label is processed.")]
 | 
						|
        public bool ContainerNewLineAfter
 | 
						|
        {
 | 
						|
            get { return _ContainerNewLineAfter; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _ContainerNewLineAfter = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        
 | 
						|
        bool IBlockExtended.IsBlockElement
 | 
						|
        {
 | 
						|
            get { return false; }
 | 
						|
        }
 | 
						|
 | 
						|
        bool IBlockExtended.IsNewLineAfterElement
 | 
						|
        {
 | 
						|
            get { return _ContainerNewLineAfter; }
 | 
						|
        }
 | 
						|
 | 
						|
        bool IBlockExtended.CanStartNewLine
 | 
						|
        {
 | 
						|
            get { return true; }
 | 
						|
        }
 | 
						|
 | 
						|
        bool IBlockExtended.IsBlockContainer
 | 
						|
        {
 | 
						|
            get { return false; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |