New file |
| | |
| | | using Shared.Common;
|
| | | using Shared.Phone.UserCenter;
|
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.Text;
|
| | | using ZigBee.Device;
|
| | |
|
| | | namespace Shared.Phone.Category
|
| | | {
|
| | | /// <summary>
|
| | | /// 场景执行目标添加设备的界面
|
| | | /// </summary>
|
| | | public class AdjustTargetAddSceneForm : EditorCommonForm
|
| | | {
|
| | | #region ■ 变量声明___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 完成选择的事件(场景ID)
|
| | | /// </summary>
|
| | | public Action<List<int>> FinishSelectEvent = null; |
| | | /// <summary>
|
| | | /// 当前已经添加的执行目标
|
| | | /// </summary>
|
| | | private List<Scene.DeviceListData> listAdjustTarget = null;
|
| | | /// <summary>
|
| | | /// 当前已经添加的场景ID(存在检测用)
|
| | | /// </summary>
|
| | | private List<int> listOldSceneId = null;
|
| | | /// <summary>
|
| | | /// 当前界面上选择的场景(存在检测用)
|
| | | /// </summary>
|
| | | private List<int> listNewScene = null;
|
| | | /// <summary>
|
| | | /// 完成按钮
|
| | | /// </summary>
|
| | | private BottomClickButton btnFinishControl = null;
|
| | | /// <summary>
|
| | | /// 场景列表控件
|
| | | /// </summary>
|
| | | private VerticalListControl listSceneView = null;
|
| | | /// <summary>
|
| | | /// 当前选择的楼层
|
| | | /// </summary>
|
| | | private string nowSelectFloorId = string.Empty;
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 初始化_____________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
| | | /// </summary>
|
| | | /// <param name="i_listAdjustTarget">当前执行目标列表</param>
|
| | | public void ShowForm(List<Scene.DeviceListData> i_listAdjustTarget)
|
| | | {
|
| | | this.listAdjustTarget = i_listAdjustTarget;
|
| | |
|
| | | //设置头部信息
|
| | | base.SetTitleText(Language.StringByID(R.MyInternationalizationString.AddScence));
|
| | |
|
| | | //初始化右上角的控件
|
| | | this.InitTopRightMenuControl();
|
| | | //初始化中部信息
|
| | | this.InitMiddleFrame();
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 初始化中部信息
|
| | | /// </summary>
|
| | | private void InitMiddleFrame()
|
| | | {
|
| | | //清空body
|
| | | this.ClearBodyFrame();
|
| | |
|
| | | //获取能够显示的房间列表
|
| | | 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);
|
| | | if (this.listNewScene == null || this.listNewScene.Count == 0)
|
| | | {
|
| | | btnFinishControl.Visible = false;
|
| | | }
|
| | | btnFinishControl.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //回调函数
|
| | | this.FinishSelectEvent?.Invoke(listNewScene);
|
| | | this.CloseForm();
|
| | | };
|
| | |
|
| | | //执行初始化(会自动触发SelectRoomEvent事件)
|
| | | roomSwitchContr.InitControl();
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 初始化右上角的控件
|
| | | /// </summary>
|
| | | 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;
|
| | | 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 ■ 刷新场景列表_______________________
|
| | |
|
| | | /// <summary>
|
| | | /// 刷新功能分支控件
|
| | | /// </summary>
|
| | | /// <param name="room"></param>
|
| | | 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 ■ 获取房间场景列表___________________
|
| | |
|
| | | /// <summary>
|
| | | /// 获取房间场景列表
|
| | | /// </summary>
|
| | | /// <returns></returns>
|
| | | private List<SceneUI> GetListSceneFromRoom(Common.Room room)
|
| | | {
|
| | | //获取全部的场景
|
| | | var listAllScene = HdlSceneLogic.Current.GetRoomSceneList(room);
|
| | | var listShowScene = new List<SceneUI>();
|
| | | foreach (var scene in listAllScene)
|
| | | {
|
| | | //判断该场景能否显示
|
| | | if (this.CheckSceneCanShow(scene) == true)
|
| | | {
|
| | | listShowScene.Add(scene);
|
| | | }
|
| | | }
|
| | | return listShowScene;
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 获取房间列表_______________________
|
| | |
|
| | | /// <summary>
|
| | | /// 获取能够显示的房间列表
|
| | | /// </summary>
|
| | | /// <param name="listRomm"></param>
|
| | | /// <returns></returns>
|
| | | private List<Room> GetCanShowRoomList()
|
| | | {
|
| | | if (this.listNewScene == null)
|
| | | {
|
| | | //先列表化
|
| | | this.listOldSceneId = new List<int>();
|
| | | this.listNewScene = new List<int>();
|
| | | foreach (var data in this.listAdjustTarget)
|
| | | {
|
| | | if (data.Type == 1)
|
| | | {
|
| | | //只要场景
|
| | | listOldSceneId.Add(data.ElseScenesId);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | //当前楼层的全部房间
|
| | | var lisrRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(this.nowSelectFloorId);
|
| | | var listShowRoom = new List<Room>();
|
| | | 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 ■ 界面关闭___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 界面关闭
|
| | | /// </summary>
|
| | | public override void CloseFormBefore()
|
| | | {
|
| | | this.FinishSelectEvent = null;
|
| | |
|
| | | base.CloseFormBefore();
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 一般方法___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 检测场景能否显示
|
| | | /// </summary>
|
| | | /// <param name="i_scene"></param>
|
| | | 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 ■ 结构体_____________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 设备行信息
|
| | | /// </summary>
|
| | | private class DeviceRowInfo
|
| | | {
|
| | | /// <summary>
|
| | | /// 文本ID,目前用来做主键
|
| | | /// </summary>
|
| | | public int TextId = 0;
|
| | | /// <summary>
|
| | | /// 图标
|
| | | /// </summary>
|
| | | public string IconPath = string.Empty;
|
| | | /// <summary>
|
| | | /// 图标
|
| | | /// </summary>
|
| | | public string IconPathSelected = string.Empty;
|
| | | /// <summary>
|
| | | /// 设备回路主键
|
| | | /// </summary>
|
| | | public List<string> listDeviceKeys = new List<string>();
|
| | | }
|
| | |
|
| | | #endregion
|
| | | }
|
| | | }
|