using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone.UserCenter
|
{
|
/// <summary>
|
/// 所属区域的控件
|
/// </summary>
|
public class BelongAreaControl : FrameRowControl
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 选择房间的事件(房间主键)
|
/// </summary>
|
public Action<string> SelectRoomEvent = null;
|
/// <summary>
|
/// 当前选择的房间的主键(楼层主键可以无视)
|
/// </summary>
|
public string RoomKey = string.Empty;
|
/// <summary>
|
/// 当前选择的楼层主键(没必要公开出去)
|
/// </summary>
|
private string FloorKey = string.Empty;
|
/// <summary>
|
/// 楼层列表名字
|
/// </summary>
|
private List<string> listFloorName = new List<string>();
|
/// <summary>
|
/// 楼层列表主键
|
/// </summary>
|
private List<string> listFloorKeys = new List<string>();
|
/// <summary>
|
/// 房间名字
|
/// </summary>
|
private List<List<string>> listRoomName = new List<List<string>>();
|
/// <summary>
|
/// 房间主键
|
/// </summary>
|
private List<List<string>> listRoomKeys = new List<List<string>>();
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 所属区域的控件
|
/// </summary>
|
/// <param name="i_ChidrenYaxis">子控件Y轴偏移量(【列表控件的rowSpace/2】即可,不懂默认为0即可)</param>
|
public BelongAreaControl(int i_ChidrenYaxis = 0) : base(i_ChidrenYaxis)
|
{
|
//初始化数据
|
this.InitData();
|
}
|
|
/// <summary>
|
/// 初始化控件(针对的是场景)
|
/// </summary>
|
/// <param name="i_caption">标题文本</param>
|
/// <param name="i_roomId">房间ID</param>
|
public void InitControl(string i_caption, string i_roomId)
|
{
|
var room = HdlRoomLogic.Current.GetRoomById(i_roomId);
|
this.DoInitControl(i_caption, room);
|
}
|
|
/// <summary>
|
/// 初始化控件(针对的是网关)
|
/// </summary>
|
/// <param name="i_caption">标题文本</param>
|
/// <param name="i_gateway">网关对象</param>
|
public void InitControl(string i_caption, ZigBee.Device.ZbGateway i_gateway)
|
{
|
var room = HdlGatewayLogic.Current.GetRoomByGateway(i_gateway);
|
this.DoInitControl(i_caption, room);
|
}
|
|
/// <summary>
|
/// 初始化控件(针对的是回路)
|
/// </summary>
|
/// <param name="i_caption">标题文本</param>
|
/// <param name="i_device">设备对象</param>
|
public void InitControl(string i_caption, ZigBee.Device.CommonDevice i_device)
|
{
|
var room = HdlRoomLogic.Current.GetRoomByDevice(i_device);
|
this.DoInitControl(i_caption, room);
|
}
|
|
/// <summary>
|
/// 初始化控件(针对的是整个设备)
|
/// </summary>
|
/// <param name="i_caption">标题文本</param>
|
/// <param name="i_listDevice">设备对象</param>
|
public void InitControl(string i_caption, List<ZigBee.Device.CommonDevice> i_listDevice)
|
{
|
var room = Common.LocalDevice.Current.GeteRealDeviceRoom(i_listDevice[0]);
|
this.DoInitControl(i_caption, room);
|
}
|
|
/// <summary>
|
/// 初始化控件
|
/// </summary>
|
/// <param name="i_caption"></param>
|
/// <param name="i_Room"></param>
|
private void DoInitControl(string i_caption, Common.Room i_Room)
|
{
|
if (i_Room == null)
|
{
|
//未分配区域
|
this.InitControl(i_caption, Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom), false);
|
}
|
else
|
{
|
string roomName = i_Room.Name;
|
this.RoomKey = i_Room.Id;
|
this.FloorKey = i_Room.FloorId;
|
if (Common.Config.Instance.Home.FloorDics.ContainsKey(i_Room.FloorId) == true)
|
{
|
//楼层+房间
|
roomName = Common.Config.Instance.Home.FloorDics[i_Room.FloorId] + " " + roomName;
|
}
|
this.InitControl(i_caption, roomName, i_Room.IsSharedRoom);
|
}
|
}
|
|
/// <summary>
|
/// 初始化控件
|
/// </summary>
|
/// <param name="i_caption">标题文本</param>
|
/// <param name="i_RoomName">房间名字</param>
|
/// <param name="IsSharedRoom">房间是否是分享的</param>
|
private void InitControl(string i_caption, string i_RoomName, bool IsSharedRoom)
|
{
|
//标题
|
var btnCaption = new NormalViewControl(270, 58, true);
|
btnCaption.X = ControlCommonResourse.XXLeft;
|
btnCaption.Gravity = Gravity.CenterVertical;
|
btnCaption.Text = i_caption + ":";
|
this.AddChidren(btnCaption, ChidrenBindMode.BindEvent);
|
|
//显示框
|
var txtView = new NormalViewControl(700, true);
|
txtView.X = Application.GetRealWidth(294);
|
txtView.Gravity = Gravity.CenterVertical;
|
txtView.TextColor = UserCenterColor.Current.TextGrayColor1;
|
txtView.Text = i_RoomName;
|
this.AddChidren(txtView, ChidrenBindMode.BindEvent);
|
|
if (chidrenYaxis != 0)
|
{
|
btnCaption.Y += chidrenYaxis;
|
txtView.Y += chidrenYaxis;
|
}
|
|
if (IsSharedRoom == true)
|
{
|
//如果这个设备位于分享的房间
|
this.UseClickStatu = false;
|
return;
|
}
|
if (this.listFloorKeys.Count == 0 && listRoomKeys.Count == 0)
|
{
|
//或者根本就没有创建房间,则不允许更改
|
this.UseClickStatu = false;
|
return;
|
}
|
//右箭头
|
this.AddRightArrow();
|
|
this.ButtonClickEvent += (sender, e) =>
|
{
|
//区域选择
|
this.ShowSelectRoom(txtView, i_caption);
|
};
|
}
|
|
/// <summary>
|
/// 初始化数据
|
/// </summary>
|
private void InitData()
|
{
|
var dicFloor = HdlRoomLogic.Current.GetFloorSortList();
|
if (dicFloor.Count == 0)
|
{
|
//第一位默认添加未分配
|
var listKeys = new List<string>() { "" };
|
var listName = new List<string>() { Language.StringByID(R.MyInternationalizationString.uUndistributed) };
|
//房间名字和主键收集
|
var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(string.Empty, false);
|
foreach (var myRoom in listRoom)
|
{
|
listName.Add(myRoom.Name);
|
listKeys.Add(myRoom.Id);
|
}
|
listRoomName.Add(listName);
|
listRoomKeys.Add(listKeys);
|
}
|
else
|
{
|
//第一位默认添加未分配(未分配放在楼层那个菜单)
|
var listKeys = new List<string>() { "" };
|
var listName = new List<string>() { "" };
|
listRoomName.Add(listName);
|
listRoomKeys.Add(listKeys);
|
this.listFloorKeys.Add("");
|
this.listFloorName.Add(Language.StringByID(R.MyInternationalizationString.uUndistributed));
|
|
foreach (string fKeys in dicFloor.Keys)
|
{
|
var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(fKeys, false);
|
if (listRoom.Count > 0)
|
{
|
//楼层名字和主键收集
|
this.listFloorKeys.Add(fKeys);
|
this.listFloorName.Add(dicFloor[fKeys]);
|
//房间名字和主键收集
|
listName = new List<string>();
|
listKeys = new List<string>();
|
foreach (var myRoom in listRoom)
|
{
|
listName.Add(myRoom.Name);
|
listKeys.Add(myRoom.Id);
|
}
|
listRoomName.Add(listName);
|
listRoomKeys.Add(listKeys);
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
#region ■ 区域选择___________________________
|
|
/// <summary>
|
/// 区域选择
|
/// </summary>
|
/// <param name="txtView"></param>
|
/// <param name="i_caption"></param>
|
private void ShowSelectRoom(NormalViewControl txtView, string i_caption)
|
{
|
int index1 = this.listFloorKeys.IndexOf(FloorKey);
|
if (index1 == -1) { index1 = 0; }
|
int index2 = this.listRoomKeys[index1].IndexOf(RoomKey);
|
if (index2 == -1) { index2 = 0; }
|
|
if (this.listFloorKeys.Count == 0)
|
{
|
//无楼层模式
|
PickerView.Show(this.listRoomName[0], (value) =>
|
{
|
RoomKey = this.listRoomKeys[0][value];
|
if (RoomKey != string.Empty)
|
{
|
//房间
|
txtView.Text = this.listRoomName[0][value];
|
}
|
else
|
{
|
txtView.Text = Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
|
}
|
this.SelectRoomEvent?.Invoke(RoomKey);
|
|
}, index2, i_caption,
|
Language.StringByID(R.MyInternationalizationString.uFinish),
|
Language.StringByID(R.MyInternationalizationString.uCancel));
|
}
|
else
|
{
|
//有楼层模式
|
PickerView.ShowSecondary(this.listFloorName, this.listRoomName, (value1, value2) =>
|
{
|
FloorKey = this.listFloorKeys[value1];
|
RoomKey = this.listRoomKeys[value1][value2];
|
if (RoomKey != string.Empty)
|
{
|
//楼层+房间
|
txtView.Text = this.listFloorName[value1] + " " + this.listRoomName[value1][value2];
|
}
|
else
|
{
|
txtView.Text = Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
|
}
|
this.SelectRoomEvent?.Invoke(RoomKey);
|
|
}, index1, index2, i_caption,
|
Language.StringByID(R.MyInternationalizationString.uFinish),
|
Language.StringByID(R.MyInternationalizationString.uCancel));
|
}
|
}
|
|
#endregion
|
|
#region ■ 控件摧毁___________________________
|
|
/// <summary>
|
/// 控件摧毁
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
this.SelectRoomEvent = null;
|
|
base.RemoveFromParent();
|
}
|
|
#endregion
|
}
|
}
|