2
wei
2021-03-09 d41f1d4a478c1afcc43f3a5abb0ba76e376bc7c1
HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
@@ -1,21 +1,561 @@
using System;
using Shared;
using Shared;
using HDL_ON.Stan;
using HDL_ON.UI.CSS;
using HDL_ON.Entity;
using System.Collections.Generic;
using System;
using HDL_ON.DriverLayer;
namespace HDL_ON.UI
{
    /// <summary>
    /// 晾衣架界面
    /// </summary>
    public class ClothesHangerPage : FrameLayout
    public class ClothesHangerPage : DeviceFunctionCardCommonForm
    {
        public ClothesHangerPage()
        #region ■ 变量声明___________________________
        /// <summary>
        /// 图标
        /// </summary>
        private Button btnIcon = null;
        /// <summary>
        /// 上升
        /// </summary>
        Button btnUp;
        /// <summary>
        /// 停止
        /// </summary>
        Button btnStop;
        /// <summary>
        /// 下降
        /// </summary>
        Button btnDown;
        /// <summary>
        /// 烘干控件
        /// </summary>
        ClothesHangerControl hotDryView;
        /// <summary>
        /// 风干控件
        /// </summary>
        ClothesHangerControl windDryView;
        /// <summary>
        /// 消毒控件
        /// </summary>
        ClothesHangerControl disinfectView;
        /// <summary>
        /// 照明控件
        /// </summary>
        ClothesHangerControl lightingView;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 初始化白色区域的内容
        /// </summary>
        public override void InitFrameWhiteContent()
        {
            base.ShowColltionButton = false;
            base.SetTitleText(Language.StringByID(StringId.Electric));
            //初始化第一个索引页的内容
            this.InitFrameWhiteContent1();
            //刷新界面状态
            this.RefreshFormStatu();
            //读取状态
            new System.Threading.Thread(() =>
            {
                Control.Ins.SendReadCommand(device);
            })
            { IsBackground = true }.Start();
        }
        public void LoadPage()
        /// <summary>
        /// 初始化第一个索引页的内容
        /// </summary>
        private void InitFrameWhiteContent1()
        {
            btnIcon = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(85),
                Width = Application.GetRealWidth(195),
                Height = Application.GetRealHeight(121),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnIcon);
            #region 上升 停止 下降
            btnUp = new Button()
            {
                X = Application.GetRealWidth(42),
                Y = Application.GetRealHeight(236),
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnUp);
            btnStop = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(236),
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnStop);
            btnDown = new Button()
            {
                X = Application.GetRealWidth(257),
                Y = Application.GetRealHeight(236),
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png",
            };
            FrameWhiteCentet1.AddChidren(btnDown);
            #region 控制
            btnUp.MouseDownEventHandler = (sender, e) => {
                btnUp.IsSelected = true;
            };
            btnUp.MouseUpEventHandler = (sender, e) => {
                new System.Threading.Thread(() =>
                {
                    System.Threading.Thread.Sleep(2000);
                    Application.RunOnMainThread(() =>
                    {
                        btnUp.IsSelected = false;
                    });
                })
                { IsBackground = true }.Start();
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Position, "up");
                Control.Ins.SendWriteCommand(device, d);
            };
            //----
            btnStop.MouseDownEventHandler = (sender, e) => {
                btnStop.IsSelected = true;
            };
            btnStop.MouseUpEventHandler = (sender, e) => {
                new System.Threading.Thread(() =>
                {
                    System.Threading.Thread.Sleep(2000);
                    Application.RunOnMainThread(() =>
                    {
                        btnStop.IsSelected = false;
                    });
                })
                { IsBackground = true }.Start();
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Position, "stop");
                Control.Ins.SendWriteCommand(device, d);
            };
            //-----
            btnDown.MouseDownEventHandler = (sender, e) => {
                btnDown.IsSelected = true;
            };
            btnDown.MouseUpEventHandler = (sender, e) => {
                new System.Threading.Thread(() =>
                {
                    System.Threading.Thread.Sleep(2000);
                    Application.RunOnMainThread(() =>
                    {
                        btnDown.IsSelected = false;
                    });
                })
                { IsBackground = true }.Start();
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add(FunctionAttributeKey.Position, "down");
                Control.Ins.SendWriteCommand(device, d);
            };
            #endregion
            #endregion
            #region 菜单
            var menu = new List<string>() {
                FunctionAttributeKey.HotDry,
                FunctionAttributeKey.WindDry,
                FunctionAttributeKey.Disinfect,
                FunctionAttributeKey.OnOff
            };
            int index = 0;
            List<string> attrs = device.GetAttributes();
            hotDryView = new ClothesHangerControl(
                            "FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png",
                            "FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png",
                            Language.StringByID(StringId.HotDry),
                            device.GetAttrState(FunctionAttributeKey.HotDryTimeLeft));
            hotDryView.X = 0;
            hotDryView.Y = Application.GetRealHeight(304);
            hotDryView.Width = Application.GetRealWidth(96);
            hotDryView.Height = Application.GetRealHeight(74);//28 29 14 3
            if (attrs.Contains(menu[0]))
            {
                FrameWhiteCentet1.AddChidren(hotDryView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    string onoff = hotDryView.Lighting ? "false" : "true";
                    device.SetAttrState(FunctionAttributeKey.HotDry, onoff);
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.HotDry, onoff);
                    Control.Ins.SendWriteCommand(device, d);
                };
                hotDryView.SetThouchEvent(eventHandler);
                index++;
            }
            windDryView = new ClothesHangerControl(
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png",
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png",
                                Language.StringByID(StringId.WindDry),
                                device.GetAttrState(FunctionAttributeKey.WindDryTimeLeft));
            windDryView.Y = Application.GetRealHeight(304);
            windDryView.Width = Application.GetRealWidth(96);
            windDryView.Height = Application.GetRealHeight(74);
            if (attrs.Contains(menu[1]))
            {
                if (index == 1)
                {
                    windDryView.Gravity = Gravity.CenterHorizontal;
                }
                FrameWhiteCentet1.AddChidren(windDryView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    string onoff = windDryView.Lighting ? "false" : "true";
                    device.SetAttrState(FunctionAttributeKey.WindDry, onoff);
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.WindDry, onoff);
                    Control.Ins.SendWriteCommand(device, d);
                };
                windDryView.SetThouchEvent(eventHandler);
                index++;
            }
            disinfectView = new ClothesHangerControl(
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png",
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png",
                                Language.StringByID(StringId.Disinfect),
                                device.GetAttrState(FunctionAttributeKey.DisinfectTimeLeft));
            disinfectView.Y = Application.GetRealHeight(304);
            disinfectView.Width = Application.GetRealWidth(96);
            disinfectView.Height = Application.GetRealHeight(74);
            if (attrs.Contains(menu[2]))
            {
                if (index == 1)
                {
                    disinfectView.Gravity = Gravity.CenterHorizontal;
                }
                else if (index == 2)
                {
                    disinfectView.X = Application.GetRealWidth(266 - 33);
                }
                FrameWhiteCentet1.AddChidren(disinfectView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    string onoff = disinfectView.Lighting ? "false" : "true";
                    device.SetAttrState(FunctionAttributeKey.Disinfect, onoff);
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.Disinfect, onoff);
                    Control.Ins.SendWriteCommand(device, d);
                };
                disinfectView.SetThouchEvent(eventHandler);
                index++;
            }
            lightingView = new ClothesHangerControl(
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png",
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png",
                                Language.StringByID(StringId.Lighting),
                                "");
            lightingView.Width = Application.GetRealWidth(96);
            lightingView.Height = Application.GetRealHeight(74);
            if (attrs.Contains(menu[3]))
            {
                if (index > 2)
                {
                    lightingView.Y = Application.GetRealHeight(409);
                }
                else
                {
                    lightingView.Y = Application.GetRealHeight(304);
                    if (index == 1)
                    {
                        lightingView.Gravity = Gravity.CenterHorizontal;
                    }
                    else if (index == 2)
                    {
                        lightingView.X = Application.GetRealWidth(266 - 33);
                    }
                }
                FrameWhiteCentet1.AddChidren(lightingView);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                {
                    string onoff = lightingView.Lighting ? "off" : "on";
                    device.SetAttrState(FunctionAttributeKey.OnOff, onoff);
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.OnOff, onoff);
                    Control.Ins.SendWriteCommand(device, d);
                };
                lightingView.SetThouchEvent(eventHandler);
                index++;
            }
            #endregion
            #region 时间设置
            var timeSetView = new ClothesHangerControl(
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png",
                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png",
                                Language.StringByID(StringId.Time),
                                "");
            timeSetView.Width = Application.GetRealWidth(96);
            timeSetView.Height = Application.GetRealHeight(74);
            timeSetView.Y = Application.GetRealHeight(409);
            timeSetView.X = Application.GetRealWidth(266 - 33);
            EventHandler<MouseEventArgs> eventHandler_timeSetView = (sender, e) =>
            {
                var setTimePage = new ClothesHangerSetTimePage(device);
                MainPage.BasePageView.AddChidren(setTimePage);
                setTimePage.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            timeSetView.SetThouchEvent(eventHandler_timeSetView);
            FrameWhiteCentet1.AddChidren(timeSetView);
            #endregion
        }
        #endregion
        #region ■ 设备状态反馈_______________________
        /// <summary>
        /// 设备状态反馈
        /// </summary>
        /// <param name="i_LocalDevice"></param>
        public override void DeviceStatuPush(Function i_LocalDevice)
        {
            //不是同一个东西
            if (this.device.sid != i_LocalDevice.sid) { return; }
            //刷新界面状态
            this.RefreshFormStatu();
        }
        #endregion
        #region ■ 发送各种命令_______________________
        #endregion
        #region ■ 刷新界面状态_______________________
        /// <summary>
        /// 刷新界面状态
        /// </summary>
        private void RefreshFormStatu()
        {
            Application.RunOnMainThread(() =>
            {
                btnIcon.IsSelected = true;
                #region 点亮文本
                var hotDryTemp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.HotDry);
                if (hotDryTemp != null)
                {
                    hotDryView.SetViewStatus(hotDryTemp.state == "true");
                }
                var windDryTemp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.WindDry);
                if (windDryTemp != null)
                {
                    windDryView.SetViewStatus(windDryTemp.state == "true");
                }
                var disinfectTemp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.Disinfect);
                if (disinfectTemp != null)
                {
                    disinfectView.SetViewStatus(disinfectTemp.state == "true");
                }
                var lightTemp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.OnOff);
                if (lightTemp != null)
                {
                    lightingView.SetViewStatus(lightTemp.state == "on");
                }
                Console.WriteLine($"时间戳:{device.time_stamp}  时间:{device.GeteTime()} 烘干:{hotDryTemp.state} 风干:{windDryTemp.state} 消毒:{disinfectTemp.state} 灯光状态:{lightTemp.state}");
                #endregion
                #region 修改时间
                var hotDryTimeLeftTemp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.HotDryTimeLeft);
                if (hotDryTimeLeftTemp != null)
                {
                    hotDryView.ChangeTime(hotDryTimeLeftTemp.state);
                }
                var windDryTimeLeftTemp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.WindDryTimeLeft);
                if (windDryTimeLeftTemp != null)
                {
                    windDryView.ChangeTime(windDryTimeLeftTemp.state);
                }
                var disinfectTimeLeftTemp = device.attributes.Find((sta) => sta.key == FunctionAttributeKey.DisinfectTimeLeft);
                if (disinfectTimeLeftTemp != null)
                {
                    disinfectView.ChangeTime(disinfectTimeLeftTemp.state);
                }
                #endregion
            });
        }
        #endregion
        #region ■ 一般方法___________________________
        #endregion
    }
}
    public class ClothesHangerControl : FrameLayout
    {
        private Button btnIcon;
        private Button btnTitle;
        private Button btnTime;
        /// <summary>
        /// 倒计时时间
        /// </summary>
        private int leftTime = 0;
        /// <summary>
        /// 控件是否点亮
        /// </summary>
        public bool Lighting = false;
        public ClothesHangerControl(string iconPath1, string iconPath2, string title, string time)
        {
            btnIcon = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(28),
                Height = Application.GetRealWidth(28),
                UnSelectedImagePath = iconPath1,
                SelectedImagePath = iconPath2,
            };
            this.AddChidren(btnIcon);
            btnTitle = new Button()
            {
                Gravity = Gravity.Center,
                Text = title,
                Height = Application.GetRealHeight(42),
                TextColor = CSS_Color.TextualColor,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
            };
            this.AddChidren(btnTitle);
            btnTime = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(74-32),
                Height = Application.GetRealHeight(32),
                Text = time,
                TextColor = 0x00000000,
                SelectedTextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
            };
            this.AddChidren(btnTime);
        }
        /// <summary>
        /// 修改显示时间
        /// </summary>
        /// <param name="newTime"></param>
        public void ChangeTime(string newTime)
        {
            int.TryParse(newTime, out leftTime);
            if (leftTime > 0)
            {
                Application.RunOnMainThread(() =>
                {
                    btnTime.Text = new TimeSpan(0, leftTime, 0).ToString().Remove(5, 3);
                });
                leftTime--;
            }
            else if (leftTime == 0)
            {
                Application.RunOnMainThread(() =>
                {
                    btnTime.Text = "";
                });
            }
            if (countdownThread == null)
            {
                countdownThread = new System.Threading.Thread(() =>
                {
                    while (true)
                    {
                        if (leftTime > 0)
                        {
                            Application.RunOnMainThread(() =>
                            {
                                btnTime.Text = new TimeSpan(0, leftTime, 0).ToString().Remove(5,3) ;
                            });
                            leftTime--;
                        }
                        else if(leftTime == 0)
                        {
                            Application.RunOnMainThread(() =>
                            {
                                btnTime.Text = "";
                            });
                        }
                        System.Threading.Thread.Sleep(60000);
                    }
                })
                { IsBackground = true };
                countdownThread.Start();
            }
        }
        public void SetViewStatus(bool state)
        {
            btnIcon.IsSelected = btnTitle.IsSelected = btnTime.IsSelected = Lighting = state;
        }
        /// <summary>
        /// 设置点击事件
        /// </summary>
        public void SetThouchEvent(EventHandler<MouseEventArgs> eventHandler)
        {
            btnIcon.MouseUpEventHandler = eventHandler;
            btnTime.MouseUpEventHandler = eventHandler;
            btnTitle.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// 倒计时线程
        /// </summary>
        System.Threading.Thread countdownThread;
    }
}