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); }
private IEnumerable <ButtonItem> GetButtons([NotNull] IMainRibbonExtension extension) { if (_buttons.TryGetValue(extension.Id, out var buttons)) { return(buttons); } else { return(null); } }
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); } } }
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(); } } }
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; } } }
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; } } } } }
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); } } }
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); }