using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using ZigBee.Device;
|
|
namespace Shared.Phone.UserCenter.DeviceAirConditioner
|
{
|
/// <summary>
|
/// 空调模式的界面
|
/// </summary>
|
public class AirConditionerModeForm : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 当前选择的网关
|
/// </summary>
|
private AC deviceAc = null;
|
/// <summary>
|
/// 上报的数据(用二进制来玩自定义模式 0:制冷 1:制热 2:送风 3:除湿 4:自动 5~7:备用)
|
/// </summary>
|
private string reportValue = null;
|
/// <summary>
|
/// 旧的数据
|
/// </summary>
|
private string oldReportValue = null;
|
/// <summary>
|
/// 固定预留的数据
|
/// </summary>
|
private string fixValue = null;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
/// <param name="i_deviceAc">选择的空调回路</param>
|
public void ShowForm(AC i_deviceAc)
|
{
|
this.deviceAc = i_deviceAc;
|
|
//设置头部信息
|
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAirConditionerMode));
|
|
//读取空调自定义模式
|
this.ReadAirConditionerModeSupport();
|
|
//初始化中部信息
|
this.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部信息 ☆☆☆☆☆
|
/// </summary>
|
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 = HdlCommonLogic.Current.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();
|
}
|
};
|
//如果是展示模板
|
if (Common.Config.Instance.Home.IsShowTemplate == true)
|
{
|
btnOk.CanClick = false;
|
}
|
});
|
});
|
}
|
|
/// <summary>
|
/// 添加空调模式行
|
/// </summary>
|
/// <param name="listView">列表控件</param>
|
/// <param name="imagePath">图片地址</param>
|
/// <param name="textValue">显示文本</param>
|
/// <param name="div">区分</param>
|
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);
|
}
|
};
|
//如果是展示模板
|
if (Common.Config.Instance.Home.IsShowTemplate == true)
|
{
|
rowFrame.CanClick = false;
|
}
|
}
|
|
#endregion
|
|
#region ■ 读取空调自定义模式_________________
|
|
/// <summary>
|
/// 读取空调自定义模式 ☆☆☆☆☆
|
/// </summary>
|
private void ReadAirConditionerModeSupport()
|
{
|
//如果是虚拟住宅
|
if (Common.Config.Instance.Home.IsVirtually == true || Common.Config.Instance.Home.IsShowTemplate == true)
|
{
|
var data = HdlTemplateDeviceDataLogic.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 = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(deviceAc);
|
HdlGatewayReceiveLogic.Current.AddAttributeEvent("ReadAirConditionerModeSupport", ReceiveComandDiv.A设备属性上报, (report) =>
|
{
|
string checkKeys = HdlDeviceCommonLogic.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 ■ 界面关闭___________________________
|
|
/// <summary>
|
/// 界面关闭
|
/// </summary>
|
public override void CloseFormBefore()
|
{
|
HdlGatewayReceiveLogic.Current.RemoveEvent("ReadAirConditionerModeSupport");
|
|
base.CloseFormBefore();
|
}
|
|
#endregion
|
}
|
}
|