private void viewMenuItem_DropDown_Closing(object sender, ToolStripDropDownClosingEventArgs e) { if (e.CloseReason != ToolStripDropDownCloseReason.ItemClicked) { return; } ToolStripDropDownMenu menu = sender as ToolStripDropDownMenu; ToolStripItem viewItem = menu != null?menu.GetItemAt(menu.PointToClient(Cursor.Position)) : null; if (viewItem == null) { return; } IMenuModelItem modelItem = this.GetModelItem(viewItem); if (modelItem == null) { return; } if (modelItem.Checkable) { e.Cancel = true; } }
protected virtual void UpdateItemProperties(IMenuModelItem modelItem, ToolStripItem viewItem) { bool wasVisible = viewItem.Available; viewItem.Tag = modelItem.Tag; viewItem.Image = modelItem.Icon; viewItem.Name = modelItem.Name; viewItem.Text = modelItem.Name; viewItem.Available = modelItem.Visible && (modelItem.TypeHint != MenuItemTypeHint.Separator || this.visibleSeparators.Contains(viewItem)); viewItem.Enabled = modelItem.Enabled; ToolStripMenuItem viewMenuItem = viewItem as ToolStripMenuItem; if (viewMenuItem != null) { viewMenuItem.ShortcutKeys = modelItem.ShortcutKeys; viewMenuItem.CheckOnClick = modelItem.Checkable; viewMenuItem.Checked = modelItem.Checked; } if (wasVisible != viewItem.Available) { this.UpdateSeparatorVisibility(this.GetTargetViewItemCollection(modelItem)); } }
private void RaiseItemRemoved(IMenuModelItem modelItem, ToolStripItem viewItem) { if (this.ItemRemoved != null) { this.ItemRemoved(this, new MenuStripMenuViewItemEventArgs(modelItem, viewItem, this)); } }
protected virtual ToolStripItem CreateViewItem(IMenuModelItem modelItem) { switch (modelItem.TypeHint) { default: case MenuItemTypeHint.Item: return(new ToolStripMenuItem()); case MenuItemTypeHint.Separator: return(new ToolStripSeparator()); } }
public ToolStripItem GetViewItem(IMenuModelItem modelItem) { ToolStripItem viewItem; if (this.viewItems.TryGetValue(modelItem, out viewItem)) { return(viewItem); } else { return(null); } }
private void viewMenuItem_Click(object sender, EventArgs e) { ToolStripItem viewItem = sender as ToolStripItem; if (viewItem == null) { return; } IMenuModelItem modelItem = this.GetModelItem(viewItem); if (modelItem != null) { modelItem.RaisePerformAction(); } }
private void viewMenuItem_CheckedChanged(object sender, EventArgs e) { ToolStripMenuItem viewItem = sender as ToolStripMenuItem; if (viewItem == null) { return; } IMenuModelItem modelItem = this.GetModelItem(viewItem); if (modelItem != null) { modelItem.Checked = viewItem.Checked; } }
private void UpdateSeparatorVisibility(ToolStripItemCollection parentCollection) { this.visibleSeparators.Clear(); bool separatorStreak = false; bool isFirstVisibleItem = true; int lastSeparatorIndex = -1; for (int i = 0; i < parentCollection.Count; i++) { ToolStripItem viewItem = parentCollection[i]; IMenuModelItem modelItem = this.GetModelItem(viewItem); if (!modelItem.Visible) { continue; } bool isSeparator = modelItem.TypeHint == MenuItemTypeHint.Separator; if (isSeparator) { viewItem.Available = false; separatorStreak = true; lastSeparatorIndex = i; } else if (separatorStreak && !isFirstVisibleItem) { ToolStripItem lastViewItem = parentCollection[lastSeparatorIndex]; IMenuModelItem lastModelItem = this.GetModelItem(lastViewItem); lastViewItem.Available = lastModelItem.Visible; this.visibleSeparators.Add(lastViewItem); } if (!isSeparator) { isFirstVisibleItem = false; separatorStreak = false; } } }
private void InsertViewItem(ToolStripItemCollection parentCollection, ToolStripItem viewItem, IMenuModelItem modelItem) { ToolStripMenuItem viewMenuItem = viewItem as ToolStripMenuItem; // Determine where to insert the item int insertIndex = parentCollection.Count; for (int i = 0; i < parentCollection.Count; i++) { IMenuModelItem item = this.GetModelItem(parentCollection[i]); if (comparison(item, modelItem) > 0) { insertIndex = i; break; } } // Insert the item if (insertIndex < parentCollection.Count) { parentCollection.Insert(insertIndex, viewItem); } else { parentCollection.Add(viewItem); } this.viewItems.Add(modelItem, viewItem); viewItem.Click += this.viewMenuItem_Click; if (viewMenuItem != null) { viewMenuItem.CheckedChanged += this.viewMenuItem_CheckedChanged; viewMenuItem.DropDown.Closing += this.viewMenuItem_DropDown_Closing; } this.UpdateSeparatorVisibility(parentCollection); this.RaiseItemInserted(modelItem, viewItem); }
private ToolStripItemCollection GetTargetViewItemCollection(IMenuModelItem modelItem) { if (modelItem.Parent == null) { return(this.target); } ToolStripItem viewItemParent; if (!this.viewItems.TryGetValue(modelItem.Parent, out viewItemParent)) { return(this.target); } ToolStripMenuItem viewMenuItem = viewItemParent as ToolStripMenuItem; if (viewMenuItem == null) { return(this.target); } return(viewMenuItem.DropDownItems); }
private int ContextMenuItemComparison(IMenuModelItem itemA, IMenuModelItem itemB) { int result; // SortValue overrides all result = itemA.SortValue - itemB.SortValue; if (result != 0) return result; // Don't sort any further unless within the new menu bool isInNewMenu = false; IMenuModelItem item = itemA; while (item != null) { if (item == this.nodeContextItemNew) { isInNewMenu = true; break; } item = item.Parent; } if (!isInNewMenu) return 0; CreateContextEntryTag createEntryA = itemA.Tag as CreateContextEntryTag; CreateContextEntryTag createEntryB = itemB.Tag as CreateContextEntryTag; // Duality-internal Types first result = ((createEntryB != null && createEntryB.IsDualityType) ? 1 : 0) - ((createEntryA != null && createEntryA.IsDualityType) ? 1 : 0); if (result != 0) return result; // Type entries first result = ((createEntryB != null && createEntryB.TypeId != null) ? 1 : 0) - ((createEntryA != null && createEntryA.TypeId != null) ? 1 : 0); if (result != 0) return result; // Sort by Item Name result = string.Compare(itemA.Name, itemB.Name); return result; }
private void OnMenuItemClicked(object sender, EventArgs e) { IMenuModelItem modelItem = sender as IMenuModelItem; Console.WriteLine(string.Format(modelItem.Checkable ? "Sender: {0}, Checked: {1}" : "Sender: {0}", modelItem.Name, modelItem.Checked)); }
public MenuStripMenuViewItemEventArgs(IMenuModelItem modelItem, ToolStripItem viewItem, MenuStripMenuView view) : base(view) { this.modelItem = modelItem; this.viewItem = viewItem; }
private static int DefaultItemComparison(IMenuModelItem itemA, IMenuModelItem itemB) { return(itemA.SortValue - itemB.SortValue); }
private void RemoveViewItem(ToolStripItemCollection parentCollection, ToolStripItem viewItem, IMenuModelItem modelItem) { ToolStripMenuItem viewMenuItem = viewItem as ToolStripMenuItem; parentCollection.Remove(viewItem); this.viewItems.Remove(modelItem); viewItem.Click -= this.viewMenuItem_Click; if (viewMenuItem != null) { viewMenuItem.CheckedChanged -= this.viewMenuItem_CheckedChanged; viewMenuItem.DropDown.Closing -= this.viewMenuItem_DropDown_Closing; } this.UpdateSeparatorVisibility(parentCollection); this.RaiseItemRemoved(modelItem, viewItem); }