/// <summary> /// Populates the current menu with items based on the actions collection /// </summary> /// <param name="actions">List of primary actions</param> /// <param name="actions2">List of view specific actions</param> private void PopulateMenu(IHaveActions actions, IHaveActions actions2 = null) { RemoveAllMenuKeyBindings(); Items.Clear(); if (actions == null) { return; } var actionList = ViewActionPolicy != null?ViewActionPolicy.GetConsolidatedActions(actions, actions2, "File", viewModel : this) : ViewActionHelper.GetConsolidatedActions(actions, actions2, "File"); var rootCategories = ViewActionPolicy != null?ViewActionPolicy.GetTopLevelActionCategories(actionList, "File", "File", this) : ViewActionHelper.GetTopLevelActionCategories(actionList, "File", "File"); foreach (var category in rootCategories) { var menuItem = new TopLevelViewActionMenuItem { Header = GetMenuTitle(category) }; menuItem.SetBinding(VisibilityProperty, new Binding("Count") { Source = menuItem.Items, Converter = new ItemsCollectionCountToVisibleConverter(menuItem.Items) }); PopulateSubCategories(menuItem, category, actionList); Items.Add(menuItem); } CreateAllMenuKeyBindings(); }
private static void RepopulateItems(ActionItemsControl itemsControl, IHaveActions actionHost) { itemsControl.Visibility = Visibility.Visible; // We also need to hook all actions' changed event so we can update this view whenever the availability changes foreach (var inpc in actionHost.Actions.OfType <INotifyPropertyChanged>()) { inpc.PropertyChanged += (s, a) => { if (a.PropertyName == "Availability") { RepopulateItems(itemsControl, actionHost); } } } ; // Getting all currently available actions var actions = actionHost.Actions.Where(a => a.Availability == ViewActionAvailabilities.Available).OrderBy(a => a.CategoryOrder).ToList(); if (itemsControl.ViewActionPolicy != null) { actions = itemsControl.ViewActionPolicy.ProcessActions(actions).ToList(); } itemsControl.ItemsSource = itemsControl.OnRepopulateItems(actions); }
/// <summary> /// Populates the current menu with items based on the actions collection /// </summary> /// <param name="actions">List of primary actions</param> /// <param name="actions2">List of view specific actions</param> protected virtual void PopulateToolbar(IHaveActions actions, IHaveActions actions2 = null) { Children.Clear(); if (actions == null) { return; } var actionList = ViewActionHelper.GetConsolidatedActions(actions, actions2, actionsDisplayFilter: RootViewActionDisplayMode, actions2DisplayFilter: LocalViewActionDisplayMode, flagFirstSecondaryActionAsNewGroup: true); var actionCounter = 0; foreach (var action in actionList) { if (!IncludeAction(action)) { continue; } if (actionCounter > 0 && action.BeginGroup) { Children.Add(new ViewActionToolbarSeparator()); } Children.Add(new ViewActionToolbarButton(action)); actionCounter++; } Visibility = Children.Count > 0 ? Visibility.Visible : Visibility.Collapsed; }
/// <summary> /// Populates the current ribbon with items based on the actions collection /// </summary> protected virtual void PopulateStack() { var actions = Model as IHaveActions; var viewResult = SelectedView as ViewResult; IHaveActions actions2 = null; if (viewResult != null) { actions2 = viewResult.Model as IHaveActions; } Children.Clear(); if (actions == null) { Visibility = Visibility.Collapsed; return; } Visibility = Visibility.Visible; var actionList = ViewActionHelper.GetConsolidatedActions(actions, actions2); foreach (var action in actionList) { var button = new ViewActionStackPanelButton { Command = action, ToolTip = action.Caption, DataContext = action }; if (ActionFilter == ViewActionStackPanelActionFilter.ShowPinned) { button.SetBinding(VisibilityProperty, new MultiBinding { Bindings = { new Binding("Visibility"), new Binding("IsPinned") }, Converter = new VisibilityAndPinnedConverter() }); } else { button.SetBinding(VisibilityProperty, new Binding("Visibility")); } var action2 = action as ViewAction; if (action2 != null) { var rectangle = new Rectangle { Fill = action2.PopulatedBrush }; button.Content = rectangle; } Children.Add(button); } }
/// <summary> /// Populates the current items control with items based on the actions collection /// </summary> /// <param name="actions">List of actions</param> protected virtual void PopulateItems(IHaveActions actions) { RemoveAllMenuKeyBindings(); Items.Clear(); if (actions == null || actions.Actions == null) { return; } var actionList = actions.Actions.ToList(); var rootCategories = ViewActionPolicy != null?ViewActionPolicy.GetTopLevelActionCategories(actionList, EmptyGlobalCategoryTitle) : ViewActionHelper.GetTopLevelActionCategories(actionList, EmptyGlobalCategoryTitle); var viewActionCategories = rootCategories as ViewActionCategory[] ?? rootCategories.ToArray(); foreach (var category in viewActionCategories) { var matchingActions = ViewActionPolicy != null?ViewActionPolicy.GetAllActionsForCategory(actionList, category, orderByGroupTitle : OrderByGroupTitle) : ViewActionHelper.GetAllActionsForCategory(actionList, category, orderByGroupTitle: OrderByGroupTitle); foreach (var action in matchingActions) { var wrapper = new DependencyViewActionWrapper(action); if (action.Categories.Count > 0) { MetroTiles.SetGroupName(wrapper, action.Categories[0].Id); MetroTiles.SetGroupTitle(wrapper, action.Categories[0].Caption); } else { MetroTiles.SetGroupName(wrapper, string.Empty); MetroTiles.SetGroupTitle(wrapper, string.Empty); } if (action.Availability != ViewActionAvailabilities.Unavailable) { MetroTiles.SetTileVisibility(wrapper, action.Visibility); } else { MetroTiles.SetTileVisibility(wrapper, Visibility.Collapsed); } Items.Add(wrapper); if (action.ShortcutKey == Key.None) { continue; } MenuKeyBindings.Add(new ViewActionMenuKeyBinding(action)); } } CreateAllMenuKeyBindings(); }
/// <summary> /// Inspects up to 2 IHaveActions interfaces and returns a consolidated list of actions for both interfaces /// </summary> /// <param name="actions">The first interface containing actions</param> /// <param name="actions2">The second interface containing actions</param> /// <param name="defaultEmptyCategory">The default empty category.</param> /// <param name="actionsDisplayFilter">Indicates which actions out of the first actions collection shall be included.</param> /// <param name="flagFirstSecondaryActionAsNewGroup">Indicates whether the first action from the second actions collection should be flagged as a new group</param> /// <param name="actions2DisplayFilter">Indicates which actions out of the second actions collection shall be included.</param> /// <returns>ObservableCollection{IViewAction}.</returns> public static ObservableCollection<IViewAction> GetConsolidatedActions(IHaveActions actions, IHaveActions actions2 = null, string defaultEmptyCategory = "", ViewActionDisplayMode actionsDisplayFilter = ViewActionDisplayMode.All, bool flagFirstSecondaryActionAsNewGroup = false, ViewActionDisplayMode actions2DisplayFilter = ViewActionDisplayMode.All) { var actionList = new ObservableCollection<IViewAction>(); if (actions == null || actions.Actions == null) return actionList; if (actionsDisplayFilter != ViewActionDisplayMode.None) { var list = actions.Actions.OrderBy(a => a.FirstCategoryId).ToList(); switch (actionsDisplayFilter) { case ViewActionDisplayMode.BelowNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.BelowNormal || a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.NormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.AboveNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.HighestSignificance: list = list.Where(a => a.Significance == ViewActionSignificance.Highest).ToList(); break; } foreach (var action in list) actionList.Add(action); } if (actions2 != null && actions2.Actions.Count > 0 && actions2DisplayFilter != ViewActionDisplayMode.None) { var actionsCount = 0; var list = actions2.Actions.ToList(); switch (actions2DisplayFilter) { case ViewActionDisplayMode.BelowNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.BelowNormal || a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.NormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.AboveNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.HighestSignificance: list = list.Where(a => a.Significance == ViewActionSignificance.Highest).ToList(); break; } foreach (var action in list) { if (actionsCount == 0 && flagFirstSecondaryActionAsNewGroup) action.BeginGroup = true; if (action.Categories.Count == 1 && string.IsNullOrEmpty(action.Categories[0].Caption)) action.Categories[0].Caption = defaultEmptyCategory; if (action.Categories.Count == 1 && string.IsNullOrEmpty(action.Categories[0].Id)) action.Categories[0].Id = defaultEmptyCategory.Replace(" ", ""); if (action.Categories.Count == 0) action.Categories.Add(new ViewActionCategory(defaultEmptyCategory.Replace(" ", ""), defaultEmptyCategory)); var viewAction = action as ViewAction; if (viewAction != null) viewAction.IsLocalAction = true; actionList.Add(action); actionsCount++; } } return actionList; }
/// <summary> /// Returns a list of consolidated actions from two different action lists. /// </summary> /// <param name="actions">The first set of actions.</param> /// <param name="actions2">The second set of actions.</param> /// <param name="defaultEmptyCategory">The default empty category.</param> /// <param name="actionsDisplayFilter">The actions display filter.</param> /// <param name="flagFirstSecondaryActionAsNewGroup">Defines whether the first secondary action is to be flagged as a new group.</param> /// <param name="actions2DisplayFilter">Display filter for the secondary set of actions</param> /// <param name="viewModel">Optional view model object</param> /// <returns>ObservableCollection<IViewAction>.</returns> public virtual ObservableCollection <IViewAction> GetConsolidatedActions(IHaveActions actions, IHaveActions actions2 = null, string defaultEmptyCategory = "", ViewActionDisplayMode actionsDisplayFilter = ViewActionDisplayMode.All, bool flagFirstSecondaryActionAsNewGroup = false, ViewActionDisplayMode actions2DisplayFilter = ViewActionDisplayMode.All, object viewModel = null) => ViewActionHelper.GetConsolidatedActions(actions, actions2, defaultEmptyCategory, actionsDisplayFilter, flagFirstSecondaryActionAsNewGroup, actions2DisplayFilter);
/// <summary> /// Populates the current ribbon with items based on the actions collection /// </summary> /// <param name="actions">List of primary actions</param> /// <param name="actions2">List of view specific actions</param> /// <param name="selectedViewTitle">The selected view title.</param> protected virtual void PopulateRibbon(IHaveActions actions, IHaveActions actions2 = null, string selectedViewTitle = "") { var oldSelectedPage = SelectedIndex; RemoveAllMenuKeyBindings(); Items.Clear(); if (actions == null) return; var actionList = ViewActionHelper.GetConsolidatedActions(actions, actions2, selectedViewTitle); var rootCategories = ViewActionHelper.GetTopLevelActionCategories(actionList, EmptyGlobalCategoryTitle, EmptyLocalCategoryTitle); var pageCounter = 0; var selectedIndex = -1; var standardSelectedIndexSet = false; var specialSelectedIndexSet = false; var viewActionCategories = rootCategories as ViewActionCategory[] ?? rootCategories.ToArray(); foreach (var category in viewActionCategories) { RibbonPage tab; var tabVisibilityBinding = new MultiBinding {Converter = new MaximumVisibilityMultiConverter()}; if (category.IsLocalCategory && HighlightLocalCategories) { var caption = category.Caption.ToUpper(); if (string.IsNullOrEmpty(caption)) caption = ForceTopLevelTitlesUpperCase ? selectedViewTitle.Trim().ToUpper() : selectedViewTitle.Trim(); tab = new RibbonSpecialPage {Header = caption}; if (!specialSelectedIndexSet) { selectedIndex = pageCounter; specialSelectedIndexSet = true; } } else { if (pageCounter == 0 && FirstPageIsSpecial) tab = new RibbonFirstPage {Header = ForceTopLevelTitlesUpperCase ? category.Caption.Trim().ToUpper() : category.Caption.Trim()}; else { tab = new RibbonPage {Header = ForceTopLevelTitlesUpperCase ? category.Caption.Trim().ToUpper() : category.Caption.Trim()}; if (!standardSelectedIndexSet && !specialSelectedIndexSet) { selectedIndex = pageCounter; standardSelectedIndexSet = true; } } } var items = new RibbonPageLayoutPanel(); tab.Content = items; PopulateSubCategories(items, category, actionList, ribbonPage: tab, visibilityBinding: tabVisibilityBinding); Items.Add(tab); tab.SetBinding(VisibilityProperty, tabVisibilityBinding); if (category.AccessKey != ' ') { var pageIndexToSelect = pageCounter; var pageAccessKey = (Key) Enum.Parse(typeof (Key), category.AccessKey.ToString(CultureInfo.InvariantCulture).ToUpper()); MenuKeyBindings.Add(new ViewActionMenuKeyBinding(new ViewAction(execute: (a, o) => { SelectedIndex = pageIndexToSelect; var window = ElementHelper.FindParent<Window>(this) ?? ElementHelper.FindVisualTreeParent<Window>(this); SetKeyboardShortcutsActive(window, true); ReadyForStatusChange = false; }) { ShortcutKey = pageAccessKey, ShortcutModifiers = ModifierKeys.Alt })); tab.PageAccessKey = category.AccessKey.ToString(CultureInfo.InvariantCulture).Trim().ToUpper(); } pageCounter++; } // We are checking for a selected default page pageCounter = 0; if (actionList.Count(a => a.IsDefaultSelection) > 0) foreach (var category in viewActionCategories) { var matchingActions = ViewActionHelper.GetAllActionsForCategory(actionList, category); foreach (var matchingAction in matchingActions) if (matchingAction.IsDefaultSelection) { selectedIndex = pageCounter; break; } pageCounter++; } if (selectedIndex == -1) selectedIndex = oldSelectedPage; if (selectedIndex == -1) selectedIndex = 0; if (selectedIndex >= Items.Count) selectedIndex = Items.Count - 1; LastRegularIndex = selectedIndex; SelectedIndex = selectedIndex; CreateAllMenuKeyBindings(); }
/// <summary> /// Populates the current list with items based on the actions collection /// </summary> /// <param name="actions">List of primary actions</param> /// <param name="actions2">List of view specific actions</param> /// <param name="selectedViewTitle">The selected view title.</param> private void PopulateList(IHaveActions actions, IHaveActions actions2 = null, string selectedViewTitle = "") { Children.Clear(); if (actions == null) return; var actionList = ViewActionHelper.GetConsolidatedActions(actions, actions2, selectedViewTitle); var globalCategory = "File"; var ribbon = ElementHelper.FindParent<ViewActionRibbon>(this); if (ribbon != null) globalCategory = ribbon.EmptyGlobalCategoryTitle; var rootCategories = ViewActionHelper.GetTopLevelActionCategories(actionList, globalCategory, globalCategory); var viewActionCategories = rootCategories as ViewActionCategory[] ?? rootCategories.ToArray(); if (viewActionCategories.Length > 0) { var category = viewActionCategories[0]; var matchingActions = ViewActionHelper.GetAllActionsForCategory(actionList, category); foreach (var action in matchingActions) { var button = new SpecialFirstPageRibbonButton { Content = action.Caption, Command = action, AccessKey = action.AccessKey.ToString(CultureInfo.CurrentUICulture).Trim().ToUpper() }; CreateMenuItemBinding(action, button); Children.Add(button); } } }
/// <summary> /// Populates the current menu with items based on the actions collection /// </summary> /// <param name="actions">List of primary actions</param> /// <param name="actions2">List of view specific actions</param> private void PopulateToolbar(IHaveActions actions, IHaveActions actions2 = null) { Children.Clear(); if (actions == null) return; var actionList = ViewActionHelper.GetConsolidatedActions(actions, actions2, actionsDisplayFilter: RootViewActionDisplayMode, actions2DisplayFilter: LocalViewActionDisplayMode, flagFirstSecondaryActionAsNewGroup: true); var actionCounter = 0; foreach (var action in actionList) { if (actionCounter > 0 && action.BeginGroup) Children.Add(new ViewActionToolbarSeparator()); Children.Add(new ViewActionToolbarButton(action)); actionCounter++; } Visibility = Children.Count > 0 ? Visibility.Visible : Visibility.Collapsed; }
/// <summary> /// Populates the current items control with items based on the actions collection /// </summary> /// <param name="actions">List of actions</param> protected virtual void PopulateItems(IHaveActions actions) { RemoveAllMenuKeyBindings(); Items.Clear(); if (actions == null || actions.Actions == null) return; var actionList = actions.Actions.ToList(); var rootCategories = ViewActionHelper.GetTopLevelActionCategories(actionList, EmptyGlobalCategoryTitle); var viewActionCategories = rootCategories as ViewActionCategory[] ?? rootCategories.ToArray(); foreach (var category in viewActionCategories) { var matchingActions = ViewActionHelper.GetAllActionsForCategory(actionList, category, orderByGroupTitle: OrderByGroupTitle); foreach (var action in matchingActions) { var wrapper = new DependencyViewActionWrapper(action); if (action.Categories.Count > 0) { MetroTiles.SetGroupName(wrapper, action.Categories[0].Id); MetroTiles.SetGroupTitle(wrapper, action.Categories[0].Caption); } else { MetroTiles.SetGroupName(wrapper, string.Empty); MetroTiles.SetGroupTitle(wrapper, string.Empty); } if (action.Availability != ViewActionAvailabilities.Unavailable) MetroTiles.SetTileVisibility(wrapper, action.Visibility); else MetroTiles.SetTileVisibility(wrapper, Visibility.Collapsed); Items.Add(wrapper); if (action.ShortcutKey == Key.None) continue; MenuKeyBindings.Add(new ViewActionMenuKeyBinding(action)); } } CreateAllMenuKeyBindings(); }
private static void RepopulateItems(ActionItemsControl itemsControl, IHaveActions actionHost) { itemsControl.Visibility = Visibility.Visible; // We also need to hook all actions' changed event so we can update this view whenever the availability changes foreach (var inpc in actionHost.Actions.OfType<INotifyPropertyChanged>()) inpc.PropertyChanged += (s, a) => { if (a.PropertyName == "Availability") RepopulateItems(itemsControl, actionHost); }; // Getting all currently available actions var actions = actionHost.Actions.Where(a => a.Availability == ViewActionAvailabilities.Available).OrderBy(a => a.CategoryOrder).ToList(); itemsControl.ItemsSource = itemsControl.OnRepopulateItems(actions); }
/// <summary> /// Inspects up to 2 IHaveActions interfaces and returns a consolidated list of actions for both interfaces /// </summary> /// <param name="actions">The first interface containing actions</param> /// <param name="actions2">The second interface containing actions</param> /// <param name="defaultEmptyCategory">The default empty category.</param> /// <param name="actionsDisplayFilter">Indicates which actions out of the first actions collection shall be included.</param> /// <param name="flagFirstSecondaryActionAsNewGroup">Indicates whether the first action from the second actions collection should be flagged as a new group</param> /// <param name="actions2DisplayFilter">Indicates which actions out of the second actions collection shall be included.</param> /// <returns>ObservableCollection{IViewAction}.</returns> public static ObservableCollection <IViewAction> GetConsolidatedActions(IHaveActions actions, IHaveActions actions2 = null, string defaultEmptyCategory = "", ViewActionDisplayMode actionsDisplayFilter = ViewActionDisplayMode.All, bool flagFirstSecondaryActionAsNewGroup = false, ViewActionDisplayMode actions2DisplayFilter = ViewActionDisplayMode.All) { var actionList = new ObservableCollection <IViewAction>(); if (actions == null || actions.Actions == null) { return(actionList); } if (actionsDisplayFilter != ViewActionDisplayMode.None) { var list = actions.Actions.OrderBy(a => a.FirstCategoryId).ToList(); switch (actionsDisplayFilter) { case ViewActionDisplayMode.BelowNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.BelowNormal || a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.NormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.AboveNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.HighestSignificance: list = list.Where(a => a.Significance == ViewActionSignificance.Highest).ToList(); break; } foreach (var action in list) { actionList.Add(action); } } if (actions2 != null && actions2.Actions.Count > 0 && actions2DisplayFilter != ViewActionDisplayMode.None) { var actionsCount = 0; var list = actions2.Actions.ToList(); switch (actions2DisplayFilter) { case ViewActionDisplayMode.BelowNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.BelowNormal || a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.NormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.Normal || a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.AboveNormalSignificanceAndHigher: list = list.Where(a => a.Significance == ViewActionSignificance.AboveNormal || a.Significance == ViewActionSignificance.Highest).ToList(); break; case ViewActionDisplayMode.HighestSignificance: list = list.Where(a => a.Significance == ViewActionSignificance.Highest).ToList(); break; } foreach (var action in list) { if (actionsCount == 0 && flagFirstSecondaryActionAsNewGroup) { action.BeginGroup = true; } if (action.Categories.Count == 1 && string.IsNullOrEmpty(action.Categories[0].Caption)) { action.Categories[0].Caption = defaultEmptyCategory; } if (action.Categories.Count == 1 && string.IsNullOrEmpty(action.Categories[0].Id)) { action.Categories[0].Id = defaultEmptyCategory.Replace(" ", ""); } if (action.Categories.Count == 0) { action.Categories.Add(new ViewActionCategory(defaultEmptyCategory.Replace(" ", ""), defaultEmptyCategory)); } var viewAction = action as ViewAction; if (viewAction != null) { viewAction.IsLocalAction = true; } actionList.Add(action); actionsCount++; } } return(actionList); }
/// <summary> /// Populates the current menu with items based on the actions collection /// </summary> /// <param name="actions">List of primary actions</param> /// <param name="actions2">List of view specific actions</param> private void PopulateMenu(IHaveActions actions, IHaveActions actions2 = null) { RemoveAllMenuKeyBindings(); Items.Clear(); if (actions == null) return; var actionList = ViewActionHelper.GetConsolidatedActions(actions, actions2, "File"); var rootCategories = ViewActionHelper.GetTopLevelActionCategories(actionList, "File", "File"); foreach (var category in rootCategories) { var menuItem = new TopLevelViewActionMenuItem {Header = GetMenuTitle(category)}; menuItem.SetBinding(VisibilityProperty, new Binding("Count") {Source = menuItem.Items, Converter = new ItemsCollectionCountToVisibleConverter(menuItem.Items)}); PopulateSubCategories(menuItem, category, actionList); Items.Add(menuItem); } CreateAllMenuKeyBindings(); }