/// <devdoc> Given a form, the items on this toolstrip populate with the mdi children
        ///     with mnemonics 1-9 and More Windows menu item.
        ///     These items can then be merged into a menustrip.
        ///
        ///     Based on similar code in MenuItem.cs::PopulateMdiList(), which is unfortunately just different
        ///     enough in its working environment that we can't readily combine the two.
        ///     But if you're fixing something here, chances are that the same issue will need scrutiny over there.
        ///</devdoc>
        public void PopulateItems(Form mdiParent, ToolStripMenuItem mdiMergeItem, bool includeSeparator)
        {
            this.mdiParent = mdiParent;
            this.SuspendLayout();
            MergeItem.DropDown.SuspendLayout();
            try {
                ToolStripMenuItem mergeItem = MergeItem;
                mergeItem.DropDownItems.Clear();
                mergeItem.Text = mdiMergeItem.Text;

                Form[] forms = mdiParent.MdiChildren;
                if (forms != null && forms.Length != 0)
                {
                    if (includeSeparator)
                    {
                        ToolStripSeparator separator = new ToolStripSeparator();
                        separator.MergeAction = MergeAction.Append;
                        separator.MergeIndex  = -1;
                        mergeItem.DropDownItems.Add(separator);
                    }

                    Form activeMdiChild = mdiParent.ActiveMdiChild;

                    const int maxMenuForms     = 9; // max number of Window menu items for forms
                    int       visibleChildren  = 0; // number of visible child forms (so we know if we need to show More Windows...
                    int       accel            = 1; // prefix the form name with this digit, underlined, as an accelerator
                    int       formsAddedToMenu = 0;
                    bool      activeFormAdded  = false;

                    for (int i = 0; i < forms.Length; i++)
                    {
                        // we need to check close reason here because we could be getting called
                        // here in the midst of a WM_CLOSE - WM_MDIDESTROY eventually fires a WM_MDIACTIVATE
                        if (forms[i].Visible && (forms[i].CloseReason == CloseReason.None))
                        {
                            visibleChildren++;
                            if ((activeFormAdded && (formsAddedToMenu < maxMenuForms)) ||       // don't exceed max
                                (!activeFormAdded && (formsAddedToMenu < (maxMenuForms - 1)) || // save room for active if it's not in yet
                                 (forms[i].Equals(activeMdiChild))))                            // there's always room for activeMdiChild
                            {
                                string text = WindowsFormsUtils.EscapeTextWithAmpersands(mdiParent.MdiChildren[i].Text);
                                text = (text == null) ? String.Empty : text;
                                ToolStripMenuItem windowListItem = new ToolStripMenuItem(mdiParent.MdiChildren[i]);
                                windowListItem.Text        = String.Format(CultureInfo.CurrentCulture, "&{0} {1}", accel, text);
                                windowListItem.MergeAction = MergeAction.Append;
                                windowListItem.MergeIndex  = accel;
                                windowListItem.Click      += new EventHandler(OnWindowListItemClick);
                                if (forms[i].Equals(activeMdiChild))    // if this the active one, check it off.
                                {
                                    windowListItem.Checked = true;
                                    activeFormAdded        = true;
                                }
                                accel++;
                                formsAddedToMenu++;
                                Debug.WriteLineIf(ToolStrip.MDIMergeDebug.TraceVerbose, "\tPopulateItems: Added " + windowListItem.Text);
                                mergeItem.DropDownItems.Add(windowListItem);
                            }
                        }
                    }

                    // show the More Windows... item if necessary.
                    if (visibleChildren > maxMenuForms)
                    {
                        ToolStripMenuItem moreWindowsMenuItem = new ToolStripMenuItem();
                        moreWindowsMenuItem.Text = SR.GetString(SR.MDIMenuMoreWindows);
                        Debug.WriteLineIf(ToolStrip.MDIMergeDebug.TraceVerbose, "\tPopulateItems: Added " + moreWindowsMenuItem.Text);
                        moreWindowsMenuItem.Click      += new EventHandler(OnMoreWindowsMenuItemClick);
                        moreWindowsMenuItem.MergeAction = MergeAction.Append;
                        mergeItem.DropDownItems.Add(moreWindowsMenuItem);
                    }
                }
            }
            finally {
                // this is an invisible toolstrip dont even bother doing layout.
                this.ResumeLayout(false);
                MergeItem.DropDown.ResumeLayout(false);
            }
        }
 public void PopulateItems(Form mdiParent, ToolStripMenuItem mdiMergeItem, bool includeSeparator)
 {
     this.mdiParent = mdiParent;
     base.SuspendLayout();
     this.MergeItem.DropDown.SuspendLayout();
     try
     {
         ToolStripMenuItem mergeItem = this.MergeItem;
         mergeItem.DropDownItems.Clear();
         mergeItem.Text = mdiMergeItem.Text;
         Form[] mdiChildren = mdiParent.MdiChildren;
         if ((mdiChildren != null) && (mdiChildren.Length != 0))
         {
             if (includeSeparator)
             {
                 ToolStripSeparator separator = new ToolStripSeparator {
                     MergeAction = MergeAction.Append,
                     MergeIndex  = -1
                 };
                 mergeItem.DropDownItems.Add(separator);
             }
             Form activeMdiChild = mdiParent.ActiveMdiChild;
             int  num            = 0;
             int  num2           = 1;
             int  num3           = 0;
             bool flag           = false;
             for (int i = 0; i < mdiChildren.Length; i++)
             {
                 if (mdiChildren[i].Visible && (mdiChildren[i].CloseReason == CloseReason.None))
                 {
                     num++;
                     if (((flag && (num3 < 9)) || (!flag && (num3 < 8))) || mdiChildren[i].Equals(activeMdiChild))
                     {
                         string str = WindowsFormsUtils.EscapeTextWithAmpersands(mdiParent.MdiChildren[i].Text);
                         str = (str == null) ? string.Empty : str;
                         ToolStripMenuItem item2 = new ToolStripMenuItem(mdiParent.MdiChildren[i])
                         {
                             Text        = string.Format(CultureInfo.CurrentCulture, "&{0} {1}", new object[] { num2, str }),
                             MergeAction = MergeAction.Append,
                             MergeIndex  = num2
                         };
                         item2.Click += new EventHandler(this.OnWindowListItemClick);
                         if (mdiChildren[i].Equals(activeMdiChild))
                         {
                             item2.Checked = true;
                             flag          = true;
                         }
                         num2++;
                         num3++;
                         mergeItem.DropDownItems.Add(item2);
                     }
                 }
             }
             if (num > 9)
             {
                 ToolStripMenuItem item3 = new ToolStripMenuItem {
                     Text = System.Windows.Forms.SR.GetString("MDIMenuMoreWindows")
                 };
                 item3.Click      += new EventHandler(this.OnMoreWindowsMenuItemClick);
                 item3.MergeAction = MergeAction.Append;
                 mergeItem.DropDownItems.Add(item3);
             }
         }
     }
     finally
     {
         base.ResumeLayout(false);
         this.MergeItem.DropDown.ResumeLayout(false);
     }
 }