Sic07/FrameworkLocal/UICore/View/Common/ParameterView.xaml.cs

218 lines
7.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.Navigation;
using System.Windows.Shapes;
using Aitex.Core.RT.Log;
using System.Xml;
using Aitex.Core.RT.ConfigCenter;
using Aitex.Core.UI.View.Frame;
namespace Aitex.Core.UI.View.Common
{
/// <summary>
/// Interaction logic for ParameterView.xaml
/// </summary>
public partial class ParameterView : UserControl
{
bool _isLoaded;
ParameterViewModel _vm;
string _gridEditorOldValue;
bool _isGridModified;
public ParameterView()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(ParameterView_Loaded);
}
void ParameterView_Loaded(object sender, RoutedEventArgs e)
{
//set permission
this.IsEnabled = true;
this.Name = "Parameter";
Account.ViewPermission viewPermission; // chaossong@add 20160414 for permission
if (ViewManager.LoginAccount != null)
viewPermission = ViewManager.LoginAccount.Permission[this.Name];
else
viewPermission = Account.ViewPermission.FullyControl;
switch (viewPermission)
{
case Account.ViewPermission.FullyControl:
btnResetParam.IsEnabled = true;
btnSaveParam.IsEnabled = true;
dataGrid1.IsEnabled = true;
break;
default:
btnResetParam.IsEnabled = false;
btnSaveParam.IsEnabled = false;
dataGrid1.IsEnabled = false;
break;
}
if (_isLoaded)
return;
_vm = DataContext as ParameterViewModel;
if (_vm == null)
throw new ApplicationException("系统配置页面没有设置DataContext需要在窗口创建之前设置初始配置数据");
InitTree();
_isLoaded = true;
}
void InitTree()
{
treeView1.Items.Clear();
List<KeyValuePair<string, string>> lstSections = _vm.GetSectionList();
foreach (KeyValuePair<string, string> item in lstSections)
{
var fNode = new TreeViewFolderItem(item.Key);
fNode.Tag = item;
fNode.Selected += new RoutedEventHandler(sectionNode_Selected);
treeView1.Items.Add(fNode);
}
}
void sectionNode_Selected(object sender, RoutedEventArgs e)
{
var selectedNode = sender as TreeViewFolderItem;
if (selectedNode == null)
return;
if (_isGridModified)
{
if (MessageBox.Show("是否需要保存未存盘的参数?", "未保存", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
btnSaveParam_Click(null, null);
}
else
{
_isGridModified = false;
}
}
KeyValuePair<string, string> keyPair = (KeyValuePair<string, string>)selectedNode.Tag;
labelTile.Content = keyPair.Key;
dataGrid1.Tag = keyPair.Value;
dataGrid1.ItemsSource = _vm.GetConfigEntries(keyPair.Value);
}
private void GridEditor_LostFocus(object sender, RoutedEventArgs e)
{
TextBox tb = (sender as TextBox);
if (tb != null)
_isGridModified = tb.Text != _gridEditorOldValue;
}
private void GridEditor_GotFocus(object sender, RoutedEventArgs e)
{
TextBox tb = (sender as TextBox);
if (tb != null)
_gridEditorOldValue = tb.Text;
}
private void btnSaveParam_Click(object sender, RoutedEventArgs e)
{
_isGridModified = false;
string reason;
if (!VerifyInputData(out reason))
{
MessageBox.Show(reason, "Aitex", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
string xpath = dataGrid1.Tag as string;
if (_vm.SaveConfigSection(xpath.Substring(xpath.IndexOf("'") + 1, xpath.LastIndexOf("'") - xpath.IndexOf("'")-1), dataGrid1.ItemsSource as List<ConfigEntry>))
MessageBox.Show("设定值保存成功!", "Aitex", MessageBoxButton.OK, MessageBoxImage.Information);
else
MessageBox.Show("设定值保存失败!", "Aitex", MessageBoxButton.OK, MessageBoxImage.Error);
btnResetParam_Click(null, null);
}
private void btnResetParam_Click(object sender, RoutedEventArgs e)
{
dataGrid1.ItemsSource = _vm.GetConfigEntries(dataGrid1.Tag as string);
}
private bool VerifyInputData(out string reason)
{
bool ret = true;
dataGrid1.CancelEdit();
var entryList = this.dataGrid1.ItemsSource.Cast<object>();
reason = string.Empty;
foreach (ConfigEntry entry in entryList)
{
try
{
var inputText = entry.Value;
var typeText = entry.Type;
var minText = entry.RangeLowLimit;
var maxText = entry.RangeUpLimit;
if (string.IsNullOrEmpty(inputText))
continue;
if (String.Compare(typeText, "Int32", true) == 0)
{
int res = 0;
if (!int.TryParse(inputText, out res))
throw new Exception();
int min = Convert.ToInt32(minText);
int max = Convert.ToInt32(maxText);
if (res < min || res > max)
{
ret = false;
reason += string.Format("{0} 输入值错误!\n", entry.Description);
var textBlock = dataGrid1.Columns[7].GetCellContent(entry) as System.Windows.Controls.TextBlock;
if (textBlock != null)
textBlock.Background = Brushes.Red;
}
}
else if (String.Compare(typeText, "Double", true) == 0)
{
double res = 0;
if (!double.TryParse(inputText, out res))
throw new Exception();
double min = Convert.ToDouble(minText);
double max = Convert.ToDouble(maxText);
if (res < min || res > max)
{
ret = false;
reason += string.Format("{0} 输入值错误!\n", entry.Description);
var textBlock = dataGrid1.Columns[7].GetCellContent(entry) as System.Windows.Controls.TextBlock;
if (textBlock != null)
textBlock.Background = Brushes.Red;
}
}
}
catch (Exception)
{
reason += string.Format("{0} 输入值错误!\n", entry.Description);
ret = false;
}
}
return ret;
}
}
}