using Shared.Common; using Shared.Phone.UserCenter; using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.Category { /// /// 场景执行目标添加设备的界面 /// public class AdjustTargetAddSceneForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 完成选择的事件(场景ID) /// public Action> FinishSelectEvent = null; /// /// 当前已经添加的执行目标 /// private List listAdjustTarget = null; /// /// 当前已经添加的场景ID(存在检测用) /// private List listOldSceneId = null; /// /// 当前界面上选择的场景(存在检测用) /// private List listNewScene = null; /// /// 完成按钮 /// private BottomClickButton btnFinishControl = null; /// /// 场景列表控件 /// private VerticalListControl listSceneView = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 当前执行目标列表 public void ShowForm(List i_listAdjustTarget) { this.listAdjustTarget = i_listAdjustTarget; //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.AddScence)); //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //获取能够显示的房间列表 var listRoom = this.GetCanShowRoomList(); if (listRoom.Count == 0) { //没有可以添加的场景 this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAddScene)); return; } //房间菜单控件 var roomSwitchContr = new RoomDeviceGroupMenuControl(listRoom); this.bodyFrameLayout.AddChidren(roomSwitchContr); //选择事件 roomSwitchContr.SelectRoomEvent += (selectRoom) => { //在外面清空(特效的问题) this.listSceneView?.RemoveAll(); HdlThreadLogic.Current.RunMainInThread(() => { //刷新设备分支控件 this.RefreshFunctionView(selectRoom); }); }; this.listSceneView = new VerticalListControl(35); listSceneView.BackgroundColor = UserCenterColor.Current.White; listSceneView.Y = roomSwitchContr.Bottom; listSceneView.Height = bodyFrameLayout.Height - roomSwitchContr.Bottom; bodyFrameLayout.AddChidren(listSceneView); //完成按钮 this.btnFinishControl = new BottomClickButton(); btnFinishControl.TextID = R.MyInternationalizationString.uFinish; bodyFrameLayout.AddChidren(btnFinishControl); btnFinishControl.Visible = false; btnFinishControl.ButtonClickEvent += (sender, e) => { //回调函数 this.FinishSelectEvent?.Invoke(listNewScene); this.CloseForm(); }; //执行初始化(会自动触发SelectRoomEvent事件) roomSwitchContr.InitControl(); } #endregion #region ■ 刷新场景列表_______________________ /// /// 刷新功能分支控件 /// /// private void RefreshFunctionView(Room room) { //获取房间场景列表 var listScene = this.GetListSceneFromRoom(room); for (int i = 0; i < listScene.Count; i++) { var scene = listScene[i]; //场景行控件 var rowContr = new FrameRowControl(listSceneView.rowSpace / 2); listSceneView.AddChidren(rowContr); //图标 var btnIcon = rowContr.AddLeftIcon(81); btnIcon.UnSelectedImagePath = "Scene/SceneIcon.png"; //场景名 var btnName = rowContr.AddLeftCaption(scene.Name, 700); btnName.TextSize = 15; //选择 var btnSelect = rowContr.AddMostRightEmptyIcon(58, 58); btnSelect.Visible = false; btnSelect.UnSelectedImagePath = "Item/ItemSelected.png"; if (i != listScene.Count - 1) { //底线 rowContr.AddBottomLine(); } if (listNewScene.Contains(scene.Id) == true) { btnSelect.Visible = true; } //点击事件 rowContr.ButtonClickEvent += (sender, e) => { btnSelect.Visible = !btnSelect.Visible; if (btnSelect.Visible == true) { //添加缓存 listNewScene.Add(scene.Id); if (btnFinishControl.Visible == false) { btnFinishControl.Visible = true; } } else { //移除缓存 listNewScene.Remove(scene.Id); if (listNewScene.Count == 0) { btnFinishControl.Visible = false; } } }; } //调整控件桌布高度 this.listSceneView.AdjustRealHeightByBottomButton(Application.GetRealHeight(23)); } #endregion #region ■ 获取房间场景列表___________________ /// /// 获取房间场景列表 /// /// private List GetListSceneFromRoom(Common.Room room) { //获取全部的场景 var listAllScene = HdlSceneLogic.Current.GetRoomSceneList(room); var listShowScene = new List(); foreach (var scene in listAllScene) { //判断该场景能否显示 if (this.CheckSceneCanShow(scene) == true) { listShowScene.Add(scene); } } return listShowScene; } #endregion #region ■ 获取房间列表_______________________ /// /// 获取能够显示的房间列表 /// /// /// private List GetCanShowRoomList() { //先列表化 this.listOldSceneId = new List(); this.listNewScene = new List(); foreach (var data in this.listAdjustTarget) { if (data.Type == 1) { //只要场景 listOldSceneId.Add(data.ElseScenesId); } } //当前楼层的全部房间 var lisrRoom = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom(); var listShowRoom = new List(); foreach (var room in lisrRoom) { foreach (var sceneId in room.ListSceneId) { var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId); if (this.CheckSceneCanShow(scene) == true) { //这个场景本地存在,并且它还没有加入到执行目标列表,则这个房间可以显示 listShowRoom.Add(room); break; } } } return listShowRoom; } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { this.FinishSelectEvent = null; base.CloseFormBefore(); } #endregion #region ■ 一般方法___________________________ /// /// 检测场景能否显示 /// /// private bool CheckSceneCanShow(SceneUI i_scene) { //本地不存在 if (i_scene == null) { return false; } if (this.listOldSceneId.Contains(i_scene.Id) == true) { return false; } return true; } #endregion #region ■ 结构体_____________________________ /// /// 设备行信息 /// private class DeviceRowInfo { /// /// 文本ID,目前用来做主键 /// public int TextId = 0; /// /// 图标 /// public string IconPath = string.Empty; /// /// 图标 /// public string IconPathSelected = string.Empty; /// /// 设备回路主键 /// public List listDeviceKeys = new List(); } #endregion } }