using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.DeviceAirConditioner { /// /// 空调模式的界面 /// public class AirConditionerModeForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 当前选择的网关 /// private AC deviceAc = null; /// /// 上报的数据(用二进制来玩自定义模式 0:制冷 1:制热 2:送风 3:除湿 4:自动 5~7:备用) /// private string reportValue = null; /// /// 旧的数据 /// private string oldReportValue = null; /// /// 固定预留的数据 /// private string fixValue = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 选择的空调回路 public void ShowForm(AC i_deviceAc) { this.deviceAc = i_deviceAc; //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAirConditionerMode)); //读取空调自定义模式 this.ReadAirConditionerModeSupport(); //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 ☆☆☆☆☆ /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); var listView = new VerticalListControl(29); listView.Y = Application.GetRealHeight(-6); listView.BackgroundColor = UserCenterColor.Current.White; listView.Height = bodyFrameLayout.Height + Application.GetRealHeight(6); bodyFrameLayout.AddChidren(listView); HdlThreadLogic.Current.RunThread(() => { //开启进度条 this.ShowProgressBar(); int timeOut = 0; while (this.reportValue == null && timeOut <= 30) { System.Threading.Thread.Sleep(100); timeOut++; } if (this.reportValue == null) { //获取空调模式失败 string msg = Language.StringByID(R.MyInternationalizationString.uGetAcModeFail); msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时"); this.ShowMassage(ShowMsgType.Tip, msg); this.CloseProgressBar(ShowReLoadMode.YES); return; } //关闭进度条 this.CloseProgressBar(); HdlThreadLogic.Current.RunMain(() => { //制冷 this.AddAirConditionerModeRow(listView, "AC/Mode_Cool2.png", Language.StringByID(R.MyInternationalizationString.uMode_Cool), 0); //制热 this.AddAirConditionerModeRow(listView, "AC/Mode_Heat2.png", Language.StringByID(R.MyInternationalizationString.uMode_Heat), 1); //自动 this.AddAirConditionerModeRow(listView, "AC/Mode_AutoSelected.png", Language.StringByID(R.MyInternationalizationString.uMode_Auto), 4); //送风 this.AddAirConditionerModeRow(listView, "AC/Mode_Fan2.png", Language.StringByID(R.MyInternationalizationString.uMode_FanOnly), 2); //除湿 this.AddAirConditionerModeRow(listView, "AC/Mode_Dry2.png", Language.StringByID(R.MyInternationalizationString.uMode_Dry), 3); listView.AdjustRealHeight(Application.GetRealHeight(23)); //保存 var btnOk = new BottomClickButton(); btnOk.TextID = R.MyInternationalizationString.uSave; bodyFrameLayout.AddChidren(btnOk); btnOk.ButtonClickEvent += (sender, e) => { if (this.oldReportValue == this.reportValue) { //数据相同,不需要修改 this.CloseForm(); return; } //将二进制转换为十进制 var data = Convert.ToInt32(this.fixValue + this.reportValue, 2); var result = HdlDeviceAirConditionerLogic.Current.SetAcModeSupport(deviceAc, data); if (result == true) { //更改缓存 for (int i = 0; i < this.reportValue.Length; i++) { deviceAc.listSupportMode[i] = Convert.ToInt32(reportValue[i].ToString()); } deviceAc.ReSave(); this.CloseForm(); } }; }); }); } /// /// 添加空调模式行 /// /// 列表控件 /// 图片地址 /// 显示文本 /// 区分 private void AddAirConditionerModeRow(VerticalListControl listView, string imagePath, string textValue, int div) { var rowFrame = new FrameRowControl(listView.rowSpace / 2); listView.AddChidren(rowFrame); //图标 var btnIcon = rowFrame.AddLeftIcon(81); btnIcon.UnSelectedImagePath = imagePath; //显示文本 var btnText = rowFrame.AddLeftCaption(textValue, 400); btnText.TextSize = 15; if (div != 3) { //底线 rowFrame.AddBottomLine(); } //选择 var btnSelect = rowFrame.AddMostRightEmptyIcon(58, 58); if (this.reportValue[div] == '0') { btnSelect.Visible = false; } btnSelect.UnSelectedImagePath = "Item/ItemSelected.png"; rowFrame.ButtonClickEvent += (sender, e) => { btnSelect.Visible = !btnSelect.Visible; //变更值 if (btnSelect.Visible == true) { this.reportValue = reportValue.Substring(0, div) + "1" + reportValue.Substring(div + 1); } else { this.reportValue = reportValue.Substring(0, div) + "0" + reportValue.Substring(div + 1); } }; } #endregion #region ■ 读取空调自定义模式_________________ /// /// 读取空调自定义模式 ☆☆☆☆☆ /// private void ReadAirConditionerModeSupport() { //如果是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { var data = ModelData.DeviceModelDataLogic.Current.GetAcModeSupport(deviceAc); //转换为二进制 var value = Convert.ToString(data, 2).PadLeft(16, '0'); //这五个设置是放在后面的 this.fixValue = value.Substring(0, value.Length - 5); this.reportValue = value.Substring(this.fixValue.Length); oldReportValue = reportValue; return; } string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(deviceAc); HdlGatewayReceiveLogic.Current.AddAttributeEvent("ReadAirConditionerModeSupport", ReceiveComandDiv.A设备属性上报, (report) => { string checkKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); if (checkKeys != mainkeys || report.DeviceStatusReport.CluterID != 513) { return; } for (int i = 0; i < report.DeviceStatusReport.AttriBute.Count; i++) { var data = report.DeviceStatusReport.AttriBute[i]; if (data.AttributeId == 4099) { HdlGatewayReceiveLogic.Current.RemoveEvent("ReadAirConditionerModeSupport"); //转换为二进制 var value = Convert.ToString(data.AttriButeData, 2).PadLeft(16, '0'); //这五个设置是放在后面的 this.fixValue = value.Substring(0, value.Length - 5); this.reportValue = value.Substring(this.fixValue.Length); oldReportValue = reportValue; } } }); //发送读取空调自定义模式 deviceAc.ReadModeSupport(); } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { HdlGatewayReceiveLogic.Current.RemoveEvent("ReadAirConditionerModeSupport"); base.CloseFormBefore(); } #endregion } }