using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; using Shared.Phone.UserCenter; namespace Shared.Phone.MainPage.Controls { /// /// 主页的设备卡片控件底层共通(宽度:458 + 14 * 2 高度:305 + 43) /// public class DeviceCardCommon : FrameLayoutControl { #region ■ 变量声明___________________________ /// /// 卡片需要被移除的事件 /// public Action CardNeedRemoveEvent = null; /// /// 背景图片控件 /// private PicViewControl btnBackGroud = null; /// /// 设备名称控件 /// private NormalViewControl btnDeviceName = null; /// /// 设备的背景圆圈图控件 /// private NormalViewControl btnDeviceRound = null; /// /// 设备图标控件 /// private IconViewControl btnDeviceIcon = null; /// /// 状态文本控件 /// private NormalViewControl btnStatu = null; /// /// 开关控件 /// private PicViewControl btnSwitch = null; /// /// 是否获取网关反馈的结果 0:没有获取得到 1:已经获取得到 /// private int ResponeResult = 0; #endregion #region ■ 初始化_____________________________ /// /// 主页的设备卡片控件底层共通(宽度:458 + 14 * 2 高度:305 + 43) /// public DeviceCardCommon() { //图片真实宽度+图片自身左右空白 this.Width = Application.GetMinRealAverage(458 + 14 * 2); //图片高度+阴影 this.Height = Application.GetMinRealAverage(305 + 43); //取消点击特效 this.UseClickStatu = false; } /// /// 初始化控件 /// /// 指定设备 public virtual void InitControl(CommonDevice i_device) { //背景图片 this.btnBackGroud = new PicViewControl(this.Width, this.Height, false); btnBackGroud.UnSelectedImagePath = "Item/FunctionCardView.png"; btnBackGroud.SelectedImagePath = "Item/FunctionCardViewSelected.png"; btnBackGroud.Gravity = Gravity.CenterHorizontal; this.AddChidren(btnBackGroud, ChidrenBindMode.BindEventOnly); //设备名称控件 this.btnDeviceName = new NormalViewControl(320, 63, true); btnDeviceName.X = Application.GetMinRealAverage(40); btnDeviceName.Y = Application.GetMinRealAverage(17); btnDeviceName.TextSize = 16; btnDeviceName.TextColor = UserCenterColor.Current.TextGrayColor1; btnDeviceName.SelectedTextColor = UserCenterColor.Current.White; btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device); this.AddChidren(btnDeviceName, ChidrenBindMode.BindEventOnly); //收集控件 var btnCollect = new IconViewControl(107); btnCollect.X = Application.GetMinRealAverage(350); btnCollect.Y = Application.GetMinRealAverage(12); btnCollect.UnSelectedImagePath = "Item/Collection1.png"; btnCollect.SelectedImagePath = "Item/CollectionSelected1.png"; this.AddChidren(btnCollect, ChidrenBindMode.NotBind); btnCollect.IsSelected = HdlRoomLogic.Current.IsCollectInRoom(i_device); btnCollect.ButtonClickEvent += (sender, e) => { //状态取反 btnCollect.IsSelected = !btnCollect.IsSelected; if (btnCollect.IsSelected == false) { //取消收藏 HdlRoomLogic.Current.DeleteLoveDevice(i_device); if (HdlRoomLogic.Current.CurrentRoom.IsLove == true) { //如果当前房间是我的喜爱的话,回调卡片被删除的事件 this.CardNeedRemoveEvent?.Invoke(); } } else { //添加收藏 HdlRoomLogic.Current.AddLoveDevice(i_device); } }; //设备的背景圆圈图 this.btnDeviceRound = new NormalViewControl(Application.GetMinRealAverage(124), Application.GetMinRealAverage(124), false); btnDeviceRound.Radius = (uint)Application.GetMinRealAverage(124) / 2; btnDeviceRound.X = Application.GetMinRealAverage(44); btnDeviceRound.Y = Application.GetMinRealAverage(101); btnDeviceRound.BackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionUnSelectedBackgroundColor; btnDeviceRound.SelectedBackgroundColor = Common.ZigbeeColor.Current.GXCForFunctionBackgroundColor; this.AddChidren(btnDeviceRound, ChidrenBindMode.BindEventOnly); //设备图标控件 this.btnDeviceIcon = new IconViewControl(86); btnDeviceIcon.X = Application.GetMinRealAverage(63); btnDeviceIcon.Y = Application.GetMinRealAverage(121); this.AddChidren(btnDeviceIcon, ChidrenBindMode.BindEventOnly); //状态文本控件 this.btnStatu = new NormalViewControl(Application.GetMinRealAverage(280), Application.GetMinRealAverage(63), false); btnStatu.X = Application.GetMinRealAverage(46); btnStatu.Y = Application.GetMinRealAverage(236); btnStatu.TextColor = UserCenterColor.Current.TextColor1; btnStatu.SelectedTextColor = Common.ZigbeeColor.Current.GXCTextSelectedColor; btnStatu.IsBold = true; this.AddChidren(btnStatu, ChidrenBindMode.BindEventOnly); //开关控件(不加入父控件中) this.btnSwitch = new PicViewControl(109, 104); btnSwitch.X = Application.GetMinRealAverage(325); btnSwitch.Y = Application.GetMinRealAverage(202); btnSwitch.UnSelectedImagePath = "Item/Switch1.png"; btnSwitch.SelectedImagePath = "Item/SwitchSelected1.png"; this.AddChidren(this.btnSwitch, ChidrenBindMode.NotBind); btnSwitch.Visible = false; //刷新信息 this.RefreshControlInfo(i_device); } #endregion #region ■ 添加开关控件_______________________ /// /// 添加开关控件 /// /// public PicViewControl AddSwitchControl() { btnSwitch.Visible = true; return btnSwitch; } #endregion #region ■ 刷新控件状态_______________________ /// /// 刷新控件状态 /// /// 设备对象,不是推送的那个 public void RefreshControlInfo(CommonDevice i_device) { //设备状态必须刷新 this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(i_device); //设备图标也刷新 Common.LocalDevice.Current.SetDeviceIconToControl(btnDeviceIcon, i_device); //检测设备是否是打开状态 bool isOpen = this.CheckIsOpenStatu(i_device); this.SetCardStatu(isOpen); } /// /// 设置卡片状态 /// /// public void SetCardStatu(bool isOpen) { if (this.btnBackGroud.IsSelected == isOpen) { //状态一样,则不需要处理 return; } //背景图片 this.btnBackGroud.IsSelected = isOpen; //设备名称控件 this.btnDeviceName.IsSelected = isOpen; this.btnDeviceName.IsBold = isOpen; //设备的背景圆圈图 this.btnDeviceRound.IsSelected = isOpen; //设备图标控件 this.btnDeviceIcon.IsSelected = isOpen; //状态文本控件 this.btnStatu.IsSelected = isOpen; //开关控件 this.btnSwitch.IsSelected = isOpen; } /// /// 设置设备的状态文本 /// /// 状态文本 public void SetDeviceStatuText(string i_Text) { this.btnStatu.Text = i_Text; } #endregion #region ■ 发送获取状态命令___________________ /// /// 发送获取状态命令 /// /// public virtual void SendStatuComand(CommonDevice i_device) { return; } #endregion #region ■ 检测设备打开状态___________________ /// /// 检测设备是否是打开状态 /// /// /// public virtual bool CheckIsOpenStatu(CommonDevice i_device) { //默认用在线状态来判断 return i_device.IsOnline == 1; } #endregion #region ■ 深度卡片信息的返回事件_____________ /// /// 深度卡片信息的返回事件(底层专用) /// /// 设备 /// 房间 public void CardDetailInfoBackEvent(CommonDevice device, Common.Room room) { //如果是主页取消搜藏的话,回调卡片被删除的函数 if (HdlRoomLogic.Current.CurrentRoom.IsLove && HdlRoomLogic.Current.IsCollectInRoom(device) == false) { this.CardNeedRemoveEvent?.Invoke(); return; } //如果这个设备改变了房间的话,回调卡片被删除的函数 var nowRoom = HdlRoomLogic.Current.GetRoomByDevice(device); if (nowRoom == null || nowRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id) { this.CardNeedRemoveEvent?.Invoke(); return; } //如果它还在这个房间的话,刷新卡片信息 this.RefreshControlInfo(device); } #endregion #region ■ 是否获取网关反馈的结果_____________ /// /// 检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息 /// 获取到回复结果之后,记得调用SetHadGetResponeResultStatu()函数设置状态 /// /// 设备目前的开关状态 public void StartCheckResponeResult(bool oldOpenStatu) { this.ResponeResult = 0; HdlThreadLogic.Current.RunThread(() => { int waitime = 30 * 100; while (waitime > 0) { System.Threading.Thread.Sleep(100); if (this.ResponeResult == 1) { //已经获取得到数据 break; } } if (waitime <= 0) { //没有获取得到结果 HdlThreadLogic.Current.RunMain(() => { var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FAIL)); msgContr.Show(); //变更回原来的状态 this.SetCardStatu(oldOpenStatu); }); } }); } /// /// 设置已经获取到网关的反馈结果 /// public void SetHadGetResponeResultStatu() { this.ResponeResult = 1; } #endregion #region ■ 控件摧毁___________________________ /// /// 控件摧毁 /// public override void RemoveFromParent() { this.CardNeedRemoveEvent = null; base.RemoveFromParent(); } #endregion } }