using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone.UserCenter.DevicePirSensor { /// /// PIR传感器的触发目标选择界面 /// public class PirSensorTargetSelectForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 结束选择的事件(设备主键) /// public Action> FinishSelectEvent = null; /// /// 当前选择的楼层ID /// private string nowSelectFloorId = string.Empty; /// /// 桌布控件 /// private NormalFrameLayout frameTable = null; /// /// 房间对象 /// private Dictionary> dicRoom = new Dictionary>(); /// /// 已经存在的绑定设备 /// private List listEsixtDevice = new List(); #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 存在的设备 public void ShowForm(List i_listEsixtDevice) { this.listEsixtDevice.AddRange(i_listEsixtDevice); //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uTriggerTarget)); //初始化右上角的控件 this.InitTopRightMenuControl(); //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); //房间的容器控件 var frameBack = new FrameLayout(); frameBack.Height = Application.GetRealHeight(204); bodyFrameLayout.AddChidren(frameBack); //桌布控件 this.frameTable = new NormalFrameLayout(); frameTable.Y = frameBack.Bottom; frameTable.Height = bodyFrameLayout.Height - frameBack.Height; bodyFrameLayout.AddChidren(frameTable); //其他 var tempRoom = new Common.Room(); tempRoom.Name = Language.StringByID(R.MyInternationalizationString.uOther); foreach (var mainKeys in this.listEsixtDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(mainKeys); if (device == null) { continue; } //这个手机弄弄,那个手机弄弄的情况下, //采用后备操作 -> 新建一个临时房间对象出来 if (HdlRoomLogic.Current.GetRoomByDevice(device) == null) { tempRoom.ListDevice.Add(HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device)); } } HdlThreadLogic.Current.RunMainInThread(() => { if (dicRoom.ContainsKey(nowSelectFloorId) == true && dicRoom[nowSelectFloorId].Count > 0) { //初始化房间控件 var listRoom = new List(); listRoom.AddRange(dicRoom[nowSelectFloorId]); if (tempRoom.ListDevice.Count > 0) { //显示新建的临时房间对象 listRoom.Add(tempRoom); } var roomContr = new RoomDeviceGroupMenuControl(listRoom); frameBack.AddChidren(roomContr); roomContr.SelectRoomEvent += (myRoom) => { //初始化设备行 this.InitDeviceControl(myRoom); }; roomContr.InitControl(); //确定按钮 var btnOk = new BottomClickButton(); btnOk.TextID = R.MyInternationalizationString.uConfirm1; bodyFrameLayout.AddChidren(btnOk); btnOk.ButtonClickEvent += (sender, e) => { //调用回调函数 this.FinishSelectEvent?.Invoke(listEsixtDevice); //界面关闭 this.CloseForm(); }; //查看模板时,不允许编辑 if (Common.Config.Instance.Home.IsShowTemplate == true) { btnOk.CanClick = false; } } else { //没有可以添加的目标 this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAddTarget)); } }); } #endregion #region ■ 初始化右上角的控件_________________ /// /// 初始化右上角的控件 /// private void InitTopRightMenuControl() { //房间分组 var listRoom = HdlRoomLogic.Current.GetAllListRooms(); foreach (var room in listRoom) { //检测该房间能否显示 if (this.CheckCanShowRow(room) == false) { continue; } if (dicRoom.ContainsKey(room.FloorId) == false) { dicRoom[room.FloorId] = new List(); } dicRoom[room.FloorId].Add(room); } if (dicRoom.Count == 0) { //默认一个空的东西 dicRoom[string.Empty] = new List(); } //获取楼层 var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); if (dicFloor.Count == 0) { return; } int indexTemp = 1; foreach (var floorId in dicRoom.Keys) { if (dicFloor.ContainsKey(floorId) == false) { //这是多台手机瞎搞之后出现的后备补救措施 dicFloor[floorId] = Language.StringByID(R.MyInternationalizationString.uOther) + indexTemp; indexTemp++; } } 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; topFrameLayout.AddChidren(btnFloor); foreach (var floorId in dicFloor.Keys) { //第一个楼层 this.nowSelectFloorId = floorId; btnFloor.Text = dicFloor[floorId]; break; } btnIconContr.ButtonClickEvent += (sender, e) => { //楼层菜单 var contr = new TopRightMenuControl(dicFloor.Count, 2, Language.StringByID(R.MyInternationalizationString.SelectFloor)); foreach (var floorId in dicFloor.Keys) { contr.AddRowMenu(dicFloor[floorId], "Floor/Floor.png", "Floor/FloorSelected.png", () => { //记录起选择的ID this.nowSelectFloorId = floorId; btnFloor.Text = dicFloor[this.nowSelectFloorId]; //初始化中部信息 this.InitMiddleFrame(); }); } }; } #endregion #region ■ 初始化设备控件_____________________ /// /// 初始化设备控件 /// /// private void InitDeviceControl(Common.Room room) { //先清空 this.frameTable.RemoveAll(); var frameBack = new FrameLayout(); frameBack.Height = Application.GetRealHeight(11); frameBack.BackgroundColor = UserCenterColor.Current.White; frameTable.AddChidren(frameBack); var listView = new VerticalListControl(12); listView.Y = frameBack.Bottom; listView.Height = frameTable.Height - frameBack.Height; listView.BackgroundColor = UserCenterColor.Current.White; frameTable.AddChidren(listView); var listDevice = new List(); foreach (var deviceKeys in room.ListDevice) { var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); //检测设备 if (this.CheckCanShowDevice(device) == true) { listDevice.Add(device); } } for (int i = 0; i < listDevice.Count; i++) { var device = listDevice[i]; string mainKey = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device); var rowDevice = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(rowDevice); //图标 var btnIcon = rowDevice.AddLeftIcon(81); HdlDeviceCommonLogic.Current.SetDeviceIconToControl(btnIcon, device); //设备名称 var btnName = rowDevice.AddLeftCaption(HdlDeviceCommonLogic.Current.GetDeviceEpointName(device), 700); btnName.TextSize = 15; //选择 var btnSelect = rowDevice.AddMostRightEmptyIcon(58, 58); if (listEsixtDevice.Contains(mainKey) == false) { btnSelect.Visible = false; } btnSelect.UnSelectedImagePath = "Item/ItemSelected.png"; if (i != listDevice.Count - 1) { //底线 rowDevice.AddBottomLine(); } rowDevice.ButtonClickEvent += (sender, e) => { btnSelect.Visible = !btnSelect.Visible; if (btnSelect.Visible == true) { listEsixtDevice.Add(mainKey); } else { listEsixtDevice.Remove(mainKey); } }; //查看模板时,不允许编辑 if (Common.Config.Instance.Home.IsShowTemplate == true) { rowDevice.CanClick = false; } } listDevice = null; //调整控件真实高度 listView.AdjustRealHeight(Application.GetRealHeight(23)); //借用这个东西进行检测 var btnTemp = new BottomClickButton(); //如果真实高度已经超过了确定按键 if (listView.Bottom + frameTable.Y > btnTemp.Yaxis) { listView.Height = frameTable.Height - frameBack.Height; var frameTemp = new FrameLayout(); frameTemp.Height = bodyFrameLayout.Height - btnTemp.Yaxis; listView.AddChidren(frameTemp); } } #endregion #region ■ 一般方法___________________________ /// /// 检测该房间能否显示 /// /// /// private bool CheckCanShowRow(Common.Room room) { if (room.ListDevice.Count == 0) { return false; } if (room.IsLove == true) { return false; } foreach (var deviceKeys in room.ListDevice) { //检测该设备能否显示 var device = HdlDeviceCommonLogic.Current.GetDevice(deviceKeys); if (this.CheckCanShowDevice(device) == false) { continue; } //存在设备的话,此房间可以显示 return true; } return false; } /// /// 检测该设备能否显示 /// /// /// private bool CheckCanShowDevice(ZigBee.Device.CommonDevice device) { if (device == null) { return false; } //如果是传感器,或者是没有开关簇的话(这里判断的是输入簇) if ((device.Type == ZigBee.Device.DeviceType.IASZone) || HdlDeviceCommonLogic.Current.InDeviceIsCanOnOff(device) == false) { return false; } return true; } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { this.FinishSelectEvent = null; base.CloseFormBefore(); } #endregion } }