| | |
| | | /// </summary>
|
| | | private MostRightIconControl btnSwitch = null;
|
| | | /// <summary>
|
| | | /// 电池控件
|
| | | /// </summary>
|
| | | private IconViewControl btnBattery = null;
|
| | | /// <summary>
|
| | | /// 是否获取网关反馈的结果 0:没有获取得到 1:已经获取得到
|
| | | /// </summary>
|
| | | private int ResponeResult = 0;
|
| | |
| | | /// 判断是否有开关功能
|
| | | /// </summary>
|
| | | private bool isHadOpenSwitch = true;
|
| | | /// <summary>
|
| | | /// 当前选择的房间
|
| | | /// </summary>
|
| | | public Common.Room nowSelectRoom = null;
|
| | |
|
| | | #endregion
|
| | |
|
| | |
| | | /// <summary>
|
| | | /// 未分配界面的设备选择控件
|
| | | /// </summary>
|
| | | /// <param name="i_ChidrenYaxis">子控件Y轴偏移量(真实值,有些界面需要这种特殊操作)</param>
|
| | | public DeviceRowCommon(int i_ChidrenYaxis = 0) : base(i_ChidrenYaxis)
|
| | | public DeviceRowCommon()
|
| | | {
|
| | | this.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft);
|
| | | this.Width = Application.GetRealWidth(1022);
|
| | |
| | | /// 初始化控件
|
| | | /// </summary>
|
| | | /// <param name="i_device">设备对象</param>
|
| | | public virtual void InitControl(CommonDevice i_device)
|
| | | /// <param name="i_nowSelectRoom">当前选择的房间(有点用处)</param>
|
| | | public virtual void InitControl(CommonDevice i_device, Common.Room i_nowSelectRoom)
|
| | | {
|
| | | this.device = i_device;
|
| | | this.nowSelectRoom = i_nowSelectRoom;
|
| | | //设备图标背景控件
|
| | | this.frameIconBackGroud = new FrameLayout();
|
| | | frameIconBackGroud.Height = Application.GetMinRealAverage(112);
|
| | | frameIconBackGroud.Width = Application.GetMinRealAverage(112);
|
| | | frameIconBackGroud.Height = this.GetPictrueRealSize(112);
|
| | | frameIconBackGroud.Width = this.GetPictrueRealSize(112);
|
| | | frameIconBackGroud.Gravity = Gravity.CenterVertical;
|
| | | frameIconBackGroud.X = Application.GetRealWidth(46);
|
| | | frameIconBackGroud.Radius = (uint)Application.GetMinRealAverage(112 / 2);
|
| | | frameIconBackGroud.Radius = (uint)this.GetPictrueRealSize(112 / 2);
|
| | | frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCGrayBackgroundColor;
|
| | | this.frameTable.AddChidren(frameIconBackGroud, ChidrenBindMode.NotBind);
|
| | | if (chidrenYaxis != 0)
|
| | |
| | | Common.LocalDevice.Current.SetDeviceIconToControl(btnDeviceIcon, i_device);
|
| | | frameIconBackGroud.AddChidren(btnDeviceIcon);
|
| | | //重新绑定事件
|
| | | this.frameTable.ChangedChidrenBindMode(frameIconBackGroud, ChidrenBindMode.BindEventOnly);
|
| | | this.frameTable.ChangedChidrenBindMode(frameIconBackGroud, ChidrenBindMode.BindEvent);
|
| | |
|
| | | //设备名字
|
| | | this.btnDeviceName = new NormalViewControl(600, 60, true);
|
| | | if (this.device.Type == DeviceType.WindowCoveringDevice || this.device.Type == DeviceType.Airer)
|
| | | {
|
| | | //窗帘因为右边有三个按钮,所以需要缩小名字的宽度
|
| | | this.btnDeviceName.Width = Application.GetRealWidth(360);
|
| | | }
|
| | | btnDeviceName.X = Application.GetRealWidth(181);
|
| | | btnDeviceName.Y = Application.GetRealHeight(16) + this.chidrenYaxis;
|
| | | //当指定实际坐标时,这里需要的偏移量为2倍
|
| | | btnDeviceName.Y = Application.GetRealHeight(16) + this.chidrenYaxis * 2;
|
| | | btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device);
|
| | | btnDeviceName.SelectedTextColor = Common.ZigbeeColor.Current.GXCTextSelectedColor;
|
| | | this.frameTable.AddChidren(btnDeviceName, ChidrenBindMode.BindEventOnly);
|
| | | this.frameTable.AddChidren(btnDeviceName, ChidrenBindMode.BindEvent);
|
| | |
|
| | | if (this.hadStatuFunction == false)
|
| | | {
|
| | |
| | | //状态
|
| | | this.btnStatu = new NormalViewControl(600, 50, true);
|
| | | btnStatu.X = Application.GetRealWidth(181);
|
| | | btnStatu.Y = Application.GetRealHeight(70) + this.chidrenYaxis;
|
| | | //当指定实际坐标时,这里需要的偏移量为2倍
|
| | | btnStatu.Y = Application.GetRealHeight(70) + this.chidrenYaxis * 2;
|
| | | btnStatu.TextSize = 10;
|
| | | btnStatu.TextColor = UserCenterColor.Current.TextGrayColor1;
|
| | | this.frameTable.AddChidren(btnStatu, ChidrenBindMode.BindEventOnly);
|
| | | this.frameTable.AddChidren(btnStatu, ChidrenBindMode.BindEvent);
|
| | | }
|
| | |
|
| | | //底线
|
| | |
| | | btnSwitch.UnSelectedImagePath = "Item/Switch.png";
|
| | | btnSwitch.SelectedImagePath = "Item/SwitchSelected.png";
|
| | |
|
| | | //电池控件
|
| | | if (this.device.Type == DeviceType.IASZone)
|
| | | {
|
| | | this.btnBattery = new IconViewControl(69);
|
| | | btnBattery.X = this.Width - Application.GetRealWidth(69 + 29);
|
| | | btnBattery.UnSelectedImagePath = "Item/Battery.png";
|
| | | btnBattery.Gravity = Gravity.CenterVertical;
|
| | | this.frameTable.AddChidren(btnBattery, ChidrenBindMode.BindEvent);
|
| | | if (chidrenYaxis != 0)
|
| | | {
|
| | | btnBattery.Y += chidrenYaxis;
|
| | | }
|
| | | if (this.device.IsBatteryDown == false)
|
| | | {
|
| | | btnBattery.Visible = false;
|
| | | }
|
| | | }
|
| | |
|
| | | //分享的房间,则不能编辑和删除
|
| | | if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false)
|
| | | if (this.nowSelectRoom.IsSharedRoom == false)
|
| | | {
|
| | | //编辑
|
| | | var btnEditor = this.AddEditorControl();
|
| | | btnEditor.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //关闭左滑菜单
|
| | | this.HideMenu();
|
| | | var detailInfo = new MainPage.DeviceDetailInfoForm();
|
| | | detailInfo.AddForm(i_device, HdlRoomLogic.Current.CurrentRoom);
|
| | | detailInfo.FormCloseEvent += (curDevice, curRoom) =>
|
| | | detailInfo.AddForm(i_device, this.nowSelectRoom);
|
| | | detailInfo.FormCloseEvent += () =>
|
| | | {
|
| | | if (HdlRoomLogic.Current.CurrentRoom.IsLove == true)
|
| | | if (this.nowSelectRoom.IsLove == true)
|
| | | {
|
| | | //当前是喜爱房间时
|
| | | if (HdlRoomLogic.Current.IsCollectInRoom(this.device) == false)
|
| | |
| | | return;
|
| | | }
|
| | | }
|
| | | else if (HdlRoomLogic.Current.CurrentRoom.Id != curRoom.Id)
|
| | | var curRoom = HdlRoomLogic.Current.GetRoomByDevice(this.device);
|
| | | if (curRoom == null || this.nowSelectRoom.Id != curRoom.Id)
|
| | | {
|
| | | //回调控件被移除的事件
|
| | | this.RowNeedRemoveEvent?.Invoke();
|
| | |
| | | {
|
| | | //移除收藏(不管什么情况,收藏都要移除)
|
| | | HdlRoomLogic.Current.DeleteLoveDevice(i_device);
|
| | | if (HdlRoomLogic.Current.CurrentRoom.IsLove == false)
|
| | | if (this.nowSelectRoom.IsLove == false)
|
| | | {
|
| | | //从房间中移除
|
| | | HdlRoomLogic.Current.DeleteDevice(i_device);
|
| | |
| | | //回调控件被移除的事件
|
| | | this.RowNeedRemoveEvent?.Invoke();
|
| | | this.RemoveFromParent();
|
| | | //上传空间区域信息
|
| | | HdlRoomLogic.Current.SetRoomInfoToGateway();
|
| | | };
|
| | | };
|
| | | }
|
| | |
| | | //等待网关回复后会重新刷新,不然一直是关闭状态
|
| | | isOpen = false;
|
| | | }
|
| | | //如果是传感器类,则默认是关的效果
|
| | | if (this.device.Type == DeviceType.PMSensor || this.device.Type == DeviceType.IASZone
|
| | | || this.device.Type == DeviceType.TemperatureSensor)
|
| | | {
|
| | | isOpen = false;
|
| | | }
|
| | |
|
| | | this.SetRowOpenStatu(isOpen);
|
| | | }
|
| | |
|
| | |
| | | {
|
| | | this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device);
|
| | | }
|
| | |
|
| | | if (this.btnDeviceName.IsSelected == isOpen)
|
| | | {
|
| | | //状态一样,则不需要处理
|
| | | return;
|
| | | }
|
| | | //设备名称控件
|
| | | this.btnDeviceName.IsSelected = isOpen;
|
| | | this.btnDeviceName.IsBold = isOpen;
|
| | | //设备的背景圆圈图
|
| | | if (isOpen == true)
|
| | | {
|
| | | this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCSelectedBackgroundColor;
|
| | | }
|
| | | else
|
| | | {
|
| | | this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCGrayBackgroundColor;
|
| | | }
|
| | | //设备图标控件
|
| | | this.btnDeviceIcon.IsSelected = isOpen;
|
| | | //开关控件
|
| | | if (this.btnSwitch != null)
|
| | | if (this.btnSwitch != null && this.btnSwitch.IsSelected != isOpen)
|
| | | {
|
| | | this.btnSwitch.IsSelected = isOpen;
|
| | | }
|
| | | //切换卡片状态特效
|
| | | this.SwitchRowStatuAppeal(isOpen);
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | //如果这个函数被重写的话,则代表这个设备有开关功能
|
| | | this.isHadOpenSwitch = false;
|
| | | //默认用在线状态来判断
|
| | | return i_device.IsOnline == 1;
|
| | | return Common.LocalDevice.Current.CheckDeviceIsOnline(i_device);
|
| | | }
|
| | |
|
| | |
|
| | |
| | | /// 深度卡片信息的返回事件(底层专用)
|
| | | /// </summary>
|
| | | /// <param name="device">设备</param>
|
| | | /// <param name="room">房间</param>
|
| | | public void CardDetailInfoBackEvent(CommonDevice device, Common.Room room)
|
| | | public void CardDetailInfoBackEvent(CommonDevice device)
|
| | | {
|
| | | if (HdlRoomLogic.Current.CurrentRoom.IsLove == true)
|
| | | if (this.nowSelectRoom.IsLove == true)
|
| | | {
|
| | | //已经取消的收藏
|
| | | if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
| | |
| | | {
|
| | | //如果这个设备改变了房间的话,回调卡片被删除的函数
|
| | | var nowRoom = HdlRoomLogic.Current.GetRoomByDevice(device);
|
| | | if (nowRoom == null || nowRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id)
|
| | | if (nowRoom == null || nowRoom.Id != this.nowSelectRoom.Id)
|
| | | {
|
| | | //回调控件被移除的事件
|
| | | this.RowNeedRemoveEvent?.Invoke();
|
| | |
| | | this.ResponeResult = 0;
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | int waitime = 30;
|
| | | int waitime = 40;
|
| | | while (waitime > 0)
|
| | | {
|
| | | System.Threading.Thread.Sleep(100);
|
| | |
| | | break;
|
| | | }
|
| | | waitime--;
|
| | | //2秒的时候,还是接受不到的话,强制再次刷新设备状态
|
| | | if (waitime == 20)
|
| | | {
|
| | | //从新发送获取设备的状态(强制)
|
| | | this.device.HadReadDeviceStatu = false;
|
| | | this.SendStatuComand();
|
| | | }
|
| | | }
|
| | | if (waitime <= 0)
|
| | | if (waitime <= 0 && this.Parent != null)
|
| | | {
|
| | | //没有获取得到结果
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | |
| | | public void SetHadGetResponeResultStatu()
|
| | | {
|
| | | this.ResponeResult = 1;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 接收网关回复的状态(true:已经接收到网关的回复 false:还没有接收到网关回复)
|
| | | /// </summary>
|
| | | /// <returns></returns>
|
| | | public bool ReceiveResponeResultStatu()
|
| | | {
|
| | | return this.ResponeResult == 1;
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 显示低电量_________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 刷新电池电量状态
|
| | | /// </summary>
|
| | | public void RefreshBatteryStatu()
|
| | | {
|
| | | if (this.btnBattery == null) { return; }
|
| | | if (this.device.IsBatteryDown == true)
|
| | | {
|
| | | //电量低,显示图标
|
| | | if (this.btnBattery.Visible == false)
|
| | | {
|
| | | this.btnBattery.Visible = true;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | //电量足够,隐藏图标
|
| | | if (this.btnBattery.Visible == true)
|
| | | {
|
| | | this.btnBattery.Visible = false;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 行闪烁特效_________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 是否处于特效中
|
| | | /// </summary>
|
| | | private bool isAppeal = false;
|
| | | /// <summary>
|
| | | /// 开启行闪烁特效
|
| | | /// </summary>
|
| | | public void StartRowLightAppeal()
|
| | | {
|
| | | //设备状态必须刷新
|
| | | this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device);
|
| | |
|
| | | if (this.isAppeal == true) { return; }
|
| | | this.isAppeal = true;
|
| | |
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | //闪烁5秒,间隔400毫秒
|
| | | int count = 5000 / 400;
|
| | | bool isOpen = false;
|
| | | while (this.Parent != null && count >= 0)
|
| | | {
|
| | | //闪烁特效
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | isOpen = !isOpen;
|
| | | this.SwitchRowStatuAppeal(isOpen);
|
| | | });
|
| | | System.Threading.Thread.Sleep(400);
|
| | | count--;
|
| | | }
|
| | | if (this.Parent != null && isOpen == false)
|
| | | {
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | //结束时,默认为打开特效
|
| | | this.SwitchRowStatuAppeal(true);
|
| | | }, ShowErrorMode.NO);
|
| | | }
|
| | | this.isAppeal = false;
|
| | |
|
| | | }, ShowErrorMode.NO);
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 切换卡片状态特效
|
| | | /// </summary>
|
| | | public void SwitchRowStatuAppeal(bool isOpen)
|
| | | {
|
| | | if (this.btnDeviceName.IsSelected == isOpen)
|
| | | {
|
| | | //状态一样,则不需要处理
|
| | | return;
|
| | | }
|
| | | //设备名称控件
|
| | | this.btnDeviceName.IsSelected = isOpen;
|
| | | this.btnDeviceName.IsBold = isOpen;
|
| | | //设备的背景圆圈图
|
| | | if (isOpen == true)
|
| | | {
|
| | | this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCSelectedBackgroundColor;
|
| | | }
|
| | | else
|
| | | {
|
| | | this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCGrayBackgroundColor;
|
| | | }
|
| | | //设备图标控件
|
| | | this.btnDeviceIcon.IsSelected = isOpen;
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 控件摧毁___________________________
|
| | |
|
| | | /// <summary>
|