public static ToolButtonGroup LoadFromXml(XmlElement node)
        {
            if (node.Attributes["title"] == null ||
                node.Attributes["imageIndex"] == null)
            {
                return(null);
            }
            var group = new ToolButtonGroup
            {
                Title      = node.Attributes["title"].Value,
                ImageIndex = node.Attributes["imageIndex"].Value.ToInt()
            };
            var buttonTypeAttr = node.Attributes["buttonType"];

            if (buttonTypeAttr != null)
            {
                group.ButtonType =
                    (ChartToolButtonSettings.ToolButtonType)
                    Enum.Parse(typeof(ChartToolButtonSettings.ToolButtonType), buttonTypeAttr.Value);
            }
            return(group);
        }
        private bool LoadSettings()
        {
            groups.Clear();
            selButtons.Clear();
            selSystemButtons.Clear();
            var nodeToolSets = ToolSettingsStorageFile.LoadNode(ToolSettingsStorageFile.NodeNameToolButtons);

            if (nodeToolSets == null)
            {
                return(false);
            }

            var nodeGroups = nodeToolSets.ChildNodes.Cast <XmlNode>().FirstOrDefault(n => n.Name == "groups");

            if (nodeGroups != null)
            {
                foreach (XmlElement node in nodeGroups.ChildNodes)
                {
                    var group = ToolButtonGroup.LoadFromXml(node);
                    if (group != null)
                    {
                        groups.Add(group);
                    }
                }
            }

            // todo: simplify to one tag-container "buttons"
            // кнопки графика
            var nodeIndex   = 0; // 4 log
            var nodeButtons = nodeToolSets.ChildNodes.Cast <XmlNode>().FirstOrDefault(n => n.Name == "buttons");

            if (nodeButtons == null)
            {
                return(false);
            }
            foreach (XmlElement node in nodeButtons.ChildNodes)
            {
                nodeIndex++;
                try
                {
                    var btn = ChartToolButtonSettings.LoadFromXml(node, groups, ChartToolButtonSettings.ToolButtonType.Chart);
                    if (btn == null)
                    {
                        continue;
                    }

                    // поддержка старых версий файлов (установка функции кнупки по названию)
                    if (btn.ButtonType == ChartToolButtonSettings.ToolButtonType.Chart && btn.Tool == CandleChartControl.ChartTool.None)
                    {
                        var toolButton = allButtons.FirstOrDefault(b => b.ButtonType == ChartToolButtonSettings.ToolButtonType.Chart && b.Title == btn.Title);
                        if (toolButton != null)
                        {
                            btn.Tool = toolButton.Tool;
                        }
                    }

                    selButtons.Add(btn);
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("Ошибка загрузки кнопки графика {0}: {1}", nodeIndex, ex);
                }
            }

            // кнопки терминала
            nodeIndex   = 0;
            nodeButtons = nodeToolSets.ChildNodes.Cast <XmlNode>().FirstOrDefault(n => n.Name == "systembuttons");
            if (nodeButtons == null)
            {
                return(false);
            }
            foreach (XmlElement node in nodeButtons.ChildNodes)
            {
                nodeIndex++;
                try
                {
                    var btn = ChartToolButtonSettings.LoadFromXml(node, groups, ChartToolButtonSettings.ToolButtonType.System);
                    if (btn == null)
                    {
                        continue;
                    }

                    // поддержка старых версий файлов (установка функции кнупки по названию)
                    if (btn.ButtonType == ChartToolButtonSettings.ToolButtonType.Chart && btn.Tool == CandleChartControl.ChartTool.None)
                    {
                        var toolButton = allButtons.FirstOrDefault(b => b.ButtonType == ChartToolButtonSettings.ToolButtonType.System && b.Title == btn.Title);
                        if (toolButton != null)
                        {
                            btn.SystemTool = toolButton.SystemTool;
                        }
                    }

                    selSystemButtons.Add(btn);
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("Ошибка загрузки терминальной кнопки {0}: {1}", nodeIndex, ex);
                }
            }

            // set localized title
            var buttons = new List <ChartToolButtonSettings>();

            buttons.AddRange(selButtons);
            buttons.AddRange(selSystemButtons);
            foreach (var btn in buttons)
            {
                var storageButton =
                    allButtons.FirstOrDefault(
                        b => b.ButtonType == btn.ButtonType && b.Tool == btn.Tool && b.SystemTool == btn.SystemTool);
                if (storageButton != null)
                {
                    btn.Title = storageButton.Title;
                }
            }

            return(true);
        }