Exemplo n.º 1
0
        /// <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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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;
        }
Exemplo n.º 4
0
        /// <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();
        }
Exemplo n.º 6
0
        /// <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;
        }
Exemplo n.º 7
0
 /// <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&lt;IViewAction&gt;.</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);
Exemplo n.º 8
0
        /// <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();
        }
Exemplo n.º 9
0
        /// <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);
                }
            }
        }
Exemplo n.º 10
0
        /// <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;
        }
Exemplo n.º 11
0
        /// <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();
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        /// <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);
        }
Exemplo n.º 14
0
        /// <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();
        }