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 } }