using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.DeviceAirConditioner { /// /// 空调室内机设置界面 /// public class IndoorUnitSettionForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 列表控件 /// private FrameListControl listview = null; /// /// 当前选择的网关 /// private AC deviceAc = null; /// /// 摆风模式(用二进制来玩自定义模式 0:不使用 1:使用) /// private int swingMode = 0; /// /// 固定预留的数据 /// private string fixValue = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 选择的空调回路 public void ShowForm(AC i_deviceAc) { this.deviceAc = i_deviceAc; //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uIndoorUnitSettion)); //初始化右上角菜单 this.InitTopRightMenu(); HdlThreadLogic.Current.RunThread(() => { //开启进度条 this.ShowProgressBar(); //读取空调摆风模式 var result = this.ReadAirConditionerSwingModeSupport(); if (result == false) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //关闭进度条 this.CloseProgressBar(); HdlThreadLogic.Current.RunMain(() => { //初始化中部控件 this.InitMiddleFrame(); }); }); } /// /// 初始化中部控件 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); var listBackControl = new VerticalFrameControl(); listBackControl.Height = bodyFrameLayout.Height; bodyFrameLayout.AddChidren(listBackControl); //初始化桌布 var tableContr = new InformationEditorControl(); this.listview = tableContr.InitControl(listBackControl.frameTable, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 1368); //图片 var btnPic = new DeviceInfoIconControl(); btnPic.Y = Application.GetRealHeight(92); btnPic.Gravity = Gravity.CenterHorizontal; listBackControl.frameTable.AddChidren(btnPic); btnPic.InitControl(this.deviceAc); //设备备注 string caption = Language.StringByID(R.MyInternationalizationString.uDeviceNote); string nameValue = Common.LocalDevice.Current.GetDeviceEpointName(deviceAc); var btnNote = new FrameCaptionInputControl(caption, nameValue, listview.rowSpace / 2); listview.AddChidren(btnNote); btnNote.InitControl(); //划线 btnNote.AddBottomLine(); btnNote.txtInput.FinishInputEvent += () => { string oldName = Common.LocalDevice.Current.GetDeviceEpointName(deviceAc); if (btnNote.Text.Trim() == string.Empty) { //将名字还原 btnNote.Text = oldName; } if (oldName != btnNote.Text) { //设备名称修改 var result = Common.LocalDevice.Current.ReName(deviceAc, btnNote.Text); if (result == false) { return; } //设备备注修改成功! string msg = Language.StringByID(R.MyInternationalizationString.uDeviceReNoteSuccess); this.ShowMassage(ShowMsgType.Tip, msg); } }; //设备类型 caption = Language.StringByID(R.MyInternationalizationString.uDeviceType); nameValue = Common.LocalDevice.Current.GetDeviceObjectText(new List() { deviceAc }); var btnType = new FrameCaptionViewControl(caption, nameValue, listview.rowSpace / 2); btnType.UseClickStatu = false; listview.AddChidren(btnType); btnType.InitControl(); //划线 btnType.AddBottomLine(); //所属区域 var rowBeloneArea = new BelongAreaControl(listview.rowSpace / 2); listview.AddChidren(rowBeloneArea); rowBeloneArea.InitControl(Language.StringByID(R.MyInternationalizationString.uBelongArea), deviceAc); //底线 rowBeloneArea.AddBottomLine(); rowBeloneArea.SelectRoomEvent += (roomKeys) => { HdlRoomLogic.Current.ChangedRoom(deviceAc, roomKeys); }; //空调模式 var rowMode = new FrameRowControl(listview.rowSpace / 2); listview.AddChidren(rowMode); rowMode.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uAirConditionerMode), 600); rowMode.AddRightArrow(); rowMode.AddBottomLine(); rowMode.ButtonClickEvent += (sender, e) => { var form = new AirConditionerModeForm(); form.AddForm(deviceAc); }; //摆风 var rowSwing = new FrameRowControl(listview.rowSpace / 2); rowSwing.UseClickStatu = false; listview.AddChidren(rowSwing); rowSwing.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uAirConditionerSwing), 400); rowSwing.AddBottomLine(); var btnSwingSwitch = rowSwing.AddMostRightSwitchIcon(); if (this.swingMode == 1) { btnSwingSwitch.IsSelected = true; } btnSwingSwitch.ButtonClickEvent += (sender, e) => { //不能再点击 btnSwingSwitch.CanClick = false; string statu = btnSwingSwitch.IsSelected == true ? "0" : "1"; //将二进制转换为十进制 int sendData = Convert.ToInt32(this.fixValue + statu, 2); HdlThreadLogic.Current.RunThread(() => { var result = HdlDeviceAirConditionerLogic.Current.SetUseAcSwingFunctionStatu(deviceAc, sendData); if (result == true) { HdlThreadLogic.Current.RunMain(() => { btnSwingSwitch.IsSelected = !btnSwingSwitch.IsSelected; this.swingMode = this.swingMode == 1 ? 0 : 1; deviceAc.UseSwingFunction = btnSwingSwitch.IsSelected; deviceAc.ReSave(); }); } //能够继续点击 btnSwingSwitch.CanClick = true; }); }; //初始化桌布完成 tableContr.FinishInitControl(); tableContr = null; //保存 var btnFinish = new BottomClickButton(); btnFinish.TextID = R.MyInternationalizationString.uSave; bodyFrameLayout.AddChidren(btnFinish); btnFinish.ButtonClickEvent += (sender, e) => { string oldName = Common.LocalDevice.Current.GetDeviceEpointName(deviceAc); if (oldName != btnNote.Text) { //设备名称修改 var result = Common.LocalDevice.Current.ReName(deviceAc, btnNote.Text); if (result == false) { return; } } this.CloseForm(); }; } #endregion #region ■ 右上角菜单_________________________ /// /// 初始化右上角菜单 /// private void InitTopRightMenu() { //检测此回路是否拥有定位功能(拿端点最小的那个回路去定位) bool canTest = Common.LocalDevice.Current.DeviceIsCanFixedPosition(deviceAc); if (canTest == false) { return; } var btnIcon = new MostRightIconControl(69, 69); btnIcon.UnSelectedImagePath = "Item/More.png"; topFrameLayout.AddChidren(btnIcon); btnIcon.InitControl(); btnIcon.ButtonClickEvent += ((sender, e) => { //显示右上角菜单界面 this.ShowTopRightMenu(); }); } /// /// 显示右上角菜单界面 /// private void ShowTopRightMenu() { var frame = new TopRightMenuControl(1, 1); //定位 var deviceMenu = Language.StringByID(R.MyInternationalizationString.uFixedPosition); frame.AddRowMenu(deviceMenu, "Item/FixedPosition.png", "Item/FixedPositionSelected.png", () => { //发送定位功能 Common.LocalDevice.Current.SetFixedPositionCommand(deviceAc); }); } #endregion #region ■ 读取空调摆风模式___________________ /// /// 读取空调摆风模式 /// private bool ReadAirConditionerSwingModeSupport() { //如果是虚拟住宅 if (Common.Config.Instance.Home.IsVirtually == true) { var data = ModelData.DeviceModelDataLogic.Current.GetAcSwingModeSupport(deviceAc); //转换为二进制 var value = Convert.ToString(data, 2).PadLeft(16, '0'); //这个设置是放在后面的 this.fixValue = value.Substring(0, value.Length - 1); this.swingMode = Convert.ToInt32(value.Substring(this.fixValue.Length)); return true; } 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 != 514) { return; } for (int i = 0; i < report.DeviceStatusReport.AttriBute.Count; i++) { var data = report.DeviceStatusReport.AttriBute[i]; if (data.AttributeId == 4097) { HdlGatewayReceiveLogic.Current.RemoveEvent("ReadAirConditionerModeSupport"); //转换为二进制 var value = Convert.ToString(data.AttriButeData, 2).PadLeft(16, '0'); //这个设置是放在后面的 this.fixValue = value.Substring(0, value.Length - 1); this.swingMode = Convert.ToInt32(value.Substring(this.fixValue.Length)); } } }); //获取是否启用空调摆风模式的状态(打开 或者 关闭) deviceAc.ReadUseSwingFunctionStatu(); int timeOut = 0; while (this.fixValue == null && timeOut <= 30) { System.Threading.Thread.Sleep(100); timeOut++; } if (this.fixValue == null) { //获取空调摆风状态失败 string msg = Language.StringByID(R.MyInternationalizationString.uGetAirConditionerSwingFunctionFail); msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时"); this.ShowMassage(ShowMsgType.Tip, msg); return false; } return true; } #endregion } }