using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.DevicePirSensor
{
///
/// PIR传感器绑定界面★
///
public class PirSensorBindTargetSettionForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 传感器设备
///
private IASZone deviceIASZone = null;
///
/// 已经存在的绑定设备
///
private List listEsixtDevice = new List();
///
/// 需要保存的设备对象
///
private List listSaveDevice = null;
///
/// PIR传感器光照等级总刻度
///
private int lightLevelCount = -1;
///
/// PIR传感器的Lux值
///
private int pirLuxValue = -1;
///
/// pir的配置信息
///
private IASZone.ConfigureParamates pirConfigure = null;
///
/// 数据是否改变
///
private bool isDataChanged = false;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
/// 传感器设备
public void ShowForm(IASZone i_iasZone)
{
this.ScrollEnabled = false;
deviceIASZone = i_iasZone;
//设置头部信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uBindTargets));
HdlThreadLogic.Current.RunThread(() =>
{
//初始化中部信息
this.InitMiddleFrame();
});
}
///
/// 初始化中部信息
///
private async void InitMiddleFrame()
{
this.listEsixtDevice.Clear();
var result = await this.GetDeviceAllDefultData();
if (result == false)
{
return;
}
HdlThreadLogic.Current.RunMain(() =>
{
//初始化控件
this.InitMiddleControl();
});
}
///
/// 初始化控件
///
private void InitMiddleControl()
{
//清空bodyFrame
this.ClearBodyFrame();
//当前亮度值
string txtValue = Language.StringByID(R.MyInternationalizationString.uNowBrightnessValue);
var frameNowLinght = new FrameRowControl();
frameNowLinght.UseClickStatu = false;
frameNowLinght.BackgroundColor = UserCenterColor.Current.White;
bodyFrameLayout.AddChidren(frameNowLinght);
var btnLux = frameNowLinght.AddLeftCaption(txtValue + ":" + pirLuxValue + "lux", 900);
HdlThreadLogic.Current.RunThread(async () =>
{
//查看模板时,不允许编辑
if (Common.Config.Instance.Home.IsShowTemplate == true)
{
return;
}
while (this.Parent != null)
{
//他们说这个东西要2秒刷新一次 获取PIR传感器的【lux值】
this.pirLuxValue = await HdlDevicePirSensorLogic.Current.GetPirSensorLux(deviceIASZone, ShowErrorMode.NO);
if (pirLuxValue != -1)
{
HdlThreadLogic.Current.RunMain(() =>
{
btnLux.Text = txtValue + ":" + pirLuxValue + "lux";
}, ShowErrorMode.NO);
}
await Task.Delay(2000);
}
}, ShowErrorMode.NO);
var listView = new VerticalListControl(0);
listView.Y = Application.GetRealHeight(150);
listView.Height = Application.GetRealHeight(585);
listView.BackgroundColor = UserCenterColor.Current.White;
bodyFrameLayout.AddChidren(listView);
//照明等级Frame(因展开折叠,优先声明)
var frameLight = new FrameLayout();
frameLight.Height = 0;
//如果满足低亮度环境
var frameIfRow = new FrameRowControl(listView.rowSpace / 2);
frameIfRow.UseClickStatu = false;
listView.AddChidren(frameIfRow);
frameIfRow.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uIfTheLowBrightnessEnvironmentIsSatisfied), 700);
//开关按钮
var btnSwitch = frameIfRow.AddMostRightSwitchIcon();
btnSwitch.IsSelected = this.pirConfigure.levelEnable;
btnSwitch.ButtonClickEvent += (sender, e) =>
{
this.isDataChanged = true;
this.pirConfigure.levelEnable = !btnSwitch.IsSelected;
btnSwitch.IsSelected = this.pirConfigure.levelEnable;
//展开折叠
if (frameLight.Height > 10)
{
frameLight.Height = 0;
listView.Height -= Application.GetRealHeight(558);
}
else
{
frameLight.Height = Application.GetRealHeight(558);
listView.Height += Application.GetRealHeight(558);
}
};
//底线
frameIfRow.AddBottomLine();
if (btnSwitch.IsSelected == true)
{
frameLight.Height = Application.GetRealHeight(558);
listView.Height += Application.GetRealHeight(558);
}
listView.AddChidren(frameLight);
//照度值
var btnLightView = new NormalViewControl(500, 50, true);
btnLightView.TextID = R.MyInternationalizationString.uIlluminationValue;
btnLightView.TextSize = 12;
btnLightView.TextColor = UserCenterColor.Current.TextGrayColor1;
btnLightView.X = HdlControlResourse.XXLeft;
btnLightView.Y = Application.GetRealHeight(71);
frameLight.AddChidren(btnLightView);
var btnLightValue = new NormalViewControl(200, 50, true);
btnLightValue.Y = btnLightView.Y;
btnLightValue.X = Application.GetRealWidth(196);
btnLightValue.TextSize = 12;
btnLightValue.TextColor = UserCenterColor.Current.TextGrayColor1;
btnLightValue.Text = this.pirConfigure.levelSize.ToString() + "lux";
frameLight.AddChidren(btnLightValue);
//进度条
var seekBar = new SeekBarControl(940);
seekBar.Gravity = Gravity.Frame;
seekBar.X = Application.GetRealWidth(80);
seekBar.Y = Application.GetRealHeight(159);
seekBar.MaxValue = lightLevelCount;
seekBar.ProgressBarColor = 0xfffdb500;
frameLight.AddChidren(seekBar);
seekBar.ProgressChangedEvent += (div, value) =>
{
this.isDataChanged = true;
this.pirConfigure.levelSize = value;
btnLightValue.Text = this.pirConfigure.levelSize.ToString() + "lux";
};
seekBar.Progress = pirConfigure.levelSize;
//减号
var btnMinus = new IconViewControl(104);
btnMinus.UseClickStatu = true;
btnMinus.X = Application.GetRealWidth(847);
btnMinus.Y = Application.GetRealHeight(45);
btnMinus.UnSelectedImagePath = "Item/MinusSign2.png";
btnMinus.SelectedImagePath = "Item/MinusSign2Selected.png";
frameLight.AddChidren(btnMinus);
btnMinus.ButtonClickEvent += (sender, e) =>
{
if (seekBar.Progress <= 0)
{
return;
}
this.isDataChanged = true;
seekBar.Progress -= 1;
this.pirConfigure.levelSize = seekBar.Progress;
btnLightValue.Text = this.pirConfigure.levelSize.ToString() + "lux";
};
//加号
var btnPlus = new IconViewControl(104);
btnPlus.UseClickStatu = true;
btnPlus.X = btnMinus.Right;
btnPlus.Y = btnMinus.Y;
btnPlus.UnSelectedImagePath = "Item/PlusSign2.png";
btnPlus.SelectedImagePath = "Item/PlusSign2Selected.png";
frameLight.AddChidren(btnPlus);
btnPlus.ButtonClickEvent += (sender, e) =>
{
if (seekBar.Progress >= 100)
{
return;
}
this.isDataChanged = true;
seekBar.Progress += 1;
this.pirConfigure.levelSize = seekBar.Progress;
btnLightValue.Text = this.pirConfigure.levelSize.ToString() + "lux";
};
//查看模板时,不允许编辑
if (Common.Config.Instance.Home.IsShowTemplate == true)
{
btnSwitch.CanClick = false;
seekBar.Enable = false;
btnMinus.CanClick = false;
btnPlus.CanClick = false;
}
//暗
var btnDark = new NormalViewControl(120, 50, true);
btnDark.TextID = R.MyInternationalizationString.uDark;
btnDark.TextSize = 12;
btnDark.TextAlignment = TextAlignment.Center;
btnDark.TextColor = UserCenterColor.Current.TextGrayColor3;
btnDark.X = Application.GetRealWidth(70);
btnDark.Y = seekBar.Bottom;
frameLight.AddChidren(btnDark);
var btnZero = new NormalViewControl(120, 50, true);
btnZero.X = btnDark.X;
btnZero.Y = btnDark.Bottom;
btnZero.TextSize = 12;
btnZero.TextAlignment = TextAlignment.Center;
btnZero.TextColor = UserCenterColor.Current.TextGrayColor3;
btnZero.Text = "0lux";
frameLight.AddChidren(btnZero);
//亮
var btnBright = new NormalViewControl(120, 50, true);
btnBright.TextID = R.MyInternationalizationString.uBright;
btnBright.TextSize = 12;
btnBright.TextAlignment = TextAlignment.Center;
btnBright.TextColor = UserCenterColor.Current.TextGrayColor3;
btnBright.X = frameLight.Width - Application.GetRealWidth(120 + 50);
btnBright.Y = btnDark.Y;
frameLight.AddChidren(btnBright);
var btnPersent = new NormalViewControl(120, 50, true);
btnPersent.X = btnBright.X;
btnPersent.Y = btnBright.Bottom;
btnPersent.TextSize = 12;
btnPersent.TextAlignment = TextAlignment.Center;
btnPersent.TextColor = UserCenterColor.Current.TextGrayColor3;
btnPersent.Text = "100lux";
frameLight.AddChidren(btnPersent);
var btnIcon = new IconViewControl(58);
btnIcon.X = Application.GetRealWidth(109);
btnIcon.Y = Application.GetRealHeight(431);
btnIcon.UnSelectedImagePath = "Item/Tips.png";
frameLight.AddChidren(btnIcon);
//在室内条件下,黄昏照度值约为10lux,阴天照度值约为5~50lux,请根据实际需要进行调节
var btnTipView = new NormalViewControl(790, 100, true);
btnTipView.TextColor = UserCenterColor.Current.TextGrayColor1;
btnTipView.TextSize = 12;
btnTipView.IsMoreLines = true;
btnTipView.TextAlignment = TextAlignment.Center;
btnTipView.TextID = R.MyInternationalizationString.uPirBrightnessTipMsg;
btnTipView.X = btnIcon.Right + Application.GetRealWidth(23);
btnTipView.Y = btnIcon.Y;
frameLight.AddChidren(btnTipView);
//底线
var btnIfLine = new NormalViewControl(frameLight.Width, HdlControlResourse.BottomLineHeight, false);
btnIfLine.Y = frameLight.Height - HdlControlResourse.BottomLineHeight;
btnIfLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
frameLight.AddChidren(btnIfLine);
//执行对象的Frame(因展开折叠,优先声明)
var frameResult = new FrameListControl(29);
frameResult.Height = Application.GetRealHeight(310);
//就会--------------------------------------------------
listView.rowSpace = Application.GetRealHeight(20);//切换间距
var frameDo = new FrameRowControl(listView.rowSpace / 2);
frameDo.UseClickStatu = false;
listView.AddChidren(frameDo);
frameDo.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uResultDo), 600);
//右箭头
var btnResultRight = frameDo.AddMostRightEmptyIcon(58, 58);
frameDo.ChangedChidrenBindMode(btnResultRight, ChidrenBindMode.NotBind);
btnResultRight.UseClickStatu = false;
btnResultRight.UnSelectedImagePath = "Item/RightNext.png";
btnResultRight.SelectedImagePath = "Item/Down.png";
btnResultRight.IsSelected = true;
btnResultRight.ButtonClickEvent += (sender, e) =>
{
btnResultRight.IsSelected = !btnResultRight.IsSelected;
//展开折叠
if (frameResult.Height > 10)
{
frameResult.Height = 0;
listView.Height -= Application.GetRealHeight(310);
}
else
{
frameResult.Height = Application.GetRealHeight(310);
listView.Height += Application.GetRealHeight(310);
}
};
//底线
frameDo.AddBottomLine();
listView.AddChidren(frameResult);
//触发目标
var rowTarget = new FrameRowControl(listView.rowSpace / 2);
rowTarget.LeftOffset = Application.GetRealWidth(138) - HdlControlResourse.XXLeft;
frameResult.AddChidren(rowTarget);
rowTarget.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uTriggerTarget), 600);
rowTarget.AddRightArrow();
rowTarget.AddBottomLine();
var btnTargetView = rowTarget.AddMostRightView("", 700);
rowTarget.ButtonClickEvent += (sender, e) =>
{
var form = new PirSensorTargetSelectForm();
form.AddForm(listSaveDevice == null ? listEsixtDevice : listSaveDevice);
form.FinishSelectEvent += (listSelect) =>
{
listSaveDevice = new List();
listSaveDevice.AddRange(listSelect);
if (listSaveDevice.Count > 0)
{
//随便丢一个名字上去
var device = HdlDeviceCommonLogic.Current.GetDevice(listSaveDevice[0]);
btnTargetView.Text = HdlDeviceCommonLogic.Current.GetDeviceEpointName(device);
}
else
{
btnTargetView.Text = string.Empty;
}
this.isDataChanged = true;
};
};
foreach (string mainkey in this.listEsixtDevice)
{
var device = HdlDeviceCommonLogic.Current.GetDevice(mainkey);
if (device != null)
{
//随便丢一个名字上去
btnTargetView.Text = HdlDeviceCommonLogic.Current.GetDeviceEpointName(device);
break;
}
}
//延时(半自动没有延时的概念)
if (this.pirConfigure.mode == 1)
{
string strMinute = string.Empty;
if (pirConfigure.transitionTime / 60 > 0)
{
strMinute = pirConfigure.transitionTime / 60 + Language.StringByID(R.MyInternationalizationString.uMinute);
}
string strSecond = pirConfigure.transitionTime % 60 + Language.StringByID(R.MyInternationalizationString.uSecond);
var rowDelay = new FrameRowControl(listView.rowSpace / 2);
rowDelay.LeftOffset = Application.GetRealWidth(138) - HdlControlResourse.XXLeft;
frameResult.AddChidren(rowDelay);
rowDelay.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uDelayed), 300);
rowDelay.AddRightArrow();
var btnDelayView = rowDelay.AddMostRightView(strMinute + strSecond, 700);
rowDelay.ButtonClickEvent += (sender, e) =>
{
this.ShowDelayListTime(btnDelayView);
};
//查看模板时,不允许编辑
if (Common.Config.Instance.Home.IsShowTemplate == true)
{
rowDelay.CanClick = false;
}
}
//保存
var btnSave = new BottomClickButton();
btnSave.TextID = R.MyInternationalizationString.uSave;
bodyFrameLayout.AddChidren(btnSave);
btnSave.ButtonClickEvent += (sender, e) =>
{
HdlThreadLogic.Current.RunThread(() =>
{
//保存Pir传感器数据
this.SavePirSensorData();
});
};
//查看模板时,不允许编辑
if (Common.Config.Instance.Home.IsShowTemplate == true)
{
btnSave.CanClick = false;
}
}
#endregion
#region ■ 获取初始数据_______________________
///
/// 获取初始数据
///
///
private async Task GetDeviceAllDefultData()
{
//打开进度条
this.ShowProgressBar();
//获取绑定目标设备
List listDevice = HdlDeviceBindLogic.Current.GetBindTargetDevice(this.deviceIASZone);
if (listDevice == null)
{
//关闭进度条
this.CloseProgressBar(ShowReLoadMode.YES);
return false;
}
this.listEsixtDevice.Clear();
foreach (var device in listDevice)
{
string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device);
if (listEsixtDevice.Contains(mainKeys) == false)
{
listEsixtDevice.Add(mainKeys);
}
}
//获取PIR传感器的【光感等级总刻度】
this.lightLevelCount = await HdlDevicePirSensorLogic.Current.GetPirLightAbilitySize(this.deviceIASZone);
if (lightLevelCount == -1)
{
//关闭进度条
this.CloseProgressBar(ShowReLoadMode.YES);
return false;
}
if (lightLevelCount > 100)
{
lightLevelCount = 100;
}
//获取pir的配置信息
this.pirConfigure = HdlDevicePirSensorLogic.Current.GetPirSensorLightSettion(deviceIASZone);
if (pirConfigure == null)
{
//关闭进度条
this.CloseProgressBar(ShowReLoadMode.YES);
return false;
}
//获取PIR传感器的【lux值】
this.pirLuxValue = await HdlDevicePirSensorLogic.Current.GetPirSensorLux(deviceIASZone);
if (pirLuxValue == -1)
{
//关闭进度条
this.CloseProgressBar(ShowReLoadMode.YES);
return false;
}
//关闭进度条
this.CloseProgressBar();
return true;
}
#endregion
#region ■ 显示延时时间_______________________
///
/// 显示延时时间列表
///
///
private void ShowDelayListTime(NormalViewControl btnTime)
{
//分
string strMinute = Language.StringByID(R.MyInternationalizationString.uMinute);
//秒
string strSecond = Language.StringByID(R.MyInternationalizationString.uSecond);
var listfirst = new List();
var listSecond = new List>();
for (int i = 0; i <= 29; i++)
{
listfirst.Add(i.ToString().PadLeft(2, '0') + strMinute);
var listTemp = new List();
for (int j = 0; j <= 59; j++)
{
if (i == 0 && j == 0)
{
continue;
}
listTemp.Add(j.ToString().PadLeft(2, '0') + strSecond);
}
listSecond.Add(listTemp);
}
//加一个30分钟吧
listfirst.Add("30" + strMinute);
var listTemp2 = new List() { "00" + strSecond };
listSecond.Add(listTemp2);
string value = (this.pirConfigure.transitionTime / 60).ToString().PadLeft(2, '0') + strMinute;
int index1 = listfirst.IndexOf(value);
if (index1 == -1)
{
index1 = 0;
}
value = (this.pirConfigure.transitionTime % 60).ToString().PadLeft(2, '0') + strSecond;
int index2 = listSecond[index1].IndexOf(value);
if (index2 == -1)
{
index2 = 0;
}
PickerView.ShowSecondary(listfirst, listSecond, (value1, value2) =>
{
string textValue = listSecond[value1][value2];
if (value1 != 0)
{
textValue = listfirst[value1].TrimStart('0') + textValue;
}
btnTime.Text = textValue;
int minute = Convert.ToInt32(listfirst[value1].Substring(0, 2));
int second = Convert.ToInt32(listSecond[value1][value2].Substring(0, 2));
int delaySecond = minute * 60 + second;
//更改数值
this.pirConfigure.transitionTime = delaySecond;
this.isDataChanged = true;
},
index1, index2,
Language.StringByID(R.MyInternationalizationString.uDelayed),
Language.StringByID(R.MyInternationalizationString.uFinish),
Language.StringByID(R.MyInternationalizationString.uCancel));
}
#endregion
#region ■ 数据保存___________________________
///
/// 保存Pir传感器数据
///
private void SavePirSensorData()
{
if (this.isDataChanged == false)
{
HdlThreadLogic.Current.RunMain(() =>
{
//数据没有变更过,关闭界面
this.CloseForm();
});
return;
}
//打开进度条
this.ShowProgressBar();
if (listSaveDevice != null)
{
//删除绑定目标
var listDelDevice = new List();
var listLightDevice = new List();
foreach (string mainKey in listEsixtDevice)
{
if (this.listSaveDevice.Contains(mainKey) == false)
{
var myDevice = HdlDeviceCommonLogic.Current.GetDevice(mainKey);
listDelDevice.Add(myDevice);
if (myDevice.Type == DeviceType.DimmableLight)
{
//如果是调光器的话,特殊一点
listLightDevice.Add(myDevice);
}
}
}
if (listDelDevice.Count > 0)
{
//删除目标
var listSucess = HdlDeviceBindLogic.Current.DeleteDeviceTarget(deviceIASZone, listDelDevice);
if (listSucess == null || listSucess.Count == 0)
{
//关闭进度条
this.CloseProgressBar();
return;
}
if (listLightDevice.Count > 0)
{
//删除调光器镞
listSucess = HdlDeviceBindLogic.Current.DeleteDeviceTarget(deviceIASZone, listLightDevice, 8);
if (listSucess == null || listSucess.Count == 0)
{
//关闭进度条
this.CloseProgressBar();
return;
}
}
}
//绑定目标
var listBind = new List();
listLightDevice = new List();
foreach (var mainKey in listSaveDevice)
{
var myDevice = HdlDeviceCommonLogic.Current.GetDevice(mainKey);
listBind.Add(myDevice);
if (myDevice.Type == DeviceType.DimmableLight)
{
//如果是调光器的话,特殊一点
listLightDevice.Add(myDevice);
}
}
if (listSaveDevice.Count > 0)
{
//绑定目标
var listSucess = HdlDeviceBindLogic.Current.BindDeviceTarget(deviceIASZone, listBind);
if (listSucess == null || listSucess.Count == 0)
{
//关闭进度条
this.CloseProgressBar();
return;
}
if (listLightDevice.Count > 0)
{
//绑定调光镞
listSucess = HdlDeviceBindLogic.Current.BindDeviceTarget(deviceIASZone, listLightDevice, 8);
if (listSucess == null || listSucess.Count == 0)
{
//关闭进度条
this.CloseProgressBar();
return;
}
}
}
}
//保存pir配置信息
var result = HdlDevicePirSensorLogic.Current.SetPirSensorSettion(this.deviceIASZone, this.pirConfigure);
if (result == false)
{
//关闭进度条
this.CloseProgressBar();
return;
}
//关闭进度条
this.CloseProgressBar();
HdlThreadLogic.Current.RunMain(() =>
{
//界面关闭
this.CloseForm();
});
}
#endregion
#region ■ 一般方法___________________________
#endregion
}
}