using System; using System.Collections.Generic; using HDL_ON.DriverLayer; using HDL_ON.Entity; using HDL_ON.Stan; using HDL_ON.UI.CSS; using Shared; namespace HDL_ON.UI { public class TuyaWaterValvePage : DeviceFunctionCardCommonForm { #region ■ 变量声明___________________________ /// /// 图片控件 /// private PicViewControl btnPictrue = null; /// /// 控制器控制状态提示文本按钮 /// NormalViewControl btnControlTip = null; /// /// 控制器控制时间提示文本按钮 /// NormalViewControl btnControlTimeTip = null; /// /// /// private IconViewControl btnTimeSet = null; /// /// 开关控件 /// private IconViewControl btnSwitch = null; #endregion #region ■ 初始化_____________________________ /// /// 初始化白色区域的内容 /// public override void InitFrameWhiteContent() { base.SetTitleText(Language.StringByID(StringId.WaterValve)); //初始化第一个索引页的内容 this.InitFrameWhiteContent1(); //刷新界面状态 this.RefreshFormStatu(); //读取状态 new System.Threading.Thread(() => { Control.Ins.ReadFunctionsInfo(new List() { device.deviceId}); }) { IsBackground = true }.Start(); } /// /// 初始化第一个索引页的内容 /// private void InitFrameWhiteContent1() { //图片控件 this.btnPictrue = new PicViewControl(130, 118); btnPictrue.Y = Application.GetRealHeight(95); btnPictrue.Gravity = Gravity.CenterHorizontal; btnPictrue.UnSelectedImagePath = "FunctionIcon/Electrical/WaterValve/WaterValveBg.png"; btnPictrue.SelectedImagePath = "FunctionIcon/Electrical/WaterValve/WaterValveOnBg.png"; FrameWhiteCentet1.AddChidren(btnPictrue); btnPictrue.ButtonClickEvent += (sender, e) => { //发送开关命令 this.SendSwitchComand(); }; btnControlTip = new NormalViewControl(300,30, true) { Y = Application.GetRealHeight(231), TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterHorizontal, TextSize = CSS_FontSize.TextFontSize, SelectedTextColor = CSS_Color.MainColor, TextColor = CSS_Color.TextualColor, TextID = StringId.ControllerNotOn, }; FrameWhiteCentet1.AddChidren(btnControlTip); btnControlTimeTip = new NormalViewControl(300, 30, true) { Y = Application.GetRealHeight(252), Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.TextFontSize, //TextColor = 0x00000000, SelectedTextColor = CSS_Color.TextualColor, TextColor = CSS_Color.TextualColor, Text = "00:00:00" }; FrameWhiteCentet1.AddChidren(btnControlTimeTip); btnTimeSet = new IconViewControl(50) { Y = Application.GetRealHeight(365), Gravity = Gravity.CenterHorizontal, UnSelectedImagePath = "FunctionIcon/Electrical/WaterValve/SetTimeIcon.png", SelectedImagePath = "FunctionIcon/Electrical/WaterValve/SetTimeIcon.png", }; FrameWhiteCentet1.AddChidren(btnTimeSet); btnTimeSet.ButtonClickEvent = (sender, e) => { SetControlTime(); }; var btnTimeSetTip = new NormalViewControl(300, 30, true) { Y = btnTimeSet.Bottom , Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.TextFontSize, //TextColor = 0x00000000, SelectedTextColor = CSS_Color.TextualColor, TextColor = CSS_Color.TextualColor, TextID = StringId.TimeSwitch, }; FrameWhiteCentet1.AddChidren(btnTimeSetTip); //开关图标 this.btnSwitch = new IconViewControl(40); btnSwitch.Gravity = Gravity.CenterHorizontal; btnSwitch.Y = Application.GetRealHeight(468); btnSwitch.UnSelectedImagePath = "Public/PowerClose.png"; btnSwitch.SelectedImagePath = "Public/PowerOpen.png"; FrameWhiteCentet1.AddChidren(btnSwitch); btnSwitch.ButtonClickEvent += (sender, e) => { //发送开关命令 this.SendSwitchComand(); }; var pack = new DAL.Server.HttpServerRequest().GetDeviceInfoList(new List() { base.device.deviceId }); } #endregion #region ■ 设备状态反馈_______________________ /// /// 设备状态反馈 /// /// public override void DeviceStatuPush(Function i_LocalDevice) { //不是同一个东西 if (this.device.sid != i_LocalDevice.sid) { return; } //刷新界面状态 this.RefreshFormStatu(); } #endregion #region ■ 发送各种命令_______________________ /// /// 发送开关命令 /// private void SendSwitchComand() { this.btnPictrue.CanClick = false; this.btnSwitch.CanClick = false; string statu = this.btnSwitch.IsSelected == true ? "off" : "on"; HdlThreadLogic.Current.RunThread(() => { var dic = new Dictionary(); dic.Add(FunctionAttributeKey.OnOff, statu); Control.Ins.SendWriteCommand(this.device, dic, true); HdlThreadLogic.Current.RunMain(() => { this.btnPictrue.CanClick = true; this.btnSwitch.CanClick = true; }); }); } #endregion #region ■ 刷新界面状态_______________________ /// /// 刷新界面状态 /// private void RefreshFormStatu() { Application.RunOnMainThread(() => { var onoffStatu = device.attributes.Find((obj) => obj.key == FunctionAttributeKey.OnOff); var timeStatu = device.attributes.Find((obj) => obj.key == FunctionAttributeKey.TuyaWaterTime); if (onoffStatu != null) { if (onoffStatu.state == "on") { btnControlTip.TextID = StringId.ControllerOn; } else { btnControlTip.TextID = StringId.ControllerNotOn; } this.btnSwitch.IsSelected = this.btnPictrue.IsSelected = onoffStatu.state.ToString() == "on"; } if (timeStatu != null) { int.TryParse(timeStatu.state, out waterRunningTime); } RefreshTimeButton(); }); } System.Threading.Thread refreshTimeThread; int waterRunningTime = 0; /// /// 刷新水阀时间文本 /// private void RefreshTimeButton() { if (refreshTimeThread == null || refreshTimeThread.ThreadState == System.Threading.ThreadState.Stopped) { refreshTimeThread = new System.Threading.Thread(() => { while (waterRunningTime >= 0) { if (waterRunningTime > 0) { waterRunningTime--; } var sce = waterRunningTime % 60; var min = 0; if(waterRunningTime > 60) { min = (waterRunningTime - sce) / 60 %60; } var hour = 0; if(waterRunningTime > 360) { hour = (waterRunningTime - sce - (min * 60)) / 3600; } Application.RunOnMainThread(() => { btnControlTimeTip.Text = $"{hour.ToString().PadLeft(2,'0')}:{min.ToString().PadLeft(2, '0')}:{sce.ToString().PadLeft(2, '0')}"; }); System.Threading.Thread.Sleep(1000); } }) { IsBackground = true }; } refreshTimeThread.Start(); } public override void RemoveFromParent() { if (refreshTimeThread != null) { refreshTimeThread.Abort(); } base.RemoveFromParent(); } #endregion private void SetControlTime() { var timeControl = new BottomTimeSelectControl(); timeControl.RowCount = 5; timeControl.InitControl(0,0); timeControl.FinishEvent = (type,hours,min) => { if (type == 1)//0:取消;1:确定 { HdlThreadLogic.Current.RunThread(() => { var time = hours * 60 * 60 + min * 60; var dic = new Dictionary(); dic.Add(FunctionAttributeKey.TuyaWaterTime, time.ToString()); Control.Ins.SendWriteCommand(this.device, dic, true); HdlThreadLogic.Current.RunMain(() => { waterRunningTime = time; this.btnControlTimeTip.Text = $"{hours.ToString().PadLeft(2, '0')}:{min.ToString().PadLeft(2, '0')}:00"; }); }); } }; } } }