List <BarItem> Validate(CommonBarItemCollection items)
        {
            var filteredItems = items.Where(x => x is BarItem).Select(x => x as BarItem).Where(x => x.IsEnabled && x.IsVisible && !(x is BarItemSeparator)).ToList();

            UpdateImages(filteredItems);
            if (filteredItems.Count <= maxItemsInRadialmenu)
            {
                return(filteredItems);
            }
            var firstLevelItems        = filteredItems.Where(i => i is BarSubItem).ToList();
            var anotherItems           = filteredItems.Where(i => !(i is BarSubItem)).ToList();
            int additionCount          = maxItemsInRadialmenu - 1 - firstLevelItems.Count;
            var firstLevelAnotherItems = anotherItems.Take(additionCount).ToList();

            anotherItems.RemoveRange(0, additionCount);
            var secondLevelItems = anotherItems;

            firstLevelItems.AddRange(firstLevelAnotherItems);
            var popupMenu = new PopupMenu();

            foreach (var item in secondLevelItems)
            {
                popupMenu.Items.Add(item);
            }
            firstLevelItems.Add(new BarSplitButtonItem()
            {
                PopupControl = popupMenu, Content = "Actions"
            });
            return(firstLevelItems.ToList());
        }
        /// <summary>
        /// Get the insert position for a group item
        /// </summary>
        /// <param name="extractedItems">List of items in ribbon group</param>
        /// <param name="extractedItem">Item to be inserted in ribbon group</param>
        /// <returns>
        /// The position where the <see cref="RibbonPageGroup" /> will be added
        /// </returns>
        private int GetPositionInsideRibbonGroup(CommonBarItemCollection extractedItems, IBarItem extractedItem)
        {
            var total = extractedItems.Count;

            if (total == 0)
            {
                return(total);
            }

            var barItem   = extractedItem as BarItem;
            var itemsList = extractedItems.ToList().ConvertAll(i => (BarItem)i);

            var requestedPosition = barItem?.MergeOrder ?? total;
            var position          = itemsList.TakeWhile(x => x.MergeOrder <= requestedPosition).Count();

            return(position);
        }
        public void FormContextMenu(CommonBarItemCollection menuItems)
        {
            menuItems.Clear();

            var createCommentCommand = new DelegateCommand(() =>
            {
                var dlgModel = new CreateCommentDlgViewModel(_particlesManager, _blockManager, _commentManager, _eventAggregator);
                SetParticleIfExist(dlgModel.AddParticleVm);

                var dlg = new CreateCommentDlg(dlgModel);
                var res = dlg.ShowDialog();
                if (res.HasValue && res.Value)
                    UpdateBookmarks();

            });
            var createIdeaCommand = new DelegateCommand(() =>
            {
                var dlgModel = new CreateIdeaDlgViewModel(_tagsManager, _particlesManager, _ideaManager, _blockManager,
                    _eventAggregator);
                SetParticleIfExist(dlgModel.AddParticleVm);

                var dlg = new CreateIdeaDlg(dlgModel);
                var res = dlg.ShowDialog();
                if (res.HasValue && res.Value)
                    UpdateBookmarks();
            });

            var addToCommentCommand = new DelegateCommand(() =>
            {
                var dlgModel = new AddParticleDlgViewModel(_particlesManager, typeof(Entity.Comment), _blockManager);
                SetParticleIfExist(dlgModel.AddParticleVm);

                var dlg = new AddParticleDlg(dlgModel);
                var res = dlg.ShowDialog();
                if (res.HasValue && res.Value)
                    UpdateBookmarks();
            });

            var addToIdeaCommand = new DelegateCommand(() =>
            {
                var dlgModel = new AddParticleDlgViewModel(_particlesManager, typeof(Idea), _blockManager);
                SetParticleIfExist(dlgModel.AddParticleVm);

                var dlg = new AddParticleDlg(dlgModel);
                var res = dlg.ShowDialog();
                if (res.HasValue && res.Value)
                    UpdateBookmarks();
            });

            var createRelationCommand = new DelegateCommand(() =>
            {
                var dlgModel = new CreateRelationDlgViewModel(_particlesManager, _ideaManager, _relationManager, _blockManager, _eventAggregator);
                SetParticleIfExist(dlgModel.AddParticleVm);

                var dlg = new CreateRelationDlg(dlgModel);
                var res = dlg.ShowDialog();
                if (res.HasValue && res.Value)
                    UpdateBookmarks();
            });

            var createMenu = new BarSubItem() {Content = "Создать..."};
            var createComment = new BarButtonItem() {Content = "Комментарий", Command = createCommentCommand};
            var createIdea = new BarButtonItem() {Content = "Понятие", Command = createIdeaCommand};
            var createRelation = new BarButtonItem() {Content = "Отношение", Command = createRelationCommand};
            createMenu.Items.Add(createComment);
            createMenu.Items.Add(createIdea);
            createMenu.Items.Add(createRelation);

            var addMenu = new BarSubItem() { Content = "Добавить в..." };
            var addComment = new BarButtonItem() {Content = "Комментарий", Command = addToCommentCommand};
            var addIdea = new BarButtonItem() { Content = "Понятие", Command = addToIdeaCommand};
            var addRelation = new BarButtonItem() { Content = "Отношение" };
            addMenu.Items.Add(addComment);
            addMenu.Items.Add(addIdea);
            addMenu.Items.Add(addRelation);

            menuItems.Add(createMenu);
            menuItems.Add(addMenu);

            /*if (MyDocument != null)
            {
                foreach (var bm in MyDocument.Bookmarks)
                {
                    var nextBookmark = new BarButtonItem()
                    {
                        Content = bm.Name,
                        CommandParameter = MyDocument,
                        Command = new DelegateCommand<Document>(document =>
                        {
                            document.Bookmarks.Select(bm);
                        })
                    };
                    menuItems.Add(nextBookmark);
                }
            }*/
        }