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