using Shared.Common; using Shared.Phone.UserCenter; using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.MainPage.ControlForm { /// /// 空调类型的深度卡片界面 /// public class DeviceAcDetailCardForm : DeviceDetailCardCommonForm { #region ■ 变量声明___________________________ /// /// 界面上可以操作的控件 /// private List listControl = new List(); /// /// 空调控件 /// private ArcScaleSeekBar arcScaleSeekBar = null; /// /// 空调控件里面的那个显示制热,制冷的控件 /// private NormalViewControl btnNowModeView = null; /// /// 减号控件 /// private IconViewControl btnReduce = null; /// /// 加号控件 /// private IconViewControl btnAdd = null; /// /// 是否设置进度值(只使用一次后,就变更值) /// private bool notSetProgress = false; /// /// 能否发送进度值命令 /// private bool canSetProgress = true; /// /// 清洗滤网提示的FrameLayout /// private FrameLayout frameClrean = null; /// /// 当前的温度进度值 /// private int nowProgressValue = -1; /// /// 空调控件 /// private AC deviceAc = null; #endregion #region ■ 初始化_____________________________ /// /// 底层初始化中部控件完成之后 /// /// public override void InitMiddleFrameAfter(FrameLayout frameWhiteBack) { //左滑不能 this.ScrollEnabled = false; this.deviceAc = (AC)this.device; //先清空 this.listControl = new List(); if (device.HadReadDeviceStatu == true && DeviceAcDetailCardMethord.IsOpen(deviceAc) == true) { //设置状态文字 当前室温 this.SetStatuText(deviceAc.currentLocalTemperature + "℃"); } else { //设置状态文字 关闭 this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close)); } //清洗滤网提示的FrameLayout this.frameClrean = new FrameLayout(); frameClrean.Width = Application.GetRealWidth(600); frameClrean.Height = this.GetPictrueRealSize(69); frameClrean.X = ControlCommonResourse.XXLeft; frameClrean.Y = Application.GetRealHeight(35); frameWhiteBack.AddChidren(frameClrean); frameClrean.Visible = false; //清洗滤网提示的图标 var btnTipIcon = new IconViewControl(69); btnTipIcon.UnSelectedImagePath = "AC/AC_TIP.png"; frameClrean.AddChidren(btnTipIcon); //请注意清洗滤网哦 var btnClrean = new NormalViewControl(Application.GetRealWidth(400), frameClrean.Height, false); btnClrean.TextID = R.MyInternationalizationString.uPleaseClreanACfilter; btnClrean.X = frameClrean.Right + Application.GetRealWidth(12); frameClrean.AddChidren(btnClrean); //调整设备和状态控件的Y轴 this.ResetDeviceNameAndStatuPoint(Application.GetRealHeight(184), Application.GetRealHeight(256)); //初始化空调控件 this.InitAcControl(frameWhiteBack); } /// /// 初始化空调控件 /// /// private void InitAcControl(FrameLayout frameWhiteBack) { bool isAcOpen = DeviceAcDetailCardMethord.IsOpen(deviceAc); //空调控件的容器 var frameAcBack = new FrameLayout(); frameAcBack.Y = Application.GetRealHeight(412); frameAcBack.Width = this.GetPictrueRealSize(671); frameAcBack.Height = this.GetPictrueRealSize(671); frameAcBack.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(frameAcBack); this.nowProgressValue = DeviceAcDetailCardMethord.GetCurrentModeTemperature(deviceAc); if (nowProgressValue < 16) { nowProgressValue = 16; } if (nowProgressValue > 32) { nowProgressValue = 32; } //空调控件 this.arcScaleSeekBar = new ArcScaleSeekBar(); arcScaleSeekBar.Width = frameAcBack.Width; arcScaleSeekBar.Height = frameAcBack.Height; arcScaleSeekBar.MinValue = 16; arcScaleSeekBar.MaxValue = 32; arcScaleSeekBar.Progress = nowProgressValue; arcScaleSeekBar.IsClickable = isAcOpen; arcScaleSeekBar.ProgressBarUnitSring = string.Empty; frameAcBack.AddChidren(arcScaleSeekBar); if (isAcOpen == true) { arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCArcScaleSeekBarStartColor, ZigbeeColor.Current.GXCArcScaleSeekBarEndColor); } else { arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor); } //空调控件里面的那个显示制热,制冷的控件 this.btnNowModeView = new NormalViewControl(200, 55, true); btnNowModeView.Y = this.GetPictrueRealSize(184); btnNowModeView.Gravity = Gravity.CenterHorizontal; btnNowModeView.Text = DeviceAcDetailCardMethord.GetModeNameByModeId(deviceAc.currentSystemMode); btnNowModeView.TextSize = 12; btnNowModeView.TextAlignment = TextAlignment.Center; frameAcBack.AddChidren(btnNowModeView); //减号 this.btnReduce = new IconViewControl(81); btnReduce.CanClick = isAcOpen; btnReduce.UnSelectedImagePath = "AC/Reduce.png"; btnReduce.X = this.GetPictrueRealSize(132); btnReduce.Y = this.GetPictrueRealSize(268); frameAcBack.AddChidren(btnReduce); btnReduce.ButtonClickEvent += (sender, e) => { if (arcScaleSeekBar.Progress > 16) { this.nowProgressValue = arcScaleSeekBar.Progress - 1; arcScaleSeekBar.Progress = this.nowProgressValue; } }; //加号 this.btnAdd = new IconViewControl(81); btnAdd.CanClick = isAcOpen; btnAdd.UnSelectedImagePath = "AC/Add.png"; btnAdd.X = frameAcBack.Width - this.GetPictrueRealSize(81 + 132); btnAdd.Y = btnReduce.Y; frameAcBack.AddChidren(btnAdd); btnAdd.ButtonClickEvent += (sender, e) => { if (arcScaleSeekBar.Progress < 32) { this.nowProgressValue = arcScaleSeekBar.Progress + 1; arcScaleSeekBar.Progress = this.nowProgressValue; } }; //℃ var btnUint = new NormalViewControl(100, 66, true); btnUint.Y = this.GetPictrueRealSize(366); btnUint.Gravity = Gravity.CenterHorizontal; btnUint.TextAlignment = TextAlignment.Center; btnUint.Text = "℃"; btnUint.TextSize = 18; frameAcBack.AddChidren(btnUint); //送风没有温度的概念 if (deviceAc.currentSystemMode == 7) { //颜色变更 arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor); arcScaleSeekBar.IsClickable = false; this.btnReduce.CanClick = false; this.btnAdd.CanClick = false; } //是否启用摆风 int IconSpace = Application.GetRealWidth(156); int YY = frameAcBack.Bottom + Application.GetRealHeight(69); int XX = Application.GetRealWidth(207); //扫风模式(第一个图标) var btnFanSwingMode = new IconViewControl(81); if (deviceAc.UseSwingFunction) { IconSpace = Application.GetRealWidth(109); XX = Application.GetRealWidth(156); btnFanSwingMode.X = XX; btnFanSwingMode.Y = YY; btnFanSwingMode.UnSelectedImagePath = DeviceAcDetailCardMethord.GetFanSwingModeUnSelectedImagePathByFanSwingModeId(deviceAc.currentFanSwingMode); btnFanSwingMode.SelectedImagePath = DeviceAcDetailCardMethord.GetFanSwingModeSelectedImagePathByFanSwingModeId(deviceAc.currentFanSwingMode); btnFanSwingMode.IsSelected = isAcOpen; frameWhiteBack.AddChidren(btnFanSwingMode); btnFanSwingMode.ButtonClickEvent += (sender, e) => { //空调打开状态才能点击 if (DeviceAcDetailCardMethord.IsOpen(deviceAc) == true) { //选择摆风 this.SelectFanSwing(frameWhiteBack); } }; XX = btnFanSwingMode.Right + IconSpace; } this.listControl.Add(btnFanSwingMode); //空调模式(第二个图标) var btnModel = new IconViewControl(81); btnModel.X = XX; btnModel.Y = YY; btnModel.UnSelectedImagePath = DeviceAcDetailCardMethord.GetModeUnSelectedImagePathByModeId(deviceAc.currentSystemMode); btnModel.SelectedImagePath = DeviceAcDetailCardMethord.GetModeSelectedImagePathByModeId(deviceAc.currentSystemMode); btnModel.IsSelected = isAcOpen; frameWhiteBack.AddChidren(btnModel); XX = btnModel.Right + IconSpace; this.listControl.Add(btnModel); btnModel.ButtonClickEvent += (sender, e) => { //空调打开状态才能点击 if (DeviceAcDetailCardMethord.IsOpen(deviceAc) == true) { //选择模式 this.SelectAcModel(frameWhiteBack); } }; //开关(第三个图标) var btnSwitch = new IconViewControl(81); btnSwitch.X = XX; btnSwitch.Y = YY; btnSwitch.UnSelectedImagePath = "AC/OpenOrClose.png"; btnSwitch.SelectedImagePath = "AC/OpenOrCloseSelected.png"; btnSwitch.IsSelected = isAcOpen; frameWhiteBack.AddChidren(btnSwitch); XX = btnSwitch.Right + IconSpace; this.listControl.Add(btnSwitch); btnSwitch.ButtonClickEvent += (sender, e) => { this.SetSwitchComand(!btnSwitch.IsSelected); }; //风速模式(第四个图标) var btnFanMode = new IconViewControl(81); btnFanMode.X = XX; btnFanMode.Y = YY; btnFanMode.UnSelectedImagePath = DeviceAcDetailCardMethord.GetFanModeUnSelectedImagePathByFanModeId(deviceAc.currentFanMode); btnFanMode.SelectedImagePath = DeviceAcDetailCardMethord.GetFanModeSelectedImagePathByFanModeId(deviceAc.currentFanMode); btnFanMode.IsSelected = isAcOpen; frameWhiteBack.AddChidren(btnFanMode); this.listControl.Add(btnFanMode); btnFanMode.ButtonClickEvent += (sender, e) => { //空调打开状态才能点击 if (DeviceAcDetailCardMethord.IsOpen(deviceAc) == true) { //选择模式 this.SelectAcWindSpeed(frameWhiteBack); } }; //初始化空调控件事件 this.InitAcControlEvent(); } /// /// 初始化空调控件事件 /// private void InitAcControlEvent() { //滑动过程中 int oldProgressValue = arcScaleSeekBar.Progress;//之前的值 arcScaleSeekBar.OnProgressChangedEvent += (send2, value) => { nowProgressValue = value; }; //开一个线程,监视是否滑动的滑动条,每秒检测一次 HdlThreadLogic.Current.RunThread(() => { int timeCount = 0; while (this.Parent != null) { if (this.canSetProgress == false) { //网关没有回复前,不再发送 timeCount++; if (timeCount <= 3) { System.Threading.Thread.Sleep(1000); continue; } //如果3秒内还没有接收到数据的话,可以继续发送 } //计数置空 timeCount = 0; if (nowProgressValue == oldProgressValue) { //值一样 continue; } //发送一次后,不能再次发送 this.canSetProgress = false; oldProgressValue = nowProgressValue; //发送进度值给设备 this.SetProgressValueToDevice(oldProgressValue); System.Threading.Thread.Sleep(1000); } if (nowProgressValue != oldProgressValue) { //当界面关闭时,值还处于不一样时,直接发送 this.SetProgressValueToDevice(nowProgressValue); } }); } /// /// 发送进度值给设备 /// /// private void SetProgressValueToDevice(int value) { //自己发过去的东西,不需要再次设置(防止进度条来回跳动),只使用一次 this.notSetProgress = true; //发送进度值 if (deviceAc.currentSystemMode == 3 || deviceAc.currentSystemMode == 8) { //如果住宅是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { this.canSetProgress = true; deviceAc.currentCoolingSetpoint = value; return; } deviceAc.SetCoolingTemperatureAsync(value * 100); } else if (deviceAc.currentSystemMode == 4) { //如果住宅是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { this.canSetProgress = true; deviceAc.currentHeatingSetpoint = value; return; } deviceAc.SetHeatingTemperatureAsync(value * 100); } else if (deviceAc.currentSystemMode == 1) { //如果住宅是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { this.canSetProgress = true; deviceAc.currentAutoSetpoint = value; return; } deviceAc.SetAutoTemperatureAsync(value * 100); } } #endregion #region ■ 选择摆风(第一个图标)_______________ /// /// 选择摆风 /// private void SelectFanSwing(FrameLayout frameWhiteBack) { var form = new DialogCommonForm(); //不调用底层的显示界面方法 form.AutoLoadShowFormMethord = false; form.AddForm(); //白色背景框 var frameBack = new FrameLayout(); //计算出它的箭头正对着图片中间的X轴 frameBack.X = frameWhiteBack.X + this.listControl[0].X - (Application.GetRealWidth(449) - this.listControl[0].Width) / 2; //计算出它的Y轴 35为底部箭头与图标的间距 frameBack.Y = topFrameLayout.Bottom + frameWhiteBack.Y + this.listControl[0].Y - Application.GetRealHeight(1089 + 35); frameBack.Height = Application.GetRealHeight(1089); frameBack.Width = Application.GetRealWidth(449); frameBack.BackgroundImagePath = "AC/SwingBackground.png"; form.bodyFrameLayout.AddChidren(frameBack); //选择摆风 var frameTitle = new FrameLayout(); frameTitle.Width = frameBack.Width; frameTitle.Height = Application.GetRealHeight(150); frameBack.AddChidren(frameTitle); var btnTitle = new NormalViewControl(frameBack.Width - Application.GetRealWidth(81), Application.GetRealHeight(60), false); btnTitle.X = Application.GetRealWidth(81); btnTitle.Y = Application.GetRealHeight(57); btnTitle.IsBold = true; btnTitle.TextID = R.MyInternationalizationString.SelectSwing; frameTitle.AddChidren(btnTitle); //1挡 this.InitFanSwingSelectRow(frameBack, AC.FanSwingMode.First, R.MyInternationalizationString.Swing_First, "AC/Swing_1.png", "AC/Swing_1Selected.png"); //2挡 this.InitFanSwingSelectRow(frameBack, AC.FanSwingMode.Second, R.MyInternationalizationString.Swing_Second, "AC/Swing_2.png", "AC/Swing_2Selected.png"); //3挡 this.InitFanSwingSelectRow(frameBack, AC.FanSwingMode.Thrid, R.MyInternationalizationString.Swing_Thrid, "AC/Swing_3.png", "AC/Swing_3Selected.png"); //4挡 this.InitFanSwingSelectRow(frameBack, AC.FanSwingMode.Fourth, R.MyInternationalizationString.Swing_Fourth, "AC/Swing_4.png", "AC/Swing_4Selected.png"); //5挡 this.InitFanSwingSelectRow(frameBack, AC.FanSwingMode.Fifth, R.MyInternationalizationString.Swing_Fifth, "AC/Swing_5.png", "AC/Swing_5Selected.png"); //自动 this.InitFanSwingSelectRow(frameBack, AC.FanSwingMode.Auto, R.MyInternationalizationString.Swing_Auto, "AC/Swing_Auto.png", "AC/Swing_AutoSelected.png"); } /// /// 初始化摆风选择行控件 /// /// /// /// /// /// private void InitFanSwingSelectRow(FrameLayout frameBack, AC.FanSwingMode i_div, int textId, string unSelectPath, string selectPath) { var rowFrame = new FrameRowControl(); rowFrame.Y = frameBack.GetChildren(frameBack.ChildrenCount - 1).Bottom; rowFrame.LeftOffset = Application.GetRealWidth(81) - ControlCommonResourse.XXLeft; rowFrame.Height = Application.GetRealHeight(150); frameBack.AddChidren(rowFrame); //图标 var btnIcon = rowFrame.AddLeftIcon(81); btnIcon.UnSelectedImagePath = unSelectPath; btnIcon.SelectedImagePath = selectPath; //显示文字 var btnText = rowFrame.AddLeftCaption(Language.StringByID(textId), 288); btnText.TextColor = ZigbeeColor.Current.GXCTextGrayColor; btnText.SelectedTextColor = ZigbeeColor.Current.GXCACSelectedTextColor2; btnText.X = Application.GetRealWidth(173); //底线 if (i_div != AC.FanSwingMode.Auto) { var btnLine = rowFrame.AddBottomLine(); btnLine.X = Application.GetRealWidth(81); } if (deviceAc.currentFanSwingMode == (int)i_div) { //设置为选择状态 btnIcon.IsSelected = true; btnText.IsSelected = true; btnText.IsBold = true; } //按键点击 rowFrame.ButtonClickEvent += (sender, e) => { ((DialogCommonForm)frameBack.Parent.Parent).CloseForm(); //发送摆风命令 this.SetFanSwingComand(i_div); }; } /// /// 发送摆风命令 /// /// Fan mode. private void SetFanSwingComand(AC.FanSwingMode fanSwingMode) { //如果住宅为虚拟住宅,则直接修改缓存 if (Common.Config.Instance.Home.IsVirtually == true) { deviceAc.currentFanSwingMode = (int)fanSwingMode; var tempDevice = new CommonDevice(); tempDevice.DeviceStatusReport = new CommonDevice.DeviceStatusReportData() { CluterID = 514 }; tempDevice.DeviceStatusReport.AttriBute = new List() { new CommonDevice.AttributeDataObj() { AttributeId = 4096 } }; this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, tempDevice); return; } var oldModel = (AC.FanSwingMode)deviceAc.currentFanSwingMode; if (oldModel == fanSwingMode) { //选择的是同一个 return; } //检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息 this.StartCheckResponeResult(this.listControl, (result) => { if (result == true) { //接收到网关的回复 HdlThreadLogic.Current.RunMain(() => { listControl[0].SelectedImagePath = DeviceAcDetailCardMethord.GetFanSwingModeSelectedImagePathByFanSwingMode(fanSwingMode); listControl[0].UnSelectedImagePath = DeviceAcDetailCardMethord.GetFanSwingModeUnSelectedImagePathByFanSwingMode(fanSwingMode); }); } }); deviceAc.SetFanSwingAsyncMode(fanSwingMode); } #endregion #region ■ 选择模式(第二个图标)_______________ /// /// 选择模式 /// private void SelectAcModel(FrameLayout frameWhiteBack) { //获取模式菜单个数 int menuCount = this.GetSupportModelMenuCount(); if (menuCount == 0) { //空调模式为空,请先配置 this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AC_Model_None)); return; } int frameBackHeight = 183 + menuCount * 150; var form = new DialogCommonForm(); //不调用底层的显示界面方法 form.AutoLoadShowFormMethord = false; form.AddForm(); //白色背景框 var frameBack = new FrameLayout(); //计算出它的箭头正对着图片中间的X轴 frameBack.X = frameWhiteBack.X + this.listControl[1].X - (Application.GetRealWidth(449) - this.listControl[1].Width) / 2; //计算出它的Y轴 35为底部箭头与图标的间距 frameBack.Y = topFrameLayout.Bottom + frameWhiteBack.Y + this.listControl[1].Y - Application.GetRealHeight(frameBackHeight + 35); frameBack.Height = Application.GetRealHeight(frameBackHeight); frameBack.Width = Application.GetRealWidth(449); frameBack.BackgroundImagePath = "AC/SelectedModeBG.png"; form.bodyFrameLayout.AddChidren(frameBack); //选择模式 var frameTitle = new FrameLayout(); frameTitle.Width = frameBack.Width; frameTitle.Height = Application.GetRealHeight(150); frameBack.AddChidren(frameTitle); var btnTitle = new NormalViewControl(frameBack.Width - Application.GetRealWidth(81), Application.GetRealHeight(60), false); btnTitle.X = Application.GetRealWidth(81); btnTitle.Y = Application.GetRealHeight(57); btnTitle.IsBold = true; btnTitle.TextID = R.MyInternationalizationString.SelectMode; frameTitle.AddChidren(btnTitle); if (deviceAc.listSupportMode[4] == 1) { //自动 this.InitAcModelSelectRow(frameBack, AC.AcMode.Auto, R.MyInternationalizationString.Mode_Auto, "AC/Mode_Auto.png", "AC/Mode_AutoSelected.png", ZigbeeColor.Current.GXCTextBlackColor, frameBack.ChildrenCount != menuCount); } if (deviceAc.listSupportMode[0] == 1) { //制冷 this.InitAcModelSelectRow(frameBack, AC.AcMode.Cool, R.MyInternationalizationString.Mode_Cool, "AC/Mode_Cool.png", "AC/Mode_CoolSelected.png", ZigbeeColor.Current.GXCACSelectedTextColor_Cool, frameBack.ChildrenCount != menuCount); } if (deviceAc.listSupportMode[1] == 1) { //制热 this.InitAcModelSelectRow(frameBack, AC.AcMode.Heat, R.MyInternationalizationString.Mode_Heat, "AC/Mode_Heat.png", "AC/Mode_HeatSelected.png", ZigbeeColor.Current.GXCACSelectedTextColor_Heat, frameBack.ChildrenCount != menuCount); } if (deviceAc.listSupportMode[3] == 1) { //除湿 this.InitAcModelSelectRow(frameBack, AC.AcMode.Dry, R.MyInternationalizationString.Mode_Dry, "AC/Mode_Dry.png", "AC/Mode_DrySelected.png", ZigbeeColor.Current.GXCACSelectedTextColor_Dry, frameBack.ChildrenCount != menuCount); } if (deviceAc.listSupportMode[2] == 1) { //送风 this.InitAcModelSelectRow(frameBack, AC.AcMode.FanOnly, R.MyInternationalizationString.Mode_FanOnly, "AC/Mode_Fan.png", "AC/Mode_FanSelected.png", ZigbeeColor.Current.GXCACSelectedTextColor_Fan, frameBack.ChildrenCount != menuCount); } } /// /// 初始化模式选择行控件 /// /// /// /// /// /// private void InitAcModelSelectRow(FrameLayout frameBack, AC.AcMode i_div, int textId, string unSelectPath, string selectPath, uint selectColor, bool addLine) { var rowFrame = new FrameRowControl(); rowFrame.Y = frameBack.GetChildren(frameBack.ChildrenCount - 1).Bottom; rowFrame.LeftOffset = Application.GetRealWidth(81) - ControlCommonResourse.XXLeft; rowFrame.Height = Application.GetRealHeight(150); frameBack.AddChidren(rowFrame); //图标 var btnIcon = rowFrame.AddLeftIcon(81); btnIcon.UnSelectedImagePath = unSelectPath; btnIcon.SelectedImagePath = selectPath; //显示文字 var btnText = rowFrame.AddLeftCaption(Language.StringByID(textId), 288); btnText.TextColor = ZigbeeColor.Current.GXCTextGrayColor; btnText.SelectedTextColor = selectColor; btnText.X = Application.GetRealWidth(173); //底线 if (addLine == true) { var btnLine = rowFrame.AddBottomLine(); btnLine.X = Application.GetRealWidth(81); } if (deviceAc.currentSystemMode == (int)i_div) { //设置为选择状态 btnIcon.IsSelected = true; btnText.IsSelected = true; btnText.IsBold = true; } //按键点击 rowFrame.ButtonClickEvent += (sender, e) => { ((DialogCommonForm)frameBack.Parent.Parent).CloseForm(); //发送模式命令 this.SetAcModelComand(i_div); }; } /// /// 发送模式命令 /// /// mode. private void SetAcModelComand(AC.AcMode mode) { var oldModel = (AC.AcMode)deviceAc.currentSystemMode; if (oldModel == mode) { //选择的是同一个 return; } //如果住宅为虚拟住宅,则直接修改缓存 if (Common.Config.Instance.Home.IsVirtually == true) { deviceAc.currentSystemMode = (int)mode; var tempDevice = new CommonDevice(); tempDevice.DeviceStatusReport = new CommonDevice.DeviceStatusReportData() { CluterID = 513 }; tempDevice.DeviceStatusReport.AttriBute = new List() { new CommonDevice.AttributeDataObj() { AttributeId = 28 } }; this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, tempDevice); //送风的时候,没有温度的概念 if (mode == AC.AcMode.FanOnly) { //加减不可以点击 btnAdd.CanClick = false; btnReduce.CanClick = false; } //如果原来的状态是送风的话 else if (oldModel == AC.AcMode.FanOnly) { //加减可以点击 btnAdd.CanClick = true; btnReduce.CanClick = true; } return; } //检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息 this.StartCheckResponeResult(this.listControl, (result) => { if (result == true) { //接收到网关回复 HdlThreadLogic.Current.RunMain(() => { listControl[1].SelectedImagePath = DeviceAcDetailCardMethord.GetModeSelectedImagePathByMode(mode); listControl[1].UnSelectedImagePath = DeviceAcDetailCardMethord.GetModeUnSelectedImagePathByMode(mode); //送风的时候,没有温度的概念 if (mode == AC.AcMode.FanOnly) { //颜色变更 arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor); arcScaleSeekBar.IsClickable = false; //加减不可以点击 btnAdd.CanClick = false; btnReduce.CanClick = false; } else if (oldModel == AC.AcMode.FanOnly) { //如果原来的状态是送风的话 arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCArcScaleSeekBarStartColor, ZigbeeColor.Current.GXCArcScaleSeekBarEndColor); arcScaleSeekBar.IsClickable = true; //加减可以点击 btnAdd.CanClick = true; btnReduce.CanClick = true; } }); } }); deviceAc.SetSystemModeAsync(mode); } /// /// 获取模式菜单个数 /// /// private int GetSupportModelMenuCount() { int count = 0; foreach (var m in deviceAc.listSupportMode) { if (m == 1) { count++; } } return count; } #endregion #region ■ 开关按钮(第三个图标)_______________ /// /// 发送开关命令 /// /// private void SetSwitchComand(bool isOpen) { //如果住宅为虚拟住宅,则直接修改缓存 if (Common.Config.Instance.Home.IsVirtually == true) { deviceAc.currentSystemMode = isOpen == true ? 3 : 0; var tempDevice = new CommonDevice(); tempDevice.DeviceStatusReport = new CommonDevice.DeviceStatusReportData() { CluterID = 513 }; tempDevice.DeviceStatusReport.AttriBute = new List() { new CommonDevice.AttributeDataObj() { AttributeId = 28 } }; this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, tempDevice); //加减是否可以点击 btnAdd.CanClick = isOpen; btnReduce.CanClick = isOpen; return; } //检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息 this.StartCheckResponeResult(this.listControl, (result) => { //接收到网关回复 if (result == true) { HdlThreadLogic.Current.RunMain(() => { //那四个图标变更 this.listControl[0].IsSelected = isOpen; this.listControl[1].IsSelected = isOpen; this.listControl[2].IsSelected = isOpen; this.listControl[3].IsSelected = isOpen; if (isOpen == true) { //颜色变更 arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCArcScaleSeekBarStartColor, ZigbeeColor.Current.GXCArcScaleSeekBarEndColor); arcScaleSeekBar.IsClickable = true; //加减可以点击 btnAdd.CanClick = true; btnReduce.CanClick = true; } else { //颜色变更 arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor); arcScaleSeekBar.IsClickable = false; //加减不可以点击 btnAdd.CanClick = false; btnReduce.CanClick = false; } }); } }); if (isOpen == true) { deviceAc.Open(); } else { deviceAc.Close(); } } #endregion #region ■ 选择风速(第四个图标)_______________ /// /// 选择风速 /// private void SelectAcWindSpeed(FrameLayout frameWhiteBack) { var form = new DialogCommonForm(); //不调用底层的显示界面方法 form.AutoLoadShowFormMethord = false; form.AddForm(); //白色背景框 var frameBack = new FrameLayout(); //计算出它的箭头正对着图片中间的X轴 frameBack.X = frameWhiteBack.X + this.listControl[3].X - (Application.GetRealWidth(449) - this.listControl[3].Width) / 2; //计算出它的Y轴 35为底部箭头与图标的间距 frameBack.Y = topFrameLayout.Bottom + frameWhiteBack.Y + this.listControl[3].Y - Application.GetRealHeight(625 + 35); frameBack.Height = Application.GetRealHeight(625); frameBack.Width = Application.GetRealWidth(449); frameBack.BackgroundImagePath = "AC/SelectedFanModeBG.png"; form.bodyFrameLayout.AddChidren(frameBack); //选择风速 var frameTitle = new FrameLayout(); frameTitle.Width = frameBack.Width; frameTitle.Height = Application.GetRealHeight(150); frameBack.AddChidren(frameTitle); var btnTitle = new NormalViewControl(frameBack.Width - Application.GetRealWidth(81), Application.GetRealHeight(60), false); btnTitle.X = Application.GetRealWidth(81); btnTitle.Y = Application.GetRealHeight(57); btnTitle.IsBold = true; btnTitle.TextID = R.MyInternationalizationString.SelectFanMode; frameTitle.AddChidren(btnTitle); //低风 this.InitAcWindSpeedSelectRow(frameBack, AC.FanMode.Low, R.MyInternationalizationString.Fan_Low, "AC/Fan_Low.png", "AC/Fan_LowSelected.png"); //中风 this.InitAcWindSpeedSelectRow(frameBack, AC.FanMode.Medium, R.MyInternationalizationString.Fan_Middle, "AC/Fan_Middle.png", "AC/Fan_MiddleSelected.png"); //高风 this.InitAcWindSpeedSelectRow(frameBack, AC.FanMode.High, R.MyInternationalizationString.Fan_Height, "AC/Fan_Height.png", "AC/Fan_HeightSelected.png"); } /// /// 初始化风速选择行控件 /// /// /// /// /// /// private void InitAcWindSpeedSelectRow(FrameLayout frameBack, AC.FanMode i_div, int textId, string unSelectPath, string selectPath) { var rowFrame = new FrameRowControl(); rowFrame.Y = frameBack.GetChildren(frameBack.ChildrenCount - 1).Bottom; rowFrame.LeftOffset = Application.GetRealWidth(81) - ControlCommonResourse.XXLeft; rowFrame.Height = Application.GetRealHeight(150); frameBack.AddChidren(rowFrame); //图标 var btnIcon = rowFrame.AddLeftIcon(81); btnIcon.UnSelectedImagePath = unSelectPath; btnIcon.SelectedImagePath = selectPath; //显示文字 var btnText = rowFrame.AddLeftCaption(Language.StringByID(textId), 288); btnText.TextColor = ZigbeeColor.Current.GXCTextGrayColor; btnText.SelectedTextColor = ZigbeeColor.Current.GXCACSelectedTextColor_FanModel; btnText.X = Application.GetRealWidth(173); //底线 if (i_div != AC.FanMode.High) { var btnLine = rowFrame.AddBottomLine(); btnLine.X = Application.GetRealWidth(81); } if (deviceAc.currentFanMode == (int)i_div) { //设置为选择状态 btnIcon.IsSelected = true; btnText.IsSelected = true; btnText.IsBold = true; } //按键点击 rowFrame.ButtonClickEvent += (sender, e) => { ((DialogCommonForm)frameBack.Parent.Parent).CloseForm(); //如果住宅为虚拟住宅,则直接修改缓存 if (Common.Config.Instance.Home.IsVirtually == true) { deviceAc.currentFanMode = (int)i_div; var tempDevice = new CommonDevice(); tempDevice.DeviceStatusReport = new CommonDevice.DeviceStatusReportData() { CluterID = 514 }; tempDevice.DeviceStatusReport.AttriBute = new List() { new CommonDevice.AttributeDataObj() { AttributeId = 0 } }; this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, tempDevice); return; } //发送风速命令 this.SetAcWindSpeedComand(i_div); }; } /// /// 发送风速命令 /// /// mode. private void SetAcWindSpeedComand(AC.FanMode mode) { var oldModel = (AC.FanMode)deviceAc.currentFanMode; if (oldModel == mode) { //选择的是同一个 return; } //检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息 this.StartCheckResponeResult(this.listControl, (result) => { //接收到网关回复 if (result == true) { HdlThreadLogic.Current.RunMain(() => { listControl[3].SelectedImagePath = DeviceAcDetailCardMethord.GetFanModeSelectedImagePathByFanMode(mode); listControl[3].UnSelectedImagePath = DeviceAcDetailCardMethord.GetFanModeSelectedImagePathByFanMode(mode); }); } }); deviceAc.SetFanModeAsync(mode); } #endregion #region ■ 是否获取网关反馈的结果_____________ /// /// 检测网关的反馈结果(属性上报的对象:device.DeviceStatusReport) /// /// 命令区分 /// 上报数据 /// public override bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report) { if (comandDiv == ReceiveComandDiv.A设备属性上报) { if (report.DeviceStatusReport.CluterID == 513) { var attriButeList = report.DeviceStatusReport.AttriBute; foreach (var attList in attriButeList) { if (attList.AttributeId == 0) { HdlThreadLogic.Current.RunMain(() => { //设置状态文字 当前室温 this.SetStatuText(deviceAc.currentLocalTemperature + "℃"); }); } else if (attList.AttributeId == 17) { if (deviceAc.currentSystemMode == 3 || deviceAc.currentSystemMode == 8) { //允许同步进度值时才同步 if (this.notSetProgress == false) { //制冷 HdlThreadLogic.Current.RunMain(() => { arcScaleSeekBar.Progress = deviceAc.currentCoolingSetpoint; }); } //接收到数据反馈 this.canSetProgress = true; //状态还原(只使用一次) this.notSetProgress = false; } } else if (attList.AttributeId == 18) { if (deviceAc.currentSystemMode == 4) { //允许同步进度值时才同步 if (this.notSetProgress == false) { //制热 HdlThreadLogic.Current.RunMain(() => { arcScaleSeekBar.Progress = deviceAc.currentHeatingSetpoint; }); } //接收到数据反馈 this.canSetProgress = true; //状态还原(只使用一次) this.notSetProgress = false; } } else if (attList.AttributeId == 4096) { if (deviceAc.currentSystemMode == 1) { //允许同步进度值时才同步 if (this.notSetProgress == false) { //自动 HdlThreadLogic.Current.RunMain(() => { arcScaleSeekBar.Progress = deviceAc.currentAutoSetpoint; }); } //接收到数据反馈 this.canSetProgress = true; //状态还原(只使用一次) this.notSetProgress = false; } } else if (attList.AttributeId == 28) { HdlThreadLogic.Current.RunMain(() => { //如果是关闭空调的话,直接变暗即可 if (deviceAc.currentSystemMode == 0) { if (this.listControl[1].IsSelected == true) { this.listControl[0].IsSelected = false; this.listControl[1].IsSelected = false; this.listControl[2].IsSelected = false; this.listControl[3].IsSelected = false; arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor); } //设置状态文字 关闭 this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close)); return; } else if (deviceAc.currentSystemMode == 1 || deviceAc.currentSystemMode == 3 || deviceAc.currentSystemMode == 4 || deviceAc.currentSystemMode == 7 || deviceAc.currentSystemMode == 8) { if (this.listControl[1].IsSelected == false) { this.listControl[0].IsSelected = true; this.listControl[1].IsSelected = true; this.listControl[2].IsSelected = true; this.listControl[3].IsSelected = true; arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCArcScaleSeekBarStartColor, ZigbeeColor.Current.GXCArcScaleSeekBarEndColor); } } this.listControl[1].SelectedImagePath = DeviceAcDetailCardMethord.GetModeSelectedImagePathByModeId(deviceAc.currentSystemMode); this.listControl[1].UnSelectedImagePath = DeviceAcDetailCardMethord.GetModeUnSelectedImagePathByModeId(deviceAc.currentSystemMode); this.btnNowModeView.Text = DeviceAcDetailCardMethord.GetModeNameByModeId(deviceAc.currentSystemMode); arcScaleSeekBar.Progress = DeviceAcDetailCardMethord.GetCurrentModeTemperature(deviceAc); arcScaleSeekBar.IsClickable = DeviceAcDetailCardMethord.IsOpen(deviceAc); //设置状态文字 当前室温 this.SetStatuText(deviceAc.currentLocalTemperature + "℃"); //送风没有温度的概念 if (deviceAc.currentSystemMode == 7) { //颜色变更 arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor); arcScaleSeekBar.IsClickable = false; } }); //已经接收到网关的反馈 return true; } else if (attList.AttributeId == 4097) { //清理滤网 HdlThreadLogic.Current.RunMain(() => { frameClrean.Visible = deviceAc.CleanStatu; }); } } } else if (report.DeviceStatusReport.CluterID == 514) { var attriButeList = report.DeviceStatusReport.AttriBute; foreach (var attList in attriButeList) { if (attList.AttributeId == 0) { //风速 HdlThreadLogic.Current.RunMain(() => { if (this.listControl[3].IsSelected == false) { this.listControl[3].IsSelected = true; } this.listControl[3].SelectedImagePath = DeviceAcDetailCardMethord.GetFanModeSelectedImagePathByFanModeId(deviceAc.currentFanMode); this.listControl[3].UnSelectedImagePath = DeviceAcDetailCardMethord.GetFanModeUnSelectedImagePathByFanModeId(deviceAc.currentFanMode); }); //已经接收到网关的反馈 return true; } else if (attList.AttributeId == 4096) { //扫风 HdlThreadLogic.Current.RunMain(() => { if (this.listControl[0].IsSelected == false) { this.listControl[0].IsSelected = true; } this.listControl[0].SelectedImagePath = DeviceAcDetailCardMethord.GetFanSwingModeSelectedImagePathByFanSwingModeId(deviceAc.currentFanSwingMode); this.listControl[0].UnSelectedImagePath = DeviceAcDetailCardMethord.GetFanSwingModeUnSelectedImagePathByFanSwingModeId(deviceAc.currentFanSwingMode); }); //已经接收到网关的反馈 return true; } } } } return false; } #endregion } }