using HMI.Core.Entity;
using HMI.Core.Manager;
using HMI.Core.Util;
using HMI.UI.DpUtil;
using HMI.UI.Util;
using HMI.Util;
using Microsoft.Win32;
using Panuon.WPF.UI;
using Plugin.DOControl.Entity;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace Plugin.DOControl
{
///
/// ModalWindow.xaml 的交互逻辑
///
public partial class ControlList : WindowX
{
public ControlList()
{
this.DataContext = this;
InitializeComponent();
}
private ObservableCollection datasource;
public ObservableCollection Datasource
{
get { return datasource; }
set { Set(ref datasource, value); }
}
private bool dataChanged;
protected override void OnClosing(CancelEventArgs e)
{
DialogResult = dataChanged;
base.OnClosing(e);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
DOControlData data = btn?.DataContext as DOControlData;
switch (btn.Name)
{
case "addBtn":
OpenDataModal(null);
break;
case "editBtn":
OpenDataModal(data);
break;
case "delBtn":
TryDeleteData(data);
break;
case "delBatchBtn":
TryDeleteBatch();
break;
case "refreshBtn":
LoadData();
break;
case "exportBtn":
TryExport();
break;
case "importBtn":
TryImport();
break;
default:
break;
}
}
public void LoadData()
{
ObservableCollection datas = new ObservableCollection();
try
{
if (File.Exists(DOControl.FilePath))
{
datas = XmlHelper.DeserializeFromXml>(DOControl.FilePath);
}
}
catch (Exception ex)
{
DOControl.Logger?.Error("Data List Load Data Failed.", ex);
ToastHelper.Error($"{this.lang("App.LoadFailed")}: {ex.Message}");
}
Datasource = datas;
}
private void OpenDataModal(DOControlData data)
{
try
{
DataModal modal = new DataModal
{
Title = data == null ? this.lang("App.Add") : this.lang("App.Edit"),
Owner = Window.GetWindow(this)
};
if (modal.Open(data ?? new DOControlData(), Datasource) == true)
{
dataChanged = true;
LoadData();
}
}
catch (Exception ex)
{
DOControl.Logger?.Error($"Data List {(data == null ? "Add" : "Edit")} Data Failed.", ex);
ToastHelper.Error($"{(data == null ? this.lang("App.AddFailed") : this.lang("App.EditFailed"))}: {ex.Message}");
}
}
private void TryDeleteData(DOControlData data)
{
try
{
int index = Datasource.IndexOf(data);
if (index < 0)
{
ToastHelper.Error("Error");
return;
}
if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeleteSingle", data.Name)) == MessageBoxResult.OK)
{
var temp = XmlHelper.DeepClone(Datasource);
temp.RemoveAt(index);
XmlHelper.SerializeToXml(DOControl.FilePath, temp);
dataChanged = true;
LoadData();
}
}
catch (Exception ex)
{
DOControl.Logger?.Error($"Data List Try Delete Data Failed.", ex);
ToastHelper.Error($"{this.lang("App.DeleteFailed")}: {ex.Message}");
}
}
private void TryDeleteBatch()
{
try
{
var count = Datasource.Where(d => d.IsSelected).Count();
if (count <= 0)
{
ToastHelper.Warning(this, this.lang("HMI.NoDeleteData"));
return;
}
if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeletes", count)) == MessageBoxResult.OK)
{
var temp = Datasource.Where(d => !d.IsSelected).ToList();
XmlHelper.SerializeToXml(DOControl.FilePath, temp);
dataChanged = true;
LoadData();
}
}
catch (Exception ex)
{
DOControl.Logger?.Error($"Data List Try Delete Batch Data Failed.", ex);
ToastHelper.Error($"{this.lang("App.DeleteFailed")}: {ex.Message}");
}
}
public void TryExport()
{
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "";
sfd.DefaultExt = "xls";
sfd.FileName = this.lang("doc.list");
if (sfd.ShowDialog() == true)
{
string targetPath = sfd.FileName;
ExcelHelper.ExportExcel(targetPath, Datasource);
ToastHelper.Success(Window.GetWindow(this), this.lang("App.ExportSuccess"));
}
}
catch (Exception ex)
{
DOControl.Logger?.Error("Export Data Failed.", ex);
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
}
}
public void TryImport()
{
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "execl(*.xlsx;*.xls)|*.xlsx;*.xls";
openFileDialog.Title = this.lang("App.SelectFile");
openFileDialog.Multiselect = false;
if (openFileDialog.ShowDialog() == true)
{
List datas = ExcelHelper.ReadFromExcel(openFileDialog.FileName);
XmlHelper.SerializeToXml(DOControl.FilePath, datas);
dataChanged = true;
LoadData();
}
}
catch (Exception ex)
{
DOControl.Logger?.Error("Export Test Item Failed.", ex);
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
}
}
public bool? Open(ObservableCollection datasource)
{
Datasource = datasource;
return this.ShowDialog();
}
}
}