using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Xml; using Aitex.UI.Charting.ViewModel; using System.Reflection; using System.IO; using DataAnalysisControl.Core; namespace Aitex.UI.Charting.View { /// /// Interaction logic for LoadPresetDataDialog.xaml /// public partial class LoadPresetDataDialog : Window { public LoadPresetDataDialog() { InitializeComponent(); DataSets = new System.Collections.ObjectModel.ObservableCollection(); Loaded += new RoutedEventHandler(LoadPresetDataDialog_Loaded); } void LoadPresetDataDialog_Loaded(object sender, RoutedEventArgs e) { try { string cfgFilePath = Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml"; System.IO.FileInfo fi = new System.IO.FileInfo(cfgFilePath); if (!fi.Directory.Exists) fi.Directory.Create(); if (!fi.Exists) { //create default xml configuration file Assembly assem = this.GetType().Assembly; Stream stream = assem.GetManifestResourceStream("DataAnalysisControl.Charting.View.ChartingPresetSetting.xml"); int length = (int)stream.Length; byte[] arr = new byte[length]; stream.Read(arr, 0, length); var xmlStr = ASCIIEncoding.UTF8.GetString(arr); XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlStr); doc.Save(cfgFilePath); } { DataSets.Clear(); var doc = new XmlDocument(); doc.Load(Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml"); foreach (XmlElement item in doc.SelectNodes("/Aitex/DataPreset/Data")) { string displayNameStr = item.HasAttribute("Name") ? item.Attributes["Name"].Value : ""; string createTimeStr = item.HasAttribute("CreateTime") ? item.Attributes["CreateTime"].Value : ""; if (string.IsNullOrEmpty(createTimeStr)) createTimeStr = DateTime.Now.ToString(); DataSets.Add(new PresetDataItem() { Name = displayNameStr, CreateTime = createTimeStr }); } } } catch (Exception ex) { CONTEXT.WriteLog(ex); } grid1.DataContext = this; } public class PresetDataItem { public string Name { get; set; } public string CreateTime { get; set; } } public System.Collections.ObjectModel.ObservableCollection DataSets { get; set; } private void OnLoadData(object sender, RoutedEventArgs e) { try { string settingName = (string)((Button)sender).Tag; var doc = new XmlDocument(); doc.Load(Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml"); foreach (XmlElement item in doc.SelectNodes(string.Format("/Aitex/DataPreset/Data[@Name='{0}']/Item", settingName))) { //preset new item's color,line width, etc string displayNameStr = item.HasAttribute("DisplayName") ? item.Attributes["DisplayName"].Value : ""; string dataName = item.InnerText; string lineColorStr = item.HasAttribute("LineColor") ? item.Attributes["LineColor"].Value : "#FF000000"; string factorStr = item.HasAttribute("Factor") ? item.Attributes["Factor"].Value : "1.0"; string offsetStr = item.HasAttribute("Offset") ? item.Attributes["Offset"].Value : "0.0"; string lineWidthStr = item.HasAttribute("LineWidth") ? item.Attributes["LineWidth"].Value : "1"; var viewModel = CommonViewModel.Instance; var source = viewModel.CurrentSelectedDataSource; if (source == null) { Close(); return; } bool isDataNameLoaded = false; if (source.Datas.ContainsKey(dataName)) { foreach (MyLineSeries item1 in viewModel.RenderableSeries) { if (item1.DataSource == source && item1.SeriesName == dataName) { isDataNameLoaded = true; break; } } } if (!isDataNameLoaded) viewModel.AddDataSeries(source.Title, dataName, displayNameStr, (Color)ColorConverter.ConvertFromString(lineColorStr), Convert.ToSingle(factorStr), Convert.ToSingle(offsetStr), (int)(Convert.ToDouble(lineWidthStr) + 0.5)); } Close(); } catch (Exception ex) { CONTEXT.WriteLog(ex); } } private void OnDeleteData(object sender, RoutedEventArgs e) { string settingName = (string)((Button)sender).Tag; if (MessageBox.Show(string.Format("是否删除预设值的数据组'{0}'?", settingName), "预设值数据", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { try { var doc = new XmlDocument(); var fileName = Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml"; doc.Load(fileName); var itemNode = doc.SelectSingleNode(string.Format("/Aitex/DataPreset/Data[@Name='{0}']", settingName)); if (itemNode != null) itemNode.ParentNode.RemoveChild(itemNode); doc.Save(fileName); LoadPresetDataDialog_Loaded(null, null); } catch (Exception ex) { CONTEXT.WriteLog(ex); } } } private void textBox1_TextChanged(object sender, TextChangedEventArgs e) { button1.IsEnabled = !string.IsNullOrEmpty(textBox1.Text); } private void SaveCurrentSeriesConfiguration_Click(object sender, RoutedEventArgs e) { try { string presetName = textBox1.Text; var doc = new XmlDocument(); var fileName = Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml"; doc.Load(fileName); var testNode = doc.SelectSingleNode(string.Format("/Aitex/DataPreset/Data[@Name='{0}']", presetName)); if (testNode != null) { if (MessageBox.Show(string.Format("预设名称‘{0}’已存在,是否覆盖?", presetName), "保存设置", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) return; testNode.ParentNode.RemoveChild(testNode); } var newNode = doc.CreateElement("Data"); doc.SelectSingleNode("/Aitex/DataPreset").AppendChild(newNode); newNode.SetAttribute("Name", presetName); newNode.SetAttribute("CreateTime", DateTime.Now.ToString()); List dataName = new List(); foreach (MyLineSeries series in CommonViewModel.Instance.RenderableSeries) { if (dataName.Contains(series.SeriesName)) continue; var itemNode = doc.CreateElement("Item"); newNode.AppendChild(itemNode); itemNode.SetAttribute("DisplayName", series.DisplayName); itemNode.SetAttribute("LineColor", series.SeriesColor.ToString()); itemNode.SetAttribute("Factor", series.Factor.ToString()); itemNode.SetAttribute("Offset", series.Offset.ToString()); itemNode.SetAttribute("LineWidth", series.LineThickness.ToString()); itemNode.InnerText = series.SeriesName; dataName.Add(series.SeriesName); } doc.Save(fileName); LoadPresetDataDialog_Loaded(null, null); Close(); } catch (Exception ex) { CONTEXT.WriteLog(ex); } } } }