using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone.UserCenter { /// /// 所属区域的控件 /// public class BelongAreaControl : FrameRowControl { #region ■ 变量声明___________________________ /// /// 选择房间的事件(房间主键) /// public Action SelectRoomEvent = null; /// /// 当前选择的房间的主键(楼层主键可以无视) /// public string RoomKey = string.Empty; /// /// 当前选择的楼层主键(没必要公开出去) /// private string FloorKey = string.Empty; /// /// 楼层列表名字 /// private List listFloorName = new List(); /// /// 楼层列表主键 /// private List listFloorKeys = new List(); /// /// 房间名字 /// private List> listRoomName = new List>(); /// /// 房间主键 /// private List> listRoomKeys = new List>(); #endregion #region ■ 初始化_____________________________ /// /// 所属区域的控件 /// /// 子控件Y轴偏移量(【列表控件的rowSpace/2】即可,不懂默认为0即可) public BelongAreaControl(int i_ChidrenYaxis = 0) : base(i_ChidrenYaxis) { //初始化数据 this.InitData(); } /// /// 初始化控件(针对的是场景) /// /// 标题文本 /// 房间ID public void InitControl(string i_caption, string i_roomId) { var room = HdlRoomLogic.Current.GetRoomById(i_roomId); this.DoInitControl(i_caption, room); } /// /// 初始化控件(针对的是网关) /// /// 标题文本 /// 网关对象 public void InitControl(string i_caption, ZigBee.Device.ZbGateway i_gateway) { var room = HdlGatewayLogic.Current.GetRoomByGateway(i_gateway); this.DoInitControl(i_caption, room); } /// /// 初始化控件(针对的是回路) /// /// 标题文本 /// 设备对象 public void InitControl(string i_caption, ZigBee.Device.CommonDevice i_device) { var room = HdlRoomLogic.Current.GetRoomByDevice(i_device); this.DoInitControl(i_caption, room); } /// /// 初始化控件(针对的是整个设备) /// /// 标题文本 /// 设备对象 public void InitControl(string i_caption, List i_listDevice) { var room = Common.LocalDevice.Current.GeteRealDeviceRoom(i_listDevice[0]); this.DoInitControl(i_caption, room); } /// /// 初始化控件 /// /// /// 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); } } /// /// 初始化控件 /// /// 标题文本 /// 房间名字 /// 房间是否是分享的 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); }; } /// /// 初始化数据 /// private void InitData() { var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); if (dicFloor.Count == 0) { //第一位默认添加未分配 var listKeys = new List() { "" }; var listName = new List() { 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() { "" }; var listName = new List() { "" }; 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(); listKeys = new List(); foreach (var myRoom in listRoom) { listName.Add(myRoom.Name); listKeys.Add(myRoom.Id); } listRoomName.Add(listName); listRoomKeys.Add(listKeys); } } } } #endregion #region ■ 区域选择___________________________ /// /// 区域选择 /// /// /// 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 ■ 控件摧毁___________________________ /// /// 控件摧毁 /// public override void RemoveFromParent() { this.SelectRoomEvent = null; base.RemoveFromParent(); } #endregion } }