New file |
| | |
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.Text;
|
| | | using ZigBee.Device;
|
| | |
|
| | | namespace Shared.Phone.UserCenter
|
| | | {
|
| | | /// <summary>
|
| | | /// 设备功能类型的自定义行控件
|
| | | /// </summary>
|
| | | public class DeviceFunctionTypeRowControl : FrameCaptionViewControl
|
| | | {
|
| | | #region ■ 变量声明___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 结束选择的事件 value:索引(从0开始) 文本信息请用Text获取
|
| | | /// </summary>
|
| | | public Action<int> FinishSelectEvent = null;
|
| | | /// <summary>
|
| | | /// 判断该控件能否显示
|
| | | /// </summary>
|
| | | public bool CanShowRow
|
| | | {
|
| | | get { return this.CheckCanShowRow(); }
|
| | | }
|
| | |
|
| | | private bool m_SetCanSelect = true;
|
| | | /// <summary>
|
| | | /// 强制设置能否进行选择(只对继电器和空气开关有效,个别界面需要这种操作)
|
| | | /// </summary>
|
| | | public bool SetCanSelect
|
| | | {
|
| | | set |
| | | {
|
| | | m_SetCanSelect = value;
|
| | | }
|
| | | }
|
| | | /// <summary>
|
| | | /// 设备对象
|
| | | /// </summary>
|
| | | private CommonDevice device = null;
|
| | | /// <summary>
|
| | | /// 当前选择的功能类型索引 -1:还没有设置过 0:不指定 1:开关 2:灯光 3:插座
|
| | | /// </summary>
|
| | | private int nowSelectNo = -1;
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 初始化_____________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 设备功能类型的自定义行控件(选择功能之后,无条件直接变更类型)
|
| | | /// </summary>
|
| | | /// <param name="i_device">设备的对象</param>
|
| | | /// <param name="i_ChidrenYaxis">子控件Y轴偏移量(【列表控件的rowSpace/2】即可,不懂默认为0即可)</param>
|
| | | public DeviceFunctionTypeRowControl(CommonDevice i_device, int i_ChidrenYaxis = 0) : base("", "", i_ChidrenYaxis)
|
| | | {
|
| | | this.device = i_device;
|
| | | this.UseClickStatu = false;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 初始化
|
| | | /// </summary>
|
| | | public override void InitControl()
|
| | | {
|
| | | //初始化初始数据
|
| | | this.InitDefultData();
|
| | | //初始化底层数据
|
| | | base.InitControl();
|
| | |
|
| | | //空气开关和继电器可以选择功能类型
|
| | | if (this.device.Type == DeviceType.AirSwitch
|
| | | || this.device.Type == DeviceType.OnOffOutput)
|
| | | {
|
| | | //没被强制干涉的话
|
| | | if (m_SetCanSelect == true)
|
| | | {
|
| | | this.UseClickStatu = true;
|
| | | //右箭头
|
| | | this.AddRightArrow();
|
| | |
|
| | | //读取设备功能类型
|
| | | this.ReadDeviceFunctionType();
|
| | |
|
| | | this.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //显示选择设备功能类型的界面
|
| | | this.ShowSelectDeviceFunctionListForm();
|
| | | };
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 显示选择设备功能类型_______________
|
| | |
|
| | | /// <summary>
|
| | | /// 显示选择设备功能类型的界面
|
| | | /// </summary>
|
| | | private void ShowSelectDeviceFunctionListForm()
|
| | | {
|
| | | //显示列表
|
| | | var listText = new List<string>();
|
| | | 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 = Common.LocalDevice.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 ■ 初始化初始数据_____________________
|
| | |
|
| | | /// <summary>
|
| | | /// 初始化初始数据
|
| | | /// </summary>
|
| | | 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)
|
| | | {
|
| | | //灯光类固定为 灯光
|
| | | strType = Language.StringByID(R.MyInternationalizationString.uLight);
|
| | | nowSelectNo = 2;
|
| | | }
|
| | | else if (this.device.Type == DeviceType.WindowCoveringDevice)
|
| | | {
|
| | | //窗帘固定为 遮阳
|
| | | strType = Language.StringByID(R.MyInternationalizationString.uDeviceBelongId100);
|
| | | nowSelectNo = -1;
|
| | | }
|
| | | else if (this.device.Type == DeviceType.Thermostat)
|
| | | {
|
| | | //空调固定为 空调
|
| | | strType = Language.StringByID(R.MyInternationalizationString.uDeviceBelongId3600);
|
| | | nowSelectNo = -1;
|
| | | }
|
| | | else if (this.device.Type == DeviceType.DoorLock)
|
| | | {
|
| | | //门锁固定为 门锁
|
| | | strType = Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2800);
|
| | | 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 ■ 检测能否显示_______________________
|
| | |
|
| | | /// <summary>
|
| | | /// 检测能否显示
|
| | | /// </summary>
|
| | | /// <returns></returns>
|
| | | 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 ■ 控件摧毁___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 控件摧毁
|
| | | /// </summary>
|
| | | public override void RemoveFromParent()
|
| | | {
|
| | | this.FinishSelectEvent = null;
|
| | |
|
| | | base.RemoveFromParent();
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 一般方法___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 刷新设备功能类型
|
| | | /// </summary>
|
| | | 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 ■ 读取设备功能类型___________________
|
| | |
|
| | | /// <summary>
|
| | | /// 读取设备功能类型
|
| | | /// </summary>
|
| | | private void ReadDeviceFunctionType()
|
| | | {
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | //读取设备功能类型
|
| | | var info = Common.LocalDevice.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
|
| | | }
|
| | | }
|