Davin
2023-07-31 17fd00c16951b025952001c0d815203bb57bd4d9
HDL_ON/UI/UI2/FuntionControlView/Electrical/AirSwitchP3Page.cs
New file
@@ -0,0 +1,468 @@
using System;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    public class AirSwitchP3Page : FrameLayout
    {
        #region 控件集合
        static AirSwitchP3Page bodyView;
        /// <summary>
        /// 控制界面加载区域
        /// </summary>
        FrameLayout controlView;
        /// <summary>
        /// 功能备注
        /// </summary>
        Button btnFunctionName;
        /// <summary>
        /// 功能所属楼层、房间
        /// </summary>
        Button btnFromFoorAndRoom;
        /// <summary>
        /// 收藏按钮
        /// </summary>
        Button btnCollection;
        /// <summary>
        /// 继电器状态图标
        /// </summary>
        Button btnSwitchIcon;
        /// <summary>
        /// 开关按钮
        /// </summary>
        Button btnSwitch;
        /// <summary>
        /// 运行状态-动态加载
        /// </summary>
        Button btnRunStatus;
        #endregion
        #region 区域变量
        Function function;
        Button btnCollection_Out;
        Button btnFunctionName_Out;
        Button btnFromFloor_Out;
        /// <summary>
        /// 刷新显示信息
        /// </summary>
        Action actionRefresh;
        #endregion
        public AirSwitchP3Page(Function func)
        {
            bodyView = this;
            function = func;
        }
        /// <summary>
        /// 加载界面
        /// </summary>
        /// <param name="btnCollectionIcon">收藏按钮</param>
        /// <param name="btnFunctionName">功能名称信息按钮</param>
        /// <param name="btnFromFloor">功能楼层信息按钮</param>
        public void LoadPage(Button btnCollectionIcon, Button btnFunctionNameOut, Button btnFromFloorOut)
        {
            if (btnCollectionIcon == null)
            {
                btnCollection_Out = new Button();
                btnFunctionName_Out = new Button();
                btnFromFloor_Out = new Button();
            }
            else
            {
                btnCollection_Out = btnCollectionIcon;
                btnFunctionName_Out = btnFunctionNameOut;
                btnFromFloor_Out = btnFromFloorOut;
            }
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            controlView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(88),
                Width = Application.GetRealWidth(327),
                Height = Application.GetRealHeight(526),
                BackgroundImagePath = "Public/Fragmentbg.png",
            };
            bodyView.AddChidren(controlView);
            btnFunctionName = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(14),
                Width = Application.GetRealWidth(270),
                Height = Application.GetRealHeight(37),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel,
                Text = function.name,
            };
            controlView.AddChidren(btnFunctionName);
            btnFromFoorAndRoom = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = btnFunctionName.Bottom,
                Width = Application.GetRealWidth(270),
                Height = Application.GetRealHeight(21),
                TextColor = CSS_Color.PromptingColor1,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = function.GetRoomListName()
            };
            controlView.AddChidren(btnFromFoorAndRoom);
            btnCollection = new Button()
            {
                X = Application.GetRealWidth(273),
                Y = Application.GetRealHeight(14),
                Width = Application.GetMinRealAverage(40),
                Height = Application.GetMinRealAverage(40),
                SelectedImagePath = "Collection/CollectionIcon.png",
                UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                IsSelected = function.collect
            };
            controlView.AddChidren(btnCollection);
            btnSwitchIcon = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(102),
                Width = Application.GetRealWidth(148),
                Height = Application.GetRealWidth(198),
                UnSelectedImagePath = "FunctionIcon/Electrical/AirSwitch/AirSwitchBgIcon.png",
                SelectedImagePath = "FunctionIcon/Electrical/AirSwitch/AirSwitchBgOnIcon.png",
                IsSelected = function.trait_on_off.curValue.ToString() == "on"
            };
            controlView.AddChidren(btnSwitchIcon);
            //运行状态
            if (function.GetAttribute("run_status") != null)
            {
                btnRunStatus = new Button()
                {
                    Y = Application.GetRealHeight(300),
                    Height = Application.GetRealHeight(58),
                    TextAlignment = TextAlignment.Center,
                    TextSize = CSS_FontSize.TextFontSize,
                };
                controlView.AddChidren(btnRunStatus);
                UpdataRunStatus();
            }
            //if (function.GetAttribute("power") != null)
            {
                Button btnEnergyIcon = new Button()
                {
                    Y = Application.GetRealHeight(377),
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(32),
                    Height = Application.GetRealWidth(32),
                    UnSelectedImagePath = "FunctionIcon/Electrical/AirSwitch/EnergyIcon.png"
                };
                controlView.AddChidren(btnEnergyIcon);
                Button btnEnergyText = new Button()
                {
                    Y = Application.GetRealHeight(400),
                    Gravity = Gravity.CenterHorizontal,
                    Height = Application.GetRealWidth(47),
                    TextAlignment = TextAlignment.Center,
                    TextID = StringId.EnergyMonitoring,
                    TextColor = CSS_Color.TextualColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                };
                controlView.AddChidren(btnEnergyText);
                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                    var skipView = new AirSwitchP3EnergyPage(function);
                    MainPage.BasePageView.AddChidren(skipView);
                    skipView.LoadPage();
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                btnEnergyIcon.MouseUpEventHandler = eventHandler;
                btnEnergyText.MouseUpEventHandler = eventHandler;
            }
            btnSwitch = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(466),// + btnSwitchIcon.Bottom,
                Width = Application.GetMinRealAverage(32),
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "Public/PowerClose.png",
                SelectedImagePath = "Public/PowerOpen.png",
                IsSelected = function.trait_on_off.curValue.ToString() == "on"
            };
            controlView.AddChidren(btnSwitch);
            new TopViewDiv(bodyView, Language.StringByID(StringId.Electric)).LoadTopView_FunctionTop(function, actionRefresh, false);
            new System.Threading.Thread(() =>
            {
                DriverLayer.Control.Ins.SendReadCommand(function);
            })
            { IsBackground = true }.Start();
            LoadEventList();
        }
        /// <summary>
        /// 更新状态
        /// </summary>
        public static void UpdataState(Function updataTemp)
        {
            Application.RunOnMainThread(() =>
            {
                try
                {
                    if (bodyView == null)
                        return;
                    if (updataTemp.spk == bodyView.function.spk && updataTemp.sid == bodyView.function.sid)
                    {
                        bodyView.btnSwitch.IsSelected = bodyView.btnSwitchIcon.IsSelected = updataTemp.trait_on_off.curValue.ToString() == "on";
                        if (updataTemp.GetAttribute("run_status") != null)
                        {
                            bodyView.UpdataRunStatus();
                        }
                    }
                }
                catch (Exception ex)
                {
                    MainPage.Log($"AirSwitch error {ex.Message}");
                }
            });
        }
        /// <summary>
        /// 更新运行状态
        /// </summary>
        void UpdataRunStatus()
        {
            if (btnRunStatus == null)
                return;
            var runStatus = function.GetAttrState("run_status");
            if (Language.CurrentLanguage == "Chinese")
            {
                switch (runStatus)
                {
                    //* RUN:正常工作中
                    case "RUN":
                        btnRunStatus.Text = "工作中";
                        btnRunStatus.TextColor = CSS_Color.MainColor;
                        break;
                    //* HV:过压预警
                    case "HV":
                        btnRunStatus.Text = "过压预警";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* LV:欠压预警
                    case "LV":
                        btnRunStatus.Text = "欠压预警";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* HC:过流预警
                    case "HC":
                        btnRunStatus.Text = "过流预警";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* HT:过温预警
                    case "HT":
                        btnRunStatus.Text = "过温预警";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* LEAK:漏电预警
                    case "LEAK":
                        btnRunStatus.Text = "漏电预警";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* ERR_HV:过压报警
                    case "ERR_HV":
                        btnRunStatus.Text = "过压报警";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_LV:欠压报警
                    case "ERR_LV":
                        btnRunStatus.Text = "欠压报警";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_HC:过流报警
                    case "ERR_HC":
                        btnRunStatus.Text = "过流报警";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_HT:过温报警
                    case "ERR_HT":
                        btnRunStatus.Text = "过温报警";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_LEAK:漏电报警
                    case "ERR_LEAK":
                        btnRunStatus.Text = "漏电报警";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                }
            }
            else
            {
                switch (runStatus)
                {
                    //* RUN:正常工作中
                    case "RUN":
                        btnRunStatus.Text = "At work";
                        btnRunStatus.TextColor = CSS_Color.MainColor;
                        break;
                    //* HV:过压预警
                    case "HV":
                        btnRunStatus.Text = "Overvoltage warning";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* LV:欠压预警
                    case "LV":
                        btnRunStatus.Text = "Undervoltage warning";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* HC:过流预警
                    case "HC":
                        btnRunStatus.Text = "Overcurrent warning";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* HT:过温预警
                    case "HT":
                        btnRunStatus.Text = "Overtemperature warning";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* LEAK:漏电预警
                    case "LEAK":
                        btnRunStatus.Text = "Leakage warning";
                        btnRunStatus.TextColor = 0xFFFC9C04;
                        break;
                    //* ERR_HV:过压报警
                    case "ERR_HV":
                        btnRunStatus.Text = "Overvoltage alarm";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_LV:欠压报警
                    case "ERR_LV":
                        btnRunStatus.Text = "Undervoltage alarm";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_HC:过流报警
                    case "ERR_HC":
                        btnRunStatus.Text = "Overcurrent alarm";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_HT:过温报警
                    case "ERR_HT":
                        btnRunStatus.Text = "Overtemperature alarm";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                    //* ERR_LEAK:漏电报警
                    case "ERR_LEAK":
                        btnRunStatus.Text = "Leakage alarm";
                        btnRunStatus.TextColor = 0xFFFF8080;
                        break;
                }
            }
        }
        /// <summary>
        /// 加载事件列表
        /// </summary>
        void LoadEventList()
        {
            LoadSwitchEvent();
            LoadCollectionEvent();
            //回退刷新信息事件
            actionRefresh = () => {
                btnFunctionName.Text = btnFunctionName_Out.Text = function.name;
                btnFromFloor_Out.Text = btnFromFoorAndRoom.Text = function.GetRoomListName();
                //function.SaveFunctionData(true);
            };
        }
        /// <summary>
        /// 收藏功能按钮事件
        /// </summary>
        void LoadCollectionEvent()
        {
            btnCollection.MouseUpEventHandler += (sender, e) => {
                btnCollection.IsSelected = function.collect = btnCollection_Out.IsSelected = !btnCollection.IsSelected;
                function.CollectFunction();
            };
        }
        /// <summary>
        /// 加载开关事件
        /// </summary>
        void LoadSwitchEvent()
        {
            btnSwitchIcon.MouseUpEventHandler = (sender, e) =>
            {
                if (!function.online)
                {
                    new Tip()
                    {
                        CloseTime = 1,
                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
                        Direction = AMPopTipDirection.None,
                    }.Show(MainPage.BaseView);
                    return;
                }
                btnSwitch.IsSelected = btnSwitchIcon.IsSelected = !btnSwitchIcon.IsSelected;
                new System.Threading.Thread(() =>
                {
                    function.trait_on_off.curValue = btnSwitchIcon.IsSelected ? "on" : "off";
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    d.Add("on_off", function.trait_on_off.curValue.ToString());
                    DriverLayer.Control.Ins.SendWriteCommand(function, d);
                })
                { IsBackground = true }.Start();
            };
            btnSwitch.MouseUpEventHandler = (sender, e) =>
            {
                if (!function.online)
                {
                    new Tip()
                    {
                        CloseTime = 1,
                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
                        Direction = AMPopTipDirection.None,
                    }.Show(MainPage.BaseView);
                    return;
                }
                btnSwitchIcon.IsSelected = btnSwitch.IsSelected = !btnSwitch.IsSelected;
                new System.Threading.Thread(() =>
                {
                    function.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    d.Add("on_off", function.trait_on_off.curValue.ToString());
                    DriverLayer.Control.Ins.SendWriteCommand(function, d);
                })
                { IsBackground = true }.Start();
            };
        }
    }
}