private void LoadTiles()
        {
            // TODO: This method could probably be be optimized! We can probably get away without reloading everything every time.

            lock (this)
            {
                foreach (var child in Children)
                {
                    var childButton = child as Button;
                    if (childButton != null)
                    {
                        childButton.Content = null;
                        childButton.DataContext = null;
                    }
                }
                Children.Clear();

                var actionsHost = DataContext as IHaveActions;
                if (actionsHost != null)
                {
                    List<IViewAction> currentActions;
                    lock (actionsHost.Actions) // Trying to do this as quickly as possible to avoid threading problems
                        currentActions = actionsHost.Actions.OrderBy(a => a.CategoryOrder).ToList();

                    RemoveAllMenuKeyBindings();

                    foreach (var action in currentActions)
                    {
                        var button = new NewsroomTileButton();
                        button.SetResourceReference(StyleProperty, "Newsroom-Control-TileButton");
                        button.Command = action;

                        var visibilityBinding = new Binding("Availability") {Source = action, Converter = new AvailabilityToVisibilityConverter()};
                        button.SetBinding(VisibilityProperty, visibilityBinding);

                        var iconBinding = new Binding("PopulatedBrush") {Source = action};
                        button.SetBinding(NewsroomTileButton.IconProperty, iconBinding);

                        var captionBinding = new Binding("Caption") { Source = action };
                        button.SetBinding(NewsroomTileButton.CaptionProperty, captionBinding);

                        var significanceBinding = new Binding("Significance") { Source = action };
                        button.SetBinding(NewsroomTileButton.SignificanceProperty, significanceBinding);

                        if (action.ActionView == null)
                        {
                            var realAction = action as ViewAction;
                            if (realAction != null && !realAction.HasBrush && !realAction.HasExecuteDelegate && string.IsNullOrEmpty(action.Caption))
                                continue; // Not adding this since is has no brush and no execute and no caption

                            //switch (action.Significance)
                            //{
                            //    case ViewActionSignificance.Highest:
                            //        var view = Controller.LoadView("CODEFrameworkStandardViewTileWideSquare");
                            //        button.Content = view;
                            //        view.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.DoubleSquare);
                            //        break;
                            //    case ViewActionSignificance.AboveNormal:
                            //        var view2 = Controller.LoadView("CODEFrameworkStandardViewTileWide");
                            //        button.Content = view2;
                            //        view2.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view2; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.Double);
                            //        break;
                            //    case ViewActionSignificance.Normal:
                            //    case ViewActionSignificance.BelowNormal:
                            //        var view3 = Controller.LoadView("CODEFrameworkStandardViewTileNarrow");
                            //        button.Content = view3;
                            //        view3.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view3; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.Normal);
                            //        break;
                            //    case ViewActionSignificance.Lowest:
                            //        var view4 = Controller.LoadView("CODEFrameworkStandardViewTileTiny");
                            //        button.Content = view4;
                            //        view4.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view4; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.Tiny);
                            //        break;
                            //}
                        }
                        else
                        {
                            button.Content = action.ActionView;
                            if (action.ActionView.DataContext == null) action.ActionView.DataContext = action.ActionViewModel ?? action;
                            switch (action.Significance)
                            {
                                case ViewActionSignificance.Highest:
                                    SetTileWidthMode(button, TileWidthModes.DoubleSquare);
                                    break;
                                case ViewActionSignificance.AboveNormal:
                                    SetTileWidthMode(button, TileWidthModes.Double);
                                    break;
                                case ViewActionSignificance.Normal:
                                case ViewActionSignificance.BelowNormal:
                                    SetTileWidthMode(button, TileWidthModes.Normal);
                                    break;
                                case ViewActionSignificance.Lowest:
                                    SetTileWidthMode(button, TileWidthModes.Tiny);
                                    break;
                            }
                        }

                        if (action.Categories.Count > 0)
                        {
                            SetGroupName(button, action.Categories[0].Id);
                            SetGroupTitle(button, action.Categories[0].Caption);
                        }
                        else
                        {
                            SetGroupName(button, string.Empty);
                            SetGroupTitle(button, string.Empty);
                        }

                        Children.Add(button);

                        if (action.AccessKey != ' ')
                            _menuKeyBindings.Add(new ViewActionMenuKeyBinding(action) {Key = action.ShortcutKey, Modifiers = action.ShortcutModifiers});
                    }

                    CreateAllMenuKeyBindings();
                }
            }
        }
Example #2
0
        private void LoadTiles()
        {
            // TODO: This method could probably be be optimized! We can probably get away without reloading everything every time.

            lock (this)
            {
                foreach (var child in Children)
                {
                    var childButton = child as Button;
                    if (childButton != null)
                    {
                        childButton.Content     = null;
                        childButton.DataContext = null;
                    }
                }
                Children.Clear();

                var actionsHost = DataContext as IHaveActions;
                if (actionsHost != null)
                {
                    List <IViewAction> currentActions;
                    lock (actionsHost.Actions) // Trying to do this as quickly as possible to avoid threading problems
                        currentActions = actionsHost.Actions.OrderBy(a => a.CategoryOrder).ToList();

                    RemoveAllMenuKeyBindings();

                    foreach (var action in currentActions)
                    {
                        var button = new NewsroomTileButton();
                        button.SetResourceReference(StyleProperty, "Newsroom-Control-TileButton");
                        button.Command = action;

                        var visibilityBinding = new Binding("Availability")
                        {
                            Source = action, Converter = new AvailabilityToVisibilityConverter()
                        };
                        button.SetBinding(VisibilityProperty, visibilityBinding);

                        var iconBinding = new Binding("PopulatedBrush")
                        {
                            Source = action
                        };
                        button.SetBinding(NewsroomTileButton.IconProperty, iconBinding);

                        var captionBinding = new Binding("Caption")
                        {
                            Source = action
                        };
                        button.SetBinding(NewsroomTileButton.CaptionProperty, captionBinding);

                        var significanceBinding = new Binding("Significance")
                        {
                            Source = action
                        };
                        button.SetBinding(NewsroomTileButton.SignificanceProperty, significanceBinding);

                        if (action.ActionView == null)
                        {
                            var realAction = action as ViewAction;
                            if (realAction != null && !realAction.HasBrush && !realAction.HasExecuteDelegate && string.IsNullOrEmpty(action.Caption))
                            {
                                continue; // Not adding this since is has no brush and no execute and no caption
                            }
                            //switch (action.Significance)
                            //{
                            //    case ViewActionSignificance.Highest:
                            //        var view = Controller.LoadView("CODEFrameworkStandardViewTileWideSquare");
                            //        button.Content = view;
                            //        view.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.DoubleSquare);
                            //        break;
                            //    case ViewActionSignificance.AboveNormal:
                            //        var view2 = Controller.LoadView("CODEFrameworkStandardViewTileWide");
                            //        button.Content = view2;
                            //        view2.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view2; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.Double);
                            //        break;
                            //    case ViewActionSignificance.Normal:
                            //    case ViewActionSignificance.BelowNormal:
                            //        var view3 = Controller.LoadView("CODEFrameworkStandardViewTileNarrow");
                            //        button.Content = view3;
                            //        view3.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view3; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.Normal);
                            //        break;
                            //    case ViewActionSignificance.Lowest:
                            //        var view4 = Controller.LoadView("CODEFrameworkStandardViewTileTiny");
                            //        button.Content = view4;
                            //        view4.DataContext = action.ActionViewModel ?? action;
                            //        //action.ActionView = view4; // No need to re-load this later...
                            //        SetTileWidthMode(button, TileWidthModes.Tiny);
                            //        break;
                            //}
                        }
                        else
                        {
                            button.Content = action.ActionView;
                            if (action.ActionView.DataContext == null)
                            {
                                action.ActionView.DataContext = action.ActionViewModel ?? action;
                            }
                            switch (action.Significance)
                            {
                            case ViewActionSignificance.Highest:
                                SetTileWidthMode(button, TileWidthModes.DoubleSquare);
                                break;

                            case ViewActionSignificance.AboveNormal:
                                SetTileWidthMode(button, TileWidthModes.Double);
                                break;

                            case ViewActionSignificance.Normal:
                            case ViewActionSignificance.BelowNormal:
                                SetTileWidthMode(button, TileWidthModes.Normal);
                                break;

                            case ViewActionSignificance.Lowest:
                                SetTileWidthMode(button, TileWidthModes.Tiny);
                                break;
                            }
                        }

                        if (action.Categories.Count > 0)
                        {
                            SetGroupName(button, action.Categories[0].Id);
                            SetGroupTitle(button, action.Categories[0].Caption);
                        }
                        else
                        {
                            SetGroupName(button, string.Empty);
                            SetGroupTitle(button, string.Empty);
                        }

                        Children.Add(button);

                        if (action.AccessKey != ' ')
                        {
                            _menuKeyBindings.Add(new ViewActionMenuKeyBinding(action)
                            {
                                Key = action.ShortcutKey, Modifiers = action.ShortcutModifiers
                            });
                        }
                    }

                    CreateAllMenuKeyBindings();
                }
            }
        }