namespace DevComponents.DotNetBar { using System; using System.Drawing; using System.Resources; using System.ComponentModel; using DevComponents.DotNetBar.Rendering; /// /// Defines an item that allows the toolbar customization. /// [System.ComponentModel.ToolboxItem(false),System.ComponentModel.DesignTimeVisible(false)] public class CustomizeItem:PopupItem { private bool m_MouseOver; private string m_CustomizeStr="",m_ResetStr=""; private string m_ThisToolTip; private bool m_Localized=false; private bool m_CustomizeItemVisible=true; private bool m_AutoSizeMenuImages=true; private System.Drawing.Size m_MenuImageSize=Size.Empty; /// /// Creates new instance of CustomizeItem object. /// public CustomizeItem()//:base() { this.GlobalItem=false; m_MouseOver=false; m_SystemItem=true; this.CanCustomize=false; LoadResources(); this.AutoCollapseOnClick=false; m_MenuImageSize=new Size(16,16); } /// /// Returns copy of CustomizeItem item /// public override BaseItem Copy() { CustomizeItem objCopy=new CustomizeItem(); this.CopyToItem(objCopy); objCopy.CustomizeItemVisible=m_CustomizeItemVisible; return objCopy; } /// /// Called when item container has changed. If you override this method you must call the base implementation to allow default processing to occur. /// /// Previous container of the item. protected internal override void OnContainerChanged(object objOldContainer) { base.OnContainerChanged(objOldContainer); LoadResources(); } /// /// Occurs when tooltip is about to be shown or hidden. /// /// Specifies whether tooltip is shown or hidden. protected override void OnTooltip(bool bShow) { LoadResources(); base.OnTooltip(bShow); } /// /// Loads the resources (text) used by this item. /// protected virtual void LoadResources() { if(!m_Localized) { if(this.GetOwner()!=null) m_Localized=true; using(LocalizationManager lm=new LocalizationManager(this.GetOwner() as IOwnerLocalize)) { m_ThisToolTip=lm.GetLocalizedString(LocalizationKeys.CustomizeItemTooltip); this.Text=lm.GetLocalizedString(LocalizationKeys.CustomizeItemAddRemove); m_CustomizeStr = lm.GetLocalizedString(LocalizationKeys.CustomizeItemCustomize); m_ResetStr=lm.GetLocalizedString(LocalizationKeys.CustomizeItemReset); } } } /// /// Overriden. Draws the item. /// /// Target Graphics object. public override void Paint(ItemPaintArgs pa) { if (this.SuspendLayout) return; eDotNetBarStyle effectiveStyle = EffectiveStyle; if (effectiveStyle == eDotNetBarStyle.Office2000) PaintOffice(pa); else { if (this.IsThemed && !this.IsOnMenu) PaintThemed(pa); else if (effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle)) { PaintOffice2003(pa); return; } else PaintDotNet(pa); } if (BaseItem.IsOnPopup(this)) return; Point[] p = new Point[3]; if (m_Orientation == eOrientation.Vertical) { p[0].X = m_Rect.Left + Dpi.Width7; p[0].Y = m_Rect.Top + Dpi.Height4; p[1].X = p[0].X - Dpi.Width3; p[1].Y = p[0].Y + Dpi.Height3; p[2].X = p[0].X; p[2].Y = p[0].Y + Dpi.Height6; pa.Graphics.FillPolygon(SystemBrushes.ControlText, p); } else { p[0].X = m_Rect.Left + (m_Rect.Width / 2) - Dpi.Width1; p[0].Y = m_Rect.Bottom - Dpi.Height4; p[1].X = p[0].X - Dpi.Width2; p[1].Y = p[0].Y - Dpi.Height3; p[2].X = p[1].X + Dpi.Width5; p[2].Y = p[1].Y; pa.Graphics.FillPolygon(SystemBrushes.ControlText, p); } if (this.DesignMode && this.Focused) { Rectangle r = m_Rect; //r.Inflate(-1,-1); DesignTime.DrawDesignTimeSelection(pa.Graphics, r, pa.Colors.ItemDesignTimeBorder); } } private void PaintThemed(ItemPaintArgs pa) { ThemeToolbar theme=pa.ThemeToolbar; ThemeToolbarParts part=ThemeToolbarParts.Button; ThemeToolbarStates state=ThemeToolbarStates.Normal; if(m_Expanded) state=ThemeToolbarStates.Pressed; else if(m_MouseOver) state=ThemeToolbarStates.Hot; theme.DrawBackground(pa.Graphics,part,state,m_Rect); theme=null; if(!BaseItem.IsOnPopup(this)) return; Font objFont=null; eTextFormat objStringFormat=GetStringFormat(); Point[] p; objFont=GetFont(); Rectangle rect=m_Rect; rect.Inflate(-1,-1); rect.Width-=6; TextDrawing.DrawString(pa.Graphics,m_Text,objFont,SystemColors.ControlText,rect,objStringFormat); p=new Point[3]; p[0].X=m_Rect.Right-8; p[0].Y=m_Rect.Top+m_Rect.Height/2+3; p[1].X=p[0].X-2; p[1].Y=p[0].Y-3; p[2].X=p[1].X+5; p[2].Y=p[1].Y; pa.Graphics.FillPolygon(SystemBrushes.ControlText,p); } private void PaintDotNet(ItemPaintArgs pa) { Rectangle r = m_Rect; System.Drawing.Graphics g=pa.Graphics; eDotNetBarStyle effectiveStyle = EffectiveStyle; if (effectiveStyle == eDotNetBarStyle.Office2010 || effectiveStyle == eDotNetBarStyle.Office2007 || effectiveStyle == eDotNetBarStyle.Windows7) { Office2007ButtonItemStateColorTable stateColors = null; if (pa.Renderer is Office2007Renderer) { Office2007ButtonItemColorTable ct = ((Office2007Renderer)pa.Renderer).ColorTable.ButtonItemColors[0]; if (this.Expanded) stateColors = ct.Expanded; else if (m_MouseOver) stateColors = ct.MouseOver; else stateColors = ct.Default; } if (stateColors != null) Office2007ButtonItemPainter.PaintBackground(g, stateColors, r, RoundRectangleShapeDescriptor.RoundCorner2, false, true); } else { if (this.Expanded) { r = new Rectangle(m_Rect.Left + Dpi.Width2, m_Rect.Top + Dpi.Height2, m_Rect.Width - Dpi.Width2, m_Rect.Height - Dpi.Height2); g.FillRectangle(SystemBrushes.ControlDark, r); r.Offset(-Dpi.Width2, -Dpi.Height2); r.Height += Dpi.Height2; DisplayHelp.FillRectangle(g, r, pa.Colors.ItemExpandedBackground, pa.Colors.ItemExpandedBackground2, pa.Colors.ItemExpandedBackgroundGradientAngle); DisplayHelp.DrawRectangle(g, pa.Colors.MenuBorder, r); } else if (m_MouseOver) { r = new Rectangle(m_Rect.Left, m_Rect.Top, m_Rect.Width - Dpi.Width2, m_Rect.Height); DisplayHelp.FillRectangle(g, r, pa.Colors.ItemHotBackground, pa.Colors.ItemHotBackground2, pa.Colors.ItemHotBackgroundGradientAngle); DisplayHelp.DrawRectangle(g, pa.Colors.ItemHotBorder, r); } if (!BaseItem.IsOnPopup(this)) return; if (this.Expanded) { DisplayHelp.FillRectangle(g, m_Rect, pa.Colors.ItemExpandedBackground, pa.Colors.ItemExpandedBackground2, pa.Colors.ItemExpandedBackgroundGradientAngle); DisplayHelp.DrawRectangle(g, pa.Colors.MenuBorder, m_Rect); } } Font objFont = null; eTextFormat objStringFormat = GetStringFormat(); Point[] p; objFont=GetFont(); Rectangle rect=m_Rect; rect.Inflate(-Dpi.Width1, -Dpi.Height1); rect.Width -= Dpi.Width6; rect.X += Dpi.Width4; TextDrawing.DrawString(g,m_Text,objFont,SystemColors.ControlText,rect,objStringFormat); p=new Point[3]; p[0].X = m_Rect.Right - Dpi.Width6; p[0].Y = m_Rect.Top + m_Rect.Height / 2 + Dpi.Height3; p[1].X = p[0].X - Dpi.Width2; p[1].Y = p[0].Y - Dpi.Height3; p[2].X = p[1].X + Dpi.Width5; p[2].Y=p[1].Y; g.FillPolygon(SystemBrushes.ControlText,p); } private void PaintOffice2003(ItemPaintArgs pa) { // When on popup the Customize Item is painted same as in .NET style... if (BaseItem.IsOnPopup(this)) { PaintDotNet(pa); return; } Graphics g = pa.Graphics; Rectangle r = m_Rect; System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath(); if (this.Orientation == eOrientation.Vertical) { // When on docked toolbar it has a special look... r.Y += Dpi.Height2; r.Height -= Dpi.Height1; r.X -= Dpi.Width2; r.Width += Dpi.Width2; if (pa.RightToLeft) { path.AddLine(r.Right, r.Y, r.Right - Dpi.Width2, r.Y + Dpi.Height2); path.AddLine(r.X + Dpi.Width2, r.Y + Dpi.Height2, r.X, r.Y); path.AddLine(r.X, r.Bottom - Dpi.Height2, r.X + Dpi.Width2, r.Bottom); path.AddLine(r.Right - Dpi.Width2, r.Bottom, r.Right, r.Bottom - Dpi.Height2); } else { path.AddLine(r.X, r.Y, r.X + Dpi.Width2, r.Y + Dpi.Height2); path.AddLine(r.Right - Dpi.Width2, r.Y + Dpi.Height2, r.Right, r.Y); path.AddLine(r.Right, r.Bottom - Dpi.Height2, r.Right - Dpi.Width2, r.Bottom); path.AddLine(r.X + Dpi.Width2, r.Bottom, r.X, r.Bottom - Dpi.Height2); } path.CloseAllFigures(); } else { // When on docked toolbar it has a special look... r.X += Dpi.Width2; r.Width -= Dpi.Width1; r.Y -= Dpi.Height2; r.Height += Dpi.Height3; if (pa.RightToLeft) { r.X -= Dpi.Width2; path.AddLine(r.Right, r.Y, r.Right - Dpi.Width2, r.Y + Dpi.Height2); path.AddLine(r.Right - Dpi.Width2, r.Bottom - Dpi.Height2, r.Right, r.Bottom); path.AddLine(r.X + Dpi.Width2, r.Bottom, r.X, r.Bottom - Dpi.Height2); path.AddLine(r.X, r.Y + Dpi.Height2, r.X + Dpi.Width2, r.Y); } else { path.AddLine(r.X, r.Y, r.X + Dpi.Width2, r.Y + Dpi.Height2); path.AddLine(r.X + Dpi.Width2, r.Bottom - Dpi.Height2, r.X, r.Bottom); path.AddLine(r.Right - Dpi.Width2, r.Bottom, r.Right, r.Bottom - Dpi.Height2); path.AddLine(r.Right, r.Y + Dpi.Height2, r.Right - Dpi.Width2, r.Y); } path.CloseAllFigures(); } System.Drawing.Drawing2D.SmoothingMode smooth = g.SmoothingMode; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; if (this.Expanded) DisplayHelp.FillPath(g, path, pa.Colors.ItemPressedBackground, pa.Colors.ItemPressedBackground2, pa.Colors.ItemPressedBackgroundGradientAngle); else if (m_MouseOver) DisplayHelp.FillPath(g, path, pa.Colors.ItemHotBackground, pa.Colors.ItemHotBackground2, pa.Colors.ItemHotBackgroundGradientAngle); else DisplayHelp.FillPath(g, path, pa.Colors.CustomizeBackground, pa.Colors.CustomizeBackground2, pa.Colors.CustomizeBackgroundGradientAngle); g.SmoothingMode = smooth; //using(Pen pen=new Pen(SystemColors.Window,1)) // g.DrawLine(pen,r.Left+(m_Rect.Width-4)/2+1,r.Bottom-11+1,r.Left+(m_Rect.Width-4)/2+4+1,r.Bottom-11+1); if (this.Orientation == eOrientation.Vertical) { // Draw Arrow Shade Point[] p = new Point[3]; p[0].X = r.Left + (m_Rect.Width - Dpi.Width4) / 2 + Dpi.Width3; p[0].Y = r.Bottom - Dpi.Height3 + Dpi.Height1; p[1].X = p[0].X - Dpi.Width2; p[1].Y = p[0].Y - Dpi.Height3; p[2].X = p[1].X + Dpi.Width5; p[2].Y = p[1].Y; using (SolidBrush brush = new SolidBrush(SystemColors.Window)) // SystemColors.HighlightText)) g.FillPolygon(brush, p); // Draw Arrow using (Pen pen = new Pen(pa.Colors.CustomizeText, 1)) g.DrawLine(pen, r.Left + (m_Rect.Width - Dpi.Width4) / 2, r.Bottom - Dpi.Height9, r.Left + (m_Rect.Width - Dpi.Width4) / 2 + Dpi.Width4, r.Bottom - Dpi.Height9); p = new Point[3]; p[0].X = r.Left + (m_Rect.Width - Dpi.Width4) / 2 + Dpi.Width2; p[0].Y = r.Bottom - Dpi.Height3; p[1].X = p[0].X - Dpi.Width2; p[1].Y = p[0].Y - Dpi.Height3; p[2].X = p[1].X + Dpi.Width5; p[2].Y = p[1].Y; using (SolidBrush brush = new SolidBrush(pa.Colors.CustomizeText)) g.FillPolygon(brush, p); } else { // Draw Arrow Shade Point[] p = new Point[3]; p[0].X = r.Left + (m_Rect.Width - Dpi.Width4) / 2 + Dpi.Width3; p[0].Y = r.Bottom - Dpi.Height5 + Dpi.Height1; p[1].X = p[0].X - Dpi.Width2; p[1].Y = p[0].Y - Dpi.Height3; p[2].X = p[1].X + Dpi.Width5; p[2].Y = p[1].Y; using (SolidBrush brush = new SolidBrush(SystemColors.Window)) // SystemColors.HighlightText)) g.FillPolygon(brush, p); // Draw Arrow using (Pen pen = new Pen(pa.Colors.CustomizeText, 1)) g.DrawLine(pen, r.Left + (m_Rect.Width - Dpi.Width4) / 2, r.Bottom - Dpi.Height11, r.Left + (m_Rect.Width - Dpi.Width4) / 2 + Dpi.Width4, r.Bottom - Dpi.Height11); p = new Point[3]; p[0].X = r.Left + (m_Rect.Width - Dpi.Width4) / 2 + Dpi.Width2; p[0].Y = r.Bottom - Dpi.Height5; p[1].X = p[0].X - Dpi.Width2; p[1].Y = p[0].Y - Dpi.Height3; p[2].X = p[1].X + Dpi.Width5; p[2].Y = p[1].Y; using (SolidBrush brush = new SolidBrush(pa.Colors.CustomizeText)) g.FillPolygon(brush, p); } } private void PaintOffice(ItemPaintArgs pa) { System.Drawing.Graphics g=pa.Graphics; if(this.Expanded) { System.Windows.Forms.ControlPaint.DrawBorder3D(g,m_Rect,System.Windows.Forms.Border3DStyle.SunkenOuter); } else if(m_MouseOver) { System.Windows.Forms.ControlPaint.DrawBorder3D(g,m_Rect,System.Windows.Forms.Border3DStyle.RaisedInner); } if(!BaseItem.IsOnPopup(this)) return; Font objFont=null; eTextFormat objStringFormat=GetStringFormat(); objFont=GetFont(); Rectangle rect=m_Rect; rect.Inflate(-Dpi.Width1,-Dpi.Height1); rect.Width-=Dpi.Width6; if(this.Expanded) { rect.Offset(Dpi.Width1, Dpi.Height1); rect.Width -= Dpi.Width1; rect.Height -= Dpi.Height1; } TextDrawing.DrawString(g,m_Text,objFont,SystemColors.ControlText,rect,objStringFormat); Point[] p=new Point[3]; p[0].X = m_Rect.Right - Dpi.Width8; p[0].Y = m_Rect.Top + m_Rect.Height / 2 + Dpi.Height3; p[1].X = p[0].X - Dpi.Width2; p[1].Y = p[0].Y - Dpi.Height3; p[2].X = p[1].X + Dpi.Width5; p[2].Y=p[1].Y; g.FillPolygon(SystemBrushes.ControlText,p); } /// /// Sets the custom system tooltip text for the item. /// /// Tooltip text. protected virtual void SetCustomTooltip(string text) { this.Tooltip = text; } /// /// Overriden. Recalculates the size of the item. /// public override void RecalcSize() { if(this.SuspendLayout) return; if(!BaseItem.IsOnPopup(this)) { if(m_Orientation==eOrientation.Vertical) { // Take suggested width m_Rect.Height=Dpi.Width14; m_Rect.Width=Dpi.Height22; } else { // Take suggested height m_Rect.Width = Dpi.Width14; m_Rect.Height=Dpi.Height22; } m_BeginGroup=false; SetCustomTooltip(GetTooltipText()); } else { SetCustomTooltip(""); m_BeginGroup=true; System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control; if(!IsHandleValid(objCtrl)) return; Graphics g=Graphics.FromHwnd(objCtrl.Handle); // Get the right image size that we will use for calculation Size objImageSize=Size.Empty; if(m_Parent!=null) { ImageItem objParentImageItem=m_Parent as ImageItem; if(objParentImageItem!=null) objImageSize=new Size(objParentImageItem.SubItemsImageSize.Width,objParentImageItem.SubItemsImageSize.Height); else objImageSize=this.ImageSize; } else objImageSize=this.ImageSize; // Measure string Font objCurrentFont=null; objCurrentFont=GetFont(); Size objStringSize=Size.Empty; eTextFormat objStringFormat=GetStringFormat(); if(m_Text!="") { objStringSize=TextDrawing.MeasureString(g,m_Text,objCurrentFont,512,objStringFormat); objStringSize.Width+=Dpi.Width2; } // Calculate item height if(objStringSize.Height>objImageSize.Height) m_Rect.Height=(int)objStringSize.Height+Dpi.Height4; else m_Rect.Height=objImageSize.Height+Dpi.Height4; m_Rect.Width=(int)objStringSize.Width+Dpi.Width15; } base.RecalcSize(); } /// /// Gets localized tooltip text for this instance of the item. /// /// Tooltip text. protected virtual string GetTooltipText() { return m_ThisToolTip; } /*private bool IsOnPopUp() { if(this.ContainerControl is PopupMenu) return true; Bar objTlb=this.ContainerControl as Bar; if(objTlb!=null && objTlb.BarState==eBarState.Popup) return true; return false; }*/ [System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public override void InternalMouseEnter() { base.InternalMouseEnter(); m_MouseOver=true; this.Refresh(); } [System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public override void InternalMouseHover() { base.InternalMouseHover(); MouseHoverCustomize(); } [System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public override void InternalMouseLeave() { base.InternalMouseLeave(); m_MouseOver=false; this.Refresh(); } [System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] public override void InternalMouseDown(System.Windows.Forms.MouseEventArgs objArg) { base.InternalMouseDown(objArg); if(objArg.Button != System.Windows.Forms.MouseButtons.Left || this.DesignMode) return; MouseDownAction(); } protected virtual void MouseDownAction() { this.Expanded = !m_Expanded; } /// /// Called when mouse hovers over the customize item. /// protected virtual void MouseHoverCustomize() { if (!this.Expanded && BaseItem.IsOnPopup(this)) this.Expanded = true; } /// /// Gets whether the mouse is over the item. /// [Browsable(false)] public bool IsMouseOver { get { return m_MouseOver; } } protected internal override void OnExpandChange() { if (this.Expanded) SetupCustomizeItem(); base.OnExpandChange(); if (!this.Expanded) ClearCustomizeItem(); } protected virtual void SetupCustomizeItem() { if (BaseItem.IsOnPopup(this)) { AddCustomizeItems(); this.PopupType = ePopupType.Menu; } else { this.SubItems.Clear(); CustomizeItem btn = new CustomizeItem(); btn.CustomizeItemVisible = this.CustomizeItemVisible; btn.IsRightToLeft = this.IsRightToLeft; this.SubItems.Add(btn); this.PopupType = ePopupType.ToolBar; } } protected virtual void ClearCustomizeItem() { this.SubItems.Clear(); } private void AddRemoveClick(object sender) { ((ButtonItem)sender).Expanded=!((ButtonItem)sender).Expanded; } private void ShowHideClick(object sender, System.EventArgs e) { BaseItem objBtn=((BaseItem)sender).Tag as BaseItem; bool bGlobal=objBtn.GlobalItem; objBtn.GlobalItem=false; objBtn.SetVisibleDirect(!objBtn.Visible); if (objBtn is TextBoxItem || objBtn is ComboBoxItem || objBtn is ControlContainerItem || objBtn.ContainerControl is NavigationBar) objBtn.OnVisibleChanged(objBtn.Visible); objBtn.UserCustomized = true; objBtn.GlobalItem=bGlobal; ((BaseItem)sender).Visible=!((BaseItem)sender).Visible; if(objBtn.ContainerControl is Bar) ((Bar)objBtn.ContainerControl).RecalcLayout(); else if(objBtn.ContainerControl is MenuPanel) ((MenuPanel)objBtn.ContainerControl).RecalcSize(); else if(objBtn.ContainerControl is BarBaseControl) ((BarBaseControl)objBtn.ContainerControl).RecalcLayout(); ((BaseItem)sender).Refresh(); IOwner owner=this.GetOwner() as IOwner; if(owner!=null) { owner.InvokeUserCustomize(objBtn,new EventArgs()); owner.InvokeEndUserCustomize(objBtn,new EndUserCustomizeEventArgs(eEndUserCustomizeAction.ItemVisibilityChanged)); } } private void CustomizeClick(object sender, System.EventArgs e) { IOwner owner=this.GetOwner() as IOwner; if(owner==null) return; CollapseAll(this); owner.Customize(); } private void ResetClick(object sender, System.EventArgs e) { IOwner owner=this.GetOwner() as IOwner; if(owner==null) return; BaseItem item=this; if(BaseItem.IsOnPopup(this) && this.Parent!=null) item=this.Parent; CollapseAll(this); owner.InvokeResetDefinition(item,new EventArgs()); } /// /// Forces the repaint the item. /// public override void Refresh() { if(this.SuspendLayout) return; if ((EffectiveStyle == eDotNetBarStyle.Office2003 || EffectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(this.EffectiveStyle)) && !BaseItem.IsOnPopup(this)) { if((m_Visible || this.IsOnCustomizeMenu) && m_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_Rect; r.Inflate(2,2); objCtrl.Invalidate(r,true); } } } else base.Refresh(); } private void AddCustomizeItems() { BaseItem objTmp; BaseItem objParent; this.SubItems.Clear(); // Find the right parent item /*System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control; if(objCtrl is Bar) { Bar objTlb=objCtrl as Bar; if(objTlb.Parent==null) objParent=this.Parent; else objParent=objTlb.Parent; } else { objParent=this.Parent; }*/ objParent=this.Parent; while(objParent!=null && objParent.SystemItem && !(objParent.SystemItem && objParent is GenericItemContainer)) objParent=objParent.Parent; if(objParent==null) return; foreach(BaseItem objItem in objParent.SubItems) { if(!objItem.SystemItem && objItem.CanCustomize) { objTmp=objItem.Copy(); objTmp.GlobalItem=false; objTmp.ClearClick(); objTmp.BeginGroup=false; objTmp.Enabled=true; objTmp.SubItems.Clear(); objTmp.Tooltip=""; objTmp.SetIsOnCustomizeMenu(true); if(objItem is ButtonItem) { ((ButtonItem)objTmp).HotTrackingStyle=eHotTrackingStyle.Default; if (m_AutoSizeMenuImages && !m_MenuImageSize.IsEmpty && ((ButtonItem)objTmp).ImageSize != m_MenuImageSize) { ((ButtonItem)objTmp).ImageFixedSize = m_MenuImageSize; ((ButtonItem)objTmp).UseSmallImage = true; } } objTmp.Click+=new System.EventHandler(ShowHideClick); objTmp.Tag=objItem; this.SubItems.Add(objTmp); } } if(objParent is GenericItemContainer && ((GenericItemContainer)objParent).MoreItems!=null) { BaseItem objMore=((GenericItemContainer)objParent).MoreItems; foreach(BaseItem objItem in objMore.SubItems) { if(!objItem.SystemItem) { objTmp=objItem.Copy(); objTmp.GlobalItem=false; objTmp.ClearClick(); objTmp.BeginGroup=false; objTmp.Enabled=true; objTmp.SubItems.Clear(); objTmp.Tooltip=""; objTmp.SetIsOnCustomizeMenu(true); objTmp.Click+=new System.EventHandler(ShowHideClick); objTmp.Tag=objItem; this.SubItems.Add(objTmp); } } } objTmp=null; ButtonItem objBtn=null; IOwner owner=this.GetOwner() as IOwner; if(owner!=null && owner.ShowResetButton) { // Reset Bar Item objBtn=new ButtonItem(); objBtn.GlobalItem=false; objBtn.BeginGroup=true; objBtn.Text=m_ResetStr; // "&Reset Bar"; objBtn.SetIsOnCustomizeMenu(true); objBtn.SetSystemItem(true); objBtn.Orientation=eOrientation.Horizontal; objBtn.Click+=new System.EventHandler(ResetClick); this.SubItems.Add(objBtn); } if(m_CustomizeItemVisible) { // Customize objBtn=new ButtonItem(); objBtn.GlobalItem=false; if(owner==null || owner!=null && !owner.ShowResetButton) objBtn.BeginGroup=true; objBtn.Text=m_CustomizeStr; //"&Customize..."; objBtn.SetIsOnCustomizeMenu(true); objBtn.SetSystemItem(true); objBtn.Click+=new System.EventHandler(CustomizeClick); this.SubItems.Add(objBtn); } m_NeedRecalcSize=false; } private eTextFormat GetStringFormat() { eTextFormat format = eTextFormat.Default; format |= eTextFormat.SingleLine; //format |= eTextFormat.EndEllipsis; format |= eTextFormat.VerticalCenter; return format; //StringFormat sfmt=BarFunctions.CreateStringFormat(); //new StringFormat(StringFormat.GenericDefault); //sfmt.HotkeyPrefix=System.Drawing.Text.HotkeyPrefix.Show; ////sfmt.FormatFlags=sfmt.FormatFlags & ~(sfmt.FormatFlags & StringFormatFlags.DisableKerning); //sfmt.FormatFlags=sfmt.FormatFlags | StringFormatFlags.NoWrap; //sfmt.Alignment=System.Drawing.StringAlignment.Near; //sfmt.LineAlignment=System.Drawing.StringAlignment.Center; //return sfmt; } /// /// Returns the Font object to be used for drawing the item text. /// /// Font object. protected virtual Font GetFont() { 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; } /// /// Gets or sets a value indicating whether the item is visible. /// [Browsable(true), DevCoBrowsable(true), DefaultValue(true), Category("Behavior"), Description("Determines whether the item is visible or hidden.")] public override bool Visible { get { Bar objTlb=this.ContainerControl as Bar; if(objTlb!=null) { if(objTlb.BarState==eBarState.Docked || objTlb.BarState==eBarState.Popup) return base.Visible; else return false; } return base.Visible; } set { base.Visible=value; } } /// /// Gets or sets whether Customize menu item is visible. /// [Browsable(true),DevCoBrowsable(true),Category("Behavior"),Description("Indicates whether Customize menu item is visible."),DefaultValue(true)] public virtual bool CustomizeItemVisible { get {return m_CustomizeItemVisible;} set {m_CustomizeItemVisible=value;} } /// /// 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 ThisItem = context.ItemXmlElement; if(!m_CustomizeItemVisible) ThisItem.SetAttribute("customizeitemvisible",System.Xml.XmlConvert.ToString(m_CustomizeItemVisible)); } /// /// Overloaded. Deserializes the Item from the XmlElement. /// /// Source XmlElement. public override void Deserialize(ItemSerializationContext context) { base.Deserialize(context); System.Xml.XmlElement ItemXmlSource = context.ItemXmlElement; if(ItemXmlSource.HasAttribute("customizeitemvisible")) m_CustomizeItemVisible=System.Xml.XmlConvert.ToBoolean(ItemXmlSource.GetAttribute("customizeitemvisible")); } /// /// Indicates whether the item will auto-collapse (fold) when clicked. /// When item is on popup menu and this property is set to false, menu will not /// close when item is clicked. /// [Browsable(false), DevCoBrowsable(false), Category("Behavior"), DefaultValue(false), Description("Indicates whether the item will auto-collapse (fold) when clicked.")] public override bool AutoCollapseOnClick { get { return base.AutoCollapseOnClick; } set {base.AutoCollapseOnClick = value; } } /// /// Gets or sets whether item can be customized by end user. /// [Browsable(false), DevCoBrowsable(false), DefaultValue(false), Category("Behavior"), Description("Indicates whether item can be customized by user.")] public override bool CanCustomize { get { return base.CanCustomize; } set { base.CanCustomize = value; } } /// /// Gets or sets whether item is global or not. /// This flag is used to propagate property changes to all items with the same name. /// Setting for example Visible property on the item that has GlobalItem set to true will /// set visible property to the same value on all items with the same name. /// [Browsable(false), DevCoBrowsable(false), DefaultValue(false), Category("Behavior"), Description("Indicates whether certain global properties are propagated to all items with the same name when changed.")] public override bool GlobalItem { get { return base.GlobalItem; } set { base.GlobalItem = value; } } } }