Пример #1
0
        /// <summary>
        /// Добавить панель "Утилиты"
        /// </summary>
        private static void AddToolsPanel(RibbonTab ribbonTab)
        {
            // create the panel source
            var ribSourcePanel = new RibbonPanelSource
            {
                Title = Language.GetItem(Invariables.LangItem, "tab9")
            };

            // now the panel
            var ribPanel = new RibbonPanel
            {
                Source = ribSourcePanel
            };

            ribbonTab.Panels.Add(ribPanel);

            var ribRowPanel = new RibbonRowPanel();

            ribRowPanel.Items.Add(
                RibbonHelpers.AddBigButton(
                    "mpESKDSearch",
                    Language.GetItem(Invariables.LangItem, "tab10"),
                    _colorTheme == 1 // 1 - light
                        ? $"pack://application:,,,/mpESKD_{ModPlusConnector.Instance.AvailProductExternalVersion};component/Resources/SearchEntities_32x32.png"
                        : $"pack://application:,,,/mpESKD_{ModPlusConnector.Instance.AvailProductExternalVersion};component/Resources/SearchEntities_32x32_dark.png",
                    Language.GetItem(Invariables.LangItem, "tab5"), Orientation.Vertical, string.Empty, string.Empty, "help/mpeskd"));
            ribSourcePanel.Items.Add(ribRowPanel);
        }
Пример #2
0
        private static void AddSettingsPanel(RibbonTab ribTab)
        {
            // create the panel source
            var ribSourcePanel = new RibbonPanelSource
            {
                Title = "Настройки"
            };
            // now the panel
            var ribPanel = new RibbonPanel
            {
                Source = ribSourcePanel
            };

            ribTab.Panels.Add(ribPanel);

            var ribRowPanel = new RibbonRowPanel();

            ribRowPanel.Items.Add(
                RibbonHelpers.AddBigButton(
                    "mpSettings",
                    "Настройки",
                    "pack://application:,,,/Modplus_" + MpVersionData.CurCadVers + ";component/Resources/HelpBt.png",
                    "Настройки ModPlus", Orientation.Vertical, "", ""
                    ));
            ribSourcePanel.Items.Add(ribRowPanel);
        }
Пример #3
0
 /// <summary>
 /// Получить маленькую кнопку по дескриптору функции. Возвращает кнопку для основной функции в дескрипторе
 /// </summary>
 /// <param name="descriptor">Дескриптор функции - класс, реализующий интерфейс <see cref="IIntellectualEntityDescriptor"/></param>
 private static RibbonButton GetSmallButton(IIntellectualEntityDescriptor descriptor)
 {
     return(RibbonHelpers.AddSmallButton(
                descriptor.Name,
                descriptor.LName,
                GetSmallIconForFunction(descriptor.Name, descriptor.Name),
                descriptor.Description,
                descriptor.FullDescription,
                GetHelpImageForFunction(descriptor.Name, descriptor.ToolTipHelpImage),
                "help/mpeskd"));
 }
Пример #4
0
 /// <summary>
 /// Получить большую кнопку по дескриптору функции. Возвращает кнопку для основной функции в дескрипторе
 /// </summary>
 /// <param name="descriptor">Дескриптор функции - класс, реализующий интерфейс <see cref="IIntellectualEntityDescriptor"/></param>
 /// <param name="orientation">Ориентация кнопки</param>
 private static RibbonButton GetBigButton(IIntellectualEntityDescriptor descriptor, Orientation orientation = Orientation.Vertical)
 {
     return(RibbonHelpers.AddBigButton(
                descriptor.Name,
                descriptor.LName,
                GetBigIconForFunction(descriptor.Name, descriptor.Name),
                descriptor.Description,
                orientation,
                descriptor.FullDescription,
                GetHelpImageForFunction(descriptor.Name, descriptor.ToolTipHelpImage),
                "help/mpeskd"));
 }
Пример #5
0
        private static void AddPanels(RibbonTab ribTab)
        {
            // Линии
            // create the panel source
            var ribSourcePanel = new RibbonPanelSource {
                Title = "Линии"
            };
            // now the panel
            var ribPanel = new RibbonPanel {
                Source = ribSourcePanel
            };

            ribTab.Panels.Add(ribPanel);

            var ribRowPanel = new RibbonRowPanel();

            // mpBreakLine
            if (LoadFunctionsHelper.LoadedFunctions.Any(x => x.Name.Equals("mpBreakLine")))
            {
                var lf = LoadFunctionsHelper.LoadedFunctions.First(x => x.Name.Equals("mpBreakLine"));
                // Создаем SplitButton
                var risSplitBtn = new RibbonSplitButton
                {
                    Text            = "RibbonSplitButton",
                    Orientation     = Orientation.Vertical,
                    Size            = RibbonItemSize.Large,
                    ShowImage       = true,
                    ShowText        = true,
                    ListButtonStyle = Autodesk.Private.Windows.RibbonListButtonStyle.SplitButton,
                    ResizeStyle     = RibbonItemResizeStyles.NoResize,
                    ListStyle       = RibbonSplitButtonListStyle.List
                };
                // Добавляем в него первую функцию, которую делаем основной
                var ribBtn = RibbonHelpers.AddBigButton(lf.Name, lf.LName, lf.BigIconUrl, lf.Description, Orientation.Vertical, lf.FullDescription, lf.ToolTipHelpImage);
                risSplitBtn.Items.Add(ribBtn);
                risSplitBtn.Current = ribBtn;
                // Затем добавляем подфункции
                for (int i = 0; i < lf.SubFunctionsNames.Count; i++)
                {
                    risSplitBtn.Items.Add(RibbonHelpers.AddBigButton(
                                              lf.SubFunctionsNames[i], lf.SubFunctionsLNames[i], lf.SubBigIconsUrl[i], lf.SubDescriptions[i], Orientation.Vertical, lf.SubFullDescriptions[i], lf.SubHelpImages[i]
                                              ));
                }
                ribRowPanel.Items.Add(risSplitBtn);
            }
            if (ribRowPanel.Items.Any())
            {
                ribSourcePanel.Items.Add(ribRowPanel);
            }
        }
Пример #6
0
        /// <summary>
        /// Получить список больших кнопок для вложенных команды по дескриптору
        /// </summary>
        /// <param name="descriptor">Дескриптор функции - класс, реализующий
        /// интерфейс <see cref="IIntellectualEntityDescriptor"/></param>
        /// <param name="orientation">Ориентация кнопки</param>
        private static List <RibbonButton> GetBigButtonsForSubFunctions(
            IIntellectualEntityDescriptor descriptor, Orientation orientation = Orientation.Vertical)
        {
            var buttons = new List <RibbonButton>();

            for (var i = 0; i < descriptor.SubFunctionsNames.Count; i++)
            {
                buttons.Add(RibbonHelpers.AddBigButton(
                                descriptor.SubFunctionsNames[i],
                                descriptor.SubFunctionsLNames[i],
                                GetBigIconForFunction(descriptor.Name, descriptor.SubFunctionsNames[i]),
                                descriptor.SubDescriptions[i],
                                orientation,
                                descriptor.SubFullDescriptions[i],
                                GetHelpImageForFunction(descriptor.Name, descriptor.SubHelpImages[i]),
                                "help/mpeskd"));
            }

            return(buttons);
        }
Пример #7
0
        /// <summary>
        /// Добавить панель "Настройки"
        /// </summary>
        private static void AddSettingsPanel(RibbonTab ribTab)
        {
            // create the panel source
            var ribSourcePanel = new RibbonPanelSource
            {
                Title = Language.GetItem("tab2")
            };

            // now the panel
            var ribPanel = new RibbonPanel
            {
                Source = ribSourcePanel
            };

            ribTab.Panels.Add(ribPanel);

            var ribRowPanel = new RibbonRowPanel();

            ribRowPanel.Items.Add(
                RibbonHelpers.AddBigButton(
                    "mpStyleEditor",
                    Language.GetItem("tab4"),
                    _colorTheme == 1 // 1 - light
                    ? $"pack://application:,,,/mpESKD_{ModPlusConnector.Instance.AvailProductExternalVersion};component/Resources/StyleEditor_32x32.png"
                    : $"pack://application:,,,/mpESKD_{ModPlusConnector.Instance.AvailProductExternalVersion};component/Resources/StyleEditor_32x32_dark.png",
                    Language.GetItem("tab5"), Orientation.Vertical, string.Empty, string.Empty, "help/mpeskd"));
            ribRowPanel.Items.Add(
                RibbonHelpers.AddBigButton(
                    "mpPropertiesPalette",
                    ConvertLName(Language.GetItem("tab6")),
                    _colorTheme == 1 // 1 - light
                    ? $"pack://application:,,,/mpESKD_{ModPlusConnector.Instance.AvailProductExternalVersion};component/Resources/Properties_32x32.png"
                    : $"pack://application:,,,/mpESKD_{ModPlusConnector.Instance.AvailProductExternalVersion};component/Resources/Properties_32x32_dark.png",
                    Language.GetItem("tab7"), Orientation.Vertical, string.Empty, string.Empty, "help/mpeskd"));
            ribSourcePanel.Items.Add(ribRowPanel);
        }
        private static void AddHelpPanel(RibbonTab ribTab)
        {
            var ribSourcePanel = new RibbonPanelSource
            {
                Title = "ModPlus"
            };

            var ribPanel = new RibbonPanel
            {
                Source = ribSourcePanel
            };

            ribTab.Panels.Add(ribPanel);

            var ribRowPanel = new RibbonRowPanel();

            ribRowPanel.Items.Add(
                RibbonHelpers.AddBigButton(
                    "mpUserInfo",
                    Language.GetItem(LangItem, "h56"),
                    _colorTheme == 1
                        ? $"pack://application:,,,/Modplus_{VersionData.CurrentCadVersion};component/Resources/UserInfo_32x32.png"
                        : $"pack://application:,,,/Modplus_{VersionData.CurrentCadVersion};component/Resources/UserInfo_32x32_dark.png",
                    Language.GetItem(LangItem, "h56"),
                    Orientation.Vertical,
                    string.Empty,
                    string.Empty,
                    "help/userinfo"));

            ribSourcePanel.Items.Add(ribRowPanel);

            ribRowPanel = new RibbonRowPanel();

            ribRowPanel.Items.Add(
                RibbonHelpers.AddSmallButton(
                    "mpSettings",
                    Language.GetItem(LangItem, "h12"),
                    GetSmallIcon("mpSettings"),
                    Language.GetItem(LangItem, "h41"),
                    Language.GetItem(LangItem, "h42"),
                    string.Empty,
                    "help/mpsettings"));

            ribRowPanel.Items.Add(
                RibbonHelpers.AddSmallButton(
                    "mpFeedback",
                    Language.GetItem("ModPlusAPI", "f1"),
                    GetSmallIcon("mpFeedback"),
                    Language.GetItem("ModPlusAPI", "f20"),
                    Language.GetItem("ModPlusAPI", "f21"),
                    string.Empty,
                    "help/feedback"));

            ribRowPanel.Items.Add(new RibbonRowBreak());

            if (LoadPluginsHelper.HasStampsPlugin(_colorTheme, out var fieldsIcon, out var signaturesIcon))
            {
                ribRowPanel.Items.Add(
                    RibbonHelpers.AddSmallButton(
                        "mpStampFields",
                        Language.GetItem(LangItem, "h43"),
                        fieldsIcon,
                        Language.GetItem(LangItem, "h44"),
                        Language.GetItem(LangItem, "h45"),
                        string.Empty,
                        "autocadplugins/mpstamps"));

                ribRowPanel.Items.Add(
                    RibbonHelpers.AddSmallButton(
                        "mpSignatures",
                        Language.GetItem(LangItem, "h60"),
                        signaturesIcon,
                        Language.GetItem(LangItem, "h61"),
                        Language.GetItem(LangItem, "h62"),
                        string.Empty,
                        "autocadplugins/mpstamps"));

                ribRowPanel.Items.Add(new RibbonRowBreak());
            }

            ribRowPanel.Items.Add(
                RibbonHelpers.AddSmallButton(
                    "mpShowProductIcons",
                    Language.GetItem(LangItem, "h46"),
                    GetSmallIcon("mpShowProductIcons"),
                    Language.GetItem(LangItem, "h37"),
                    Language.GetItem(LangItem, "h38"),
                    $"pack://application:,,,/Modplus_{VersionData.CurrentCadVersion};component/Resources/mpShowProductIcon.png",
                    "help/mpsettings"));

            ribRowPanel.Items.Add(
                RibbonHelpers.AddSmallButton(
                    "mpHideProductIcons",
                    Language.GetItem(LangItem, "h47"),
                    GetSmallIcon("mpHideProductIcons"),
                    Language.GetItem(LangItem, "h39"),
                    string.Empty,
                    string.Empty,
                    "help/mpsettings"));

            ribSourcePanel.Items.Add(ribRowPanel);
        }
        private static void AddPanels(RibbonTab ribTab)
        {
            try
            {
                var confCuiXel = ModPlusAPI.RegistryData.Adaptation.GetCuiAsXElement("AutoCAD");

                // Проходим по группам
                if (confCuiXel != null)
                {
                    foreach (var group in confCuiXel.Elements("Group"))
                    {
                        if (group.Attribute("GroupName") == null)
                        {
                            continue;
                        }

                        // create the panel source
                        var ribSourcePanel = new RibbonPanelSource
                        {
                            Title = Language.TryGetCuiLocalGroupName(group.Attribute("GroupName")?.Value)
                        };

                        // now the panel
                        var ribPanel = new RibbonPanel
                        {
                            Source = ribSourcePanel
                        };
                        ribTab.Panels.Add(ribPanel);
                        var ribRowPanel = new RibbonRowPanel();

                        // Вводим спец.счетчик, который потребуется для разбивки по строкам
                        var nr           = 0;
                        var hasFunctions = false;

                        // Если последняя функция в группе была 32х32
                        var lastWasBig = false;

                        // Проходим по функциям группы
                        foreach (var func in group.Elements("Function"))
                        {
                            var fNameAttr = func.Attribute("Name")?.Value;
                            if (string.IsNullOrEmpty(fNameAttr))
                            {
                                continue;
                            }
                            if (LoadPluginsHelper.LoadedFunctions.Any(x => x.Name.Equals(fNameAttr)))
                            {
                                var loadedFunction = LoadPluginsHelper.LoadedFunctions.FirstOrDefault(x => x.Name.Equals(fNameAttr));
                                if (loadedFunction == null)
                                {
                                    continue;
                                }
                                hasFunctions = true;
                                if (nr == 0)
                                {
                                    ribRowPanel = new RibbonRowPanel();
                                }

                                // В зависимости от размера
                                var btnSizeAttr = func.Attribute("WH")?.Value;
                                if (string.IsNullOrEmpty(btnSizeAttr))
                                {
                                    continue;
                                }
                                #region 16
                                if (btnSizeAttr.Equals("16"))
                                {
                                    lastWasBig = false;

                                    // Если функция имеет "подфункции", то делаем SplitButton
                                    if (func.Elements("SubFunction").Any())
                                    {
                                        // Создаем SplitButton
                                        var risSplitBtn = new RibbonSplitButton
                                        {
                                            Text            = "RibbonSplitButton",
                                            Orientation     = Orientation.Horizontal,
                                            Size            = RibbonItemSize.Standard,
                                            ShowImage       = true,
                                            ShowText        = false,
                                            ListButtonStyle = Autodesk.Private.Windows.RibbonListButtonStyle.SplitButton,
                                            ResizeStyle     = RibbonItemResizeStyles.NoResize,
                                            ListStyle       = RibbonSplitButtonListStyle.List
                                        };

                                        // Добавляем в него первую функцию, которую делаем основной
                                        var ribBtn = RibbonHelpers.AddButton(
                                            loadedFunction.Name,
                                            Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.LName),
                                            GetSmallIcon(loadedFunction),
                                            GetBigIcon(loadedFunction),
                                            Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.Description),
                                            Orientation.Horizontal,
                                            Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.FullDescription),
                                            loadedFunction.ToolTipHelpImage);

                                        risSplitBtn.Items.Add(ribBtn);
                                        risSplitBtn.Current = ribBtn;

                                        // Затем добавляем подфункции
                                        foreach (var subFunc in func.Elements("SubFunction"))
                                        {
                                            if (LoadPluginsHelper.LoadedFunctions.Any(x => x.Name.Equals(subFunc.Attribute("Name")?.Value)))
                                            {
                                                var loadedSubFunction = LoadPluginsHelper.LoadedFunctions
                                                                        .FirstOrDefault(x => x.Name.Equals(subFunc.Attribute("Name")?.Value));
                                                if (loadedSubFunction == null)
                                                {
                                                    continue;
                                                }
                                                risSplitBtn.Items.Add(RibbonHelpers.AddButton(
                                                                          loadedSubFunction.Name,
                                                                          Language.GetFunctionLocalName(loadedSubFunction.Name, loadedSubFunction.LName),
                                                                          GetSmallIcon(loadedSubFunction),
                                                                          GetBigIcon(loadedSubFunction),
                                                                          Language.GetFunctionShortDescription(loadedSubFunction.Name, loadedSubFunction.Description),
                                                                          Orientation.Horizontal,
                                                                          Language.GetFunctionFullDescription(loadedSubFunction.Name, loadedSubFunction.FullDescription),
                                                                          loadedSubFunction.ToolTipHelpImage));
                                            }
                                        }

                                        ribRowPanel.Items.Add(risSplitBtn);
                                    }

                                    // Если в конфигурации меню не прописано наличие подфункций, то проверяем, что они могут быть в самой функции
                                    else if (loadedFunction.SubPluginsNames.Any())
                                    {
                                        // Создаем SplitButton
                                        var risSplitBtn = new RibbonSplitButton
                                        {
                                            Text            = "RibbonSplitButton",
                                            Orientation     = Orientation.Horizontal,
                                            Size            = RibbonItemSize.Standard,
                                            ShowImage       = true,
                                            ShowText        = false,
                                            ListButtonStyle = Autodesk.Private.Windows.RibbonListButtonStyle.SplitButton,
                                            ResizeStyle     = RibbonItemResizeStyles.NoResize,
                                            ListStyle       = RibbonSplitButtonListStyle.List
                                        };

                                        // Добавляем в него первую функцию, которую делаем основной
                                        var ribBtn = RibbonHelpers.AddButton(
                                            loadedFunction.Name,
                                            Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.LName),
                                            GetSmallIcon(loadedFunction),
                                            GetBigIcon(loadedFunction),
                                            Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.Description),
                                            Orientation.Horizontal,
                                            Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.FullDescription),
                                            loadedFunction.ToolTipHelpImage);
                                        risSplitBtn.Items.Add(ribBtn);
                                        risSplitBtn.Current = ribBtn;

                                        // Затем добавляем подфункции
                                        for (int i = 0; i < loadedFunction.SubPluginsNames.Count; i++)
                                        {
                                            risSplitBtn.Items.Add(RibbonHelpers.AddButton(
                                                                      loadedFunction.SubPluginsNames[i],
                                                                      Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.SubPluginsLNames[i], i + 1),
                                                                      GetSmallIconForSubFunction(loadedFunction, i),
                                                                      GetBigIconForSubFunction(loadedFunction, i),
                                                                      Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.SubDescriptions[i], i + 1),
                                                                      Orientation.Horizontal,
                                                                      Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.SubFullDescriptions[i], i + 1),
                                                                      loadedFunction.SubHelpImages[i]));
                                        }

                                        ribRowPanel.Items.Add(risSplitBtn);
                                    }

                                    // Иначе просто добавляем маленькую кнопку
                                    else
                                    {
                                        ribRowPanel.Items.Add(RibbonHelpers.AddSmallButton(
                                                                  loadedFunction.Name,
                                                                  Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.LName),
                                                                  GetSmallIcon(loadedFunction),
                                                                  Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.Description),
                                                                  Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.FullDescription),
                                                                  loadedFunction.ToolTipHelpImage));
                                    }

                                    nr++;
                                    if (nr == 3 | nr == 6)
                                    {
                                        ribRowPanel.Items.Add(new RibbonRowBreak());
                                    }
                                    if (nr == 9)
                                    {
                                        ribSourcePanel.Items.Add(ribRowPanel);
                                        nr = 0;
                                    }
                                }
                                #endregion

                                // Если кнопка большая, то добавляем ее в отдельную Row Panel
                                #region 32
                                if (btnSizeAttr.Equals("32"))
                                {
                                    lastWasBig = true;
                                    if (ribRowPanel.Items.Count > 0)
                                    {
                                        ribSourcePanel.Items.Add(ribRowPanel);
                                        nr = 0;
                                    }

                                    ribRowPanel = new RibbonRowPanel();

                                    // Если функция имеет "подфункции", то делаем SplitButton
                                    if (func.Elements("SubFunction").Any())
                                    {
                                        // Создаем SplitButton
                                        var risSplitBtn = new RibbonSplitButton
                                        {
                                            Text            = "RibbonSplitButton",
                                            Orientation     = Orientation.Vertical,
                                            Size            = RibbonItemSize.Large,
                                            ShowImage       = true,
                                            ShowText        = true,
                                            ListButtonStyle = Autodesk.Private.Windows.RibbonListButtonStyle.SplitButton,
                                            ResizeStyle     = RibbonItemResizeStyles.NoResize,
                                            ListStyle       = RibbonSplitButtonListStyle.List
                                        };

                                        // Добавляем в него первую функцию, которую делаем основной
                                        var ribBtn = RibbonHelpers.AddBigButton(
                                            loadedFunction.Name,
                                            Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.LName),
                                            GetBigIcon(loadedFunction),
                                            Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.Description),
                                            Orientation.Horizontal,
                                            Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.FullDescription),
                                            loadedFunction.ToolTipHelpImage);
                                        risSplitBtn.Items.Add(ribBtn);
                                        risSplitBtn.Current = ribBtn;

                                        // Затем добавляем подфункции
                                        foreach (var subFunc in func.Elements("SubFunction"))
                                        {
                                            if (LoadPluginsHelper.LoadedFunctions.Any(x => x.Name.Equals(subFunc.Attribute("Name")?.Value)))
                                            {
                                                var loadedSubFunction = LoadPluginsHelper.LoadedFunctions.FirstOrDefault(x => x.Name.Equals(subFunc.Attribute("Name")?.Value));
                                                if (loadedSubFunction == null)
                                                {
                                                    continue;
                                                }
                                                risSplitBtn.Items.Add(RibbonHelpers.AddBigButton(
                                                                          loadedSubFunction.Name,
                                                                          Language.GetFunctionLocalName(loadedSubFunction.Name, loadedSubFunction.LName),
                                                                          GetBigIcon(loadedSubFunction),
                                                                          Language.GetFunctionShortDescription(loadedSubFunction.Name, loadedSubFunction.Description),
                                                                          Orientation.Horizontal,
                                                                          Language.GetFunctionFullDescription(loadedSubFunction.Name, loadedSubFunction.FullDescription),
                                                                          loadedSubFunction.ToolTipHelpImage));
                                            }
                                        }

                                        ribRowPanel.Items.Add(risSplitBtn);
                                    }

                                    // Если в конфигурации меню не прописано наличие подфункций, то проверяем, что они могут быть в самой функции
                                    else if (loadedFunction.SubPluginsNames.Any())
                                    {
                                        // Создаем SplitButton
                                        var risSplitBtn = new RibbonSplitButton
                                        {
                                            Text            = "RibbonSplitButton",
                                            Orientation     = Orientation.Vertical,
                                            Size            = RibbonItemSize.Large,
                                            ShowImage       = true,
                                            ShowText        = true,
                                            ListButtonStyle = Autodesk.Private.Windows.RibbonListButtonStyle.SplitButton,
                                            ResizeStyle     = RibbonItemResizeStyles.NoResize,
                                            ListStyle       = RibbonSplitButtonListStyle.List
                                        };

                                        // Добавляем в него первую функцию, которую делаем основной
                                        var ribBtn = RibbonHelpers.AddBigButton(
                                            loadedFunction.Name,
                                            Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.LName),
                                            GetBigIcon(loadedFunction),
                                            Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.Description),
                                            Orientation.Horizontal,
                                            Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.FullDescription),
                                            loadedFunction.ToolTipHelpImage);
                                        risSplitBtn.Items.Add(ribBtn);
                                        risSplitBtn.Current = ribBtn;

                                        // Затем добавляем подфункции
                                        for (int i = 0; i < loadedFunction.SubPluginsNames.Count; i++)
                                        {
                                            risSplitBtn.Items.Add(RibbonHelpers.AddBigButton(
                                                                      loadedFunction.SubPluginsNames[i],
                                                                      Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.SubPluginsLNames[i], i + 1),
                                                                      GetBigIconForSubFunction(loadedFunction, i),
                                                                      Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.SubDescriptions[i], i + 1),
                                                                      Orientation.Horizontal,
                                                                      Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.SubFullDescriptions[i], i + 1),
                                                                      loadedFunction.SubHelpImages[i]));
                                        }

                                        ribRowPanel.Items.Add(risSplitBtn);
                                    }

                                    // Иначе просто добавляем большую кнопку
                                    else
                                    {
                                        RibbonButton ribbonButton = RibbonHelpers.AddBigButton(
                                            loadedFunction.Name,
                                            Language.GetFunctionLocalName(loadedFunction.Name, loadedFunction.LName),
                                            GetBigIcon(loadedFunction),
                                            Language.GetFunctionShortDescription(loadedFunction.Name, loadedFunction.Description),
                                            Orientation.Vertical,
                                            Language.GetFunctionFullDescription(loadedFunction.Name, loadedFunction.FullDescription),
                                            loadedFunction.ToolTipHelpImage);
                                        ribRowPanel.Items.Add(ribbonButton);
                                    }

                                    ribSourcePanel.Items.Add(ribRowPanel);
                                }
                                #endregion
                            }
                        }// foreach functions

                        if (ribRowPanel.Items.Any() & !lastWasBig)
                        {
                            ribSourcePanel.Items.Add(ribRowPanel);
                        }

                        // Если в группе нет функций(например отключены), то не добавляем эту группу
                        if (!hasFunctions)
                        {
                            ribTab.Panels.Remove(ribPanel);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                ExceptionBox.Show(exception);
            }
        }
        private static void AddHelpPanel(RibbonTab ribTab)
        {
            // create the panel source
            var ribSourcePanel = new RibbonPanelSource
            {
                Title = "ModPlus"
            };

            // now the panel
            var ribPanel = new RibbonPanel
            {
                Source = ribSourcePanel
            };

            ribTab.Panels.Add(ribPanel);

            var ribRowPanel = new RibbonRowPanel();

            ribRowPanel.Items.Add(
                RibbonHelpers.AddBigButton(
                    "mpUserInfo",
                    Language.GetItem(LangItem, "h56"),
                    _colorTheme == 1
                        ? "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/UserInfo_32x32.png"
                        : "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/UserInfo_32x32_dark.png",
                    Language.GetItem(LangItem, "h56"),
                    Orientation.Vertical,
                    string.Empty,
                    string.Empty,
                    "help/userinfo"));

            ribRowPanel.Items.Add(
                RibbonHelpers.AddBigButton(
                    "mpSettings",
                    Language.GetItem(LangItem, "h12"),
                    _colorTheme == 1
                    ? "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/HelpBt.png"
                    : "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/HelpBt_dark.png",
                    Language.GetItem(LangItem, "h41"),
                    Orientation.Vertical,
                    Language.GetItem(LangItem, "h42"),
                    string.Empty,
                    "help/mpsettings"));
            ribSourcePanel.Items.Add(ribRowPanel);

            ribRowPanel = new RibbonRowPanel();
            if (LoadFunctionsHelper.HasStampsPlugin(_colorTheme, out var icon))
            {
                ribRowPanel.Items.Add(
                    RibbonHelpers.AddSmallButton(
                        "mpStampFields",
                        Language.GetItem(LangItem, "h43"),
                        icon,
                        Language.GetItem(LangItem, "h44"),
                        Language.GetItem(LangItem, "h45"),
                        string.Empty,
                        "autocadplugins/mpstamps"));
                ribRowPanel.Items.Add(new RibbonRowBreak());
            }

            ribRowPanel.Items.Add(
                RibbonHelpers.AddSmallButton(
                    "mpShowProductIcons",
                    Language.GetItem(LangItem, "h46"),
                    _colorTheme == 1
                        ? "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/mpShowProductIcons_16x16.png"
                        : "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/mpShowProductIcons_16x16_dark.png",
                    Language.GetItem(LangItem, "h37"),
                    Language.GetItem(LangItem, "h38"),
                    "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/mpShowProductIcon.png", "help/mpsettings"));
            ribRowPanel.Items.Add(new RibbonRowBreak());

            ribRowPanel.Items.Add(
                RibbonHelpers.AddSmallButton(
                    "mpHideProductIcons",
                    Language.GetItem(LangItem, "h47"),
                    _colorTheme == 1
                        ? "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/mpHideProductIcons_16x16.png"
                        : "pack://application:,,,/Modplus_" + VersionData.CurrentCadVersion + ";component/Resources/mpHideProductIcons_16x16_dark.png",
                    Language.GetItem(LangItem, "h39"),
                    string.Empty,
                    string.Empty,
                    "help/mpsettings"));
            ribSourcePanel.Items.Add(ribRowPanel);
        }