public int Compare(object x, object y)
            {
                OverflowDropDownMenuItem item1 = (OverflowDropDownMenuItem)x;
                OverflowDropDownMenuItem item2 = (OverflowDropDownMenuItem)y;

                return(item1.AssociatedItem.Text.CompareTo(item2.AssociatedItem.Text));
            }
        public void PrepareDropDownItems()
        {
            DropDownButton.Items.Clear();

            foreach (RadItem item in this.items)
            {
                OverflowDropDownMenuItem corresponding = new OverflowDropDownMenuItem(item);
                corresponding.AssociatedItem = item;
                corresponding.Click         += new EventHandler(corresponding_Click);
                DropDownButton.Items.Add(corresponding);
            }
        }
        private void corresponding_Click(object sender, EventArgs e)
        {
            OverflowDropDownMenuItem dropDownItem = (OverflowDropDownMenuItem)sender;

            if (dropDownItem.AssociatedItem.Visibility == ElementVisibility.Visible)
            {
                dropDownItem.AssociatedItem.Visibility = ElementVisibility.Collapsed;
                if (dropDownItem.AssociatedItem as RadFakeElement != null)
                {
                    (dropDownItem.AssociatedItem as RadFakeElement).AssociatedItem.Visibility = ElementVisibility.Collapsed;
                }
                dropDownItem.IsChecked = false;
            }
            else
            {
                if (this.toolStripItem.ParentToolStripManager.Orientation == Orientation.Horizontal)
                {
                    dropDownItem.AssociatedItem.Visibility = ElementVisibility.Visible;

                    if (dropDownItem.AssociatedItem as RadFakeElement != null)
                    {
                        RefreshParentToolStrip();
                    }
                    dropDownItem.IsChecked = true;
                }
                else
                {
                    if (this.toolStripItem.ParentToolStripManager.Orientation == Orientation.Vertical)
                    {
                        if (!((dropDownItem.AssociatedItem is RadTextBoxElement) || (dropDownItem.AssociatedItem is RadComboBoxElement)))
                        {
                            if (dropDownItem.AssociatedItem as RadFakeElement != null)
                            {
                                RefreshParentToolStrip();
                            }

                            this.toolStripItem.InvalidateLayout();
                            dropDownItem.AssociatedItem.Visibility = ElementVisibility.Visible;
                            dropDownItem.IsChecked = true;
                        }
                    }
                }
            }


            RefreshItems();

            this.toolStripItem.LayoutEngine.SetLayoutInvalidated(true);
            this.toolStripItem.LayoutEngine.PerformParentLayout();
            InvalidateAllToolStripItems();
        }
        private void corresponding_Click(object sender, EventArgs e)
        {
            OverflowDropDownMenuItem dropDownItem = (OverflowDropDownMenuItem)sender;

            this.DropDownButton.HideDropDown();
            //Ticket ID: 296681
            //This mimics the behavior of the TabStrip when clicking on
            //item to select it. The item focuses its container control in this case.
            //Without this we do not behave the same way when selecting an item over the drop down,
            //and selecting an item by clicking on it.
            dropDownItem.AssociatedItem.SetFocus();

            this.tabStripElement.SetSelectedTab(dropDownItem.AssociatedItem);

            if (overFlowBehavior != OverFlowBehavior.VisualStudioStyle)
            {
                this.tabStripElement.ScrollIntoView((TabItem)dropDownItem.AssociatedItem);
                return;
            }
            else
            {
                if (this.tabStripElement.UseNewLayoutSystem)
                {
                    TabItem tabItem = dropDownItem.AssociatedItem as TabItem;
                    SelectTabItem(tabItem);
                }
                else
                {
                    if ((this.tabStripElement.TabsPosition == TabPositions.Top) || (this.tabStripElement.TabsPosition == TabPositions.Bottom))
                    {
                        if (dropDownItem.AssociatedItem.BoundingRectangle.Right >= this.tabStripElement.Parent.Bounds.Right)
                        {
                            RearrangeItems(dropDownItem.AssociatedItem as TabItem);
                        }
                    }
                    else
                    {
                        if (dropDownItem.AssociatedItem.BoundingRectangle.Y + dropDownItem.AssociatedItem.FullSize.Width
                            >= this.tabStripElement.Parent.Bounds.Bottom)
                        {
                            RearrangeItems(dropDownItem.AssociatedItem as TabItem);
                        }
                    }
                }
            }
        }
        private void resetItem_Click(object sender, EventArgs e)
        {
            if (sender as OverflowDropDownMenuItem != null)
            {
                OverflowDropDownMenuItem item = (OverflowDropDownMenuItem)(sender as OverflowDropDownMenuItem).HierarchyParent;

                foreach (RadItem childItem in (item.AssociatedItem as RadToolStripItem).Items)
                {
                    if (this.toolStripItem.ParentToolStripManager.Orientation == Orientation.Vertical)
                    {
                        if (!((childItem is RadTextBoxElement) || (childItem is RadComboBoxElement)))
                        {
                            childItem.Visibility = ElementVisibility.Visible;
                        }
                    }
                    else
                    {
                        childItem.Visibility = ElementVisibility.Visible;
                    }
                }
                (item.AssociatedItem as RadToolStripItem).InvalidateLayout();
                for (int i = 0; i < item.Items.Count; i++)
                {
                    OverflowDropDownMenuItem myItem = item.Items[i] as OverflowDropDownMenuItem;
                    if (myItem != null)
                    {
                        myItem.IsChecked = true;
                    }
                }

                (sender as OverflowDropDownMenuItem).IsChecked = false;
            }

            toolStripItem.LayoutEngine.SetLayoutInvalidated(true);
            toolStripItem.LayoutEngine.PerformParentLayout();
            InvalidateAllToolStripItems();
        }
        /// <summary>
        /// Initializes the drop down behavior of the drop down items.
        /// </summary>
        public void PrepareDropDownItems()
        {
            this.lastParent  = this.toolStripItem.ParentToolStripElement;
            this.lastManager = this.toolStripItem.ParentToolStripManager;

            this.DropDownButton.Items.Clear();
            if (this.toolStripItem.ElementTree != null)
            {
                this.imageList = this.toolStripItem.ElementTree.ComponentTreeHandler.ImageList;
            }
            RadItem addOrRemoveItem = new RadItem();

            addOrRemoveItem.Text = RadToolStripLocalizationProvider.CurrentProvider.GetLocalizationString(
                RadToolStripLocalizationStringId.AddorRemoveButtons);

            this.CreateStackOverflowBehavior();
            this.InvalidateAllToolStripItems();

            this.rootItem           = new OverflowDropDownMenuItem(addOrRemoveItem, this.toolStripItem, this.imageList);
            rootItem.AssociatedItem = addOrRemoveItem;
            this.DropDownButton.Items.Add(rootItem);

            Graphics g = this.toolStripItem.ElementTree.Control.CreateGraphics();

            SizeF stringSize = g.MeasureString(addOrRemoveItem.Text, addOrRemoveItem.Font);

            this.layout.MinSize = new Size((int)stringSize.Width, 0);
            this.layout.MaxSize = new Size(this.layout.MinSize.Width, 0);
            g.Dispose();

            foreach (RadToolStripItem toolItem in this.toolStripItem.ParentToolStripElement.Items)
            {
                OverflowDropDownMenuItem corresponding = new OverflowDropDownMenuItem(toolItem, this.toolStripItem, this.imageList);
                corresponding.AssociatedItem = toolItem;

                foreach (RadItem item in toolItem.Items)
                {
                    OverflowDropDownMenuItem correspondingItem = new OverflowDropDownMenuItem(item, toolItem, this.imageList);

                    correspondingItem.AssociatedItem = item;
                    correspondingItem.Click         += new EventHandler(corresponding_Click);

                    if (item.Visibility == ElementVisibility.Visible)
                    {
                        correspondingItem.IsChecked = true;
                        this.visibleItemsCount++;
                    }
                    else
                    {
                        correspondingItem.IsChecked = false;
                    }

                    corresponding.Items.Add(correspondingItem);
                }

                corresponding.Items.Add(new RadMenuSeparatorItem());

                RadItem myItem = new RadItem();
                myItem.Text = RadToolStripLocalizationProvider.CurrentProvider.GetLocalizationString(RadToolStripLocalizationStringId.ResetToolBar);

                resetItem = new OverflowDropDownMenuItem(myItem, this.toolStripItem, this.imageList);


                resetItem.AssociatedItem = myItem;
                resetItem.Click         += new EventHandler(resetItem_Click);

                corresponding.Items.Add(resetItem);

                rootItem.Items.Add(corresponding);
            }

            RadItem customizeItem = new RadItem();

            customizeItem.Text = RadToolStripLocalizationProvider.CurrentProvider.GetLocalizationString(RadToolStripLocalizationStringId.Customize);

            CustomizeItem = new OverflowDropDownMenuItem(customizeItem, this.toolStripItem, this.imageList);

            CustomizeItem.AssociatedItem = customizeItem;
            CustomizeItem.Click         += new EventHandler(CustomizeItem_Click);

            rootItem.Items.Add(new RadMenuSeparatorItem());
            rootItem.Items.Add(CustomizeItem);

            if (!this.showRootItem)
            {
                rootItem.Visibility = ElementVisibility.Collapsed;
            }

            if (!this.showCustomizeItem)
            {
                this.CustomizeItem.Visibility = ElementVisibility.Collapsed;
            }

            if (!this.showResetItem)
            {
                this.CustomizeItem.Visibility = ElementVisibility.Collapsed;
            }
        }