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