using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter
{
///
/// 安防记录控件
///
public class SafeguardLogControl : FrameLayout
{
#region ■ 变量声明___________________________
///
/// 今日无任何报警记录 的控件
///
private NormalViewControl btnMsg = null;
///
/// 各防区的桌布控件
///
private Dictionary dicFrame = new Dictionary();
///
/// 各防区的行控件
///
private Dictionary> dicRowFrame = new Dictionary>();
///
/// 桌布控件
///
private FrameLayout frameTable = null;
///
/// 开放这个控件出来,有点用
///
private NormalViewControl btnTime = null;
#endregion
#region ■ 初始化_____________________________
///
/// 初始化
///
public SafeguardLogControl()
{
this.Height = Application.GetRealHeight(260 + 44);
}
///
/// 初始化
///
/// 日期
/// 防区报警信息
public void InitControl(string dayText, Dictionary> dicInfo)
{
this.frameTable = new FrameLayout();
frameTable.Gravity = Gravity.CenterHorizontal;
frameTable.Radius = (uint)Application.GetRealHeight(17);
frameTable.Height= Application.GetRealHeight(260);
frameTable.Width = Application.GetRealWidth(968);
frameTable.BackgroundColor = UserCenterColor.Current.White;
this.AddChidren(frameTable);
//记录时间
this.btnTime = new NormalViewControl(300, 58, true);
btnTime.X = Application.GetRealWidth(35);
btnTime.Y = Application.GetRealHeight(29);
btnTime.TextColor = UserCenterColor.Current.TextGrayColor3;
btnTime.TextID = R.MyInternationalizationString.uRecordTime;
this.frameTable.AddChidren(btnTime);
//日期
string month = dayText.Substring(4, 2);
string day = dayText.Substring(6, 2);
var btnDay = new NormalViewControl(300, 58, true);
btnDay.X = frameTable.Width - Application.GetRealWidth(300 + 35);
btnDay.Y = btnTime.Y;
btnDay.TextColor = UserCenterColor.Current.TextColor2;
btnDay.TextAlignment = TextAlignment.CenterRight;
btnDay.Text = month + Language.StringByID(R.MyInternationalizationString.Month) + day + Language.StringByID(R.MyInternationalizationString.Day);
this.frameTable.AddChidren(btnDay);
//线
var btnLine = new NormalViewControl(Application.GetRealWidth(904), ControlCommonResourse.BottomLineHeight, false);
btnLine.X = Application.GetRealWidth(29);
btnLine.Y = Application.GetRealHeight(98);
btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
this.frameTable.AddChidren(btnLine);
//预创建五大防区的桌布
var listId = new List() { 1, 2, 4, 5, 3 };
int tempY = 0;
for (int i = 0; i < listId.Count; i++)
{
var frame1 = new FrameLayout();
frame1.Height = Application.GetRealHeight(10);
frame1.Y = tempY == 0 ? Application.GetRealHeight(98) : tempY;
this.frameTable.AddChidren(frame1);
dicFrame[listId[i]] = frame1;
dicRowFrame[listId[i]] = new List();
//初始化防区标题控件
this.InitGarrisonTitleControl(listId[i]);
if (dicInfo != null && dicInfo.ContainsKey(listId[i]) == true && dicInfo[listId[i]].Count > 0)
{
var listRow = dicRowFrame[listId[i]];
foreach (var alarmInfo in dicInfo[listId[i]])
{
//一条信息里面,它可能包含多个报警
var listMsg = HdlAlarmsLogic.Current.GetSensorListAlarmMsg(alarmInfo);
foreach (var strMsg in listMsg)
{
//添加报警信息控件
var contr = this.AddAlarmInfoControl(alarmInfo, strMsg);
if (listRow.Count != 0)
{
contr.Y = listRow[listRow.Count - 1].Bottom + Application.GetRealHeight(23);
}
listRow.Add(contr);
}
}
//变更高度
frame1.Height = listRow[listRow.Count - 1].Bottom + Application.GetRealHeight(55);
this.frameTable.Height = frame1.Bottom;
this.Height = frame1.Bottom + Application.GetRealHeight(44);
tempY = frame1.Bottom;
}
else
{
frame1.Visible = false;
}
}
if (dicInfo == null || dicInfo.Count == 0)
{
//今日无任何报警记录
btnMsg = new NormalViewControl(frameTable.Width, Application.GetRealHeight(60), false);
btnMsg.Y = btnLine.Bottom + Application.GetRealHeight(28);
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
btnMsg.TextID = R.MyInternationalizationString.uNowDayNotHadAlarmLog;
btnMsg.TextAlignment = TextAlignment.Center;
this.frameTable.AddChidren(btnMsg);
}
//添加底部阴影特效
this.frameTable.SetViewShadow(true);
}
#endregion
#region ■ 初始化防区标题控件_________________
///
/// 初始化防区标题控件
///
///
private void InitGarrisonTitleControl(int zoneId)
{
FrameLayout frame = dicFrame[zoneId];
//图标
var btnIcon = new IconViewControl(69);
btnIcon.X = Application.GetRealWidth(29);
btnIcon.Y = Application.GetRealHeight(23);
//只会是1~5
if (zoneId == 1 || zoneId == 2)
{
btnIcon.UnSelectedImagePath = "Safeguard/ProtectionAtHome.png";
}
else
{
btnIcon.UnSelectedImagePath = "Safeguard/ProtectionRemoveHome.png";
}
frame.AddChidren(btnIcon);
//防区名
var btnName = new NormalViewControl(400, 58, true);
btnName.X = Application.GetRealWidth(109);
btnName.Y = Application.GetRealHeight(35);
btnName.Text = HdlSafeguardLogic.Current.GetGarrisonText(zoneId);
frame.AddChidren(btnName);
//已启动
var btnStatu = new NormalViewControl(300, 46, true);
btnStatu.X = frame.Width - Application.GetRealWidth(300 + 35);
btnStatu.Y = Application.GetRealHeight(35);
btnStatu.TextSize = 12;
btnStatu.TextColor = UserCenterColor.Current.TextGrayColor1;
btnStatu.TextAlignment = TextAlignment.CenterRight;
btnStatu.TextID = R.MyInternationalizationString.uHadStarted;
frame.AddChidren(btnStatu);
//空白行
var btnSpace = new FrameLayout();
btnSpace.Height = Application.GetRealHeight(46);
btnSpace.Y = btnIcon.Bottom;
frame.AddChidren(btnSpace);
}
#endregion
#region ■ 添加报警信息_______________________
///
/// 添加报警信息
///
///
///
public int AddSafeguardAlarmInfo(SafeguardAlarmInfo alarmInfo)
{
if (dicFrame.ContainsKey(alarmInfo.ZoneId) == false)
{
return -1;
}
//一条信息里面,它可能包含多个报警
var listMsg = HdlAlarmsLogic.Current.GetSensorListAlarmMsg(alarmInfo);
int valueCount = 0;
foreach (var strMsg in listMsg)
{
//一个报警信息,一个控件
int value = this.AddSafeguardAlarmInfo2(alarmInfo, strMsg);
//这个value是控件增加的高度值
valueCount += value;
}
return valueCount;
}
///
/// 添加报警信息(一个报警信息,一个控件)
///
///
/// 针对一条数据里面包含多个报警的问题,追加的报警文本
///
private int AddSafeguardAlarmInfo2(SafeguardAlarmInfo alarmInfo, string strMsg)
{
if (dicFrame.ContainsKey(alarmInfo.ZoneId) == false)
{
return -1;
}
if (btnMsg != null)
{
//移除信息提示控件
btnMsg.RemoveFromParent();
btnMsg = null;
}
var listRow = dicRowFrame[alarmInfo.ZoneId];
if (listRow.Count == 0)
{
dicFrame[alarmInfo.ZoneId].Visible = true;
//重置桌布间的间距
int tempY = 0;
foreach (var frame in dicFrame.Values)
{
if (frame.Visible == true)
{
frame.Y = tempY == 0 ? Application.GetRealHeight(98) : tempY;
tempY = frame.Bottom;
}
}
}
//添加报警信息控件
var frameRow = this.AddAlarmInfoControl(alarmInfo, strMsg);
if (listRow.Count >= 100)
{
//移除最后一个
listRow[listRow.Count - 1].RemoveFromParent();
listRow.RemoveAt(listRow.Count - 1);
}
//当前这个防区的全部行控件往下移动
foreach (var row in listRow)
{
row.Y += frameRow.Height + Application.GetRealHeight(23);
}
listRow.Insert(0, frameRow);
var value = listRow[listRow.Count - 1].Bottom + Application.GetRealHeight(55) - dicFrame[alarmInfo.ZoneId].Height;
if (value <= 0)
{
return 0;
}
//变更高度
dicFrame[alarmInfo.ZoneId].Height += value;
//它之下的全部桌布全部往下移动
bool canMove = false;
int realHeight = 0;
foreach (var id in dicFrame.Keys)
{
if (id == alarmInfo.ZoneId)
{
//当前的桌布
canMove = true;
}
else if (canMove == true)
{
dicFrame[id].Y += value;
}
if (canMove == true && dicFrame[id].Visible == true)
{
//记录起最后一个FrameLayout的底部
realHeight = dicFrame[id].Bottom;
}
}
if (realHeight > 0)
{
//变更整个控件的真实高度
this.frameTable.Height = realHeight;
this.Height = realHeight + Application.GetRealHeight(44);
}
//添加底部阴影特效
this.frameTable.SetViewShadow(true);
return value;
}
///
/// 添加报警信息控件
///
///
///
private FrameLayout AddAlarmInfoControl(SafeguardAlarmInfo alarmInfo, string strMsg)
{
var frame = dicFrame[alarmInfo.ZoneId];
var rowFrame = new FrameLayout();
rowFrame.Y = Application.GetRealHeight(130);
rowFrame.Height = Application.GetRealHeight(58);
frame.AddChidren(rowFrame);
//房间
var btnRoom = new NormalViewControl(165, 58, true);
btnRoom.X = Application.GetRealWidth(35);
btnRoom.TextColor = UserCenterColor.Current.TextGrayColor3;
btnRoom.Text = alarmInfo.RoomName;
rowFrame.AddChidren(btnRoom);
//设备
string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(alarmInfo.DeviceAddr, alarmInfo.DeviceEpoint);
var device = Common.LocalDevice.Current.GetDevice(mainkeys);
var btnDevice = new NormalViewControl(271, 58, true);
btnDevice.X = Application.GetRealWidth(199);
btnDevice.TextColor = UserCenterColor.Current.TextGrayColor3;
btnDevice.Text = device == null ? alarmInfo.DeviceName : Common.LocalDevice.Current.GetDeviceEpointName(device);
rowFrame.AddChidren(btnDevice);
//报警信息
var btnMsg = new NormalViewControl(303, 58, true);
btnMsg.X = Application.GetRealWidth(469);
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
btnMsg.Text = strMsg;
rowFrame.AddChidren(btnMsg);
//时间:时分秒
var btnTime = new NormalViewControl(190, 58, true);
btnTime.X = Application.GetRealWidth(758);
btnTime.TextColor = UserCenterColor.Current.TextGrayColor3;
btnTime.TextAlignment = TextAlignment.CenterRight;
btnTime.Text = alarmInfo.Time;
rowFrame.AddChidren(btnTime);
return rowFrame;
}
#endregion
#region ■ 控件销毁___________________________
///
/// 控件销毁
///
public override void RemoveFromParent()
{
dicRowFrame.Clear();
dicFrame.Clear();
base.RemoveFromParent();
}
#endregion
}
}