using System; using System.Collections; using System.Collections.Generic; using System.Windows.Forms; using log4net; namespace DelftTools.Controls.Swf { /// /// Wraps System.Windows.Forms.ContextMenuStrip so it behaves like IMenuItem. /// public class MenuItemContextMenuStripAdapter : IMenuItem, IDisposable { private static readonly ILog log = LogManager.GetLogger(typeof(MenuItemContextMenuStripAdapter)); public MenuItemContextMenuStripAdapter(ContextMenuStrip contextMenuStrip) { ContextMenuStrip = contextMenuStrip; } /// /// The contextmenustrip wrapped by this adapter. /// public ContextMenuStrip ContextMenuStrip { get; private set; } public void Dispose() { if (ContextMenuStrip != null) { ContextMenuStrip.Dispose(); } } #region IEnumerable Members public IEnumerator GetEnumerator() { throw new NotImplementedException("The method or operation is not implemented."); } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return ContextMenuStrip.Items.GetEnumerator(); } #endregion #region IMenuItem Members public string Name { get { return ContextMenuStrip.Name; } set { ContextMenuStrip.Name = value; } } public string Text { get { return ContextMenuStrip.Text; } set { ContextMenuStrip.Text = value; } } public string Tooltip { get { return ""; } set {} } public string Category { get { return ""; } set {} } public bool Enabled { get { throw new NotImplementedException("The method or operation is not implemented."); } set { throw new NotImplementedException("The method or operation is not implemented."); } } public string Shortcut { get { throw new NotImplementedException("The method or operation is not implemented."); } set { throw new NotImplementedException("The method or operation is not implemented."); } } public IList ActiveForViews { get { throw new NotImplementedException("The method or operation is not implemented."); } } public ICommand Command { get { throw new NotImplementedException("The method or operation is not implemented."); } set { throw new NotImplementedException("The method or operation is not implemented."); } } #endregion #region IMenuItemCollection Members public IMenuItem this[string name] { get { //ToolStripItem //ToolStripMenuItem var menuItem = ContextMenuStrip.Items[name]; if (menuItem is ToolStripMenuItem) { return new MenuItemToolStripMenuItemAdapter((ToolStripMenuItem) menuItem); } return null; } set { throw new NotImplementedException("The method or operation is not implemented."); } } public int IndexOf(string name) { var menuItem = ContextMenuStrip.Items[name]; if (null != menuItem) { return ContextMenuStrip.Items.IndexOf(menuItem); } return -1; } public void InsertAfter(string name, IMenuItem item) { throw new NotImplementedException("The method or operation is not implemented."); } public void InsertBefore(string name, IMenuItem item) { throw new NotImplementedException("The method or operation is not implemented."); } #endregion #region IList Members public int IndexOf(IMenuItem item) { throw new NotImplementedException("The method or operation is not implemented."); } public void Insert(int index, IMenuItem item) { if (item is MenuItemContextMenuStripAdapter) { var items = ((MenuItemContextMenuStripAdapter) item).ContextMenuStrip.Items; for (int i = items.Count - 1; i >= 0; i--) { if (items[i] is ClonableToolStripMenuItem) { ContextMenuStrip.Items.Insert(index, ((ClonableToolStripMenuItem) items[i]).Clone()); } else if (items[i] is ToolStripSeparator) { ContextMenuStrip.Items.Insert(index, new ToolStripSeparator() { Available = items[i].Available }); } else { log.Error(string.Format("Menuitem {0} not clonable.", items[i].Text)); } } } } public void RemoveAt(int index) { throw new NotImplementedException("The method or operation is not implemented."); } public IMenuItem this[int index] { get { var menuItem = ContextMenuStrip.Items[index]; if (menuItem is ToolStripMenuItem) { return new MenuItemToolStripMenuItemAdapter((ToolStripMenuItem) menuItem); } return null; } set { throw new NotImplementedException("The method or operation is not implemented."); } } #endregion #region ICollection Members public void Add(IMenuItem item) { if (item is MenuItemContextMenuStripAdapter) { var menuItemContextMenuStripAdapter = (MenuItemContextMenuStripAdapter) item; for (int i = 0; i < menuItemContextMenuStripAdapter.ContextMenuStrip.Items.Count; i++) { ToolStripItem toolStripItem = menuItemContextMenuStripAdapter.ContextMenuStrip.Items[i]; if (toolStripItem is ClonableToolStripMenuItem) { var clonableToolStripMenuItem = (ClonableToolStripMenuItem) menuItemContextMenuStripAdapter.ContextMenuStrip.Items[i]; ContextMenuStrip.Items.Add(clonableToolStripMenuItem.Clone()); } else if (toolStripItem is ToolStripSeparator) { ContextMenuStrip.Items.Add(new ToolStripSeparator() { Available = toolStripItem.Available }); } else { log.Error(string.Format("Menuitem {0} not clonable.", menuItemContextMenuStripAdapter.ContextMenuStrip.Items[i].Text)); } } } else { throw new NotImplementedException("The method or operation is not implemented."); } } public void Clear() { //throw new NotImplementedException("The method or operation is not implemented."); ContextMenuStrip.Items.Clear(); } public bool Contains(IMenuItem item) { throw new NotImplementedException("The method or operation is not implemented."); } public void CopyTo(IMenuItem[] array, int arrayIndex) { throw new NotImplementedException("The method or operation is not implemented."); } public int Count { get { return ContextMenuStrip.Items.Count; } } public bool IsReadOnly { get { throw new NotImplementedException("The method or operation is not implemented."); } } public bool Remove(IMenuItem item) { throw new NotImplementedException("The method or operation is not implemented."); } #endregion } }