using HDL_ON.Entity; using Shared; using System; using System.Collections.Generic; using System.Text; namespace HDL_ON { /// /// 楼层及房间的选择界面 /// public class FloorRoomSelectPopupView { #region ■ 变量声明___________________________ /// /// 当前选择显示的UID(楼层,或者房间,或者全部) /// private string nowShowSelectId = DiySelectPopupDialog.ALLSELECT; /// /// 全部的功能(设备显示分支使用) /// private List listAllFun = null; #endregion #region ■ 场景显示___________________________ /// /// 显示选择场景的界面 /// /// 楼层名字显示的控件,选择后,内部会自动变更显示文字,可以设置为null /// 根据选择的条件,筛选之后的场景列表(第一个参数是选择的UID,不管有没有用,总之先返回) /// 默认哪个为选择状态 public void ShowSceneView(Button btnFloor, Action> SelectEvent, string i_defultSelectId = null) { //清缓存 this.ClearMemory(); if (string.IsNullOrEmpty(i_defultSelectId) == true) { i_defultSelectId = DiySelectPopupDialog.ALLSELECT; } //返回的id是UID new FloorSelectPopupDialog().ShowView((selectValue) => { this.nowShowSelectId = selectValue; //刷新楼层的显示名字 this.RefreshFloorShowName(btnFloor); //获取可以显示的场景列表 var listScene = this.GetCanShowListScene(); SelectEvent?.Invoke(this.nowShowSelectId, listScene); SelectEvent = null; }, i_defultSelectId); } /// /// 获取能够显示的场景 /// /// public List GetCanShowListScene() { var listScene = new List(); //先看看当前选择的显示类型 1:全部 2:楼层 3:房间 var selectType = this.CheckSelectFloorIdType(); if (selectType == 1) { return FunctionList.List.scenes; } //房间的UID (key:uid value:roomId) var dicRoomUid = new Dictionary(); foreach (var roomInfo in SpatialInfo.CurrentSpatial.RoomList) { dicRoomUid[roomInfo.uid] = roomInfo.roomId; } //房间 if (selectType == 3) { //用UID转换为roomId string roomId = dicRoomUid.ContainsKey(this.nowShowSelectId) == true ? dicRoomUid[this.nowShowSelectId] : string.Empty; foreach (var scene in FunctionList.List.scenes) { //判断这个场景是否是这个房间的 if (scene.roomIds.Contains(roomId) == true) { listScene.Add(scene); } } } //楼层 else if (selectType == 2) { //获取这个楼层下面的全部房间ID var listRoomId = new List(); foreach (var roomInfo in SpatialInfo.CurrentSpatial.RoomList) { //判断是不是这个楼层的 if (roomInfo.parentId == this.nowShowSelectId) { listRoomId.Add(roomInfo.roomId); } } foreach (var scene in FunctionList.List.scenes) { //判断这个场景是否是这个房间的 foreach (var roomid in listRoomId) { if (scene.roomIds.Contains(roomid) == true) { listScene.Add(scene); } } } } return listScene; } #endregion #region ■ 设备显示___________________________ /// /// 显示选择场景的界面 /// /// 楼层名字显示的控件,选择后,内部会自动变更显示文字,可以设置为null /// 全部的设备列表,需要手动指定 /// 根据选择的条件,筛选之后的设备列表(第一个参数是选择的UID,不管有没有用,总之先返回) /// 默认哪个为选择状态 public void ShowDeviceFunctionView(Button btnFloor, List i_listAllFun, Action> SelectEvent, string i_defultSelectId = null) { //清缓存 this.ClearMemory(); this.listAllFun = new List(); this.listAllFun.AddRange(i_listAllFun); if (string.IsNullOrEmpty(i_defultSelectId) == true) { i_defultSelectId = DiySelectPopupDialog.ALLSELECT; } //返回的id是UID new FloorSelectPopupDialog().ShowView((selectValue) => { this.nowShowSelectId = selectValue; //刷新楼层的显示名字 this.RefreshFloorShowName(btnFloor); //获取可以显示的设备列表 var listDevice = this.GetCanShowListDevice(); SelectEvent?.Invoke(this.nowShowSelectId, listDevice); SelectEvent = null; }, i_defultSelectId); } /// /// 获取能够显示的设备 /// /// public List GetCanShowListDevice() { var listFunction = new List(); //先看看当前选择的显示类型 1:全部 2:楼层 3:房间 var selectType = this.CheckSelectFloorIdType(); if (selectType == 1) { return this.listAllFun; } //房间的UID (key:uid value:roomId) var dicRoomUid = new Dictionary(); foreach (var roomInfo in SpatialInfo.CurrentSpatial.RoomList) { dicRoomUid[roomInfo.uid] = roomInfo.roomId; } //房间 if (selectType == 3) { //用UID转换为roomId string roomId = dicRoomUid.ContainsKey(this.nowShowSelectId) == true ? dicRoomUid[this.nowShowSelectId] : string.Empty; foreach (var func in this.listAllFun) { //判断这个场景是否是这个房间的 if (func.roomIds.Contains(roomId) == true) { listFunction.Add(func); } } } //楼层 else if (selectType == 2) { //获取这个楼层下面的全部房间ID var listRoomId = new List(); foreach (var roomInfo in SpatialInfo.CurrentSpatial.RoomList) { //判断是不是这个楼层的 if (roomInfo.parentId == this.nowShowSelectId) { listRoomId.Add(roomInfo.roomId); } } foreach (var func in this.listAllFun) { //判断这个场景是否是这个房间的 foreach (var roomid in listRoomId) { if (func.roomIds.Contains(roomid) == true) { listFunction.Add(func); } } } } return listFunction; } #endregion #region ■ 一般方法___________________________ /// /// 刷新楼层的显示名字 /// /// private void RefreshFloorShowName(Button btnFloorName) { if (btnFloorName == null) { return; } //先看看当前选择的显示类型 1:全部 2:楼层 3:房间 var selectType = this.CheckSelectFloorIdType(); if (selectType == 1) { //全部 btnFloorName.Text = Language.StringByID(StringId.All); //btnFloorName.Width = btnFloorName.GetTextWidth(); } //房间 else if (selectType == 3) { foreach (var roomInfo in SpatialInfo.CurrentSpatial.RoomList) { if (roomInfo.uid == this.nowShowSelectId) { btnFloorName.Text = roomInfo.floorName + roomInfo.roomName; //btnFloorName.Width = btnFloorName.GetTextWidth(); return; } } } //楼层 else if (selectType == 2) { foreach (var floorInfo in SpatialInfo.CurrentSpatial.FloorList) { if (floorInfo.uid == this.nowShowSelectId) { btnFloorName.Text = floorInfo.roomName; //btnFloorName.Width = btnFloorName.GetTextWidth(); } } } } /// /// 判断当前所选的ID的类型 1:全部 2:楼层 3:房间 /// /// private int CheckSelectFloorIdType() { if (this.nowShowSelectId == DiySelectPopupDialog.ALLSELECT) { //全部 return 1; } foreach (var floorInfo in SpatialInfo.CurrentSpatial.FloorList) { if (floorInfo.uid == this.nowShowSelectId) { //当前选择的是楼层ID return 2; } } //不出意外,应该是房间了 return 3; } /// /// 清除缓存 /// public void ClearMemory() { //初始值 this.nowShowSelectId = DiySelectPopupDialog.ALLSELECT; this.listAllFun = null; } #endregion } }