using HMI.Core.Entity;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util;
using HMI.Util.Alarm;
using log4net;
using Microsoft.Win32;
using Panuon.WPF.UI;
using System;
using System.Collections.ObjectModel;
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(ILog log)
{
BlockDatasource = AlarmUtil.BlockSettings;
MarkDatasource = AlarmUtil.MarkSettings;
this.log = log;
DataContext = this;
InitializeComponent();
}
private ObservableCollection blockDatasource;
public ObservableCollection BlockDatasource
{
get => blockDatasource;
set { Set(ref blockDatasource, 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 ? BlockDatasource.IndexOf(data) : MarkDatasource.IndexOf(data), data);
break;
case "exportBtn":
ExportData();
break;
case "importBtn":
ImportData();
break;
case "delBtn":
DeleteData(ItemIndex == 0 ? BlockDatasource.IndexOf(data) : MarkDatasource.IndexOf(data));
break;
default:
break;
}
}
private void LoadData()
{
BlockDatasource = AlarmUtil.BlockSettings;
MarkDatasource = AlarmUtil.MarkSettings;
}
private void AddData(AlarmSetting data)
{
try
{
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 ? BlockDatasource : MarkDatasource, 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 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 ? BlockDatasource : MarkDatasource, 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 ? BlockDatasource : 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)
{
AlarmUtil.UpdateBlockSettings(datasource);
BlockDatasource = AlarmUtil.BlockSettings;
}
else
{
AlarmUtil.UpdateMarkSettings(datasource);
MarkDatasource = AlarmUtil.MarkSettings;
}
}
}
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)
{
bool isBlock = ItemIndex == 0;
var temp = XmlHelper.DeepClone(isBlock ? BlockDatasource : MarkDatasource);
temp.RemoveAt(index);
if (isBlock)
{
AlarmUtil.UpdateBlockSettings(temp);
}
else
{
AlarmUtil.UpdateMarkSettings(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 ? BlockDatasource : 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)
{
bool isBlock = ItemIndex == 0;
temp = (isBlock ? BlockDatasource : MarkDatasource).Where(e => !e.IsSelected).ToList();
if (isBlock)
{
AlarmUtil.UpdateBlockSettings(temp);
}
else
{
AlarmUtil.UpdateMarkSettings(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;
}
}
}