using System;
using System.Drawing;
using System.Drawing.Design;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Windows.Forms;
namespace DevComponents.DotNetBar
{
	/// 
	/// Represents the Explorer-Bar Group item.
	/// 
    [System.ComponentModel.ToolboxItem(false), Designer("DevComponents.DotNetBar.Design.ExplorerBarGroupItemDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
	public class ExplorerBarGroupItem:ImageItem,IDesignTimeProvider
	{
		#region Private Variables
		private Rectangle m_ExpandButtonRect=Rectangle.Empty;
		private bool m_ExpandButtonHot=false;
		private int m_Margin=2;
		private bool m_MouseOver=false;
		private bool m_MouseDown=false;
		private Rectangle m_PanelRect=Rectangle.Empty;
		private ItemStyleMapper m_HeaderStyle=null;
        private ItemStyleMapper m_HeaderHotStyle=null;
		private ItemStyleMapper m_BackgroundStyle=null;
        private ElementStyle m_TitleStyle = null;
        private ElementStyle m_TitleHotStyle = null;
        private ElementStyle m_BackStyle = null;
		private eExplorerBarStockStyle m_StockStyle=eExplorerBarStockStyle.Custom;
		private bool m_ExpandButtonVisible=true;
		//private eBarImageSize m_ItemImageSize=eBarImageSize.Default;
		private System.Drawing.Point m_MouseDownPt;
		// Used to host items that have windows associated with them....
		//private ExplorerBarPanelControlHost m_ControlHost=null;
		private const int EXPAND_MARGIN=25;
		private System.Drawing.Image m_Image=null;
		private int m_ImageIndex=-1; // Image index if image from ImageList is used
		private System.Drawing.Image m_ImageCachedIdx=null;
		private int m_SubItemsMargin=4;
		private bool m_XPSpecialGroup=false;
		// Expand Button Colors
		private Color m_ExpandBorderColor=Color.DarkGray;
		private Color m_ExpandBackColor=Color.White;
		private Color m_ExpandForeColor=SystemColors.ActiveCaption;
		private Color m_ExpandHotBorderColor=Color.DarkGray;
		private Color m_ExpandHotBackColor=Color.White;
		private Color m_ExpandHotForeColor=SystemColors.ActiveCaption;
		private bool m_HeaderExpands=true;
		private bool m_WordWrapSubItems=true;
		private const string INFO_EMPTYPANEL="Right-click header and choose one of Create commands or use SubItems collection to create new buttons. You can also drag & drop controls on this panel.";
		private bool m_DropShadow=true;
		private ShadowPaintInfo m_ShadowPaintInfo=null;
		#endregion
		/// 
		/// Creates new instance of ExplorerBarGroupItem.
		/// 
		public ExplorerBarGroupItem():this("","") {}
		/// 
		/// Creates new instance of ExplorerBarGroupItem and assigns the name to it.
		/// 
		/// Item name.
		public ExplorerBarGroupItem(string sItemName):this(sItemName,"") {}
		/// 
		/// Creates new instance of ExplorerBarGroupItem and assigns the name and text to it.
		/// 
		/// Item name.
		/// item text.
		public ExplorerBarGroupItem(string sItemName, string ItemText):base(sItemName,ItemText)
		{
			m_IsContainer=true;
			m_AllowOnlyOneSubItemExpanded=false;
            m_TitleStyle = new ElementStyle();
            m_TitleStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
            m_TitleHotStyle = new ElementStyle();
            m_TitleHotStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
            m_BackStyle = new ElementStyle();
            m_BackStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
            m_HeaderStyle = new ItemStyleMapper(m_TitleStyle);
            m_HeaderHotStyle = new ItemStyleMapper(m_TitleHotStyle);
            m_BackgroundStyle = new ItemStyleMapper(m_BackStyle);
            SubItemsImageSize = new Size(12, 12);
            ImageSize = new Size(12, 12);
            //try
            //{
            //    m_HeaderStyle.Font=new Font(System.Windows.Forms.SystemInformation.MenuFont,FontStyle.Bold);
            //    m_HeaderHotStyle.Font=new Font(System.Windows.Forms.SystemInformation.MenuFont,FontStyle.Bold);
            //}
            //catch
            //{
            //    m_HeaderStyle.Font=System.Windows.Forms.SystemInformation.MenuFont.Clone() as Font;
            //    m_HeaderHotStyle.Font=System.Windows.Forms.SystemInformation.MenuFont.Clone() as Font;
            //}
			BarFunctions.SetExplorerBarStyle(this,m_StockStyle);
            //m_BackgroundStyle.VisualPropertyChanged+=new EventHandler(this.VisualPropertyChanged);
            //m_HeaderStyle.VisualPropertyChanged+=new EventHandler(this.VisualPropertyChanged);
            //m_HeaderHotStyle.VisualPropertyChanged+=new EventHandler(this.VisualPropertyChanged);
		}
        protected override void Dispose(bool disposing)
        {
            if (BarUtilities.DisposeItemImages && !this.DesignMode)
            {
                BarUtilities.DisposeImage(ref m_Image);
                BarUtilities.DisposeImage(ref m_ImageCachedIdx);
            }
            base.Dispose(disposing);
        }
		/// 
		/// Returns copy of ExplorerBarGroupItem item.
		/// 
		public override BaseItem Copy()
		{
			ExplorerBarGroupItem objCopy=new ExplorerBarGroupItem();
			this.CopyToItem(objCopy);
			return objCopy;
		}
		protected override void CopyToItem(BaseItem copy)
		{
			ExplorerBarGroupItem objCopy=copy as ExplorerBarGroupItem;
			
			base.CopyToItem(objCopy);
			//objCopy.ItemImageSize=m_ItemImageSize;
		}
		private void VisualPropertyChanged(object sender, EventArgs e)
		{
			VisualPropertyChanged();
		}
		internal void VisualPropertyChanged()
		{
            //ExplorerBar eb=this.ContainerControl as ExplorerBar;
            //if(eb!=null)
            //{
            //    ColorScheme cs=eb.ColorScheme;
            //    m_BackgroundStyle.ApplyColorScheme(cs);
            //    m_HeaderHotStyle.ApplyColorScheme(cs);
            //    m_HeaderStyle.ApplyColorScheme(cs);
            //}
			OnAppearanceChanged();
		}
		public override void RecalcSize()
		{
			System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
			if(!IsHandleValid(objCtrl))
				return;
			
			Graphics g=Graphics.FromHwnd(objCtrl.Handle);
			SizeF objStringSize=SizeF.Empty;
			System.Drawing.Image image=this.GetImage();
			string text=m_Text;
			if(text=="")
				text=" ";
		    int margin = Dpi.Width(m_Margin);
		    int textArea=m_Rect.Width-margin*2;
		    int expandMargin = Dpi.Width(EXPAND_MARGIN);
		    if(m_ExpandButtonVisible)
				textArea-=expandMargin;
			if(image!=null)
				textArea-=(image.Width+margin*2);
			if(textArea<=0)
				textArea=1;
            bool disposeFont = false;
            Font font = this.GetFont(out disposeFont);
            objStringSize = TextDrawing.MeasureString(g, text, font, textArea, m_TitleStyle.TextFormat);
            if (disposeFont) font.Dispose();
			g.Dispose();
			m_Rect.Height=Dpi.Height23;
			if(m_Rect.Height<(int)objStringSize.Height+margin*2)
				m_Rect.Height=(int)objStringSize.Height+margin*2;
			
			if(image!=null)
			{
				int h=m_Rect.Height;
				if(image.Height>m_Rect.Height)
					m_Rect.Height=image.Height+margin*2;
				m_PanelRect=new Rectangle(0,m_Rect.Height-h,m_Rect.Width,h);
			}
			else
				m_PanelRect=new Rectangle(0,0,m_Rect.Width,m_Rect.Height);
			if(m_ExpandButtonVisible)
			{
				m_ExpandButtonRect=new Rectangle(m_PanelRect.Right-expandMargin,m_PanelRect.Y,expandMargin,m_PanelRect.Height);
			}
			
			if(this.Expanded)
			{
				if(m_SubItems!=null)
				{
					int iTop=m_Rect.Bottom+1;
					int iLeft=m_Rect.Left+m_SubItemsMargin;
//					if(m_ControlHost!=null)
//					{
//						iTop=0;
//						iLeft=0;
//					}
					int iIndex=-1;
					foreach(BaseItem item in m_SubItems)
					{
						iIndex++;
						if(!item.Visible)
						{
							item.Displayed=false;
							continue;
						}
						item.WidthInternal=m_Rect.Width-m_SubItemsMargin*2;
                        item.RecalcSize();
						item.WidthInternal=m_Rect.Width-m_SubItemsMargin*2;
						if(item.BeginGroup)
						{
							iTop+=Dpi.Height3;
						}
						item.TopInternal=iTop;
						item.LeftInternal=iLeft;
						iTop+=item.HeightInternal;
						item.Displayed=true;
					}
					m_Rect.Height=iTop-m_Rect.Top+Dpi.Height2;
				}
			}
			else
			{
				foreach(BaseItem item in m_SubItems)
				{
					item.Displayed=false;
				}
			}
			if(this.Expanded && this.DesignMode && this.SubItems.Count==0 && this.Parent!=null && this.Parent.SubItems.Count==1)
			{
				m_Rect.Height+=64;
			}
			base.RecalcSize();
		}
		private Image GetImage()
		{
			if(m_Image!=null)
				return m_Image;
			if(m_ImageIndex>=0)
			{
				return GetImageFromImageList(m_ImageIndex);
			}
			return null;
		}
		private Image GetImageFromImageList(int ImageIndex)
		{
			if(ImageIndex>=0)
			{
				IOwner owner=null;
				Bar bar=null;
				if(owner==null) owner=this.GetOwner() as IOwner;
				if(bar==null) bar=this.ContainerControl as Bar; 
				if(owner!=null)
				{
					try
					{
						if(owner.ImagesMedium!=null)
						{
							if(m_ImageCachedIdx==null)
								m_ImageCachedIdx=owner.ImagesMedium.Images[ImageIndex];
							return m_ImageCachedIdx;
						}
					}
					catch(Exception)
					{
						return null;
					}
				}
			}
			return null;
		}
		private ShadowPaintInfo GetShadowPaintInfo()
		{
			if(m_ShadowPaintInfo==null)
				m_ShadowPaintInfo=new ShadowPaintInfo();
			m_ShadowPaintInfo.Size=3;
			return m_ShadowPaintInfo;
		}
        private bool m_IsPainting = false;
		public override void Paint(ItemPaintArgs pa)
		{
			if(this.DisplayRectangle.Width<=0 || this.DisplayRectangle.Height<=0 || m_IsPainting)
				return;
            m_IsPainting = true;
            try
            {
                if (this.IsThemed)
                {
                    PaintThemed(pa);
                    this.DrawInsertMarker(pa.Graphics);
                    return;
                }
                if (this.SuspendLayout)
                    return;
                System.Drawing.Graphics g = pa.Graphics;
                if (m_NeedRecalcSize)
                    RecalcSize();
                Rectangle r = m_PanelRect;
                r.Offset(m_Rect.X, m_Rect.Y);
                bool disposeFont = false;
                Font font = this.GetFont(out disposeFont);
                System.Windows.Forms.Control ctrl = this.ContainerControl as System.Windows.Forms.Control;
                System.Drawing.Image image = this.GetImage();
                Rectangle rText = r;
                int margin = Dpi.Width(m_Margin);
                rText.X += margin;
                // This is left margin of the text
                rText.X += margin * 2;
                rText.Width -= (margin * 3);
                if (image != null)
                {
                    rText.Width -= (image.Width + margin);
                    rText.X += (image.Width + margin);
                }
                if (m_ExpandButtonVisible)
                    rText.Width -= Dpi.Width(EXPAND_MARGIN);
                ElementStyleDisplayInfo info = new ElementStyleDisplayInfo();
                info.Bounds = r;
                info.Graphics = g;
                if (m_MouseOver)
                    info.Style = m_TitleHotStyle;
                else
                    info.Style = m_TitleStyle;
                ElementStyleDisplay.Paint(info);
                if (info.Style.Font != null)
                    font = info.Style.Font;
                if (pa.RightToLeft)
                {
                    TextDrawing.DrawString(g, m_Text, font, info.Style.TextColor, GetRtlRectangle(m_PanelRect, rText), info.Style.TextFormat | eTextFormat.RightToLeft);
                }
                else
                    TextDrawing.DrawString(g, m_Text, font, info.Style.TextColor, rText, info.Style.TextFormat);
                //g.ResetClip();
                //g.Clip=oldClip;
                if (m_ExpandButtonVisible)
                {
                    Rectangle expandedRect = m_ExpandButtonRect;
                    expandedRect.Offset(m_Rect.X, m_Rect.Y);
                    if (pa.RightToLeft)
                        PaintExpandButton(pa, GetRtlRectangle(m_Rect, expandedRect), m_MouseOver, m_MouseDown, m_Expanded);
                    else
                        PaintExpandButton(pa, expandedRect, m_MouseOver, m_MouseDown, m_Expanded);
                }
                int cornerSize = m_TitleStyle.CornerDiameter;
                // Paint Background
                Rectangle backRect = new Rectangle(m_Rect.X, m_PanelRect.Bottom + m_Rect.Y, m_Rect.Width, m_Rect.Height - m_PanelRect.Bottom);
                if (backRect.Width > 0 && backRect.Height > 0)
                {
                    //g.Clip=new Region(backRect);
                    info.Style = m_BackStyle;
                    info.Bounds = backRect;
                    ElementStyleDisplay.Paint(info);
                    //m_BackgroundStyle.Paint(g,backRect,"",Rectangle.Empty,this.GetFont(),new Point[]{new Point(backRect.X,backRect.Y),new Point(backRect.X,backRect.Bottom-1),new Point(backRect.X,backRect.Bottom-1),new Point(backRect.Right-1,backRect.Bottom-1),new Point(backRect.Right-1,backRect.Bottom-1),new Point(backRect.Right-1,backRect.Y)});
                    //g.ResetClip();
                    //g.Clip=oldClip;
                    if (m_DropShadow)
                    {
                        ShadowPaintInfo shadowInfo = GetShadowPaintInfo();
                        shadowInfo.Rectangle = new Rectangle(m_Rect.X, m_Rect.Y + m_PanelRect.Top + cornerSize, m_Rect.Width, m_Rect.Height - m_PanelRect.Top - cornerSize);
                        shadowInfo.Graphics = g;
                        ShadowPainter.Paint(shadowInfo);
                    }
                }
                else
                {
                    if (m_DropShadow)
                    {
                        r.Y += cornerSize;
                        r.Height -= cornerSize;
                        ShadowPaintInfo shadowInfo = GetShadowPaintInfo();
                        shadowInfo.Rectangle = r;
                        shadowInfo.Graphics = g;
                        ShadowPainter.Paint(shadowInfo);
                    }
                }
                // Draw Image
                if (image != null)
                {
                    if (pa.RightToLeft)
                        g.DrawImage(image, GetRtlRectangle(m_PanelRect, new Rectangle(r.Left + margin, r.Bottom - margin - image.Height, image.Width, image.Height)));
                    else
                        g.DrawImage(image, r.Left + margin, r.Bottom - margin - image.Height, image.Width, image.Height);
                }
                if (this.Focused)
                {
                    if (this.DesignMode)
                    {
                        Rectangle rFocus = r;
                        rFocus.Inflate(-1, -1);
                        if (pa.RightToLeft) rFocus = GetRtlRectangle(m_PanelRect, rFocus);
                        DesignTime.DrawDesignTimeSelection(g, r, pa.Colors.ItemDesignTimeBorder);
                    }
                    else
                    {
                        Rectangle rFocus = rText;
                        rFocus.Inflate(0, -1);
                        rFocus.Width -= 2;
                        rFocus.X -= 2;
                        if (pa.RightToLeft) rFocus = GetRtlRectangle(m_PanelRect, rFocus);
                        System.Windows.Forms.ControlPaint.DrawFocusRectangle(g, rFocus);
                    }
                }
                if ((this.Expanded || this.Parent is ExplorerBarContainerItem && ((ExplorerBarContainerItem)this.Parent)._Animating) && m_SubItems != null) // && m_ControlHost==null)
                {
                    r = new Rectangle(m_Rect.X, m_Rect.Y + r.Height + 1, m_Rect.Width, m_Rect.Height - r.Height - 1);
                    for (int i = 0; i < m_SubItems.Count; i++)
                    {
                        BaseItem item = m_SubItems[i];
                        if (!item.Displayed || !item.Visible)
                            continue;
                        if (item.BeginGroup)
                        {
                            using (Pen line = new Pen(pa.Colors.ItemSeparator, 1))
                                g.DrawLine(line, item.LeftInternal + 2, item.TopInternal - 2, item.DisplayRectangle.Right - 4, item.TopInternal - 2);
                        }
                        item.Paint(pa);
                    }
                }
                if (disposeFont)
                    font.Dispose();
                this.DrawInsertMarker(pa.Graphics);
                PaintInfoText(pa);
            }
            finally
            {
                m_IsPainting = false;
            }
		}
        private Rectangle GetRtlRectangle(Rectangle bounds, Rectangle r)
        {
            return new Rectangle(bounds.Right - (r.Width + (r.X - bounds.X)), r.Y, r.Width, r.Height);
        }
		private void PaintThemed(ItemPaintArgs pa)
		{
			if(this.SuspendLayout)
				return;
			System.Drawing.Graphics g;
			if(m_NeedRecalcSize)
				RecalcSize();
			Bitmap bmp=new Bitmap(this.DisplayRectangle.Width,this.DisplayRectangle.Height,pa.Graphics);
			g=Graphics.FromImage(bmp);
			ThemeExplorerBar theme=pa.ThemeExplorerBar;
			Rectangle r=m_PanelRect;
			ThemeExplorerBarParts part=ThemeExplorerBarParts.NormalGroupHead;
			ThemeExplorerBarStates state=ThemeExplorerBarStates.NormalGroupHeadNormal;
			if(m_XPSpecialGroup)
				part=ThemeExplorerBarParts.SpecialGroupHead;
			theme.DrawBackground(g,part,state,r);
			// Paint Background
			Rectangle backRect=new Rectangle(0,m_PanelRect.Bottom,m_Rect.Width+(m_XPSpecialGroup?0:0),m_Rect.Height-m_PanelRect.Bottom);
			if(backRect.Width>0 && backRect.Height>0)
			{
				ThemeExplorerBarParts partBack;
				ThemeExplorerBarStates stateBack;
				if(m_XPSpecialGroup)
				{
					partBack=ThemeExplorerBarParts.SpecialGroupBackground;
					stateBack=ThemeExplorerBarStates.SpecialGroupBackgroundNormal;
				}
				else
				{
					partBack=ThemeExplorerBarParts.NormalGroupBackground;
					stateBack=ThemeExplorerBarStates.NormalGroupBackgroundNormal;
				}
				theme.DrawBackground(g,partBack,stateBack,backRect);
			}
			System.Drawing.Image image=this.GetImage();
			Rectangle rText=r;
		    int margin = Dpi.Width(m_Margin);
		    rText.X+=margin;
			// This is left margin of the text
			rText.X+=margin*2;
			rText.Width-=(margin*5);
			if(image!=null)
			{
				rText.Width-=(image.Width+margin);
				rText.X+=(image.Width+margin);
			}
			if(m_ExpandButtonVisible)
				rText.Width-=Dpi.Width(EXPAND_MARGIN);
            bool disposeFont = false;
			Font font=this.GetFont(out disposeFont);
            ElementStyle style = m_TitleStyle;
            if (m_MouseOver)
                style = m_TitleHotStyle;
            if (style.Font != null)
                font = style.Font;
            if (pa.RightToLeft)
            {
                TextDrawing.DrawStringLegacy(g, m_Text, font, style.TextColor, GetRtlRectangle(m_PanelRect, rText), style.TextFormat | eTextFormat.RightToLeft);
            }
            else
                TextDrawing.DrawStringLegacy(g, m_Text, font, style.TextColor, rText, style.TextFormat);
			if(m_ExpandButtonVisible)
			{
				ThemeExplorerBarParts part2=part;
				Rectangle expandedRect=m_ExpandButtonRect;
				if(m_XPSpecialGroup)
				{
					if(this.Expanded)
					{
						part=ThemeExplorerBarParts.SpecialGroupCollapse;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.SpecialGroupCollapseHot;
						else
							state=ThemeExplorerBarStates.SpecialGroupCollapseNormal;
					}
					else
					{
						part=ThemeExplorerBarParts.SpecialGroupExpand;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.SpecialGroupExpandHot;
						else
							state=ThemeExplorerBarStates.SpecialGroupExpandNormal;
					}
				}
				else
				{
					if(this.Expanded)
					{
						part=ThemeExplorerBarParts.NormalGroupCollapse;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.NormalGroupCollapseHot;
						else
							state=ThemeExplorerBarStates.NormalGroupCollapseNormal;
					}
					else
					{
						part=ThemeExplorerBarParts.NormalGroupExpand;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.NormalGroupExpandHot;
						else
							state=ThemeExplorerBarStates.NormalGroupExpandNormal;
					}
				}
                if(pa.RightToLeft)
                    theme.DrawBackground(g, part, state, GetRtlRectangle(m_Rect, expandedRect));
                else
				    theme.DrawBackground(g,part,state, expandedRect);
			}
			
			// Draw Image
			if(image!=null)
			{
                if(pa.RightToLeft)
                    g.DrawImage(image, GetRtlRectangle(m_PanelRect, new Rectangle(r.Left + margin, r.Bottom - margin - image.Height, image.Width, image.Height)));
                else
				    g.DrawImage(image,r.Left+margin,r.Bottom-margin-image.Height,image.Width,image.Height);
			}
			if(this.Focused)
			{
				if(this.DesignMode)
				{
					Rectangle rFocus=r;
					rFocus.Inflate(-1,-1);
                    if (pa.RightToLeft) rFocus = GetRtlRectangle(m_PanelRect, rFocus);
					DesignTime.DrawDesignTimeSelection(g,r,pa.Colors.ItemDesignTimeBorder);
				}
				else
				{
					Rectangle rFocus=rText;
					rFocus.Inflate(0,-1);
					rFocus.Width-=2;
					rFocus.X-=2;
                    if (pa.RightToLeft) rFocus = GetRtlRectangle(m_PanelRect, rFocus);
					System.Windows.Forms.ControlPaint.DrawFocusRectangle(g,rFocus);
				}
			}
			g.Dispose();
			g=pa.Graphics;
			g.DrawImage(bmp,this.DisplayRectangle.X,this.DisplayRectangle.Y,bmp.Width,bmp.Height);
			bmp.Dispose();
            if (disposeFont) font.Dispose();
			if((this.Expanded || this.Parent is ExplorerBarContainerItem && ((ExplorerBarContainerItem)this.Parent)._Animating) && m_SubItems!=null) // && m_ControlHost==null)
			{
				r=new Rectangle(m_Rect.X,m_Rect.Y+r.Height+1,m_Rect.Width,m_Rect.Height-r.Height-1);
				for(int i=0;i
		/// Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP.
		/// 
		[Browsable(false),DevCoBrowsable(false),DefaultValue(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),Category("Appearance"),Description("Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP.")]
		public override bool ThemeAware
		{
			get
			{
				return base.ThemeAware;
			}
			set
			{
				m_ThemeAware=value;
				if(m_SubItems!=null)
				{
					foreach(BaseItem item in m_SubItems)
					{
						if(!(item is ButtonItem))
							item.ThemeAware=value;
					}
				}
			}
		}
		private void PaintThemeExpandButton()
		{
			if(!m_ExpandButtonVisible)
				return;
            System.Windows.Forms.Control container=this.ContainerControl as System.Windows.Forms.Control;
			if(!IsHandleValid(container))
				return;
			Graphics g=BarFunctions.CreateGraphics(container);
			try
			{
				ThemeExplorerBar theme=null;
				bool bDisposeTheme=false;
				if(container is IThemeCache)
					theme=((IThemeCache)container).ThemeExplorerBar;
				else
				{
					bDisposeTheme=true;
					theme=new ThemeExplorerBar(container);
				}
				ThemeExplorerBarParts part=ThemeExplorerBarParts.NormalGroupCollapse;
				ThemeExplorerBarStates state=ThemeExplorerBarStates.NormalGroupCollapseNormal;
				Rectangle expandedRect=m_ExpandButtonRect;
				expandedRect.Offset(m_Rect.X,m_Rect.Y);
				if(m_XPSpecialGroup)
				{
					if(this.Expanded)
					{
						part=ThemeExplorerBarParts.SpecialGroupCollapse;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.SpecialGroupCollapseHot;
						else
							state=ThemeExplorerBarStates.SpecialGroupCollapseNormal;
					}
					else
					{
						part=ThemeExplorerBarParts.SpecialGroupExpand;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.SpecialGroupExpandHot;
						else
							state=ThemeExplorerBarStates.SpecialGroupExpandNormal;
					}
				}
				else
				{
					if(this.Expanded)
					{
						part=ThemeExplorerBarParts.NormalGroupCollapse;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.NormalGroupCollapseHot;
						else
							state=ThemeExplorerBarStates.NormalGroupCollapseNormal;
					}
					else
					{
						part=ThemeExplorerBarParts.NormalGroupExpand;
						if(m_ExpandButtonHot)
							state=ThemeExplorerBarStates.NormalGroupExpandHot;
						else
							state=ThemeExplorerBarStates.NormalGroupExpandNormal;
					}
				}
				theme.DrawBackground(g,part,state,expandedRect);
				
				if(bDisposeTheme)
					theme.Dispose();
			}
			finally
			{
                if (g != null)
                {
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;
                    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
                    g.Dispose();
                }
			}
		}
		private void PaintExpandButton()
		{
			if(!m_ExpandButtonVisible)
				return;
			Rectangle r=m_ExpandButtonRect;
			r.Offset(m_Rect.X,m_Rect.Y);
			System.Windows.Forms.Control control=this.ContainerControl as System.Windows.Forms.Control;
			if(control==null)
				return;
			control.Invalidate(r);
			control.Update();
			return;
		}
		private void PaintExpandButton(ItemPaintArgs pa, Rectangle r, bool bHot, bool bPressed, bool bExpanded)
		{
            Graphics g = pa.Graphics;
            ExplorerBar bar = pa.ContainerControl as ExplorerBar;
            if (bar != null && (bar.GroupButtonExpandNormal != null && !bExpanded || bar.GroupButtonCollapseNormal != null && bExpanded))
            {
                Image image = bar.GroupButtonExpandNormal;
                if (bExpanded)
                    image = bar.GroupButtonCollapseNormal;
                if (bPressed)
                {
                    if (!bExpanded && bar.GroupButtonExpandPressed!=null)
                        image = bar.GroupButtonExpandPressed;
                    else if(bExpanded && bar.GroupButtonCollapsePressed!=null)
                        image = bar.GroupButtonCollapsePressed;
                }
                else if (bHot)
                {
                    if (!bExpanded && bar.GroupButtonExpandHot != null)
                        image = bar.GroupButtonExpandHot;
                    else if(bExpanded && bar.GroupButtonCollapseHot!=null)
                        image = bar.GroupButtonCollapseHot;
                }
                Rectangle imageRect = r;
                imageRect.Y += (imageRect.Height - image.Height) / 2;
                g.DrawImageUnscaled(image, imageRect);
                return;
            }
			int EXPAND_SIZE=Dpi.Width16;
			using(Pen p=new Pen((bHot?m_ExpandHotBorderColor:m_ExpandBorderColor),1))
			{
				if(r.Width>EXPAND_SIZE)
					r.Offset((r.Width-EXPAND_SIZE)/2,0);
				if(r.Height>EXPAND_SIZE)
					r.Offset(0,(r.Height-EXPAND_SIZE)/2);
				r.Width=EXPAND_SIZE;
				r.Height=EXPAND_SIZE;
				Brush brush=new SolidBrush((bHot?m_ExpandHotBackColor:m_ExpandBackColor));
				g.FillEllipse(brush,r);
				brush.Dispose();
				g.DrawEllipse(p,r);
			}
			using(Pen p=new Pen((bHot?m_ExpandHotForeColor:m_ExpandForeColor),Dpi.Width1))
			{
				if(bExpanded)
				{
					Point midPoint=new Point(r.X+EXPAND_SIZE/2,r.Y+Dpi.Height4);
					g.DrawLine(p,midPoint.X,midPoint.Y,midPoint.X-Dpi.Width3,midPoint.Y+Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y, midPoint.X + Dpi.Width3, midPoint.Y + Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y + Dpi.Height1, midPoint.X - Dpi.Width3, midPoint.Y + Dpi.Height4);
                    g.DrawLine(p, midPoint.X, midPoint.Y + Dpi.Height1, midPoint.X + Dpi.Width3, midPoint.Y + Dpi.Height4);
                    midPoint.Y += Dpi.Height4;
                    g.DrawLine(p, midPoint.X, midPoint.Y, midPoint.X - Dpi.Width3, midPoint.Y + Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y, midPoint.X + Dpi.Width3, midPoint.Y + Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y + Dpi.Height1, midPoint.X - Dpi.Width3, midPoint.Y + Dpi.Height4);
                    g.DrawLine(p, midPoint.X, midPoint.Y + Dpi.Height1, midPoint.X + Dpi.Width3, midPoint.Y + Dpi.Height4);
				}
				else
				{
                    Point midPoint = new Point(r.X + EXPAND_SIZE / 2, r.Y + Dpi.Height8);
                    g.DrawLine(p, midPoint.X, midPoint.Y, midPoint.X - Dpi.Width3, midPoint.Y - Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y, midPoint.X + Dpi.Width3, midPoint.Y - Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y - Dpi.Height1, midPoint.X - Dpi.Width3, midPoint.Y - Dpi.Height4);
                    g.DrawLine(p, midPoint.X, midPoint.Y - Dpi.Height1, midPoint.X + Dpi.Width3, midPoint.Y - Dpi.Height4);
                    midPoint.Y += Dpi.Height4;
                    g.DrawLine(p, midPoint.X, midPoint.Y, midPoint.X - Dpi.Width3, midPoint.Y - Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y, midPoint.X + Dpi.Width3, midPoint.Y - Dpi.Height3);
                    g.DrawLine(p, midPoint.X, midPoint.Y - Dpi.Height1, midPoint.X - Dpi.Width3, midPoint.Y - Dpi.Height4);
                    g.DrawLine(p, midPoint.X, midPoint.Y - Dpi.Height1, midPoint.X + Dpi.Width3, midPoint.Y - Dpi.Height4);
				}
			}
		}
		public override void SubItemSizeChanged(BaseItem objChildItem)
		{
			NeedRecalcSize=true;
		}
		private void PaintArrow(Graphics g, Rectangle rect, Color c, bool up)
		{
			Point[] p=new Point[3];
			if(up)
			{
				p[0].X=rect.Left+(rect.Width-9)/2;
				p[0].Y=rect.Top+rect.Height/2+1;
				p[1].X=p[0].X+8;
				p[1].Y=p[0].Y;
				p[2].X=p[0].X+4;
				p[2].Y=p[0].Y-5;
			}
			else
			{
				p[0].X=rect.Left+(rect.Width-7)/2;
				p[0].Y=rect.Top+(rect.Height-4)/2;
				p[1].X=p[0].X+7;
				p[1].Y=p[0].Y;
				p[2].X=p[0].X+3;
				p[2].Y=p[0].Y+4;
			}
			g.FillPolygon(new SolidBrush(c),p);
		}
		/// 
		/// Returns the Font object to be used for drawing the item text.
		/// 
		/// Font object.
		protected virtual Font GetFont(out bool disposeFont)
		{
            disposeFont=false;
            if (this.TitleStyle.Font != null)
                return this.TitleStyle.Font;
            System.Drawing.Font font = null; // System.Windows.Forms.SystemInformation.MenuFont;
			System.Windows.Forms.Control ctrl=this.ContainerControl as System.Windows.Forms.Control;
            if (ctrl != null)
                font = ctrl.Font;
            else
            {
                font = SystemFonts.DefaultFont;
                disposeFont = true;
            }
            if (!font.Bold)
            {
                font = new Font(font, FontStyle.Bold);
                disposeFont = true;
            }
			return font;
		}
		/// 
		/// Occurs when the mouse pointer is moved over the item. This is used by internal implementation only.
		/// 
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
		public override void InternalMouseMove(System.Windows.Forms.MouseEventArgs objArg)
		{
			if(objArg.Button==System.Windows.Forms.MouseButtons.Left && (Math.Abs(objArg.X-m_MouseDownPt.X)>=4 || Math.Abs(objArg.Y-m_MouseDownPt.Y)>=4))
			{
				ExplorerBar explorerBar=this.ContainerControl as ExplorerBar;
				if(explorerBar!=null && explorerBar.AllowUserCustomize && this.CanCustomize)
				{
					BaseItem active=m_HotSubItem;
					if(active!=null && active.CanCustomize && !active.SystemItem)
					{
						IOwner owner=this.GetOwner() as IOwner;
						if(owner!=null && owner.DragItem==null)
						{
							owner.StartItemDrag(active);
							return;
						}
					}
				}
			}
			Rectangle r=m_PanelRect;
			r.Offset(m_Rect.Location);
			if(r.Contains(objArg.X,objArg.Y))
			{
				if(!m_MouseOver)
				{
					m_MouseOver=true;
					if(m_HeaderExpands)
						this.Cursor=System.Windows.Forms.Cursors.Hand;
					this.Refresh();
				}
			}
			else if(m_MouseOver)
			{
				if(m_HeaderExpands)
					this.Cursor=System.Windows.Forms.Cursors.Default;
				m_MouseOver=false;
				this.Refresh();
			}
			Rectangle rExpand=m_ExpandButtonRect;
			rExpand.Offset(m_Rect.Location);
			if(m_ExpandButtonVisible && rExpand.Contains(objArg.X,objArg.Y))
			{
				if(m_HotSubItem!=null)
				{
					m_HotSubItem.InternalMouseLeave();
					m_HotSubItem=null;
				}
				m_ExpandButtonHot=true;
				PaintExpandButton();
				return;
			}
			else if(m_ExpandButtonHot)
			{
				m_ExpandButtonHot=false;
				PaintExpandButton();
			}
			base.InternalMouseMove(objArg);
		}
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
		public override void InternalMouseLeave()
		{
			this.Cursor=System.Windows.Forms.Cursors.Default;
			base.InternalMouseLeave();
			m_MouseOver=false;
			m_MouseDown=false;
			if(m_ExpandButtonHot)
				m_ExpandButtonHot=false;
			this.Refresh();
		}
		/// 
		/// Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only.
		/// 
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
		public override void InternalMouseDown(System.Windows.Forms.MouseEventArgs objArg)
		{
			Rectangle r=m_PanelRect;
			r.Offset(m_Rect.Location);
			m_MouseDownPt=new System.Drawing.Point(objArg.X,objArg.Y);
			if(this.DesignMode)
			{
				if(this.ItemAtLocation(objArg.X,objArg.Y)==null && !r.Contains(objArg.X,objArg.Y) && this.Expanded)
				{
					IOwner owner=this.GetOwner() as IOwner;
					if(owner!=null)
						owner.SetFocusItem(null);
				}
				else if(!r.Contains(objArg.X,objArg.Y))
					base.InternalMouseDown(objArg);
				return;
			}
            Rectangle rExpand=m_ExpandButtonRect;
			rExpand.Offset(m_Rect.X,m_Rect.Y);
			if(m_ExpandButtonVisible && objArg.Button==System.Windows.Forms.MouseButtons.Left && rExpand.Contains(objArg.X,objArg.Y))
			{
				ExpandButtonClick();
				return;
			}
			base.InternalMouseDown(objArg);
			if(objArg.Button == System.Windows.Forms.MouseButtons.Left && r.Contains(objArg.X,objArg.Y))
			{
				m_MouseDown=true;
				if(m_HeaderExpands)
					this.Expanded=!this.Expanded;
				else
					this.Refresh();
			}
		}
		internal void ExpandButtonClick()
		{
            this.Expanded=!this.Expanded;
		}
        protected internal override void OnExpandChange()
        {
            base.OnExpandChange();
            foreach (BaseItem item in this.SubItems)
            {
                if (item.Visible) item.Displayed = this.Expanded;
            }
        }
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
		public override void InternalMouseUp(System.Windows.Forms.MouseEventArgs objArg)
		{
			if(objArg.Button==System.Windows.Forms.MouseButtons.Left)
			{
				m_MouseDown=false;
				this.Refresh();
			}
			base.InternalMouseUp(objArg);
		}
		/// 
		/// Occurs when the item is clicked. This is used by internal implementation only.
		/// 
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
		public override void InternalClick(System.Windows.Forms.MouseButtons mb, System.Drawing.Point mpos)
		{
			base.InternalClick(mb,mpos);
			if((this.GetOwner() as IOwner)!=null && ((IOwner)this.GetOwner()).DragInProgress)
				return;
		}
		protected internal override void OnSubItemsClear()
		{
			base.OnSubItemsClear();
			NeedRecalcSize=true;
			if(this.DesignMode)
				this.Refresh();
		}
		protected override void OnTopLocationChanged(int oldValue)
		{
			int iDiff=m_Rect.Top-oldValue;
			if(m_SubItems!=null)
			{
				foreach(BaseItem item in m_SubItems)
				{
					if(item.Visible)
					{
						// Set item position
						item.TopInternal+=iDiff;
					}
				}
			}
		}
        protected internal override void OnContainerChanged(object objOldContainer)
        {
            base.OnContainerChanged(objOldContainer);
            if (this.ContainerControl is ExplorerBar)
            {
                ExplorerBar bar = this.ContainerControl as ExplorerBar;
                m_TitleStyle.SetColorScheme(bar.ColorScheme);
                m_TitleHotStyle.SetColorScheme(bar.ColorScheme);
                m_BackStyle.SetColorScheme(bar.ColorScheme);
            }
        }
		/// 
		/// Called when Visibility of the items has changed.
		/// 
		/// New Visible state.
		protected internal override void OnVisibleChanged(bool bVisible)
		{
			base.OnVisibleChanged(bVisible);
			if(!bVisible)
			{
				foreach(BaseItem item in this.SubItems)
					item.Displayed=false;
			}
		}
		/// 
		/// Gets or sets whether expand button is visible.
		/// 
		[System.ComponentModel.Browsable(true),System.ComponentModel.DefaultValue(true),DevCoBrowsable(true),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Gets or sets whether expand button is visible.")]
		public bool ExpandButtonVisible
		{
			get
			{
				return m_ExpandButtonVisible;
			}
			set
			{
				m_ExpandButtonVisible=value;
				NeedRecalcSize=true;
				OnAppearanceChanged();
			}
		}
		/// 
		/// Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not.
		/// 
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),Category("Behavior"),System.ComponentModel.DefaultValue(false),Description("Gets or sets a value indicating whether group is expanded or not."),DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
		public override bool Expanded
		{
			get
			{
				return base.Expanded;
			}
			set
			{
				base.Expanded=value;
			}
		}
		/// 
		/// Gets or sets whether drop shadow is displayed when non-themed display is used.
		/// 
		[Browsable(true),Category("Appearance"),DefaultValue(true),Description("Indicates whether drop shadow is displayed when non-themed display is used.")]
		public bool DropShadow
		{
			get {return m_DropShadow;}
			set {m_DropShadow=value;}
		}
        /// 
        /// Gets the reference to ElementStyle object which describes visual appearance of the explorer group item title.
        /// 
        [Browsable(true), DevCoBrowsable(true), Category("Style"), Description("Gets or sets a normal item style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ElementStyle TitleStyle
        {
            get { return m_TitleStyle; }
        }
        /// 
        /// Gets the reference to ElementStyle object which describes visual appearance of the explorer group item title while mouse is over the title bar.
        /// 
        [Browsable(true), DevCoBrowsable(true), Category("Style"), Description("Gets or sets a mouse over item style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ElementStyle TitleHotStyle
        {
            get { return m_TitleHotStyle; }
        }
        /// 
        /// Gets or sets the item background style.
        /// 
        [Browsable(true), DevCoBrowsable(true), Category("Style"), Description("Gets or sets group background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ElementStyle BackStyle
        {
            get { return m_BackStyle; }
        }
		[Browsable(false),DevCoBrowsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),Obsolete("This property is obsolete. Use TitleStyle property instead"),EditorBrowsable(EditorBrowsableState.Never)]
		public ItemStyleMapper HeaderStyle
		{
			get {return m_HeaderStyle;}
		}
        [Browsable(false), DevCoBrowsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Obsolete("This property is obsolete. Use TitleHotStyle property instead"), EditorBrowsable(EditorBrowsableState.Never)]
        public ItemStyleMapper HeaderHotStyle
		{
			get {return m_HeaderHotStyle;}
		}
        [Browsable(false), DevCoBrowsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Obsolete("This property is obsolete. Use BackStyle property instead"), EditorBrowsable(EditorBrowsableState.Never)]
        public ItemStyleMapper BackgroundStyle
		{
			get {return m_BackgroundStyle;}
		}
		/// 
		/// Gets or sets whether clicking the header of the control expands the item.
		/// 
		[Browsable(true),DevCoBrowsable(true),DefaultValue(true),Category("Behavior"),Description("Determines whether clicking the header of the control expands the item.")]
		public bool HeaderExpands
		{
			get {return m_HeaderExpands;}
			set {m_HeaderExpands=value;}
		}
		/// 
		/// Applies the stock style to the object.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Applies the stock style to the object."),DefaultValue(eExplorerBarStockStyle.Custom),DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
		public eExplorerBarStockStyle StockStyle
		{
			get {return m_StockStyle;}
			set
			{
				m_StockStyle=value;
				if(m_StockStyle==eExplorerBarStockStyle.Custom)
					return;
				BarFunctions.SetExplorerBarStyle(this,m_StockStyle);
				foreach(BaseItem item in this.SubItems)
				{
					if(item is ButtonItem)
						BarFunctions.SetExplorerBarStyle(item as ButtonItem,m_StockStyle);
				}
                if (m_StockStyle == eExplorerBarStockStyle.BlueSpecial || m_StockStyle == eExplorerBarStockStyle.OliveGreenSpecial || m_StockStyle == eExplorerBarStockStyle.SilverSpecial)
                    this.XPSpecialGroup = true;
                else if (m_StockStyle != eExplorerBarStockStyle.SystemColors)
                    this.XPSpecialGroup = false;
				this.Refresh();
			}
		}
		/// 
		/// Applies new visual style to this the item and all of its sub-items.
		/// 
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(eDotNetBarStyle.OfficeXP),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Determines the display of the item when shown.")]
		public override eDotNetBarStyle Style
		{
			get{return base.Style;}
			set{base.Style=value;}
		}
		/// 
		/// Gets or sets expand button border color.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Specifies expand button border color.") ]
		public Color ExpandBorderColor
		{
			get {return m_ExpandBorderColor;}
			set
			{
				m_ExpandBorderColor=value;
				OnAppearanceChanged();
			}
		}
		[Browsable(false),DevCoBrowsable(false),EditorBrowsable(EditorBrowsableState.Never)]
		public bool ShouldSerializeExpandBorderColor()
		{
			return (m_ExpandBorderColor!=Color.DarkGray && m_StockStyle==eExplorerBarStockStyle.Custom);
		}
		/// 
		/// Gets or sets expand button back color.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Specifies expand button back color.") ]
		public Color ExpandBackColor
		{
			get {return m_ExpandBackColor;}
			set
			{
				m_ExpandBackColor=value;
				OnAppearanceChanged();
			}
		}
		[Browsable(false),DevCoBrowsable(false),EditorBrowsable(EditorBrowsableState.Never)]
		public bool ShouldSerializeExpandBackColor()
		{
			return (m_ExpandBackColor!=Color.White && m_StockStyle==eExplorerBarStockStyle.Custom);
		}
		/// 
		/// Gets or sets expand button fore color.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Specifies expand button fore color.") ]
		public Color ExpandForeColor
		{
			get {return m_ExpandForeColor;}
			set
			{
				m_ExpandForeColor=value;
				OnAppearanceChanged();
			}
		}
		[Browsable(false),DevCoBrowsable(false),EditorBrowsable(EditorBrowsableState.Never)]
		public bool ShouldSerializeExpandForeColor()
		{
			return (m_ExpandForeColor!=SystemColors.ActiveCaption && m_StockStyle==eExplorerBarStockStyle.Custom);
		}
		/// 
		/// Gets or sets hot expand button border color.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Specifies hot expand button border color.") ]
		public Color ExpandHotBorderColor
		{
			get {return m_ExpandHotBorderColor;}
			set
			{
				m_ExpandHotBorderColor=value;
				OnAppearanceChanged();
			}
		}
		[Browsable(false),DevCoBrowsable(false),EditorBrowsable(EditorBrowsableState.Never)]
		public bool ShouldSerializeExpandHotBorderColor()
		{
			return (m_ExpandHotBorderColor!=Color.DarkGray && m_StockStyle==eExplorerBarStockStyle.Custom);
		}
		/// 
		/// Gets or sets hot expand button back color.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Specifies hot expand button back color.") ]
		public Color ExpandHotBackColor
		{
			get {return m_ExpandHotBackColor;}
			set
			{
				m_ExpandHotBackColor=value;
				OnAppearanceChanged();
			}
		}
		[Browsable(false),DevCoBrowsable(false),EditorBrowsable(EditorBrowsableState.Never)]
		public bool ShouldSerializeExpandHotBackColor()
		{
			return (m_ExpandHotBackColor!=Color.White && m_StockStyle==eExplorerBarStockStyle.Custom);
		}
		/// 
		/// Gets or sets hot expand button fore color.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Specifies hot expand button fore color.")]
		public Color ExpandHotForeColor
		{
			get {return m_ExpandHotForeColor;}
			set
			{
				m_ExpandHotForeColor=value;
				OnAppearanceChanged();
			}
		}
		[Browsable(false),DevCoBrowsable(false),EditorBrowsable(EditorBrowsableState.Never)]
		public bool ShouldSerializeExpandHotForeColor()
		{
			return (m_ExpandHotForeColor!=SystemColors.ActiveCaption && m_StockStyle==eExplorerBarStockStyle.Custom);
		}
		/// 
		/// Overloaded. Serializes the item and all sub-items into the XmlElement.
		/// 
		/// XmlElement to serialize the item to.
		protected internal override void Serialize(ItemSerializationContext context)
		{
			base.Serialize(context);
            System.Xml.XmlElement groupItem = context.ItemXmlElement;
			groupItem.SetAttribute("stockstyle",System.Xml.XmlConvert.ToString((int)m_StockStyle));
			groupItem.SetAttribute("expvisible",System.Xml.XmlConvert.ToString(m_ExpandButtonVisible));
			groupItem.SetAttribute("subitemsmargin",System.Xml.XmlConvert.ToString(m_SubItemsMargin));
			groupItem.SetAttribute("xpspecial",System.Xml.XmlConvert.ToString(m_XPSpecialGroup));
			
			groupItem.SetAttribute("expborder",BarFunctions.ColorToString(m_ExpandBorderColor));
			groupItem.SetAttribute("expbc",BarFunctions.ColorToString(m_ExpandBackColor));
			groupItem.SetAttribute("expfc",BarFunctions.ColorToString(m_ExpandForeColor));
			groupItem.SetAttribute("exphborder",BarFunctions.ColorToString(m_ExpandHotBorderColor));
			groupItem.SetAttribute("exphbc",BarFunctions.ColorToString(m_ExpandHotBackColor));
			groupItem.SetAttribute("exphfc",BarFunctions.ColorToString(m_ExpandHotForeColor));
			groupItem.SetAttribute("headerexp",System.Xml.XmlConvert.ToString(m_HeaderExpands));
			groupItem.SetAttribute("expanded",System.Xml.XmlConvert.ToString(m_Expanded));
			if(m_StockStyle==eExplorerBarStockStyle.Custom)
			{
				System.Xml.XmlElement style=groupItem.OwnerDocument.CreateElement("backstyle");
				groupItem.AppendChild(style);
				//m_BackgroundStyle.Serialize(style);
                SerializeElementStyle(m_BackStyle, style);
			}
			if(m_StockStyle==eExplorerBarStockStyle.Custom)
			{
				System.Xml.XmlElement style=groupItem.OwnerDocument.CreateElement("headerhotstyle");
				groupItem.AppendChild(style);
				//m_HeaderHotStyle.Serialize(style);
                SerializeElementStyle(m_TitleHotStyle, style);
			}
			if(m_StockStyle==eExplorerBarStockStyle.Custom)
			{
				System.Xml.XmlElement style=groupItem.OwnerDocument.CreateElement("headerstyle");
				groupItem.AppendChild(style);
				//m_HeaderStyle.Serialize(style);
                SerializeElementStyle(m_TitleStyle, style);
			}
			if(m_ImageIndex!=-1)
			{
				groupItem.SetAttribute("imageindex",System.Xml.XmlConvert.ToString(m_ImageIndex));
			}
			else if(m_Image!=null)
			{
                System.Xml.XmlElement image=groupItem.OwnerDocument.CreateElement("image");
				groupItem.AppendChild(image);
                BarFunctions.SerializeImage(m_Image,image);
			}
		}
        private void SerializeElementStyle(ElementStyle style, System.Xml.XmlElement xmlElement)
        {
            ElementSerializer.Serialize(style, xmlElement);
        }
        private void DeserializeElementStyle(ElementStyle style, System.Xml.XmlElement xmlElement)
        {
            ElementSerializer.Deserialize(style, xmlElement);
        }
		/// 
		/// Overloaded. Deserializes the Item from the XmlElement.
		/// 
		/// Source XmlElement.
		public override void Deserialize(ItemSerializationContext context)
		{
			base.Deserialize(context);
            System.Xml.XmlElement groupItem = context.ItemXmlElement;
			m_StockStyle=(eExplorerBarStockStyle)System.Xml.XmlConvert.ToInt32(groupItem.GetAttribute("stockstyle"));
			m_ExpandButtonVisible=System.Xml.XmlConvert.ToBoolean(groupItem.GetAttribute("expvisible"));
			m_SubItemsMargin=System.Xml.XmlConvert.ToInt32(groupItem.GetAttribute("subitemsmargin"));
			m_XPSpecialGroup=System.Xml.XmlConvert.ToBoolean(groupItem.GetAttribute("xpspecial"));
		
			m_ExpandBorderColor=BarFunctions.ColorFromString(groupItem.GetAttribute("expborder"));
			m_ExpandBackColor=BarFunctions.ColorFromString(groupItem.GetAttribute("expbc"));
			m_ExpandForeColor=BarFunctions.ColorFromString(groupItem.GetAttribute("expfc"));
			m_ExpandHotBorderColor=BarFunctions.ColorFromString(groupItem.GetAttribute("exphborder"));
			m_ExpandHotBackColor=BarFunctions.ColorFromString(groupItem.GetAttribute("exphbc"));
			m_ExpandHotForeColor=BarFunctions.ColorFromString(groupItem.GetAttribute("exphfc"));
			
			m_HeaderExpands=System.Xml.XmlConvert.ToBoolean(groupItem.GetAttribute("headerexp"));
			foreach(System.Xml.XmlElement xmlElem in groupItem.ChildNodes)
			{
				switch(xmlElem.Name)
				{
					case "backstyle":
						DeserializeElementStyle(m_BackStyle,xmlElem);
						break;
					case "headerhotstyle":
                        DeserializeElementStyle(m_TitleHotStyle, xmlElem);
						break;
					case "headerstyle":
                        DeserializeElementStyle(m_TitleStyle, xmlElem);
						break;
					case "image":
						m_Image=BarFunctions.DeserializeImage(xmlElem);
						break;
				}
			}
			if(groupItem.HasAttribute("imageindex"))
			{
				this.ImageIndex=System.Xml.XmlConvert.ToInt32(groupItem.GetAttribute("imageindex"));
			}
			this.RefreshImageSize();
			
			this.Expanded=System.Xml.XmlConvert.ToBoolean(groupItem.GetAttribute("expanded"));
		}
		protected internal override void OnItemAdded(BaseItem item)
		{
			NeedRecalcSize=true;
			if(item is ButtonItem)
				((ButtonItem)item)._FitContainer=m_WordWrapSubItems;
			base.OnItemAdded(item);
			if(!this.Expanded)
			{
				if(!item.Displayed)
					item.Displayed=true;
				item.Displayed=false;
			}
			if(item is ButtonItem)
			{
				ButtonItem btn=item as ButtonItem;
				btn.ThemeAware=false;
				if(btn.ForeColor.IsEmpty && btn.HotForeColor.IsEmpty)
					BarFunctions.SetExplorerBarStyle(item as ButtonItem,m_StockStyle);
				//btn.PopupSide=ePopupSide.Left;
			}
			item.NeedRecalcSize=true;
			if(this.DesignMode)
				this.Refresh();
		}
		protected internal override void OnBeforeItemRemoved(BaseItem item)
		{
			if(item is ButtonItem)
				((ButtonItem)item)._FitContainer=false;
			base.OnBeforeItemRemoved(item);
		}
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(eItemAlignment.Near),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Determines alignment of the item inside the container.")]
		public override eItemAlignment ItemAlignment
		{
			get{return base.ItemAlignment;}
			set{base.ItemAlignment=value;}
		}
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(false),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates whether item will stretch to consume empty space. Items on stretchable, no-wrap Bars only.")]
		public override bool Stretch
		{
			get {return base.Stretch;}
			set {base.Stretch=value;}
		}
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.Category("Behavior"),System.ComponentModel.DefaultValue(true),System.ComponentModel.Description("Indicates whether the item will auto-collapse (fold) when clicked.")]
		public override bool AutoCollapseOnClick
		{
			get {return base.AutoCollapseOnClick;}
			set {base.AutoCollapseOnClick=value;}
		}
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(true),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Determines whether sub-items are displayed.")]
		public override bool ShowSubItems
		{
			get {return base.ShowSubItems;}
			set {base.ShowSubItems=value;}
		}
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(""),System.ComponentModel.Category("Design"),System.ComponentModel.Description("Indicates item category used to group similar items at design-time.")]
		public override string Category
		{
			get {return base.Category;}
			set {base.Category=value;}
		}
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(""),System.ComponentModel.Category("Design"),System.ComponentModel.Description("Indicates description of the item that is displayed during design.")]
		public override string Description
		{
			get {return base.Description;}
			set {base.Description=value;}
		}
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(false),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates whether this item is beginning of the group.")]
		public override bool BeginGroup
		{
			get {return base.BeginGroup;}
			set {base.BeginGroup=value;}
		}
        /// 
        /// Gets or sets a value indicating whether the item is enabled.
        /// 
        [Browsable(false), DevCoBrowsable(false), DefaultValue(true), Category("Behavior"), Description("Indicates whether is item enabled.")]
        public override bool Enabled
        {
            get { return base.Enabled; }
            set { base.Enabled = value; }
        }
		[System.ComponentModel.Browsable(true),DevCoBrowsable(false),System.ComponentModel.Editor("DevComponents.DotNetBar.Design.ExplorerBarGroupItemEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)),System.ComponentModel.Category("Data"),System.ComponentModel.Description("Collection of sub items."),System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)]
		public override SubItemsCollection SubItems
		{
			get
			{
				return base.SubItems;
			}
		}
		/// 
		/// Gets the rectangle of the panel item Button.
		/// 
		[System.ComponentModel.Browsable(false),System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
		public Rectangle PanelRect
		{
			get
			{
				return m_PanelRect;
			}
		}
		/// 
		/// Shows tooltip for this item.
		/// 
		public override void ShowToolTip()
		{
			if(this.DesignMode)
				return;
			if(this.Visible && this.Displayed)
			{
				IOwner owner=this.GetOwner() as IOwner;
				if(owner!=null && !owner.ShowToolTips)
					return;
				System.Windows.Forms.Control ctrl=this.ContainerControl as System.Windows.Forms.Control;
				if(ctrl==null)
					return;
				Rectangle r=m_PanelRect;
				r.Offset(m_Rect.X,m_Rect.Y);
				if(!r.Contains(ctrl.PointToClient(System.Windows.Forms.Control.MousePosition)))
					return;
				OnTooltip(true);
				if(m_Tooltip!="")
				{
					if(m_ToolTipWnd==null)
						m_ToolTipWnd=new ToolTip();
					m_ToolTipWnd.Text=m_Tooltip;
					if(owner!=null && owner.ShowShortcutKeysInToolTips && this.Shortcuts.Count>0)
						m_ToolTipWnd.Text+=(" ("+this.ShortcutString+")");
					IOwnerItemEvents ownerEvents=this.GetIOwnerItemEvents();
					if(ownerEvents!=null)
						ownerEvents.InvokeToolTipShowing(this,new EventArgs());
					m_ToolTipWnd.ShowToolTip();
				}
			}
		}
		internal bool UseThemes
		{
			get {return this.IsThemed;}
		}
		/// 
		/// Forces the repaint the item.
		/// 
		public override void Refresh()
		{
			if(this.SuspendLayout)
				return;
			if(!this.Expanded)
				base.Refresh();
			else
			{
				if((this.Visible || this.IsOnCustomizeMenu) && this.Displayed)
				{
					System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
					if(objCtrl!=null && IsHandleValid(objCtrl) && !(objCtrl is ItemsListBox))
					{
						if(m_NeedRecalcSize)
						{
							RecalcSize();
							if(m_Parent!=null)
								m_Parent.SubItemSizeChanged(this);
						}
						Rectangle r=m_PanelRect;
						r.Inflate(4,4);
						objCtrl.Invalidate(m_Rect,false);
					}
				}
			}
		}
		// 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.ImagesMedium;
				return null;
			}
		}
		/// 
		/// Specifies the image.
        /// 
        [System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("The image that will be displayed on the face of the item."),System.ComponentModel.DefaultValue(null)]
		public System.Drawing.Image Image
		{
			get
			{
				return m_Image;
			}
			set
			{
				NeedRecalcSize=true;
				m_Image=value;
				this.OnImageChanged();
				this.Refresh();
			}
		}
		/// 
		/// Indicates whether XP themed special group colors are used for drawing.
		/// 
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates whether XP themed special group colors are used for drawing."),System.ComponentModel.DefaultValue(false)]
		public bool XPSpecialGroup
		{
			get {return m_XPSpecialGroup;}
			set
			{
				m_XPSpecialGroup=value;
				this.Refresh();
			}
		}
		/// 
		/// Gets or sets the margin in pixels between the edge of the container and the items contained inside of it. Default value is 4.
		/// 
		[Browsable(true),DevCoBrowsable(true),Category("Appearance"),DefaultValue(4),Description("Indicates margin in pixels between the edge of the container and the items contained inside of it")]
		public int SubItemsMargin
		{
			get {return m_SubItemsMargin;}
			set {m_SubItemsMargin=value;}
		}
		/// 
		/// Gets or sets whether text on sub items is wrapped on new line if it cannot fit the space available.
		/// 
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Indicates whether text on sub items is wrapped on new line if it cannot fit the space available."),System.ComponentModel.DefaultValue(true)]
		public bool WordWrapSubItems
		{
			get {return m_WordWrapSubItems;}
			set
			{
				m_WordWrapSubItems=value;
				foreach(BaseItem item in this.SubItems)
				{
					if(item is ButtonItem)
						((ButtonItem)item)._FitContainer=m_WordWrapSubItems;
				}
				NeedRecalcSize=true;
				OnAppearanceChanged();
			}
		}
		/// 
		/// Specifies the index of the image if ImageList is used.
		/// 
		[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");
					if(m_Parent!=null)
					{
						OnImageChanged();
						NeedRecalcSize=true;
						this.Refresh();
					}
				}
			}
		}
		//***********************************************
		// IDesignTimeProvider Implementation
		//***********************************************
        protected virtual InsertPosition GetContainerInsertPosition(Point pScreen, BaseItem dragItem)
        {
            return DesignTimeProviderContainer.GetInsertPosition(this, pScreen, dragItem);
        }
        InsertPosition IDesignTimeProvider.GetInsertPosition(Point pScreen, BaseItem dragItem)
        {
            return GetContainerInsertPosition(pScreen, dragItem);
        }
        void IDesignTimeProvider.DrawReversibleMarker(int iPos, bool Before)
        {
            DesignTimeProviderContainer.DrawReversibleMarker(this, iPos, Before);
        }
        void IDesignTimeProvider.InsertItemAt(BaseItem objItem, int iPos, bool Before)
        {
            DesignTimeProviderContainer.InsertItemAt(this, objItem, iPos, Before);
        }
        //InsertPosition IDesignTimeProvider.GetInsertPosition(Point pScreen, BaseItem DragItem)
        //{
        //    InsertPosition objInsertPos=null;
        //    System.Windows.Forms.Control objContainer=this.ContainerControl as System.Windows.Forms.Control;
        //    if(objContainer==null || !this.CanCustomize)
        //        return null;
        //    Point pClient=objContainer.PointToClient(pScreen);
        //    Rectangle thisRect=this.DisplayRectangle;
        //    if(thisRect.Contains(pClient))
        //    {
        //        Rectangle r=thisRect;
        //        r.Size=m_PanelRect.Size;
        //        r.X+=m_PanelRect.Left;
        //        r.Y+=m_PanelRect.Top;
        //        if(r.Contains(pClient) && !this.Expanded)
        //        {
        //            this.Expanded=true;
        //            objInsertPos=new InsertPosition();
        //            objInsertPos.TargetProvider=this;
        //            if(this.SubItems.Count==0)
        //                objInsertPos.Position=-1;
        //            else
        //            {
        //                objInsertPos.Position=0;
        //                objInsertPos.Before=true;
        //            }
        //            return objInsertPos;
        //        }
				
        //        BaseItem objItem;
        //        // Check first inside any expanded items
        //        objItem=this.ExpandedItem();
        //        if(objItem!=null)
        //        {
        //            IDesignTimeProvider provider=objItem as IDesignTimeProvider;
        //            if(provider!=null)
        //            {
        //                objInsertPos=provider.GetInsertPosition(pScreen, DragItem);
        //                if(objInsertPos!=null)
        //                    return objInsertPos;
        //            }
        //        }
        //        for(int i=0;i0 || objItem.IsOnMenuBar))
        //                {
        //                    if(!objItem.Expanded)
        //                        objItem.Expanded=true;
        //                }
        //                else
        //                {
        //                    CollapseSubItems(this);
        //                }
        //                break;
        //            }
        //        }
        //        if(objInsertPos==null)
        //        {
        //            // Container is empty but it can contain the items
        //            if(this.SubItems.Count>1 && this.SubItems[this.SubItems.Count-1].SystemItem)
        //                objInsertPos=new InsertPosition(this.SubItems.Count-2,true,this);
        //            else
        //                objInsertPos=new InsertPosition(this.SubItems.Count-1,false,this);
        //        }
        //    }
        //    else
        //    {
        //        foreach(BaseItem objItem in this.SubItems)
        //        {
        //            if(objItem==DragItem)
        //                continue;
        //            IDesignTimeProvider provider=objItem as IDesignTimeProvider;
        //            if(provider!=null)
        //            {
        //                objInsertPos=provider.GetInsertPosition(pScreen, DragItem);
        //                if(objInsertPos!=null)
        //                    break;
        //            }
        //        }				
        //    }
        //    return objInsertPos;
        //}
        //void IDesignTimeProvider.DrawReversibleMarker(int iPos, bool Before)
        //{
        //    System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
        //    if(objCtrl==null)
        //        return;
        //    BaseItem objItem=null;
        //    if(iPos>=0)
        //        objItem=this.SubItems[iPos];
        //    Rectangle r, rl,rr;
        //    if(objItem!=null)
        //    {
        //        if(objItem.DesignInsertMarker!=eDesignInsertPosition.None)
        //            objItem.DesignInsertMarker=eDesignInsertPosition.None;
        //        else if(Before)
        //            objItem.DesignInsertMarker=eDesignInsertPosition.Before;
        //        else
        //            objItem.DesignInsertMarker=eDesignInsertPosition.After;
        //        return;
        //    }
        //    else
        //    {
        //        Rectangle rTmp=this.DisplayRectangle;
        //        rTmp.Inflate(-1,-1);
        //        rTmp.Offset(m_PanelRect.X,m_PanelRect.Bottom);
        //        r=new Rectangle(rTmp.Left+2,rTmp.Top+2,rTmp.Width-4,1);
        //        rl=new Rectangle(rTmp.Left+1,rTmp.Top,1,5);
        //        rr=new Rectangle(rTmp.Right-2,rTmp.Top,1,5);
        //    }
        //    //r.Location=objCtrl.PointToScreen(r.Location);
        //    //rl.Location=objCtrl.PointToScreen(rl.Location);
        //    //rr.Location=objCtrl.PointToScreen(rr.Location);
        //    //System.Windows.Forms.ControlPaint.DrawReversibleFrame(r,SystemColors.Control,System.Windows.Forms.FrameStyle.Thick);
        //    //System.Windows.Forms.ControlPaint.DrawReversibleFrame(rl,SystemColors.Control,System.Windows.Forms.FrameStyle.Thick);
        //    //System.Windows.Forms.ControlPaint.DrawReversibleFrame(rr,SystemColors.Control,System.Windows.Forms.FrameStyle.Thick);
        //}
        //void IDesignTimeProvider.InsertItemAt(BaseItem objItem, int iPos, bool Before)
        //{
        //    if(this.ExpandedItem()!=null)
        //    {
        //        this.ExpandedItem().Expanded=false;
        //    }
        //    if(!Before)
        //    {
        //        //objItem.BeginGroup=!objItem.BeginGroup;
        //        if(iPos+1>=this.SubItems.Count)
        //        {
        //            this.SubItems.Add(objItem,GetAppendPosition(this));
        //        }
        //        else
        //        {
        //            this.SubItems.Add(objItem,iPos+1);
        //        }
        //    }
        //    else
        //    {
        //        if(iPos>=this.SubItems.Count)
        //        {
        //            this.SubItems.Add(objItem, GetAppendPosition(this));
        //        }
        //        else
        //        {
        //            this.SubItems.Add(objItem,iPos);
        //        }
        //    }
        //    if(this.ContainerControl is Bar)
        //        ((Bar)this.ContainerControl).RecalcLayout();
        //    else if(this.ContainerControl is MenuPanel)
        //        ((MenuPanel)this.ContainerControl).RecalcSize();
        //    else
        //    {
        //        this.RecalcSize();
        //        this.Refresh();
        //    }
        //}
		private int GetAppendPosition(BaseItem objParent)
		{
			int iPos=-1;
			for(int i=objParent.SubItems.Count-1;i>=0;i--)
			{
				if(objParent.SubItems[i].SystemItem)
					iPos=i;
				else
					break;
			}
			return iPos;
		}
        [EditorBrowsable(EditorBrowsableState.Never)]
		public static void SetDesignTimeDefaults(ButtonItem button, eExplorerBarStockStyle e)
		{
			BarFunctions.SetExplorerBarStyle(button,e);
			button.Text="New Button";
			button.ButtonStyle = eButtonStyle.ImageAndText;
			button.ImagePosition=eImagePosition.Left;
			button.HotTrackingStyle=eHotTrackingStyle.None;
			button.HotFontUnderline=true;
			button.Cursor=System.Windows.Forms.Cursors.Hand;
		}
		/// 
		/// Applies default appearance to ExplorerBarGroupItem.
		/// 
		public void SetDefaultAppearance()
		{
			this.StockStyle = eExplorerBarStockStyle.SystemColors;
			this.BackStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
			this.BackStyle.BorderLeft =eStyleBorderType.Solid;
			this.BackStyle.BorderRight =eStyleBorderType.Solid;
			this.BackStyle.BorderTop =eStyleBorderType.Solid;
			this.BackStyle.BorderBottom =eStyleBorderType.Solid;
			this.BackStyle.BorderLeftColor =SystemColors.Window;
			this.BackStyle.BorderRightColor =SystemColors.Window;
			this.BackStyle.BorderTopColor =SystemColors.Window;
			this.BackStyle.BorderBottomColor =SystemColors.Window;
			this.BackStyle.BorderLeftWidth = 1;
			this.BackStyle.BorderRightWidth = 1;
			this.BackStyle.BorderTopWidth = 1;
			this.BackStyle.BorderBottomWidth = 1;
			
			this.ExpandBackColor=SystemColors.Window;
			this.ExpandBorderColor = SystemColors.InactiveCaption;
			this.ExpandForeColor = SystemColors.Highlight;
			this.ExpandHotBackColor=SystemColors.Window;
			this.ExpandHotForeColor = SystemColors.ActiveCaption;
			this.ExpandHotBorderColor=SystemColors.ActiveCaption;
			this.TitleHotStyle.BackColor = SystemColors.Window;
			this.TitleHotStyle.BackColor2 = SystemColors.InactiveCaption;
			this.TitleHotStyle.TextColor = SystemColors.ActiveCaption;
			this.TitleStyle.BackColor = SystemColors.Window;
			this.TitleStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2;
			this.TitleStyle.TextColor = SystemColors.ControlText;
			this.ThemeAware=true;
		}
	}
}