#if FRAMEWORK20 using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; using DevComponents.DotNetBar.Rendering; namespace DevComponents.DotNetBar { public class SuperTabMenuBox : PopupItem { #region Private variables private SuperTabControlBox _ControlBox; private Size _ItemSize = new Size(16, 16); private bool _IsMouseOver; private bool _IsMouseDown; private bool _AutoHide; private bool _ShowTabsOnly = true; private bool _ShowImages = true; private bool _RaiseClickOnSelection; #endregion /// /// Constructor /// /// Associated SuperTabControlBox public SuperTabMenuBox(SuperTabControlBox controlBox) { _ControlBox = controlBox; Style = eDotNetBarStyle.Office2007; } #region Public override designer hiding [Browsable(false)] public override bool BeginGroup { get { return base.BeginGroup; } set { base.BeginGroup = value; } } [Browsable(false)] public override bool AutoCollapseOnClick { get { return base.AutoCollapseOnClick; } set { base.AutoCollapseOnClick = value; } } [Browsable(false)] public override bool CanCustomize { get { return base.CanCustomize; } set { base.CanCustomize = value; } } [Browsable(false)] public override string Category { get { return base.Category; } set { base.Category = value; } } [Browsable(false)] public override bool ClickAutoRepeat { get { return base.ClickAutoRepeat; } set { base.ClickAutoRepeat = value; } } [Browsable(false)] public override int ClickRepeatInterval { get { return base.ClickRepeatInterval; } set { base.ClickRepeatInterval = value; } } [Browsable(false)] public override Cursor Cursor { get { return base.Cursor; } set { base.Cursor = value; } } [Browsable(false)] public override bool Enabled { get { return base.Enabled; } set { base.Enabled = value; } } [Browsable(false)] public override bool Stretch { get { return base.Stretch; } set { base.Stretch = value; } } [Browsable(false)] public override string Text { get { return base.Text; } set { base.Text = value; } } [Browsable(false)] public override bool ThemeAware { get { return base.ThemeAware; } set { base.ThemeAware = value; } } [Browsable(false)] public override string Tooltip { get { return base.Tooltip; } set { base.Tooltip = value; } } [Browsable(false)] public override eItemAlignment ItemAlignment { get { return base.ItemAlignment; } set { base.ItemAlignment = value; } } [Browsable(false)] public override string KeyTips { get { return base.KeyTips; } set { base.KeyTips = value; } } [Browsable(false)] public override ShortcutsCollection Shortcuts { get { return base.Shortcuts; } set { base.Shortcuts = value; } } [Browsable(false)] public override string Description { get { return base.Description; } set { base.Description = value; } } [Browsable(false)] public override bool GlobalItem { get { return base.GlobalItem; } set { base.GlobalItem = value; } } [Browsable(false)] public override bool ShowSubItems { get { return base.ShowSubItems; } set { base.ShowSubItems = value; } } [Browsable(false)] public override string GlobalName { get { return base.GlobalName; } set { base.GlobalName = value; } } [Browsable(false)] public override Command Command { get { return base.Command; } set { base.Command = value; } } [Browsable(false)] public override object CommandParameter { get { return base.CommandParameter; } set { base.CommandParameter = value; } } #endregion #region Public properties #region AutoHide /// /// Gets or sets whether the MenuBox is automatically hidden when the tab items size does not exceed the size of the control /// [Browsable(true), DefaultValue(false), Category("Behavior")] [Description("Indicates whether the MenuBox is automatically hidden when the tab items size does not exceed the size of the control.")] public bool AutoHide { get { return (_AutoHide); } set { if (_AutoHide != value) { _AutoHide = value; Visible = (value == true) ? AllItemsVisible() == false : true; MyRefresh(); } } } #endregion #region RaiseClickOnSelection /// /// Gets or sets whether the MenuBox raises a ClickEvent when selected /// [Browsable(true), DefaultValue(false), Category("Behavior")] [Description("Indicates whether the MenuBox raises a ClickEvent when selected.")] public bool RaiseClickOnSelection { get { return (_RaiseClickOnSelection); } set { _RaiseClickOnSelection = value; } } #endregion #region ShowTabsOnly /// /// Gets or sets whether MenuBox shows only Tabs entries /// [Browsable(true), DefaultValue(true), Category("Behavior")] [Description("Indicates whether MenuBox shows only Tabs entries.")] public bool ShowTabsOnly { get { return (_ShowTabsOnly); } set { _ShowTabsOnly = value; } } #endregion #region ShowImages /// /// Gets or sets whether the MenuBox displays each menu entry with its associated Image/Icon /// [Browsable(true), DefaultValue(true), Category("Behavior")] [Description("Indicates whether the MenuBox displays each menu entry with its associated Image/Icon.")] public bool ShowImages { get { return (_ShowImages); } set { _ShowImages = value; } } #endregion #region Visible /// /// Gets or sets MenuBox Visible state /// [Browsable(true), DefaultValue(true), Category("Behavior")] [Description("Indicates MenuBox Visible state.")] public override bool Visible { get { return base.Visible; } set { if (base.Visible != value) { base.Visible = value; MyRefresh(); } } } #endregion #endregion #region Internal properties #region IsMouseDown /// /// Gets the MouseDown state /// internal bool IsMouseDown { get { return (_IsMouseDown); } } #endregion #region IsMouseOver /// /// Gets the MouseOver state /// internal bool IsMouseOver { get { return (_IsMouseOver); } } #endregion #endregion #region RecalcSize /// /// RecalcSize /// public override void RecalcSize() { base.RecalcSize(); WidthInternal = Dpi.Width(_ItemSize.Width); HeightInternal = Dpi.Height(_ItemSize.Height); } #endregion #region MyRefresh /// /// Refreshes the display /// private void MyRefresh() { if (_ControlBox.TabDisplay != null) { SuperTabStripItem tsi = _ControlBox.TabDisplay.TabStripItem; if (tsi != null) { _ControlBox.NeedRecalcSize = true; _ControlBox.RecalcSize(); tsi.NeedRecalcSize = true; tsi.Refresh(); } } } #endregion #region Paint /// /// Paint processing /// /// public override void Paint(ItemPaintArgs p) { Graphics g = p.Graphics; using (SuperTabColorTable sct = _ControlBox.TabDisplay.GetColorTable()) { Color imageColor = sct.ControlBoxDefault.Image; if (IsMouseOver == true) { Rectangle r = Bounds; r.Width--; r.Height--; imageColor = sct.ControlBoxMouseOver.Image; using (Brush br = new SolidBrush(sct.ControlBoxMouseOver.Background)) g.FillRectangle(br, r); using (Pen pen = new Pen(sct.ControlBoxMouseOver.Border)) g.DrawRectangle(pen, r); } if (AllItemsVisible() == true) g.DrawImageUnscaled(GetMenuButton1(g, imageColor), Bounds); else g.DrawImageUnscaled(GetMenuButton2(g, imageColor), Bounds); } } #region AllItemsVisible /// /// Determines if all the items are visible /// /// true if all visible private bool AllItemsVisible() { SubItemsCollection tabs = _ControlBox.TabDisplay.Tabs; for (int i = 0; i < tabs.Count; i++) { if (tabs[i].Visible == true && tabs[i].Displayed == false) return (false); } return (true); } #endregion #region GetMenuButton1 /// /// Gets MenuButton1 /// /// /// /// private Bitmap GetMenuButton1(Graphics g, Color color) { return (_ControlBox.TabDisplay.GetMenuButton1(g, color)); } #endregion #region GetMenuButton2 /// /// Gets MenuButton2 /// /// /// /// private Bitmap GetMenuButton2(Graphics g, Color color) { return (_ControlBox.TabDisplay.GetMenuButton2(g, color)); } #endregion #endregion #region Mouse support #region InternalMouseEnter /// /// InternalMouseEnter /// public override void InternalMouseEnter() { base.InternalMouseEnter(); _IsMouseOver = true; Refresh(); } #endregion #region InternalMouseLeave /// /// InternalMouseLeave /// public override void InternalMouseLeave() { base.InternalMouseLeave(); _IsMouseOver = false; Refresh(); } #endregion #region InternalMouseDown /// /// InternalMouseDown /// /// public override void InternalMouseDown(MouseEventArgs objArg) { _IsMouseDown = true; if (DesignMode == false && objArg.Button == MouseButtons.Left) { LoadTabMenu(); Point pt = GetPopupPosition(); Popup(pt); } } #region GetPopupPosition /// /// Gets the popup menu position /// /// private Point GetPopupPosition() { Point pt = new Point(Bounds.X, Bounds.Bottom); Control c = (Control)_ControlBox.GetContainerControl(true); if (c != null) pt = c.PointToScreen(pt); return (pt); } #endregion #region LoadTabMenu /// /// Loads the TabMenu /// private void LoadTabMenu() { SubItems.Clear(); SubItemsCollection tabs = _ControlBox.TabDisplay.Tabs; if (_ShowTabsOnly == true) LoadTabsMenu(tabs); else LoadItemsMenu(tabs); } #region LoadTabsMenu /// /// Loads Tabs only into the TabMenu /// /// private void LoadTabsMenu(SubItemsCollection tabs) { for (int i = 0; i < tabs.Count; i++) { SuperTabItem tab = tabs[i] as SuperTabItem; if (tab != null && tab.Visible == true) { ButtonItem bi = new ButtonItem(); bi.Tag = tab; bi.Text = tab.Text; if (tab.Enabled == true) bi.Click += SuperTabMenuBoxClick; else bi.Enabled = false; SubItems.Add(bi); if (_ShowImages == true) SetMenuImage(bi, tab); if (tab.IsSelected == true) bi.Checked = true; } } } #endregion #region LoadItemsMenu /// /// Loads all items into the TabMenu /// /// private void LoadItemsMenu(SubItemsCollection tabs) { ButtonItem[] items = new ButtonItem[tabs.Count]; for (int i = 0; i < tabs.Count; i++) { if (tabs[i].Visible == true) { items[i] = new ButtonItem(); items[i].Tag = tabs[i]; items[i].Text = tabs[i].Text; if (tabs[i].Enabled == true) items[i].Click += SuperTabMenuBoxClick; else items[i].Enabled = false; if (_ShowImages == true) { if (tabs[i] is SuperTabItem) SetMenuImage(items[i], ((SuperTabItem) tabs[i]).GetTabImage()); else if (tabs[i] is ButtonItem) SetMenuImage(items[i], ((ButtonItem) tabs[i]).GetImage()); } } } int index = _ControlBox.TabDisplay.TabStripItem.SelectedTabIndex; if (index >= 0 && index < tabs.Count) items[index].Checked = true; SubItems.AddRange(items); } #endregion #region SetMenuImage /// /// Sets the TabMenu entry image /// /// /// private void SetMenuImage(ButtonItem bi, SuperTabItem tab) { if (string.IsNullOrEmpty(tab.SymbolRealized) == false) { bi.Symbol = tab.Symbol; bi.SymbolSize = tab.SymbolSize; bi.SymbolColor = tab.TabItemDisplay.GetSymbolColor(); } else { SetMenuImage(bi, tab.GetTabImage()); } } private void SetMenuImage(ButtonItem bi, CompositeImage image) { if (image != null) { if (image.Icon != null) bi.Icon = image.Icon; else if (image.Image != null) { if (ImageAnimator.CanAnimate(image.Image) == true) { FrameDimension frameDimensions = new FrameDimension(image.Image.FrameDimensionsList[0]); image.Image.SelectActiveFrame(frameDimensions, 0); bi.Image = new Bitmap(image.Image); bi.NeedRecalcSize = true; } else { bi.Image = image.Image; } } } } #endregion #endregion #region SuperTabMenuBox_Click /// /// Handles SuperTabMenuBox_Click event /// /// /// void SuperTabMenuBoxClick(object sender, EventArgs e) { ButtonItem bi = sender as ButtonItem; if (bi != null) { BaseItem item = bi.Tag as BaseItem; if (item != null) { SuperTabItem tab = bi.Tag as SuperTabItem; if (tab != null) _ControlBox.TabDisplay.TabStripItem.SelectedTab = tab; else _ControlBox.TabDisplay.TabStripItem.VisibleTab = item; if (_RaiseClickOnSelection == true) item.RaiseClick(eEventSource.Code); } } } #endregion #endregion #region InternalMouseUp /// /// InternalMouseUp /// /// public override void InternalMouseUp(MouseEventArgs objArg) { base.InternalMouseUp(objArg); _IsMouseDown = false; Refresh(); } #endregion #endregion #region Copy object support /// /// Returns copy of the item. /// public override BaseItem Copy() { SuperTabMenuBox objCopy = new SuperTabMenuBox(_ControlBox); CopyToItem(objCopy); return (objCopy); } protected override void CopyToItem(BaseItem copy) { SuperTabMenuBox objCopy = copy as SuperTabMenuBox; base.CopyToItem(objCopy); } #endregion } #region enums #region TabMenuOpenEventArgs public class TabMenuOpenEventArgs : CancelEventArgs { #region Private variables private ButtonItem _TabMenu; #endregion public TabMenuOpenEventArgs(ButtonItem tabMenu) { _TabMenu = tabMenu; } #region Public properties public ButtonItem TabMenu { get { return (_TabMenu); } } #endregion } #endregion #region TabMenuCloseEventArgs public class TabMenuCloseEventArgs : EventArgs { #region Private variables private ButtonItem _TabMenu; #endregion public TabMenuCloseEventArgs(ButtonItem tabMenu) { _TabMenu = tabMenu; } #region Public properties public ButtonItem TabMenu { get { return (_TabMenu); } } #endregion } #endregion #endregion } #endif