private void BtnUpdateSeriesClick(object sender, EventArgs e)
        {
            if (panelSeriesParams.Controls.Count == 0)
            {
                return;
            }
            var node = treeSeries.SelectedNode;

            if (node == null)
            {
                return;
            }

            // изменить настройки для серии
            foreach (GenericObjectEditor ctrl in panelSeriesParams.Controls)
            {
                var propInf = (PropertyInfo)ctrl.Tag;
                try
                {
                    propInf.SetValue(null, ctrl.PropertyValue, null);
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("Update series value ({0}) error: {1}",
                                       ctrl.Title, ex);
                    MessageBox.Show(string.Format(Localizer.GetString("MessageValueNotRecognizedFmt"), ctrl.Title));
                }
            }

            // сохранить настройки
            var nodeXml = ToolSettingsStorageFile.LoadOrCreateNode(ToolSettingsStorageFile.NodeNameSeries);

            CandleChartControl.SaveSeriesSettingsInXml(nodeXml);
            ToolSettingsStorageFile.SaveXml(nodeXml.OwnerDocument);
        }
        private void SaveTemplates()
        {
            // получить узел шаблонов
            var nodeTemplate =
                ToolSettingsStorageFile.LoadOrCreateNode(ToolSettingsStorageFile.NodeNameMessageTemplates);

            // и почистить его
            while (nodeTemplate.HasChildNodes)
            {
                nodeTemplate.RemoveChild(nodeTemplate.FirstChild);
            }
            // сохранить шаблоны
            foreach (var templ in messageTemplate)
            {
                var templNode = nodeTemplate.AppendChild(nodeTemplate.OwnerDocument.CreateElement("template"));
                templNode.Attributes.Append(nodeTemplate.OwnerDocument.CreateAttribute("name")).Value = templ.Key;
                templNode.InnerText = templ.Value;
            }
            // сохранить документ
            ToolSettingsStorageFile.SaveXml(nodeTemplate.OwnerDocument);
        }
        public void SaveScripts()
        {
            // получить узел скриптов
            var nodeScript =
                ToolSettingsStorageFile.LoadOrCreateNode(ToolSettingsStorageFile.NodeNameScripts);

            // и почистить его
            while (nodeScript.HasChildNodes)
            {
                nodeScript.RemoveChild(nodeScript.FirstChild);
            }
            // сохранить скрипты
            if (scripts != null)
            {
                foreach (var script in scripts)
                {
                    script.SaveInXml(nodeScript);
                }
            }
            // сохранить документ
            ToolSettingsStorageFile.SaveXml(nodeScript.OwnerDocument);
        }
        /// <summary>
        /// вспомогательный метод, нопосредствено сохраняющий/пересохраняющий шаблон
        /// </summary>
        /// <param name="templateNode">XmlElement представляющий описание шаблона</param>
        /// <param name="doc">XmlDocument, в который нужно записать орисание шаблона</param>
        private void SaveTemplate(XmlElement templateNode, XmlDocument doc)
        {
            if (templateNode != null && templateNode.OwnerDocument != null)
            {
                var xmlAttrTicker = templateNode.OwnerDocument.CreateAttribute(ChartTemplate.AttributeSymbol);
                xmlAttrTicker.Value = chbxBindCurrencyTicket.Checked
                                          ? txtCurrentTickerValue.Text
                                          : ChartTemplate.UniversalSymbol;
                templateNode.Attributes.Append(xmlAttrTicker);

                var xmlAttrChartType = templateNode.OwnerDocument.CreateAttribute(ChartTemplate.AttributeChartType);
                xmlAttrChartType.Value = chart.chart.ChartType.ToString();
                templateNode.Attributes.Append(xmlAttrChartType);

                var xmlAttrName = templateNode.OwnerDocument.CreateAttribute(ChartTemplate.AttributeName);
                xmlAttrName.Value = cbTemplateName.Text;
                templateNode.Attributes.Append(xmlAttrName);

                if (chbxSaveChartSettings.Checked)
                {
                    var xmlAttrSize = templateNode.OwnerDocument.CreateAttribute(ChartTemplate.AttributeChartSize);
                    xmlAttrSize.Value = string.Format("{0};{1}", chart.Parent.Size.Width, chart.Parent.Size.Height);
                    templateNode.Attributes.Append(xmlAttrSize);
                }

                if (chebxSaveIndicators.Checked)
                {
                    foreach (var indcator in chart.indicators)
                    {
                        var indicatorNode = (XmlElement)templateNode.AppendChild(doc.CreateElement(ToolSettingsStorageFile.NodeNameChartTemplateIndicator));
                        BaseChartIndicator.MakeIndicatorXMLNode(indcator, indicatorNode);
                    }
                }

                ToolSettingsStorageFile.SaveXml(doc);
            }
        }