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
}
}