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;
|
|
#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.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部信息
|
/// </summary>
|
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 ■ 刷新场景列表_______________________
|
|
/// <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()
|
{
|
//先列表化
|
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.GetRoomsByCurrentFloorIdAppendLoveRoom();
|
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
|
}
|
}
|