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);
}
}
}
}