using HMI.AlarmInfoManage.Entity;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util;
using log4net;
using Microsoft.Win32;
using NPOI.SS.Formula.Functions;
using Panuon.WPF.UI;
using System;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace HMI.AlarmInfoManage
{
///
/// AlarmSettingList.xaml 的交互逻辑
///
public partial class AlarmSettingList : WindowX
{
private ILog log;
public AlarmSettingList(string blockFile, string markFile, ObservableCollection datasource,
ObservableCollection markDatasource,
ILog log)
{
this.blockFile = blockFile;
this.markFile = markFile;
Datasource = datasource;
MarkDatasource = markDatasource;
this.log = log;
DataContext = this;
InitializeComponent();
}
private readonly string blockFile;
private readonly string markFile;
private ObservableCollection datasource;
public ObservableCollection Datasource
{
get => datasource;
set { Set(ref datasource, value); }
}
private ObservableCollection markDatasource;
public ObservableCollection MarkDatasource
{
get => markDatasource;
set { Set(ref markDatasource, value); }
}
private ObservableCollection items =
new ObservableCollection { LangUtil.Get("Alm.DbBlockAlarm"), LangUtil.Get("Alm.TagAlarm") };
public ObservableCollection Items
{
get => items;
set { Set(ref items, value); }
}
private int itemIndex;
public int ItemIndex
{
get => itemIndex;
set
{
Set(ref itemIndex, value);
LoadData();
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
AlarmSetting data = btn?.Tag as AlarmSetting;
switch (btn.Name)
{
case "refreshBtn":
LoadData();
break;
case "addBtn":
AddData(new AlarmSetting());
break;
case "delBatchBtn":
DeleteBatchData();
break;
case "editBtn":
EditData(ItemIndex == 0 ? Datasource.IndexOf(data) : MarkDatasource.IndexOf(data), data);
break;
case "exportBtn":
ExportData();
break;
case "importBtn":
ImportData();
break;
case "delBtn":
DeleteData(ItemIndex == 0 ? Datasource.IndexOf(data) : MarkDatasource.IndexOf(data));
break;
default:
break;
}
}
private void LoadData()
{
try
{
if (File.Exists(blockFile))
{
Datasource =
XmlHelper.DeserializeFromXml>(blockFile);
}
else
{
Datasource = new ObservableCollection();
}
}
catch (Exception ex)
{
Datasource = new ObservableCollection();
ToastHelper.Error(this, $"{this.lang("App.LoadFailed")}: {ex.Message}");
}
try
{
if (File.Exists(markFile))
{
MarkDatasource =
XmlHelper.DeserializeFromXml>(markFile);
}
else
{
MarkDatasource = new ObservableCollection();
}
}
catch (Exception ex)
{
MarkDatasource = new ObservableCollection();
ToastHelper.Error(this, $"{this.lang("App.LoadFailed")}: {ex.Message}");
}
}
private void AddData(AlarmSetting data)
{
try
{
var file = ItemIndex == 0 ? blockFile : markFile;
var temp = ItemIndex == 0 ? this.lang("Alm.DbBlockAlarm") : this.lang("Alm.TagAlarm");
var modal = new AlarmSettingModal(log)
{
Title = $"{this.lang("App.Add")}{temp}",
Owner = Window.GetWindow(this),
};
if (modal.Open(-1, data, ItemIndex == 0 ? Datasource : MarkDatasource, file, ItemIndex != 0) == true)
{
LoadData();
}
}
catch (Exception ex)
{
log.Error("Add AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"{this.lang("App.AddFailed")}: {ex.Message}");
}
}
private void EditData(int index, AlarmSetting data)
{
try
{
var file = ItemIndex == 0 ? blockFile : markFile;
var temp = ItemIndex == 0 ? this.lang("Alm.DbBlockAlarm") : this.lang("Alm.TagAlarm");
var modal = new AlarmSettingModal(log)
{
Title = $"{this.lang("App.Edit")}{temp}",
Owner = Window.GetWindow(this),
};
if (modal.Open(index, data, ItemIndex == 0 ? Datasource : MarkDatasource, file, ItemIndex != 0) == true)
{
LoadData();
}
}
catch (Exception ex)
{
log.Error("Edit AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"{this.lang("App.EditFailed")}: {ex.Message}");
}
}
private void ExportData()
{
try
{
SaveFileDialog sfd = new SaveFileDialog
{
FileName = ItemIndex == 0 ? "DB块报警.xls" : "标志位报警.xls",
Filter = "Excel|*.xls"
};
if (sfd.ShowDialog() == true)
{
ExcelHelper.ExportExcel(sfd.FileName, ItemIndex == 0 ? Datasource : MarkDatasource);
}
}
catch (Exception ex)
{
log.Error("Export Failed.", ex);
ToastHelper.Error(this, $"{this.lang("App.ExportFailed")}: {ex.Message}");
}
}
private void ImportData()
{
try
{
OpenFileDialog ofd = new OpenFileDialog
{
Filter = "Excel|*.xls"
};
if (ofd.ShowDialog() == true)
{
var datasource = new ObservableCollection(
ExcelHelper.ReadFromExcel(ofd.FileName));
if (ItemIndex == 0)
{
Datasource = datasource;
}
else
{
MarkDatasource = datasource;
}
var file = ItemIndex == 0 ? blockFile : markFile;
var temp = ItemIndex == 0 ? Datasource : MarkDatasource;
XmlHelper.SerializeToXml(file, temp);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Import Failed.", ex);
ToastHelper.Error(this, $"{this.lang("App.ImportFailed")}: {ex.Message}");
}
}
private void DeleteData(int index)
{
try
{
if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), this.lang("HMI.MakeSureDeleteThis")) == MessageBoxResult.OK)
{
var file = ItemIndex == 0 ? blockFile : markFile;
var temp = XmlHelper.DeepClone(ItemIndex == 0 ? Datasource : MarkDatasource);
temp.RemoveAt(index);
XmlHelper.SerializeToXml(file, temp);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Delete AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}");
}
}
private void DeleteBatchData()
{
try
{
var temp = (ItemIndex == 0 ? Datasource : MarkDatasource).Where(e => e.IsSelected).ToList();
if (temp == null || temp.Count <= 0)
{
ToastHelper.Warning(Window.GetWindow(this), this.lang("HMI.NoDeleteData"));
return;
}
if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), this.lang("HMI.MakeSureDeletes", temp.Count))
== MessageBoxResult.OK)
{
var file = ItemIndex == 0 ? blockFile : markFile;
temp = (ItemIndex == 0 ? Datasource : MarkDatasource).Where(e => !e.IsSelected).ToList();
XmlHelper.SerializeToXml(file, temp);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Delete Batch AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}");
}
}
private void WindowX_Loaded(object sender, RoutedEventArgs e)
{
ItemIndex = 0;
Loaded -= WindowX_Loaded;
}
}
}