예제 #1
0
        private ButtonItem AddChildButton([NotNull] IMainRibbonExtension extension, [NotNull] IActionDefinition action)
        {
            ButtonItem result = null;

            if (_panelListActionId.TryGetValue(extension.Id, out var parentActionId) &&
                _panelsListButtons.TryGetValue(parentActionId, out var button) &&
                !_childParentActions.ContainsKey(action.Id))
            {
                _childParentActions.Add(action.Id, parentActionId);

                result = button.CreateButton(action, _superTooltip);
                if (result != null)
                {
                    result.Click += Button_Click;
                    button.SubItems.Add(result);

                    // ReSharper disable once SuspiciousTypeConversion.Global
                    if (action is INotifyPropertyChanged childButtonAction)
                    {
                        childButtonAction.PropertyChanged += OnChildButtonActionPropertyChanged;
                    }
                }
            }

            return(result);
        }
예제 #2
0
 private IEnumerable <ButtonItem> GetButtons([NotNull] IMainRibbonExtension extension)
 {
     if (_buttons.TryGetValue(extension.Id, out var buttons))
     {
         return(buttons);
     }
     else
     {
         return(null);
     }
 }
예제 #3
0
        private void AppendFormsList([NotNull] IMainRibbonExtension extension, [NotNull] ButtonItem button)
        {
            var list = extension.GetStartPanelsList(_model)?.ToArray();

            if (list?.Any() ?? false)
            {
                foreach (var item in list)
                {
                    AddDiagramToFormList(button, item);
                }
            }
        }
예제 #4
0
        private void IteratePanels([NotNull] IMainRibbonExtension factory)
        {
            bool found = false;

            var children = MdiChildren.ToArray();

            if (children.Any())
            {
                bool current = false;
                foreach (var child in children)
                {
                    if (current && child.Tag == factory)
                    {
                        current = false;
                        found   = true;
                        child.Focus();
                        break;
                    }

                    if (child == ActiveMdiChild)
                    {
                        current = true;
                    }
                }

                if (current)
                {
                    foreach (var child in children)
                    {
                        if (child.Tag == factory)
                        {
                            found = true;
                            child.Focus();
                            break;
                        }
                    }
                }
            }

            if (!found)
            {
                if (_panelListActionId.TryGetValue(factory.Id, out var actionId) &&
                    _panelsListButtons.TryGetValue(actionId, out var button))
                {
                    var subItem = button.SubItems.OfType <ButtonItem>().FirstOrDefault();
                    subItem?.RaiseClick();
                }
            }
        }
예제 #5
0
        private void SetButtonsForExtension(IMainRibbonExtension extension, [NotNull] IEnumerable <ButtonItem> buttons)
        {
            _mainRibbonExtensions[extension.Id] = extension;
            var buttonsArray = buttons.ToArray();

            _buttons[extension.Id] = buttonsArray;

            foreach (var button in buttonsArray)
            {
                if (button.Tag is IActionDefinition action &&
                    string.CompareOrdinal(extension.PanelsListRibbonAction, action.Name) == 0)
                {
                    _panelsListButtons[action.Id]    = button;
                    _panelListActionId[extension.Id] = action.Id;
                }
            }
        }
예제 #6
0
        private void ChangeRibbonActionStatus([NotNull] IMainRibbonExtension extension, [Required] string actionName, bool status)
        {
            var buttons = GetButtons(extension);

            if (buttons != null)
            {
                foreach (var button in buttons)
                {
                    if (button?.Tag is IActionDefinition action)
                    {
                        if (string.CompareOrdinal(actionName, action.Name) == 0)
                        {
                            button.Enabled = status;
                        }
                    }
                }
            }
        }
예제 #7
0
        private void MinimalLoadMainRibbonExtension([NotNull] IMainRibbonExtension mainRibbonExtension)
        {
            if (mainRibbonExtension is IPanelFactoryActionsRequestor requestor)
            {
                requestor.PanelCreationRequired += CreatePanel;
                requestor.PanelDeletionRequired += DeletePanel;
                requestor.PanelShowRequired     += ShowPanel;
            }

            // ReSharper disable once SuspiciousTypeConversion.Global
            if (mainRibbonExtension is IContextAwareExtension contextAwareExtension)
            {
                var actions = Manager.Instance.GetExtensionsMetadata <IContextAwareAction>()?
                              .Where(x => (contextAwareExtension.SupportedScopes & x.Value.Scope) != 0)
                              .OrderBy(x => x.Key.Priority)
                              .Select(x => x.Value)
                              .ToArray();
                if (actions?.Any() ?? false)
                {
                    contextAwareExtension.SetContextAwareActions(actions);
                }
            }
        }
예제 #8
0
        private void LoadMainRibbonExtension([NotNull] IMainRibbonExtension mainRibbonExtension)
        {
            mainRibbonExtension.ChangeRibbonActionStatus += ChangeRibbonActionStatus;
            mainRibbonExtension.IteratePanels            += IteratePanels;
            mainRibbonExtension.RefreshPanels            += extension => UpdateFormsList();
            mainRibbonExtension.ClosePanels += ClosePanels;

            if (mainRibbonExtension is IStatusInfoProviderUpdateRequestor updater)
            {
                updater.UpdateStatusInfoProviders += UpdateStatusInfoProviders;
            }

            if (mainRibbonExtension is IExecutionModeSupport executionModeSupport)
            {
                executionModeSupport.SetExecutionMode(_executionMode);
            }

            var actions = mainRibbonExtension.RibbonActions?.ToArray();

            if (actions?.Any() ?? false)
            {
                List <RibbonBar> list;
                RibbonBar        bar;
                if (_ribbonBars.TryGetValue(mainRibbonExtension.Ribbon, out var bars))
                {
                    list = bars;
                    bar  = bars.FirstOrDefault(x => string.CompareOrdinal(x.Text, mainRibbonExtension.Bar) == 0);
                    if (bar == null)
                    {
                        bar = mainRibbonExtension.Bar.CreateBar();
                        list.Add(bar);
                    }
                }
                else
                {
                    list = new List <RibbonBar>();
                    _ribbonBars.Add(mainRibbonExtension.Ribbon, list);
                    bar = mainRibbonExtension.Bar.CreateBar();
                    list.Add(bar);
                }

                var buttonsPerFactory = new List <ButtonItem>();
                foreach (var action in actions)
                {
                    var button = bar.CreateButton(action, _superTooltip);
                    if (button != null)
                    {
                        button.Click += Button_Click;
                        Add(bar, button);
                        buttonsPerFactory.Add(button);

                        if (string.CompareOrdinal(mainRibbonExtension.PanelsListRibbonAction, action.Name) == 0)
                        {
                            AppendFormsList(mainRibbonExtension, button);
                        }
                    }
                }

                SetButtonsForExtension(mainRibbonExtension, buttonsPerFactory);
            }

            MinimalLoadMainRibbonExtension(mainRibbonExtension);
        }