using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone { /// /// 设备功能类型的自定义行控件 /// public class DeviceFunctionTypeRowControl : FrameCaptionViewControl { #region ■ 变量声明___________________________ /// /// 结束选择的事件 value:索引(从0开始) 文本信息请用Text获取 /// public Action FinishSelectEvent = null; /// /// 判断该控件能否显示 /// public bool CanShowRow { get { return this.CheckCanShowRow(); } } private bool m_SetCanSelect = true; /// /// 强制设置能否进行选择(只对继电器和空气开关有效,个别界面需要这种操作) /// public bool SetCanSelect { set { m_SetCanSelect = value; } } /// /// 设备对象 /// private CommonDevice device = null; /// /// 当前选择的功能类型索引 -1:还没有设置过 0:不指定 1:开关 2:灯光 3:插座 /// private int nowSelectNo = -1; #endregion #region ■ 初始化_____________________________ /// /// 设备功能类型的自定义行控件(选择功能之后,无条件直接变更类型) /// /// 设备的对象 /// 子控件Y轴偏移量(【列表控件的rowSpace/2】即可,不懂默认为0即可) public DeviceFunctionTypeRowControl(CommonDevice i_device, int i_ChidrenYaxis = 0) : base("", "", i_ChidrenYaxis) { this.device = i_device; this.UseClickStatu = false; } /// /// 初始化 /// public override void InitControl() { //初始化初始数据 this.InitDefultData(); //初始化底层数据 base.InitControl(); //空气开关和继电器可以选择功能类型 if (this.device.Type == DeviceType.AirSwitch || this.device.Type == DeviceType.OnOffOutput) { //没被强制干涉的话 if (m_SetCanSelect == true && Common.Config.Instance.Home.IsShowTemplate == false) { this.UseClickStatu = true; //右箭头 this.AddRightArrow(); //读取设备功能类型 this.ReadDeviceFunctionType(); this.ButtonClickEvent += (sender, e) => { //显示选择设备功能类型的界面 this.ShowSelectDeviceFunctionListForm(); }; } } } #endregion #region ■ 显示选择设备功能类型_______________ /// /// 显示选择设备功能类型的界面 /// private void ShowSelectDeviceFunctionListForm() { //显示列表 var listText = new List(); listText.Add(Language.StringByID(R.MyInternationalizationString.uSwitch));//开关 listText.Add(Language.StringByID(R.MyInternationalizationString.uLight));//灯光 listText.Add(Language.StringByID(R.MyInternationalizationString.uSocket1));//插座 //标题:选择功能类型 var title = Language.StringByID(R.MyInternationalizationString.uSelectFunctionType); var form = new BottomItemSelectForm(); form.CancelCallEvent = true;//允许取消 form.AddForm(title, listText, null, nowSelectNo - 1); form.FinishSelectEvent += (selectNo) => { if (selectNo == nowSelectNo - 1) { //选择的是相同的 return; } //-1:选择取消 this.Text = selectNo == -1 ? string.Empty : listText[selectNo]; nowSelectNo = selectNo + 1; this.CanClick = false; HdlThreadLogic.Current.RunThread(() => { //设置功能类型到网关 var result = HdlDeviceCommonLogic.Current.SendDeviceFunctionTypeToGateway(this.device, (DeviceFunctionType)nowSelectNo); HdlThreadLogic.Current.RunMain(() => { if (result == true) { //记录起当前选择的功能类型 this.RefreshDfunctionType(); //设备改变功能类型的话,主页需要重新刷新 UserView.UserPage.Instance.RefreshAllForm = true; //调用回调函数 this.FinishSelectEvent?.Invoke(nowSelectNo); } else { //设置设备功能类型失败 var alert = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uSetDeviceFunctionTypeFail)); alert.Show(); } this.CanClick = true; }); }); }; } #endregion #region ■ 初始化初始数据_____________________ /// /// 初始化初始数据 /// private void InitDefultData() { //标题:功能类型 this.btnCaption.Text = Language.StringByID(R.MyInternationalizationString.uFunctionType); var myFunType = this.device.DfunctionType; //功能类型的翻译名字 string strType = string.Empty; if (this.device.DfunctionType == DeviceFunctionType.A不指定) { nowSelectNo = 0; } else if (this.device.DfunctionType == DeviceFunctionType.A开关) { strType = Language.StringByID(R.MyInternationalizationString.uSwitch); nowSelectNo = 1; } else if (myFunType == DeviceFunctionType.A灯光) { strType = Language.StringByID(R.MyInternationalizationString.uLight); nowSelectNo = 2; } else if (this.device.DfunctionType == DeviceFunctionType.A插座) { strType = Language.StringByID(R.MyInternationalizationString.uSocket1); nowSelectNo = 3; } if (this.device.Type == DeviceType.ColorDimmableLight || this.device.Type == DeviceType.ColorTemperatureLight || this.device.Type == DeviceType.DimmableLight) { //灯光类固定为 灯光 var infoContent = HdlDeviceCommonLogic.Current.GetDeviceModelIdNameInfo("A418"); strType = infoContent != null ? infoContent.A官方名字 : string.Empty; nowSelectNo = 2; } else if (this.device.Type == DeviceType.WindowCoveringDevice) { //窗帘固定为 遮阳 var infoContent = HdlDeviceCommonLogic.Current.GetDeviceModelIdNameInfo("A400"); strType = infoContent != null ? infoContent.A官方名字 : string.Empty; nowSelectNo = -1; } else if (this.device.Type == DeviceType.Thermostat) { //空调固定为 空调 var infoContent = HdlDeviceCommonLogic.Current.GetDeviceModelIdNameInfo("A406"); strType = infoContent != null ? infoContent.A官方名字 : string.Empty; nowSelectNo = -1; } else if (this.device.Type == DeviceType.DoorLock) { //门锁固定为 门锁 var infoContent = HdlDeviceCommonLogic.Current.GetDeviceModelIdNameInfo("A405"); strType = infoContent != null ? infoContent.A官方名字 : string.Empty; nowSelectNo = -1; } else if (this.device.Type == DeviceType.FreshAir) { //新风固定为 新风 strType = Language.StringByID(R.MyInternationalizationString.FreshAir); nowSelectNo = -1; } else if (this.device.Type == DeviceType.PMSensor) { //PM2.5传感器固定为 空气质量 strType = Language.StringByID(R.MyInternationalizationString.AirQuality); nowSelectNo = -1; } //显示文本 this.txtView.Text = strType; } #endregion #region ■ 检测能否显示_______________________ /// /// 检测能否显示 /// /// private bool CheckCanShowRow() { if (this.device == null) { return true; } if (this.device.Type == DeviceType.AirSwitch//空气开关 || this.device.Type == DeviceType.ColorDimmableLight//彩灯 || this.device.Type == DeviceType.DimmableLight//调光灯 || this.device.Type == DeviceType.DoorLock//门锁 || this.device.Type == DeviceType.OnOffOutput//继电器 || this.device.Type == DeviceType.Thermostat//空调 || this.device.Type == DeviceType.FreshAir//新风 || this.device.Type == DeviceType.PMSensor //PM2.5 || this.device.Type == DeviceType.ColorTemperatureLight //色温灯 || this.device.Type == DeviceType.WindowCoveringDevice)//窗帘 { return true; } return false; } #endregion #region ■ 控件摧毁___________________________ /// /// 控件摧毁 /// public override void RemoveFromParent() { this.FinishSelectEvent = null; base.RemoveFromParent(); } #endregion #region ■ 一般方法___________________________ /// /// 刷新设备功能类型 /// private void RefreshDfunctionType() { if (this.nowSelectNo == 1) { this.device.DfunctionType = DeviceFunctionType.A开关; if (this.device.IsCustomizeImage == false) { //重新设置图片 this.device.IconPath = "Device/Switch.png"; } } else if (this.nowSelectNo == 2) { this.device.DfunctionType = DeviceFunctionType.A灯光; if (this.device.IsCustomizeImage == false) { //重新设置图片 this.device.IconPath = "Device/Light.png"; } } else if (this.nowSelectNo == 3) { this.device.DfunctionType = DeviceFunctionType.A插座; if (this.device.IsCustomizeImage == false) { //重新设置图片 this.device.IconPath = "Device/Socket1.png"; } } else { this.device.DfunctionType = DeviceFunctionType.A不指定; if (this.device.IsCustomizeImage == false) { //重新设置图片 if (this.device.Type == DeviceType.AirSwitch) { //空气开关 this.device.IconPath = "Device/Switch.png"; } else if (this.device.Type == DeviceType.OnOffOutput) { //继电器 this.device.IconPath = "Device/RelayEpoint.png"; } } } this.device.ReSave(); } #endregion #region ■ 读取设备功能类型___________________ /// /// 读取设备功能类型 /// private void ReadDeviceFunctionType() { HdlThreadLogic.Current.RunThread(() => { //读取设备功能类型 var info = HdlDeviceCommonLogic.Current.ReadDeviceEpointDeviceInfo(this.device); if (info != null && ((int)this.device.DfunctionType) != info.FunctionType) { this.device.DfunctionType = (DeviceFunctionType)info.FunctionType; HdlThreadLogic.Current.RunMain(() => { //刷新控件 this.InitDefultData(); //刷新设备功能类型 this.RefreshDfunctionType(); }); } }); } #endregion } }