public override void InitializeBackend(object frontend, ApplicationContext context) { base.InitializeBackend(frontend, context); Menu = new SWF.MenuStrip(); ItemsCollection = Menu.Items; _items.CollectionChanged += (sender, args) => { var backend = args.NewItems.Cast <MenuItemBackend> ().FirstOrDefault(); if (args.Action == NotifyCollectionChangedAction.Add) { ItemsCollection.Insert(args.NewStartingIndex, backend.MenuItem); } if (args.Action == NotifyCollectionChangedAction.Remove) { ItemsCollection.Remove(backend.MenuItem); } }; }
private void RemoveHistory(TSMenuItem item) { root.Remove(item); list.Remove(item); unused.Add(item); item.Tag = null; foreach (TSItem child in item.DropDownItems) { if (child.BackgroundImage != null) { child.BackgroundImage.Dispose(); child.BackgroundImage = null; } if (child.Image != null) { child.Image.Dispose(); child.Image = null; } } }
private void MergeMenu(ToolStripItemCollection source, ToolStripItemCollection dest) { while(source.Count > 0) { ToolStripMenuItem item = (ToolStripMenuItem) source[0]; if(item.MergeAction == MergeAction.Insert) { for(int index = 0; index < dest.Count; ++index) { if(dest[index].MergeIndex > item.MergeIndex) { dest.Insert(index, item); break; } } } else if (item.MergeAction == MergeAction.Append) { dest.Add(item); } else if (item.MergeAction == MergeAction.MatchOnly) { ToolStripMenuItem match = null; foreach(ToolStripMenuItem destitem in dest) { if(destitem.Text == item.Text) { match = destitem; break; } } if(match == null) throw new ApplicationException("Can't merge with nonexistent menu '" + item.Text + "'"); MergeMenu(item.DropDownItems, match.DropDownItems); source.Remove(item); } else { throw new ApplicationException("Unsupported menu merge action"); } } }
public void Remove_StandAlone () { ToolStrip toolStrip = CreateToolStrip (); ToolStripItemCollection items = new ToolStripItemCollection ( toolStrip, new ToolStripItem [0]); MockToolStripButton buttonA = new MockToolStripButton ("A"); MockToolStripButton buttonB = new MockToolStripButton ("B"); MockToolStripButton buttonC = new MockToolStripButton ("B"); items.Insert (0, buttonA); items.Insert (0, buttonB); items.Remove (buttonB); Assert.AreEqual (1, items.Count, "#A1"); Assert.AreEqual (0, itemsRemoved.Count, "#A2"); Assert.AreSame (buttonA, items [0], "#A3"); items.Remove ((ToolStripItem) null); Assert.AreEqual (1, items.Count, "#B1"); Assert.AreEqual (0, itemsRemoved.Count, "#B2"); Assert.AreSame (buttonA, items [0], "#B3"); items.Remove (buttonC); Assert.AreEqual (1, items.Count, "#C1"); Assert.AreEqual (0, itemsRemoved.Count, "#C2"); Assert.AreSame (buttonA, items [0], "#C3"); items.Remove (buttonA); Assert.AreEqual (0, items.Count, "#D1"); Assert.AreEqual (0, itemsRemoved.Count, "#D2"); items.Remove (buttonA); Assert.AreEqual (0, items.Count, "#E1"); Assert.AreEqual (0, itemsRemoved.Count, "#E2"); // remove item owned by other toolstrip ToolStrip otherToolStrip = new ToolStrip (); MockToolStripButton buttonD = new MockToolStripButton ("B"); otherToolStrip.Items.Add (buttonD); Assert.AreSame (otherToolStrip, buttonD.Owner, "#F1"); Assert.IsNull (buttonD.ParentToolStrip, "#F2"); items.Remove (buttonD); Assert.AreEqual (0, items.Count, "#F3"); Assert.AreEqual (0, itemsRemoved.Count, "#F4"); Assert.AreSame (otherToolStrip, buttonD.Owner, "#F5"); Assert.IsNull (buttonD.ParentToolStrip, "#F6"); }
private static void FilterUnavailableItems(ToolStripItemCollection items) { List<ToolStripItem> unavailableItems = new List<ToolStripItem>(); foreach (ToolStripItem toolStripItem in items) { if (!toolStripItem.Available) { unavailableItems.Add(toolStripItem); } else if (toolStripItem is ToolStripMenuItem) { ToolStripMenuItem toolStripMenuItem = (ToolStripMenuItem) toolStripItem; if (toolStripMenuItem.DropDownItems.Count > 0) { FilterUnavailableItems(toolStripMenuItem.DropDownItems); if (toolStripMenuItem.DropDownItems.Count == 0) unavailableItems.Add(toolStripItem); } } } foreach (ToolStripItem unavailableItem in unavailableItems) { items.Remove(unavailableItem); unavailableItem.Dispose(); } }