using System;
using System.Collections.Generic;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.Safety
{
///
/// 添加报警目标菜单列表的画面
///
public class AlarmTargetAddMenuForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 防区ID(这个东西似乎是唯一的)
///
private int zoonID = 0;
///
/// 列表控件
///
private VerticalListControl listView = null;
///
/// 全部的数据(keys1:房间ID Keys2:R文件的数值)
///
private Dictionary> dicAllData = new Dictionary>();
///
/// 当前选择的楼层ID
///
private string nowSelectFloorId = string.Empty;
///
/// 当前选择的房间
///
private Common.Room nowSelectRoom = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// 防区ID
public void ShowForm(int i_zoonID)
{
this.zoonID = i_zoonID;
//设置头部信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddAlarmTarget));
//初始化右上角的控件
this.InitTopRightMenuControl();
//初始化中部信息
this.InitMiddleFrame();
}
///
/// 初始化中部信息
///
private void InitMiddleFrame()
{
//清空bodyFrame
this.ClearBodyFrame();
this.nowSelectRoom = null;
HdlThreadLogic.Current.RunThread(() =>
{
//获取设备的所有类型,并整理成每一行的数据
this.dicAllData = this.GetAllListData();
if (dicAllData.Count == 0)
{
HdlThreadLogic.Current.RunMain(() =>
{
//没有可以添加的目标
this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAddTarget));
});
return;
}
HdlThreadLogic.Current.RunMain(() =>
{
//初始化房间和设备控件
this.InitRoomAndDeviceControl();
});
});
}
///
/// 初始化房间和设备控件
///
private void InitRoomAndDeviceControl()
{
var listRoom = new List();
foreach (string roomId in this.dicAllData.Keys)
{
listRoom.Add(HdlRoomLogic.Current.GetRoomById(roomId));
}
//初始化房间菜单控件
var frameBack = new FrameLayout();
frameBack.Height = Application.GetRealHeight(204);
bodyFrameLayout.AddChidren(frameBack);
var roomMuneContr = new RoomDeviceGroupMenuControl(listRoom);
roomMuneContr.Gravity = Gravity.CenterVertical;
frameBack.AddChidren(roomMuneContr);
roomMuneContr.SelectRoomEvent += (selectRoom) =>
{
//记录当前选择的房间
this.nowSelectRoom = selectRoom;
//还原列表高度
listView.Height = bodyFrameLayout.Height - frameBack.Bottom;
//初始化行控件
this.InitRowControl(dicAllData[selectRoom.Id]);
};
this.listView = new VerticalListControl(29);
listView.Y = frameBack.Bottom;
listView.Height = bodyFrameLayout.Height - frameBack.Bottom;
listView.BackgroundColor = UserCenterColor.Current.White;
bodyFrameLayout.AddChidren(this.listView);
//开始初始化房间控件,然后它会根据默认值调用回调函数
roomMuneContr.InitControl();
}
///
/// 初始化右上角的控件
///
private void InitTopRightMenuControl()
{
//获取楼层
var dicFloor = HdlRoomLogic.Current.GetFloorSortList();
if (dicFloor.Count == 0)
{
return;
}
var btnIconContr = new MostRightIconControl(69, 69);
btnIconContr.UnSelectedImagePath = "Item/Drop_Down.png";
topFrameLayout.AddChidren(btnIconContr);
btnIconContr.InitControl();
var btnFloor = new NormalViewControl(300, 69, true);
btnFloor.Gravity = Gravity.CenterVertical;
btnFloor.X = btnIconContr.X + btnIconContr.btnIcon.X - Application.GetRealWidth(300);
btnFloor.TextAlignment = TextAlignment.CenterRight;
btnFloor.IsBold = true;
topFrameLayout.AddChidren(btnFloor);
foreach (var floorId in dicFloor.Keys)
{
//第一个楼层
this.nowSelectFloorId = floorId;
btnFloor.Text = dicFloor[floorId];
break;
}
btnIconContr.ButtonClickEvent += (sender, e) =>
{
//楼层菜单
var contr = new TopRightFloorMenuControl(dicFloor.Count, 2, this.nowSelectFloorId, Language.StringByID(R.MyInternationalizationString.SelectFloor));
foreach (var floorId in dicFloor.Keys)
{
contr.AddRowMenu(floorId, () =>
{
//记录起选择的ID
this.nowSelectFloorId = floorId;
btnFloor.Text = dicFloor[this.nowSelectFloorId];
//初始化中部信息
this.InitMiddleFrame();
});
}
};
}
#endregion
#region ■ 添加行_____________________________
///
/// 初始化行控件
///
///
private void InitRowControl(Dictionary dicRowData)
{
this.listView.RemoveAll();
HdlThreadLogic.Current.RunMainInThread(() =>
{
int count = 0;
foreach (var strText in dicRowData.Keys)
{
count++;
var rowData = dicRowData[strText];
var rowlayout = new FrameRowControl(listView.rowSpace / 2);
listView.AddChidren(rowlayout);
//图标
var btnIcon = rowlayout.AddLeftIcon(81);
btnIcon.UnSelectedImagePath = rowData.IconPath;
//设备名
var txtDevice = rowlayout.AddLeftCaption(strText, 750);
txtDevice.TextSize = 15;
//向右图标
rowlayout.AddRightArrow();
if (count != dicRowData.Count)
{
//底线
rowlayout.AddBottomLine();
}
//单击事件
rowlayout.ButtonClickEvent += (sender, e) =>
{
if (rowData.listScene == null)
{
//设备的一览
var form = new AlarmTargetAddDeviceForm();
form.AddForm(this.zoonID, txtDevice.Text, rowData.listDevice);
}
else
{
//场景的一览
var form = new AlarmTargetAddSceneForm();
form.AddForm(this.zoonID, rowData.listScene);
}
};
}
//调整真实高度
this.listView.AdjustRealHeight(Application.GetRealHeight(23));
});
}
#endregion
#region ■ 获取数据___________________________
///
/// 获取设备的所有类型,并整理成每一行的数据(keys1:房间ID Keys2:R文件的数值)
///
///
private Dictionary> GetAllListData()
{
var dicData = new Dictionary>();
//获取本地安防的场景
Dictionary dicScene = HdlSafeguardLogic.Current.GetLocalSceneByZoneID(this.zoonID);
var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(this.nowSelectFloorId);
for (int i = 0; i < listRoom.Count; i++)
{
//获取房间的设备和场景数据
var dicRoomData = this.GetRoomDeviceAndSceneData(listRoom[i], dicScene);
if (dicRoomData.Count > 0)
{
dicData[listRoom[i].Id] = dicRoomData;
}
}
return dicData;
}
///
/// 获取房间里面的设备和场景数据
///
///
///
///
private Dictionary GetRoomDeviceAndSceneData(Common.Room i_room, Dictionary dicScene)
{
if (dicScene == null)
{
//获取本地安防的场景
dicScene = HdlSafeguardLogic.Current.GetLocalSceneByZoneID(this.zoonID);
}
var dicRoomData = new Dictionary();
for (int j = 0; j < i_room.ListDevice.Count; j++)
{
var device = HdlDeviceCommonLogic.Current.GetDevice(i_room.ListDevice[j]);
//如果那个设备已经添加了,则不再显示
if (device == null || HdlSafeguardLogic.Current.IsAlarmDeviceExist(this.zoonID, device) == true)
{
continue;
}
if (device.Type == DeviceType.AirSwitch//空气开关
|| device.Type == DeviceType.DimmableLight//调光器
|| device.Type == DeviceType.ColorDimmableLight//彩灯
|| device.Type == DeviceType.OnOffOutput//继电器
|| device.Type == DeviceType.ColorTemperatureLight//色温灯
|| device.Type == DeviceType.WindowCoveringDevice)//窗帘
{
string unSelectPath = string.Empty;
string selectPath = string.Empty;
var typeInfo = HdlDeviceCommonLogic.Current.GetDeviceBelongEnumInfo(device);
//获取图片
HdlDeviceCommonLogic.Current.GetDeviceFunctionTypeMenuIcon(typeInfo, ref unSelectPath, ref selectPath);
if (dicRoomData.ContainsKey(typeInfo.BeloneText) == false)
{
dicRoomData[typeInfo.BeloneText] = new uRowInformation();
dicRoomData[typeInfo.BeloneText].IconPath = unSelectPath;
}
dicRoomData[typeInfo.BeloneText].listDevice.Add(device);
}
}
string strSceneText = Language.StringByID(R.MyInternationalizationString.uScence);
for (int j = 0; j < i_room.ListSceneId.Count; j++)
{
//如果那个场景已经添加了,则不再显示
if (dicScene.ContainsKey(i_room.ListSceneId[j]) == true)
{
continue;
}
var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(i_room.ListSceneId[j]);
if (sceneUi == null)
{
continue;
}
if (dicRoomData.ContainsKey(strSceneText) == false)
{
dicRoomData[strSceneText] = new uRowInformation();
dicRoomData[strSceneText].IconPath = "Scene/SceneIcon.png";
dicRoomData[strSceneText].listScene = new List();
}
dicRoomData[strSceneText].listScene.Add(sceneUi);
}
return dicRoomData;
}
#endregion
#region ■ 界面重新激活事件___________________
///
/// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
///
public override int FormActionAgainEvent()
{
//重新获取房间数据
var dicData = this.GetRoomDeviceAndSceneData(this.nowSelectRoom, null);
if (dicAllData.Count == 1 && dicData.Count == 0)
{
//这个房间,已经没有可选择的东西了
dicAllData.Remove(this.nowSelectRoom.Id);
//没有可以添加的目标
this.ClearBodyFrame();
this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAddTarget));
return 1;
}
if (dicData.Count > 0)
{
//覆盖缓存
dicAllData[this.nowSelectRoom.Id] = dicData;
//重新刷新这个房间的设备列表
this.InitRowControl(dicData);
}
else
{
//这个房间,已经没有可选择的东西了
dicAllData.Remove(this.nowSelectRoom.Id);
//清空bodyFrame
this.ClearBodyFrame();
//切换到别的房间
this.InitRoomAndDeviceControl();
}
return 1;
}
#endregion
#region ■ 自定义结构体_______________________
///
/// 每一行的行数据
///
private class uRowInformation
{
///
/// 图标地址
///
public string IconPath = string.Empty;
///
/// 设备列表信息
///
public List listDevice = new List();
///
/// 场景
///
public List listScene = null;
}
#endregion
}
}