LoadPresetDataDialog.xaml.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Shapes;
  13. using System.Xml;
  14. using Aitex.UI.Charting.ViewModel;
  15. using System.Reflection;
  16. using System.IO;
  17. using DataAnalysisControl.Core;
  18. namespace Aitex.UI.Charting.View
  19. {
  20. /// <summary>
  21. /// Interaction logic for LoadPresetDataDialog.xaml
  22. /// </summary>
  23. public partial class LoadPresetDataDialog : Window
  24. {
  25. public LoadPresetDataDialog()
  26. {
  27. InitializeComponent();
  28. DataSets = new System.Collections.ObjectModel.ObservableCollection<PresetDataItem>();
  29. Loaded += new RoutedEventHandler(LoadPresetDataDialog_Loaded);
  30. }
  31. void LoadPresetDataDialog_Loaded(object sender, RoutedEventArgs e)
  32. {
  33. try
  34. {
  35. string cfgFilePath = Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml";
  36. System.IO.FileInfo fi = new System.IO.FileInfo(cfgFilePath);
  37. if (!fi.Directory.Exists)
  38. fi.Directory.Create();
  39. if (!fi.Exists)
  40. {
  41. //create default xml configuration file
  42. Assembly assem = this.GetType().Assembly;
  43. Stream stream = assem.GetManifestResourceStream("DataAnalysisControl.Charting.View.ChartingPresetSetting.xml");
  44. int length = (int)stream.Length;
  45. byte[] arr = new byte[length];
  46. stream.Read(arr, 0, length);
  47. var xmlStr = ASCIIEncoding.UTF8.GetString(arr);
  48. XmlDocument doc = new XmlDocument();
  49. doc.LoadXml(xmlStr);
  50. doc.Save(cfgFilePath);
  51. }
  52. {
  53. DataSets.Clear();
  54. var doc = new XmlDocument();
  55. doc.Load(Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml");
  56. foreach (XmlElement item in doc.SelectNodes("/Aitex/DataPreset/Data"))
  57. {
  58. string displayNameStr = item.HasAttribute("Name") ? item.Attributes["Name"].Value : "";
  59. string createTimeStr = item.HasAttribute("CreateTime") ? item.Attributes["CreateTime"].Value : "";
  60. if (string.IsNullOrEmpty(createTimeStr))
  61. createTimeStr = DateTime.Now.ToString();
  62. DataSets.Add(new PresetDataItem() { Name = displayNameStr, CreateTime = createTimeStr });
  63. }
  64. }
  65. }
  66. catch (Exception ex)
  67. {
  68. CONTEXT.WriteLog(ex);
  69. }
  70. grid1.DataContext = this;
  71. }
  72. public class PresetDataItem
  73. {
  74. public string Name { get; set; }
  75. public string CreateTime { get; set; }
  76. }
  77. public System.Collections.ObjectModel.ObservableCollection<PresetDataItem> DataSets { get; set; }
  78. private void OnLoadData(object sender, RoutedEventArgs e)
  79. {
  80. try
  81. {
  82. string settingName = (string)((Button)sender).Tag;
  83. var doc = new XmlDocument();
  84. doc.Load(Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml");
  85. foreach (XmlElement item in doc.SelectNodes(string.Format("/Aitex/DataPreset/Data[@Name='{0}']/Item", settingName)))
  86. {
  87. //preset new item's color,line width, etc
  88. string displayNameStr = item.HasAttribute("DisplayName") ? item.Attributes["DisplayName"].Value : "";
  89. string dataName = item.InnerText;
  90. string lineColorStr = item.HasAttribute("LineColor") ? item.Attributes["LineColor"].Value : "#FF000000";
  91. string factorStr = item.HasAttribute("Factor") ? item.Attributes["Factor"].Value : "1.0";
  92. string offsetStr = item.HasAttribute("Offset") ? item.Attributes["Offset"].Value : "0.0";
  93. string lineWidthStr = item.HasAttribute("LineWidth") ? item.Attributes["LineWidth"].Value : "1";
  94. var viewModel = CommonViewModel.Instance;
  95. var source = viewModel.CurrentSelectedDataSource;
  96. if (source == null)
  97. {
  98. Close();
  99. return;
  100. }
  101. bool isDataNameLoaded = false;
  102. if (source.Datas.ContainsKey(dataName))
  103. {
  104. foreach (MyLineSeries item1 in viewModel.RenderableSeries)
  105. {
  106. if (item1.DataSource == source && item1.SeriesName == dataName)
  107. {
  108. isDataNameLoaded = true;
  109. break;
  110. }
  111. }
  112. }
  113. if (!isDataNameLoaded)
  114. viewModel.AddDataSeries(source.Title, dataName, displayNameStr, (Color)ColorConverter.ConvertFromString(lineColorStr), Convert.ToSingle(factorStr), Convert.ToSingle(offsetStr), (int)(Convert.ToDouble(lineWidthStr) + 0.5));
  115. }
  116. Close();
  117. }
  118. catch (Exception ex)
  119. {
  120. CONTEXT.WriteLog(ex);
  121. }
  122. }
  123. private void OnDeleteData(object sender, RoutedEventArgs e)
  124. {
  125. string settingName = (string)((Button)sender).Tag;
  126. if (MessageBox.Show(string.Format("是否删除预设值的数据组'{0}'?", settingName), "预设值数据", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
  127. {
  128. try
  129. {
  130. var doc = new XmlDocument();
  131. var fileName = Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml";
  132. doc.Load(fileName);
  133. var itemNode = doc.SelectSingleNode(string.Format("/Aitex/DataPreset/Data[@Name='{0}']", settingName));
  134. if (itemNode != null)
  135. itemNode.ParentNode.RemoveChild(itemNode);
  136. doc.Save(fileName);
  137. LoadPresetDataDialog_Loaded(null, null);
  138. }
  139. catch (Exception ex)
  140. {
  141. CONTEXT.WriteLog(ex);
  142. }
  143. }
  144. }
  145. private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
  146. {
  147. button1.IsEnabled = !string.IsNullOrEmpty(textBox1.Text);
  148. }
  149. private void SaveCurrentSeriesConfiguration_Click(object sender, RoutedEventArgs e)
  150. {
  151. try
  152. {
  153. string presetName = textBox1.Text;
  154. var doc = new XmlDocument();
  155. var fileName = Environment.GetEnvironmentVariable("APPDATA") + "\\DataAnalysis\\ChartingPresetSetting.xml";
  156. doc.Load(fileName);
  157. var testNode = doc.SelectSingleNode(string.Format("/Aitex/DataPreset/Data[@Name='{0}']", presetName));
  158. if (testNode != null)
  159. {
  160. if (MessageBox.Show(string.Format("预设名称‘{0}’已存在,是否覆盖?", presetName), "保存设置", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
  161. return;
  162. testNode.ParentNode.RemoveChild(testNode);
  163. }
  164. var newNode = doc.CreateElement("Data");
  165. doc.SelectSingleNode("/Aitex/DataPreset").AppendChild(newNode);
  166. newNode.SetAttribute("Name", presetName);
  167. newNode.SetAttribute("CreateTime", DateTime.Now.ToString());
  168. List<string> dataName = new List<string>();
  169. foreach (MyLineSeries series in CommonViewModel.Instance.RenderableSeries)
  170. {
  171. if (dataName.Contains(series.SeriesName))
  172. continue;
  173. var itemNode = doc.CreateElement("Item");
  174. newNode.AppendChild(itemNode);
  175. itemNode.SetAttribute("DisplayName", series.DisplayName);
  176. itemNode.SetAttribute("LineColor", series.SeriesColor.ToString());
  177. itemNode.SetAttribute("Factor", series.Factor.ToString());
  178. itemNode.SetAttribute("Offset", series.Offset.ToString());
  179. itemNode.SetAttribute("LineWidth", series.LineThickness.ToString());
  180. itemNode.InnerText = series.SeriesName;
  181. dataName.Add(series.SeriesName);
  182. }
  183. doc.Save(fileName);
  184. LoadPresetDataDialog_Loaded(null, null);
  185. Close();
  186. }
  187. catch (Exception ex)
  188. {
  189. CONTEXT.WriteLog(ex);
  190. }
  191. }
  192. }
  193. }