using FLY.OBJComponents.Client;
using FLY.Thick.Base.Common;
using FLY.UI.Module;
using System;
using System.Collections.Generic;
using System.ComponentModel;
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 System.Windows.Threading;
using ThickTcpUiInWindow;
namespace FLY.Thick.BlowingScan.UI.Client.UIModule
{
///
/// DynAreaIO.xaml 的交互逻辑
///
public partial class DynAreaIO : UserControl
{
DynAreaIOViewModel viewModel;
TDGage gage;
public DynAreaIO()
{
InitializeComponent();
}
public void Init(int id)
{
//获取设备
gage = Application.Current.Properties["ThickGage"] as TDGage;
viewModel = new DynAreaIOViewModel();
viewModel.Init(gage.mDynArea, gage.mWarningReasonWindow);
this.DataContext = viewModel;
}
protected virtual void Border_IO_Click(object sender, RoutedEventArgs e)
{
PgErrorTable p = new PgErrorTable();
p.Init(gage.mWarningService,
gage.mWarningReasonWindow,
gage.mSysParam,
gage.mFlyAdServiceClient,
typeof(WdIOTip));
(Application.Current.Properties["NavigationService"] as NavigationService).Navigate(p);
}
}
public class DynAreaIOViewModel : INotifyPropertyChanged
{
#region 延时推送 MARKNO
const int MARKNO_UPDATEERROR = 1;
#endregion
public event PropertyChangedEventHandler PropertyChanged;
public UInt16 IStatus { get; set; } = 0xffff;
public UInt16 OStatus { get; set; } = 0x000f;
public int Hrs { get; set; } = 3;
///
/// 是永久使用
///
public bool IsForever { get; set; } = false;
public bool IsError { get; set; }
///
/// 异常消息
///
public string ErrMsg { get; set; }
DynArea mDynArea;
BufferWindow mWindow;
DispatcherTimer timer_error;
private int reason_list_index = -1;
public void Init(DynArea dynArea, OBJComponents.Client.BufferWindow mWarningReasonWindow)
{
//创建窗口观察 报警原因列表
mWindow = mWarningReasonWindow;
mDynArea = dynArea;
Misc.BindingOperations.SetBinding(mDynArea, "IStatus", this, "IStatus");
Misc.BindingOperations.SetBinding(mDynArea, "OStatus", this, "OStatus");
Misc.BindingOperations.SetBinding(mDynArea, "Hrs", this, "Hrs");
UpdateIsForever();
//报警原因轮流显示
timer_error = new DispatcherTimer();
timer_error.Interval = TimeSpan.FromSeconds(3);
timer_error.Tick += (s, e) =>
{
reason_list_index--;
if (reason_list_index < 0)
reason_list_index = mWindow.Record.Count();
UpdateError();
};
mWindow.Record.CollectionChanged += Record_CollectionChanged;
mDynArea.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "ServerIsConnected")
{
UpdateError();
}
else if (e.PropertyName == "Hrs")
{
UpdateIsForever();
}
};
UpdateError();
}
void UpdateIsForever()
{
if (mDynArea.Hrs > 50000)
IsForever = true;
else
IsForever = false;
}
private void Record_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
FObjBase.PollModule.Current.Poll_JustOnce(
new FObjBase.PollModule.PollHandler(delegate ()
{
reason_list_index = mWindow.Record.Count() - 1;
UpdateError();
}), this, MARKNO_UPDATEERROR);
}
void UpdateError()
{
if (!mDynArea.ServerIsConnected)
{
ErrMsg = "服务器连接断开";
IsError = true;
reason_list_index = -1;
timer_error.Stop();
}
else if (mWindow.Record.Count > 0)
{
if (reason_list_index >= mWindow.Record.Count)
reason_list_index = mWindow.Record.Count - 1;
else if (reason_list_index < 0)
reason_list_index = 0;
ErrMsg = mWindow.Record[reason_list_index].Description;
IsError = true;
timer_error.Start();
}
else
{
IsError = false;
ErrMsg = "";
reason_list_index = -1;
timer_error.Stop();
}
}
}
public class DynAreaIOViewModel_UnitTest : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public UInt16 IStatus { get; set; } = 0xff7f;
public UInt16 OStatus { get; set; } = 0x0005;
public int Hrs { get; set; } = 2000;
///
/// 是永久使用
///
public bool IsForever { get; set; } = false;
public bool IsError { get; set; }
///
/// 异常消息
///
public string ErrMsg { get; set; }
}
public class UIModule_DynAreaIO : IUIModule
{
///
/// 控件标题
/// 它的值取决于culture
///
public string Title
{
get
{
return Application.Current.FindResource("strDynAreaIO") as string;
}
}
///
/// 控件
/// 创建时,需要给它唯一ID,让加载自己的数据
///
///
///
public FrameworkElement GetComponent(int id)
{
DynAreaIO graph = new DynAreaIO();
graph.Init(id);
return graph;
}
///
/// 控件缩略图,用于编辑界面时,大致看看
/// 创建时,需要给它唯一ID,让加载自己的数据
///
///
///
public FrameworkElement GetThumbnail(int id)
{
return new System.Windows.Controls.Grid();
}
///
/// 给出全部控件ID, 控件自行删除没有的参数
///
///
public void MatchParam(int[] IDs)
{
}
}
}