using System;
using System.Collections.Generic;
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.Safety
{
///
/// 添加报警目标指定设备类型的设备列表
///
public class AddDeviceAlarmTargetListForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 列表控件
///
private VerticalListControl listView = null;
///
/// 防区ID(这个东西似乎是唯一的)
///
private int zoonID = 0;
///
/// 设备列表
///
private List listAllDevice = null;
///
/// 需要添加的报警设备
///
private Dictionary dicSaveDevice = new Dictionary();
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// 防区ID
/// 设备类型的名称
/// 设备信息
public void ShowForm(int i_zoonID, string i_deviceText, List i_listDevice)
{
this.zoonID = i_zoonID;
this.listAllDevice = i_listDevice;
//设置头部信息
base.SetTitleText(i_deviceText);
//初始化中部信息
this.InitMiddleFrame(i_deviceText);
}
///
/// 初始化中部信息
///
/// 列表头部名称
private void InitMiddleFrame(string titleText)
{
//清空bodyFrame
this.ClearBodyFrame();
//完成
var btnfinish = new BottomClickButton();
btnfinish.TextID = R.MyInternationalizationString.uFinish;
bodyFrameLayout.AddChidren(btnfinish);
btnfinish.ButtonClickEvent += (sender, e) =>
{
//保存选择的设备
this.DoSaveSelectDeviceAsync();
};
//XXX列表
var frameTemp = new FrameLayout();
frameTemp.Height = Application.GetRealHeight(60 + 52);
frameTemp.BackgroundColor = UserCenterColor.Current.White;
bodyFrameLayout.AddChidren(frameTemp);
var btnTitle = new NormalViewControl(850, 60, true);
btnTitle.X = ControlCommonResourse.XXLeft;
btnTitle.Y = Application.GetRealHeight(52);
btnTitle.TextColor = UserCenterColor.Current.TextColor2;
btnTitle.Text = titleText + Language.StringByID(R.MyInternationalizationString.uList);
btnTitle.TextSize = 15;
frameTemp.AddChidren(btnTitle);
this.listView = new VerticalListControl(29);
listView.Y = frameTemp.Bottom;
listView.BackgroundColor = UserCenterColor.Current.White;
listView.Height = btnfinish.Y - ControlCommonResourse.BottomButtonAndListViewSpace - frameTemp.Bottom;
bodyFrameLayout.AddChidren(this.listView);
//设置中部信息
this.SetMiddleFrameInfo();
}
///
/// 设置中部信息
///
private void SetMiddleFrameInfo()
{
HdlThreadLogic.Current.RunThread(() =>
{
if (this.Parent == null)
{
return;
}
Application.RunOnMainThread(() =>
{
int count = listAllDevice.Count - 1;
for (int i = 0; i < listAllDevice.Count; i++)
{
//如果那个设备已经添加了,则不再显示
if (HdlSafeguardLogic.Current.IsAlarmDeviceExist(this.zoonID, listAllDevice[i].Device) == true)
{
continue;
}
//添加行目标
this.AddRowLayout(listAllDevice[i], i != count);
}
if (listView.ChildrenCount > 0)
{
int realHeight = (listView.GetChildren(listView.ChildrenCount - 1).Height) * listView.ChildrenCount + Application.GetRealHeight(23);
if (realHeight < listView.Height)
{
//调整真实高度
listView.Height = realHeight;
}
}
});
});
}
#endregion
#region ■ 添加行目标_________________________
///
/// 添加行目标
///
///
///
private void AddRowLayout(uDeviceInfo deviceInfo, bool addLine)
{
var row = new DeviceRoomControl(deviceInfo.Device, listView.rowSpace / 2);
listView.AddChidren(row);
row.InitControl();
//添加向右的图标
row.frameTable.AddRightArrow();
//底线
if (addLine == true)
{
row.frameTable.AddBottomLine();
}
//状态显示
var btnStatu = row.frameTable.AddMostRightView("", 400);
string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(deviceInfo.Device);
row.frameTable.ButtonClickEvent += (sender, e) =>
{
List listTaskinfo = null;
if (dicSaveDevice.ContainsKey(mainKeys) == true)
{
//取缓存中还未保存的数据
listTaskinfo = dicSaveDevice[mainKeys].listInfos;
}
if (deviceInfo.Device.Type == DeviceType.DimmableLight//调光器
|| deviceInfo.Device.Type == DeviceType.ColorDimmableLight)//彩灯
{
var form = new LightAlarmSettionForm();
form.AddForm(deviceInfo.Device, listTaskinfo);
form.ActionFormClose += (statuText, listInfo) =>
{
btnStatu.Text = statuText;
//将新的报警目标添加入缓存
this.AddAlarmSettionDataToMemory(deviceInfo, listInfo);
};
}
else if (deviceInfo.Device.Type == DeviceType.WindowCoveringDevice)//窗帘
{
var form = new CurtainAlarmSettionForm();
form.AddForm(deviceInfo.Device, listTaskinfo);
form.ActionFormClose += (statuText, listInfo) =>
{
btnStatu.Text = statuText;
//将新的报警目标添加入缓存
this.AddAlarmSettionDataToMemory(deviceInfo, listInfo);
};
}
else
{
//其他直接归为开关类
var form = new SwitchAlarmSettionForm();
form.AddForm(deviceInfo.Device, listTaskinfo);
form.ActionFormClose += (statuText, listInfo) =>
{
btnStatu.Text = statuText;
//将新的报警目标添加入缓存
this.AddAlarmSettionDataToMemory(deviceInfo, listInfo);
};
}
};
}
///
/// 将新的报警目标添加入缓存
///
///
///
private void AddAlarmSettionDataToMemory(uDeviceInfo deviceInfo, List listInfo)
{
string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(deviceInfo.Device);
if (listInfo == null || listInfo.Count == 0)
{
//指定为无动作模式
if (this.dicSaveDevice.ContainsKey(mainKeys) == true)
{
this.dicSaveDevice.Remove(mainKeys);
}
}
else
{
//确认添加动作
var data = new TaskInfoData();
this.dicSaveDevice[mainKeys] = data;
data.MacAddress = deviceInfo.Device.DeviceAddr;
data.Epoint = deviceInfo.Device.DeviceEpoint;
data.listInfos.AddRange(listInfo);
listInfo = null;
}
}
#endregion
#region ■ 保存选择的设备_____________________
///
/// 保存选择的设备
///
private async void DoSaveSelectDeviceAsync()
{
if (this.dicSaveDevice.Count == 0)
{
Application.RunOnMainThread(() =>
{
this.CloseForm();
});
return;
}
var listAction = new List();
foreach (var data in this.dicSaveDevice.Values)
{
var actionObj = new Safeguard.AlarmActionObj();
actionObj.DeviceAddr = data.MacAddress;
actionObj.Epoint = data.Epoint;
actionObj.Type = 0;
actionObj.TaskList = data.listInfos;
listAction.Add(actionObj);
}
//打开进度条
this.ShowProgressBar();
//添加报警目标到安防
bool success = await HdlSafeguardLogic.Current.AddAlarmTagetToSafety(this.zoonID, listAction);
//关闭进度条
this.CloseProgressBar();
if (success == true)
{
Application.RunOnMainThread(() =>
{
//关闭自身
this.CloseForm();
});
}
}
#endregion
#region ■ 结构体_____________________________
///
/// 报警目标数据
///
private class TaskInfoData
{
///
/// MAC地址
///
public string MacAddress = string.Empty;
///
/// 端口号
///
public int Epoint = 0;
///
/// 报警动作
///
public List listInfos = new List();
}
#endregion
}
}