1056 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1056 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents a progress bar item.
 | 
						|
    /// </summary>
 | 
						|
    [ToolboxItem(false), Designer("DevComponents.DotNetBar.Design.SimpleItemDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
 | 
						|
    public class ProgressBarItem : ImageItem, IPersonalizedMenuItem
 | 
						|
    {
 | 
						|
        // IPersonalizedMenuItem Implementation
 | 
						|
        private eMenuVisibility m_MenuVisibility = eMenuVisibility.VisibleAlways;
 | 
						|
        private bool m_RecentlyUsed = false;
 | 
						|
        private int m_Maximum = 100;
 | 
						|
        private int m_Minimum = 0;
 | 
						|
        private int m_Value = 0;
 | 
						|
        private int m_Step = 1;
 | 
						|
        private bool m_TextVisible = false;
 | 
						|
        public event EventHandler ValueChanged;
 | 
						|
        private int m_Width = 96;
 | 
						|
        private int m_Height = 0;
 | 
						|
        //private ItemStyle m_BackgroundStyle = new ItemStyle();
 | 
						|
        private ElementStyle m_BackgroundStyle = null;
 | 
						|
        private Color m_ChunkColor = Color.Empty;
 | 
						|
        private Color m_ChunkColor2 = Color.Empty;
 | 
						|
        private float m_ChunkGradientAngle = 0;
 | 
						|
        private eProgressItemType m_ProgressType = eProgressItemType.Standard;
 | 
						|
        private int m_MarqueeAnimationSpeed = 100;
 | 
						|
        private int m_MarqueeValue = 0;
 | 
						|
        private eProgressBarItemColor m_ColorTable = eProgressBarItemColor.Normal;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of ProgressBarItem.
 | 
						|
        /// </summary>
 | 
						|
        public ProgressBarItem() : this("", "") { }
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of ProgressBarItem and assigns the name to it.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sItemName">Item name.</param>
 | 
						|
        public ProgressBarItem(string sItemName) : this(sItemName, "") { }
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of ProgressBarItem and assigns the name and text to it.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sItemName">Item name.</param>
 | 
						|
        /// <param name="ItemText">item text.</param>
 | 
						|
        public ProgressBarItem(string sItemName, string ItemText)
 | 
						|
            : base(sItemName, ItemText)
 | 
						|
        {
 | 
						|
            ResetBackgroundStyle();
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Returns copy of the item.
 | 
						|
        /// </summary>
 | 
						|
        public override BaseItem Copy()
 | 
						|
        {
 | 
						|
            ProgressBarItem objCopy = new ProgressBarItem(m_Name);
 | 
						|
            this.CopyToItem(objCopy);
 | 
						|
            return objCopy;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Copies the ProgressBarItem specific properties to new instance of the item.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="copy">New ProgressBarItem instance.</param>
 | 
						|
        internal void InternalCopyToItem(ProgressBarItem copy)
 | 
						|
        {
 | 
						|
            CopyToItem(copy);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Copies the ProgressBarItem specific properties to new instance of the item.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="copy">New ProgressBarItem instance.</param>
 | 
						|
        protected override void CopyToItem(BaseItem copy)
 | 
						|
        {
 | 
						|
            ProgressBarItem objCopy = copy as ProgressBarItem;
 | 
						|
            base.CopyToItem(objCopy);
 | 
						|
 | 
						|
            objCopy.Minimum = this.Minimum;
 | 
						|
            objCopy.Maximum = this.Maximum;
 | 
						|
            objCopy.Step = this.Step;
 | 
						|
            objCopy.TextVisible = this.TextVisible;
 | 
						|
            objCopy.Width = this.Width;
 | 
						|
            objCopy.Style = this.Style;
 | 
						|
            objCopy.Value = this.Value;
 | 
						|
 | 
						|
            objCopy.ChunkColor = ChunkColor;
 | 
						|
            objCopy.ChunkColor2 = ChunkColor2;
 | 
						|
            objCopy.ChunkGradientAngle = ChunkGradientAngle;
 | 
						|
            objCopy.ColorTable = ColorTable;
 | 
						|
        }
 | 
						|
 | 
						|
        private Brush GetChunkBrush(Rectangle rect, ColorDescription cd)
 | 
						|
        {
 | 
						|
            if (cd.ChunkColor2.IsEmpty)
 | 
						|
                return new SolidBrush(cd.ChunkColor);
 | 
						|
            
 | 
						|
            return DisplayHelp.CreateLinearGradientBrush(rect, cd.ChunkColor, cd.ChunkColor2, cd.ChunkGradientAngle);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Overriden. Draws the item.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g">Target Graphics object.</param>
 | 
						|
        public override void Paint(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            const float chunkFraction = .65f;
 | 
						|
            const int chunkSpacing = 2;
 | 
						|
 | 
						|
            if (this.SuspendLayout)
 | 
						|
                return;
 | 
						|
 | 
						|
            if (this.IsThemed && PaintThemed(pa))
 | 
						|
                return;
 | 
						|
 | 
						|
            ColorDescription cd = GetColorDescription();
 | 
						|
            cd.BackgroundStyle.SetColorScheme(pa.Colors);
 | 
						|
            
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
 | 
						|
            Font font = this.GetFont();
 | 
						|
 | 
						|
            if (BarFunctions.IsOffice2007Style(this.EffectiveStyle))
 | 
						|
            {
 | 
						|
                Rendering.BaseRenderer renderer = pa.Renderer;
 | 
						|
                if (renderer != null)
 | 
						|
                {
 | 
						|
                    renderer.DrawProgressBarItem(new ProgressBarItemRenderEventArgs(pa.Graphics, this, pa.Font, pa.RightToLeft));
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                Rectangle rect = m_Rect;
 | 
						|
 | 
						|
                //rect.Inflate(-1, 0);
 | 
						|
 | 
						|
                // Paint Background
 | 
						|
                ElementStyleDisplay.Paint(new ElementStyleDisplayInfo(cd.BackgroundStyle, g, rect));
 | 
						|
                
 | 
						|
                // Paint progress
 | 
						|
                rect.Inflate(-ElementStyleLayout.HorizontalStyleWhiteSpace(cd.BackgroundStyle), -ElementStyleLayout.VerticalStyleWhiteSpace(cd.BackgroundStyle));
 | 
						|
 | 
						|
                switch (this.EffectiveStyle)
 | 
						|
                {
 | 
						|
                    case eDotNetBarStyle.OfficeXP:
 | 
						|
                        {
 | 
						|
                            Rectangle origRect = rect;
 | 
						|
                            // Bar progress
 | 
						|
                            int chunkWidth = (int)Math.Floor(rect.Height * chunkFraction);
 | 
						|
                            if (chunkWidth <= 0)
 | 
						|
                                chunkWidth = 2;
 | 
						|
                            int chunk100 = (int)Math.Ceiling((double)rect.Width / (chunkWidth + chunkSpacing));
 | 
						|
                            Region oldClip = g.Clip;
 | 
						|
                            g.SetClip(rect, CombineMode.Intersect);
 | 
						|
                            int chunkCount = (int)(chunk100 * ((float)(m_Value - m_Minimum) / (float)(m_Maximum - m_Minimum)));
 | 
						|
 | 
						|
                            int startX = rect.X;
 | 
						|
                            if (m_ProgressType == eProgressItemType.Marquee)
 | 
						|
                            {
 | 
						|
                                chunkCount = 5;
 | 
						|
                                startX += rect.Width * m_MarqueeValue / 100 - (int)(chunkWidth * chunkCount * .65);
 | 
						|
                            }
 | 
						|
 | 
						|
                            using(Brush brush = GetChunkBrush(origRect, cd))
 | 
						|
                            {
 | 
						|
                                int x = startX;
 | 
						|
                                for (int i = 0; i < chunkCount; i++)
 | 
						|
                                {
 | 
						|
                                    g.FillRectangle(brush, x, rect.Y, chunkWidth, rect.Height);
 | 
						|
                                    x += (chunkWidth + chunkSpacing);
 | 
						|
                                    if (m_ProgressType == eProgressItemType.Marquee && x > rect.Right)
 | 
						|
                                        x = rect.X;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
 | 
						|
                            g.Clip = oldClip;
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    case eDotNetBarStyle.Office2000:
 | 
						|
                        {
 | 
						|
                            // Simple Progress Bar
 | 
						|
                            Region oldClip = g.Clip;
 | 
						|
                            g.SetClip(rect, CombineMode.Intersect);
 | 
						|
 | 
						|
                            Rectangle origRect = rect;
 | 
						|
                            if (m_ProgressType == eProgressItemType.Marquee)
 | 
						|
                            {
 | 
						|
                                rect.Width = (int)(rect.Width * .29);
 | 
						|
                                rect.X += origRect.Width * m_MarqueeValue / 100 - (int)(rect.Width/2);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                                rect.Width = (int)(rect.Width * ((float)(m_Value - m_Minimum) / (float)(m_Maximum - m_Minimum)));
 | 
						|
 | 
						|
                            using(Brush brush = GetChunkBrush(origRect, cd))
 | 
						|
                            {
 | 
						|
                                g.FillRectangle(brush, rect);
 | 
						|
                                if (m_ProgressType == eProgressItemType.Marquee && rect.Right > origRect.Right + 4)
 | 
						|
                                {
 | 
						|
                                    rect = new Rectangle(origRect.X, origRect.Y, rect.Right - origRect.Right - 4, origRect.Height);
 | 
						|
                                    g.FillRectangle(brush, rect);
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
 | 
						|
                            g.Clip = oldClip;
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    case eDotNetBarStyle.Office2003:
 | 
						|
                    case eDotNetBarStyle.VS2005:
 | 
						|
                        {
 | 
						|
                            // Bar progress
 | 
						|
                            int chunkWidth = (int)Math.Floor(rect.Height * chunkFraction);
 | 
						|
                            if (chunkWidth <= 0)
 | 
						|
                                chunkWidth = 2;
 | 
						|
                            int chunk100 = (int)Math.Ceiling((double)rect.Width / (chunkWidth + chunkSpacing));
 | 
						|
                            Region oldClip = g.Clip;
 | 
						|
                            g.SetClip(rect, CombineMode.Intersect);
 | 
						|
                            int chunkCount = (int)(chunk100 * ((float)(m_Value - m_Minimum) / (float)(m_Maximum - m_Minimum)));
 | 
						|
 | 
						|
                            int startX = rect.X;
 | 
						|
                            if (m_ProgressType == eProgressItemType.Marquee)
 | 
						|
                            {
 | 
						|
                                chunkCount = 5;
 | 
						|
                                startX += rect.Width * m_MarqueeValue / 100 - (int)(chunkWidth * chunkCount * .65);
 | 
						|
                            }
 | 
						|
 | 
						|
                            Brush brush = null;
 | 
						|
                            if (cd.ChunkColor2.IsEmpty)
 | 
						|
                                brush = new SolidBrush(cd.ChunkColor);
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                LinearGradientBrush lg = DisplayHelp.CreateLinearGradientBrush(new Rectangle(0, 0, chunkWidth, rect.Height), cd.ChunkColor, cd.ChunkColor2, cd.ChunkGradientAngle);
 | 
						|
                                lg.SetBlendTriangularShape(.1f);
 | 
						|
                                brush = lg;
 | 
						|
                            }
 | 
						|
                            try
 | 
						|
                            {
 | 
						|
                                int x = startX;
 | 
						|
                                for (int i = 0; i < chunkCount; i++)
 | 
						|
                                {
 | 
						|
                                    g.FillRectangle(brush, x, rect.Y, chunkWidth, rect.Height);
 | 
						|
                                    x += (chunkWidth + chunkSpacing);
 | 
						|
                                    if (m_ProgressType == eProgressItemType.Marquee && x > rect.Right)
 | 
						|
                                        x = rect.X;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            finally
 | 
						|
                            {
 | 
						|
                                brush.Dispose();
 | 
						|
                            }
 | 
						|
                            
 | 
						|
                            g.Clip = oldClip;
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            // Paint Text On Top
 | 
						|
            if (m_TextVisible)
 | 
						|
                ElementStyleDisplay.PaintText(new ElementStyleDisplayInfo(cd.BackgroundStyle, g, m_Rect), m_Text, font);
 | 
						|
 | 
						|
            if (this.DesignMode && this.Focused)
 | 
						|
            {
 | 
						|
                Rectangle r = m_Rect;
 | 
						|
                r.Inflate(-1, -1);
 | 
						|
                DesignTime.DrawDesignTimeSelection(g, r, pa.Colors.ItemDesignTimeBorder);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool PaintThemed(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            if (this.SuspendLayout)
 | 
						|
                return true;
 | 
						|
            if (m_NeedRecalcSize)
 | 
						|
                RecalcSize();
 | 
						|
 | 
						|
            System.Drawing.Graphics g = pa.Graphics;
 | 
						|
 | 
						|
            ThemeProgress theme = pa.ThemeProgress;
 | 
						|
            if (theme == null)
 | 
						|
                return false;
 | 
						|
            ThemeProgressParts part = ThemeProgressParts.Bar;
 | 
						|
 | 
						|
            Rectangle r = m_Rect;
 | 
						|
            r.Inflate(-1, -1);
 | 
						|
            theme.DrawBackground(g, part, ThemeProgressStates.Normal, r);
 | 
						|
 | 
						|
            part = ThemeProgressParts.Chunk;
 | 
						|
            r.Width = (int)(r.Width * ((float)(m_Value - m_Minimum) / (float)(m_Maximum - m_Minimum)));
 | 
						|
            if (r.Width > 5)
 | 
						|
            {
 | 
						|
                r.Inflate(-4, -4);
 | 
						|
                theme.DrawBackground(g, part, ThemeProgressStates.Normal, r);
 | 
						|
            }
 | 
						|
 | 
						|
            if (this.DesignMode && this.Focused)
 | 
						|
            {
 | 
						|
                r = m_Rect;
 | 
						|
                r.Inflate(-1, -1);
 | 
						|
                DesignTime.DrawDesignTimeSelection(g, r, pa.Colors.ItemDesignTimeBorder);
 | 
						|
            }
 | 
						|
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual Font GetFont()
 | 
						|
        {
 | 
						|
            // TODO: Check performance implications of cloning the font all the time instead of
 | 
						|
            // getting the stored copy all the time
 | 
						|
            System.Windows.Forms.Control objCtrl = this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
            if (objCtrl != null)
 | 
						|
                return (Font)objCtrl.Font;
 | 
						|
            return SystemFonts.DefaultFont; // (Font)System.Windows.Forms.SystemInformation.MenuFont;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Overriden. Recalculates the size of the item.
 | 
						|
        /// </summary>
 | 
						|
        public override void RecalcSize()
 | 
						|
        {
 | 
						|
            if (this.SuspendLayout)
 | 
						|
                return;
 | 
						|
 | 
						|
            int height = Dpi.Height(m_Height), width = Dpi.Width(m_Width);
 | 
						|
 | 
						|
            if ((m_Width == 0 || m_Height == 0) && m_TextVisible)
 | 
						|
            {
 | 
						|
                // Auto-size item
 | 
						|
                System.Windows.Forms.Control objCtrl = this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
                if (!IsHandleValid(objCtrl))
 | 
						|
                    return;
 | 
						|
 | 
						|
                Graphics g = BarFunctions.CreateGraphics(objCtrl);
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    ElementStyle backgroundStyle = GetBackgroundStyle();
 | 
						|
                    // Measure string
 | 
						|
                    Font objCurrentFont = GetFont();
 | 
						|
 | 
						|
                    Size objStringSize = Size.Empty;
 | 
						|
                    eTextFormat objStringFormat = backgroundStyle.TextFormat;
 | 
						|
 | 
						|
                    if (m_Text != "")
 | 
						|
                    {
 | 
						|
                        objStringSize = TextDrawing.MeasureString(g, m_Text, objCurrentFont, 0, objStringFormat);
 | 
						|
                        objStringSize.Width += 4;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        objStringSize = TextDrawing.MeasureString(g, " ", objCurrentFont, 0, objStringFormat);
 | 
						|
                        objStringSize.Width += 4;
 | 
						|
                    }
 | 
						|
                    if (backgroundStyle.Border != eStyleBorderType.None)
 | 
						|
                        objStringSize.Width += 4;
 | 
						|
 | 
						|
                    objStringSize.Height += Dpi.Height6;
 | 
						|
 | 
						|
                    if (m_Width == 0)
 | 
						|
                        width = (int)objStringSize.Width;
 | 
						|
                    if (m_Height == 0)
 | 
						|
                        height = (int)objStringSize.Height;
 | 
						|
                }
 | 
						|
                finally
 | 
						|
                {
 | 
						|
                    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
 | 
						|
                    g.SmoothingMode = SmoothingMode.Default;
 | 
						|
                    g.Dispose();
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (m_Height == 0)
 | 
						|
                    height = Dpi.Height(this.ImageSize.Height);
 | 
						|
                else
 | 
						|
                    height = Dpi.Height(m_Height);
 | 
						|
                if (m_Width == 0)
 | 
						|
                    width = Dpi.Width(96);
 | 
						|
                else
 | 
						|
                    width = Dpi.Width(m_Width);
 | 
						|
            }
 | 
						|
 | 
						|
            if (this.Orientation == eOrientation.Horizontal)
 | 
						|
            {
 | 
						|
                this.HeightInternal = height;
 | 
						|
                this.WidthInternal = width;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                this.HeightInternal = width;
 | 
						|
                this.WidthInternal = height;
 | 
						|
            }
 | 
						|
 | 
						|
            base.RecalcSize();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the item background style.
 | 
						|
        /// </summary>
 | 
						|
        [Obsolete("BackgroundStyle property is replaced with the BackStyle property"), Browsable(false), Category("Style"), Description("Gets or sets the background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public ItemStyle BackgroundStyle
 | 
						|
        {
 | 
						|
            get { return null; }
 | 
						|
            set { }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Specifies the background style of the item.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), Category("Style"), Description("Gets or sets bar background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public ElementStyle BackStyle
 | 
						|
        {
 | 
						|
            get { return m_BackgroundStyle; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value == null)
 | 
						|
                    throw new InvalidOperationException("Null is not valid value for this property.");
 | 
						|
                m_BackgroundStyle = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Resets style to default value. Used by windows forms designer.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetBackgroundStyle()
 | 
						|
        {
 | 
						|
            if(m_BackgroundStyle!=null)
 | 
						|
                m_BackgroundStyle.StyleChanged -= new EventHandler(this.VisualPropertyChanged);
 | 
						|
            m_BackgroundStyle = new ElementStyle();
 | 
						|
            m_BackgroundStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        private void VisualPropertyChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            this.OnAppearanceChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        private class ColorDescription
 | 
						|
        {
 | 
						|
            public ElementStyle BackgroundStyle = null;
 | 
						|
            public Color ChunkColor = Color.Empty;
 | 
						|
            public Color ChunkColor2 = Color.Empty;
 | 
						|
            public int ChunkGradientAngle = 0;
 | 
						|
            public ColorDescription() { }
 | 
						|
            public ColorDescription(ElementStyle style, Color chunkColor, Color chunkColor2, int chunkGradientAngle)
 | 
						|
            {
 | 
						|
                this.BackgroundStyle = style;
 | 
						|
                this.ChunkColor = chunkColor;
 | 
						|
                this.ChunkColor2 = chunkColor2;
 | 
						|
                this.ChunkGradientAngle = chunkGradientAngle;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private ColorDescription GetColorDescription()
 | 
						|
        {
 | 
						|
            ElementStyle style = null;
 | 
						|
            Color chunkColor = Color.Empty;
 | 
						|
            Color chunkColor2 = Color.Empty;
 | 
						|
            int chunkGradientAngle = (int)m_ChunkGradientAngle;
 | 
						|
            if (m_BackgroundStyle.Custom)
 | 
						|
                style = m_BackgroundStyle;
 | 
						|
            else
 | 
						|
                style = GetBackgroundStyle();
 | 
						|
 | 
						|
            if (!m_ChunkColor.IsEmpty)
 | 
						|
            {
 | 
						|
                chunkColor = m_ChunkColor;
 | 
						|
                chunkColor2 = m_ChunkColor2;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                switch (this.EffectiveStyle)
 | 
						|
                {
 | 
						|
                    case eDotNetBarStyle.Office2000:
 | 
						|
                    case eDotNetBarStyle.OfficeXP:
 | 
						|
                        {
 | 
						|
                            chunkColor = SystemColors.Highlight;
 | 
						|
                            chunkColor2 = Color.Empty;
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    default:
 | 
						|
                        {
 | 
						|
                            ColorScheme scheme = GetColorScheme();
 | 
						|
                            chunkGradientAngle = 90;
 | 
						|
                            chunkColor = scheme.ItemPressedBackground;
 | 
						|
                            chunkColor2 = scheme.ItemPressedBackground2;
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (this.Orientation == eOrientation.Vertical)
 | 
						|
                style.TextOrientation = eOrientation.Vertical;
 | 
						|
            else
 | 
						|
                style.TextOrientation = eOrientation.Horizontal;
 | 
						|
 | 
						|
            return new ColorDescription(style, chunkColor, chunkColor2, chunkGradientAngle);
 | 
						|
        }
 | 
						|
 | 
						|
        private ColorScheme GetColorScheme()
 | 
						|
        {
 | 
						|
            ColorScheme scheme = null;
 | 
						|
            Control cc = this.ContainerControl as Control;
 | 
						|
            if (cc is Bar)
 | 
						|
                scheme = ((Bar)cc).ColorScheme;
 | 
						|
            else if (cc is MenuPanel)
 | 
						|
                scheme = ((MenuPanel)cc).ColorScheme;
 | 
						|
            else if (cc is ItemControl)
 | 
						|
                scheme = ((ItemControl)cc).ColorScheme;
 | 
						|
            else if (cc is BaseItemControl)
 | 
						|
                scheme = ((BaseItemControl)cc).ColorScheme;
 | 
						|
 | 
						|
            if (scheme == null)
 | 
						|
                scheme = new ColorScheme(this.EffectiveStyle);
 | 
						|
 | 
						|
            return scheme;
 | 
						|
        }
 | 
						|
        private ElementStyle m_CachedStyle = null;
 | 
						|
        private ElementStyle GetBackgroundStyle()
 | 
						|
        {
 | 
						|
            if (m_CachedStyle != null)
 | 
						|
                return m_CachedStyle;
 | 
						|
 | 
						|
            ElementStyle style = new ElementStyle();
 | 
						|
 | 
						|
            if (this.EffectiveStyle == eDotNetBarStyle.Office2000 || this.EffectiveStyle == eDotNetBarStyle.OfficeXP)
 | 
						|
            {
 | 
						|
                style.Border = eStyleBorderType.Solid;
 | 
						|
                style.BorderWidth = 1;
 | 
						|
                style.BorderColor = SystemColors.ControlDark;
 | 
						|
                style.BackColor = SystemColors.Control;
 | 
						|
                style.TextColor = SystemColors.ControlText;
 | 
						|
            }
 | 
						|
            else if (this.EffectiveStyle == eDotNetBarStyle.Office2003 || this.EffectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(this.EffectiveStyle))
 | 
						|
            {
 | 
						|
                ColorScheme scheme = null;
 | 
						|
                if (this.ContainerControl is Bar)
 | 
						|
                    scheme = ((Bar)this.ContainerControl).ColorScheme;
 | 
						|
                else if (this.ContainerControl is MenuPanel)
 | 
						|
                    scheme = ((MenuPanel)this.ContainerControl).ColorScheme;
 | 
						|
                if (scheme == null)
 | 
						|
                    scheme = new ColorScheme(this.EffectiveStyle);
 | 
						|
 | 
						|
                style.Border = eStyleBorderType.Solid;
 | 
						|
                style.BorderWidth = 1;
 | 
						|
                style.BorderColorSchemePart = eColorSchemePart.BarDockedBorder;
 | 
						|
                style.BackColorSchemePart = eColorSchemePart.BarBackground;
 | 
						|
                style.BackColor2SchemePart = eColorSchemePart.BarBackground2;
 | 
						|
                style.BackColorGradientAngle = 90;
 | 
						|
                style.TextColorSchemePart = eColorSchemePart.ItemText;
 | 
						|
            }
 | 
						|
            style.TextLineAlignment = eStyleTextAlignment.Center;
 | 
						|
            style.TextAlignment = eStyleTextAlignment.Center;
 | 
						|
            m_CachedStyle = style;
 | 
						|
 | 
						|
            return m_CachedStyle;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnStyleChanged()
 | 
						|
        {
 | 
						|
            m_CachedStyle = null;
 | 
						|
            base.OnStyleChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the maximum value of the range of the control.
 | 
						|
        /// </summary>
 | 
						|
        [DevCoBrowsable(true), Browsable(true), Description("Gets or sets the maximum value of the range of the control."), Category("Behavior"), DefaultValue(100)]
 | 
						|
        public int Maximum
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_Maximum;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_Maximum = value;
 | 
						|
                this.Refresh();
 | 
						|
                OnAppearanceChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the minimum value of the range of the control.
 | 
						|
        /// </summary>
 | 
						|
        [DevCoBrowsable(true), Browsable(true), Description("Gets or sets the minimum value of the range of the control."), Category("Behavior"), DefaultValue(0)]
 | 
						|
        public int Minimum
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_Minimum;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_Minimum = value;
 | 
						|
                this.Refresh();
 | 
						|
                OnAppearanceChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the current position of the progress bar.
 | 
						|
        /// </summary>
 | 
						|
        [DevCoBrowsable(true), Browsable(true), Description("Gets or sets the current position of the progress bar."), Category("Behavior"), DefaultValue(0)]
 | 
						|
        public int Value
 | 
						|
        {
 | 
						|
            get { return m_Value; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                int oldValue = m_Value;
 | 
						|
 | 
						|
                if (value < m_Minimum)
 | 
						|
                    m_Value = m_Minimum;
 | 
						|
                else if (value > m_Maximum)
 | 
						|
                    m_Value = m_Maximum;
 | 
						|
                else
 | 
						|
                    m_Value = value;
 | 
						|
                if (ValueChanged != null)
 | 
						|
                    ValueChanged(this, new EventArgs());
 | 
						|
 | 
						|
                if (GetNeedVisualUpdate(oldValue, m_Value))
 | 
						|
                {
 | 
						|
                    this.Refresh();
 | 
						|
                    OnAppearanceChanged();
 | 
						|
                    Control c = this.ContainerControl as Control;
 | 
						|
                    if (c != null) c.Update();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool GetNeedVisualUpdate(int oldValue, int newValue)
 | 
						|
        {
 | 
						|
            int oldW = (int)(this.WidthInternal * ((float)oldValue / (m_Maximum - m_Minimum)));
 | 
						|
            int newW = (int)(this.WidthInternal * ((float)newValue / (m_Maximum - m_Minimum)));
 | 
						|
            return oldW != newW;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the amount by which a call to the PerformStep method increases the current position of the progress bar.
 | 
						|
        /// </summary>
 | 
						|
        [DevCoBrowsable(true), Browsable(true), Description("Gets or sets the amount by which a call to the PerformStep method increases the current position of the progress bar."), Category("Behavior"), DefaultValue(1)]
 | 
						|
        public int Step
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_Step;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_Step = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Advances the current position of the progress bar by the amount of the Step property.
 | 
						|
        /// </summary>
 | 
						|
        public void PerformStep()
 | 
						|
        {
 | 
						|
            this.Value += m_Step;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Advances the current position of the progress bar by the specified amount.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="value">The amount by which to increment the progress bar's current position. </param>
 | 
						|
        public void Increment(int value)
 | 
						|
        {
 | 
						|
            this.Value += value;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether the text inside the progress bar is displayed.
 | 
						|
        /// </summary>
 | 
						|
        [DevCoBrowsable(true), Browsable(true), Description("Gets or sets whether the text inside the progress bar is displayed."), Category("Behavior"), DefaultValue(false)]
 | 
						|
        public bool TextVisible
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_TextVisible;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_TextVisible = value;
 | 
						|
                this.Refresh();
 | 
						|
                OnAppearanceChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the width of the item in pixels. 0 value indicates the auto-sizing item based on the text contained in it.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), DefaultValue(96), 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;
 | 
						|
                this.Refresh();
 | 
						|
                OnAppearanceChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the height of the label. 0 value indicates the auto-sizing item based on the text height.
 | 
						|
        /// </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;
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the color of the progress chunk.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), Category("Appearance"), Description("Gets or sets the color of the progress chunk.")]
 | 
						|
        public Color ChunkColor
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_ChunkColor;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_ChunkColor = value;
 | 
						|
                OnAppearanceChanged();
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether ChunkColor property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeChunkColor()
 | 
						|
        {
 | 
						|
            return (!m_ChunkColor.IsEmpty);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Resets the ChunkColor property to its default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetChunkColor()
 | 
						|
        {
 | 
						|
            m_ChunkColor = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the target gradient color of the progress chunk.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), Category("Appearance"), Description("Gets or sets the target gradient color of the progress chunk.")]
 | 
						|
        public Color ChunkColor2
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_ChunkColor2;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_ChunkColor2 = value;
 | 
						|
                OnAppearanceChanged();
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether ChunkColor property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeChunkColor2()
 | 
						|
        {
 | 
						|
            return (!m_ChunkColor2.IsEmpty);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Resets the ChunkColor property to its default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetChunkColor2()
 | 
						|
        {
 | 
						|
            m_ChunkColor2 = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the gradient angle of the progress chunk.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), Category("Appearance"), Description("Gets or sets the gradient angle of the progress chunk."), DefaultValue(0)]
 | 
						|
        public float ChunkGradientAngle
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_ChunkGradientAngle;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_ChunkGradientAngle = value;
 | 
						|
                if (!m_ChunkColor2.IsEmpty)
 | 
						|
                    this.Refresh();
 | 
						|
                OnAppearanceChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Overloaded. Deserializes the Item from the XmlElement.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="ItemXmlSource">Source XmlElement.</param>
 | 
						|
        public override void Deserialize(ItemSerializationContext context)
 | 
						|
        {
 | 
						|
            base.Deserialize(context);
 | 
						|
 | 
						|
            System.Xml.XmlElement ItemXmlSource = context.ItemXmlElement;
 | 
						|
 | 
						|
            m_Width = System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("width"));
 | 
						|
            m_Height = System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("height"));
 | 
						|
            m_Value = System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("value"));
 | 
						|
            m_Minimum = System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("min"));
 | 
						|
            m_Maximum = System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("max"));
 | 
						|
            m_TextVisible = System.Xml.XmlConvert.ToBoolean(ItemXmlSource.GetAttribute("textvisible"));
 | 
						|
            m_Step = System.Xml.XmlConvert.ToInt32(ItemXmlSource.GetAttribute("step"));
 | 
						|
            if (ItemXmlSource.HasAttribute("chunkcolor"))
 | 
						|
                m_ChunkColor = BarFunctions.ColorFromString(ItemXmlSource.GetAttribute("chunkcolor"));
 | 
						|
            if (ItemXmlSource.HasAttribute("chunkcolor2"))
 | 
						|
                m_ChunkColor2 = BarFunctions.ColorFromString(ItemXmlSource.GetAttribute("chunkcolor2"));
 | 
						|
            m_ChunkGradientAngle = System.Xml.XmlConvert.ToSingle(ItemXmlSource.GetAttribute("chunkga"));
 | 
						|
 | 
						|
            foreach (System.Xml.XmlElement xmlElem in ItemXmlSource.ChildNodes)
 | 
						|
            {
 | 
						|
                switch (xmlElem.Name)
 | 
						|
                {
 | 
						|
                    case "backstyle2":
 | 
						|
                        {
 | 
						|
                            ElementSerializer.Deserialize(m_BackgroundStyle, xmlElem);
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Overloaded. Serializes the item and all sub-items into the XmlElement.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="ThisItem">XmlElement to serialize the item to.</param>
 | 
						|
        protected internal override void Serialize(ItemSerializationContext context)
 | 
						|
        {
 | 
						|
            base.Serialize(context);
 | 
						|
 | 
						|
            System.Xml.XmlElement ThisItem = context.ItemXmlElement;
 | 
						|
 | 
						|
            ThisItem.SetAttribute("width", System.Xml.XmlConvert.ToString(m_Width));
 | 
						|
            ThisItem.SetAttribute("height", System.Xml.XmlConvert.ToString(m_Height));
 | 
						|
            ThisItem.SetAttribute("value", System.Xml.XmlConvert.ToString(m_Value));
 | 
						|
            ThisItem.SetAttribute("min", System.Xml.XmlConvert.ToString(m_Minimum));
 | 
						|
            ThisItem.SetAttribute("max", System.Xml.XmlConvert.ToString(m_Maximum));
 | 
						|
            ThisItem.SetAttribute("textvisible", System.Xml.XmlConvert.ToString(m_TextVisible));
 | 
						|
            ThisItem.SetAttribute("step", System.Xml.XmlConvert.ToString(m_Step));
 | 
						|
            if (!m_ChunkColor.IsEmpty)
 | 
						|
                ThisItem.SetAttribute("chunkcolor", BarFunctions.ColorToString(m_ChunkColor));
 | 
						|
            if (!m_ChunkColor2.IsEmpty)
 | 
						|
                ThisItem.SetAttribute("chunkcolor2", BarFunctions.ColorToString(m_ChunkColor2));
 | 
						|
            ThisItem.SetAttribute("chunkga", System.Xml.XmlConvert.ToString(m_ChunkGradientAngle));
 | 
						|
 | 
						|
            if (m_BackgroundStyle.Custom)
 | 
						|
            {
 | 
						|
                System.Xml.XmlElement style = ThisItem.OwnerDocument.CreateElement("backstyle2");
 | 
						|
                ThisItem.AppendChild(style);
 | 
						|
                ElementSerializer.Serialize(m_BackgroundStyle, style);
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        // IPersonalizedMenuItem Impementation
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates item's visiblity when on pop-up menu.
 | 
						|
        /// </summary>
 | 
						|
        [System.ComponentModel.Browsable(true), DevCoBrowsable(true), System.ComponentModel.Category("Appearance"), System.ComponentModel.Description("Indicates item's visiblity when on pop-up menu.")]
 | 
						|
        public eMenuVisibility MenuVisibility
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_MenuVisibility;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_MenuVisibility != value)
 | 
						|
                {
 | 
						|
                    m_MenuVisibility = value;
 | 
						|
                    if (ShouldSyncProperties)
 | 
						|
                        BarFunctions.SyncProperty(this, "MenuVisibility");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether item was recently used.
 | 
						|
        /// </summary>
 | 
						|
        [System.ComponentModel.Browsable(false)]
 | 
						|
        public bool RecentlyUsed
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_RecentlyUsed;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_RecentlyUsed != value)
 | 
						|
                {
 | 
						|
                    m_RecentlyUsed = value;
 | 
						|
                    if (ShouldSyncProperties)
 | 
						|
                        BarFunctions.SyncProperty(this, "RecentlyUsed");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the type of progress bar used to indicate progress. The Standard style displays the progress based on Minimum, Maximum and current Value.
 | 
						|
        /// The Marquee type is automatically moving progress bar that is used to indicate an ongoing operation for which the actual duration cannot be estimated.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Behavior"), DefaultValue(eProgressItemType.Standard), Description("Indicates type of progress bar used to indicate progress.")]
 | 
						|
        public eProgressItemType ProgressType
 | 
						|
        {
 | 
						|
            get { return m_ProgressType; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_ProgressType = value;
 | 
						|
                OnProgressTypeChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnDesignModeChanged()
 | 
						|
        {
 | 
						|
            if (this.DesignMode)
 | 
						|
            {
 | 
						|
                if (m_ProgressType == eProgressItemType.Marquee)
 | 
						|
                    DisposeTimer();
 | 
						|
            }
 | 
						|
 | 
						|
            base.OnDesignModeChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnProgressTypeChanged()
 | 
						|
        {
 | 
						|
            if (this.DesignMode) return;
 | 
						|
 | 
						|
            DisposeTimer();
 | 
						|
            if (m_ProgressType == eProgressItemType.Marquee)
 | 
						|
                SetupTimer();
 | 
						|
            this.OnAppearanceChanged();
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        protected internal override void OnVisibleChanged(bool newValue)
 | 
						|
        {
 | 
						|
            base.OnVisibleChanged(newValue);
 | 
						|
            if (m_ProgressType == eProgressItemType.Marquee && m_MarqueeTimer!=null)
 | 
						|
            {
 | 
						|
                if (newValue)
 | 
						|
                    m_MarqueeTimer.Start();
 | 
						|
                else
 | 
						|
                    m_MarqueeTimer.Stop();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            DisposeTimer();
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
        private Timer m_MarqueeTimer = null;
 | 
						|
        private void DisposeTimer()
 | 
						|
        {
 | 
						|
            if (m_MarqueeTimer != null)
 | 
						|
            {
 | 
						|
                m_MarqueeTimer.Tick -= MarqueeTimer_Tick;
 | 
						|
                m_MarqueeTimer.Stop();
 | 
						|
                m_MarqueeTimer.Dispose();
 | 
						|
                m_MarqueeTimer = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void SetupTimer()
 | 
						|
        {
 | 
						|
            if (m_MarqueeTimer != null) DisposeTimer();
 | 
						|
 | 
						|
            m_MarqueeValue = 0;
 | 
						|
            if (m_MarqueeAnimationSpeed == 0) return;
 | 
						|
 | 
						|
            m_MarqueeTimer = new Timer();
 | 
						|
            m_MarqueeTimer.Interval = m_MarqueeAnimationSpeed;
 | 
						|
            m_MarqueeTimer.Tick += MarqueeTimer_Tick;
 | 
						|
            if (this.Visible)
 | 
						|
                m_MarqueeTimer.Start();
 | 
						|
        }
 | 
						|
 | 
						|
        private void MarqueeTimer_Tick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            m_MarqueeValue+=5;
 | 
						|
            if (m_MarqueeValue > 100)
 | 
						|
                m_MarqueeValue = 0;
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        internal int MarqueeValue
 | 
						|
        {
 | 
						|
            get { return m_MarqueeValue; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the marquee animation speed in milliseconds.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(100), Category("Behavior"), Description("Indicates marquee animation speed in milliseconds.")]
 | 
						|
        public int MarqueeAnimationSpeed
 | 
						|
        {
 | 
						|
            get { return m_MarqueeAnimationSpeed; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_MarqueeAnimationSpeed = value;
 | 
						|
                OnProgressTypeChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the predefined color state table for progress bar. Color specified applies to items with Office 2007 style only. It does not have
 | 
						|
        /// any effect on other styles. You can use ColorTable to indicate the state of the operation that Progress Bar is tracking. Default value is eProgressBarItemColor.Normal.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(false), DefaultValue(eProgressBarItemColor.Normal), Category("Appearance"), Description("Indicates predefined color of item when Office 2007 style is used.")]
 | 
						|
        public eProgressBarItemColor ColorTable
 | 
						|
        {
 | 
						|
            get { return m_ColorTable; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_ColorTable != value)
 | 
						|
                {
 | 
						|
                    m_ColorTable = value;
 | 
						|
                    this.Refresh();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |